Torna al blog Security & Reliability

La tua applicazione self-hosted necessita di un IP in uscita stabile? Una checklist per l’inserimento in allowlist

Un dominio personalizzato e HTTPS rendono un’applicazione raggiungibile da Internet, ma non stabiliscono l’indirizzo sorgente che i servizi esterni vedono quando l’applicazione si connette verso l’esterno. Usa questa checklist per individuare le dipendenze di egress, verificare se l’inserimento in allowlist IP è necessario e pianificare modifiche sicure.

Diagramma che mostra un’applicazione self-hosted che riceve traffico web in ingresso ed effettua connessioni in uscita verso servizi esterni

Inizia dalla domanda giusta: la raggiungibilità in ingresso non è l’identità in uscita

Un IP in uscita stabile è un indirizzo IP sorgente instradabile su Internet che una destinazione vede in modo coerente quando la tua applicazione avvia una connessione. È importante quando tale destinazione consente connessioni solo da indirizzi sorgente pre-approvati, una pratica comunemente chiamata allowlisting dell’IP sorgente, inserimento in allowlist IP o lista di autorizzazione IP.

Questo è distinto dal modo in cui le persone raggiungono la tua applicazione. Un dominio personalizzato identifica dove gli utenti inviano le richieste in ingresso. TLS protegge tali connessioni; durante l’emissione, Let’s Encrypt verifica il controllo dei nomi di dominio presenti nel certificato tramite challenge ACME, ma il certificato non dimostra da solo un controllo attuale e permanente del dominio ([Let’s Encrypt, Challenge Types](https://letsencrypt.org/docs/challenge-types/)). Un router reverse proxy, come Traefik, riceve le richieste in arrivo, applica le regole di routing configurate e inoltra le richieste corrispondenti a un servizio ([Traefik, HTTP Router](https://doc.traefik.io/traefik/reference/routing-configuration/http/routing/router/)). Nessuna di queste funzioni, da sola, dimostra quale indirizzo sorgente vedranno un’API di terze parti, un database o un endpoint partner per il traffico in uscita dall’applicazione.

Per le distribuzioni Airbip, le applicazioni vengono eseguite come workload Docker sui server cloud Airbip, mentre il routing e i certificati TLS sono automatizzati tramite Traefik e Let’s Encrypt. Si tratta di funzionalità preziose per l’accesso in ingresso, ma non devono essere considerate una promessa di indirizzamento in uscita fisso. Definisci separatamente i requisiti in uscita e ottieni evidenze specifiche del provider prima di fare affidamento su una lista di autorizzazione IP.

  • Domanda sull’ingresso: quale dominio, porta, route e configurazione TLS permettono a utenti o webhook di raggiungere l’applicazione?
  • Domanda sull’uscita: quali indirizzi IPv4 e IPv6 sorgente osserva ogni destinazione quando l’applicazione, un worker o un processo amministrativo si connette verso l’esterno?
  • Domanda sul controllo: la lista di autorizzazione IP sorgente è una policy obbligatoria sul lato ricevente oppure solo un’opzione tra controlli più robusti o più facili da mantenere?
Inizia dalla domanda giusta: la raggiungibilità in ingresso non è l’identità in uscita

Individua ogni connessione che potrebbe dipendere dall’allowlisting dell’IP sorgente

Non limitare la revisione alla funzione principale dell’applicazione rivolta agli utenti. L’egress avviene spesso in job pianificati, worker di code, strumenti di importazione/esportazione, integrazioni di monitoraggio, controlli di aggiornamento, flussi legati ai backup e percorsi di accesso degli amministratori. Una distribuzione può sembrare integra in un test interattivo, mentre un worker asincrono può fallire in seguito perché usa un processo o un percorso di rete diverso.

Inizia dai sistemi che notoriamente limitano gli indirizzi di rete dei client. I candidati tipici includono API di terze parti, database gestiti, sistemi di pagamento o finanziari, endpoint partner privati, reti aziendali interne, sistemi di monitoraggio, strumenti di gestione, servizi di accesso remoto e amministrazione SSH. Indipendentemente dall’allowlisting, le connessioni in uscita che gestiscono traffico sensibile o operativo importante dovrebbero utilizzare protocolli crittografati come TLS, ove applicabile; OWASP ASVS include esplicitamente API esterne, database, sistemi partner, strumenti di monitoraggio, gestione, accesso remoto e SSH nelle proprie linee guida sulla comunicazione service-to-service ([OWASP ASVS, V12.3](https://cornucopia.owasp.org/taxonomy/asvs-5.0/12-secure-communication/03-general-service-to-service-communication-security)).

Classifica ogni connessione in base alla conseguenza per il business, non soltanto al protocollo tecnico. Una chiamata facoltativa di analytics ha un effetto in caso di errore diverso da un’azione di pagamento, un’esportazione finanziaria, una sincronizzazione di dati dei clienti o una connessione a un sistema interno privato.

  • Chiamate interattive dell’applicazione effettuate mentre un utente è attivo
  • Job pianificati, attività simili a cron e generazione di report
  • Consumer di code, worker e flussi di automazione
  • Webhook, callback e chiamate API verso servizi SaaS
  • Connessioni a database, trasferimento file e reti private
  • Connessioni di monitoraggio, avviso, logging, amministrazione e accesso remoto
  • Procedure di migrazione, ripristino e failover che possono generare traffico da un ambiente diverso
Individua ogni connessione che potrebbe dipendere dall’allowlisting dell’IP sorgente

Crea un inventario delle dipendenze di egress prima della distribuzione

Tratta le dipendenze di egress come un inventario di sistema da mantenere, non come un foglio di calcolo da compilare una sola volta. Il controllo sull’inventario dei componenti di NIST SP 800-53 sottolinea documentazione accurata, informazioni di responsabilità e revisione regolare ([NIST SP 800-53 Rev. 5, CM-8](https://csrc.nist.gov/CSRC/media/Projects/risk-management/800-53%20Downloads/800-53r5/SP_800-53_v5_1-derived-OSCAL.pdf)). Applica la stessa disciplina alle destinazioni esterne: una regola di allowlist di cui nessuno è responsabile né effettua revisioni diventa un rischio prevedibile di interruzione.

Registra una riga per ogni destinazione e percorso di traffico. Se un server applicativo e un worker in background chiamano la stessa API attraverso percorsi diversi, registrali separatamente finché non avrai evidenze che i rispettivi indirizzi sorgente osservati siano gli stessi. Includi entrambe le famiglie di indirizzi: un risultato IPv4 non dimostra il comportamento IPv6.

Chiedi al proprietario della destinazione di dichiarare la sua regola effettiva di accettazione. “Il nostro firewall usa un allowlist” è incompleto. Devi sapere se valuta IPv4, IPv6, una porta e un protocollo specifici, un intervallo IP, una connessione privata oppure una combinazione di controlli a livello di rete e di applicazione.

  • Destinazione: hostname, nome del servizio, ambiente e organizzazione ricevente
  • Percorso di traffico: processo dell’applicazione, worker, scheduler, host di amministrazione o procedura di ripristino
  • Protocollo e porta: ad esempio HTTPS, TLS per database, SFTP o SSH
  • Autenticazione: credenziale API, richiesta firmata, certificato client, credenziale utente o altro metodo documentato
  • Dati scambiati: classificazione, direzione e sensibilità
  • Identità sorgente osservata: indirizzi IPv4 e IPv6 confermati, oppure contrassegnati come non verificati
  • Requisito di allowlist: obbligatorio, facoltativo, sconosciuto o non supportato
  • Effetto del guasto: funzionalità degradata, workflow ritardato, transazione fallita, lacuna nella sincronizzazione dati o blocco operativo","Proprietario e percorso di escalation: chi può modificare il lato mittente e chi può modificare la regola sul lato ricevente","Notifica delle modifiche: come ciascuna parte comunica cambiamenti di indirizzo, rete, migrazione o policy","Data dell’evidenza: quando sono stati testati per l’ultima volta il percorso e l’identità sorgente osservata"],

Verifica se un allowlist IP è realmente necessario

L’allowlisting dell’IP sorgente può essere un’utile restrizione aggiuntiva, soprattutto quando un servizio ricevente dispone di opzioni limitate per il controllo degli accessi. Tuttavia, non dimostra l’identità del workload. La traduzione di rete può far apparire più workload sotto un unico indirizzo esterno, mentre failover, migrazione o modifiche del routing possono alterare l’indirizzo che una destinazione vede. Le linee guida zero trust del NIST spostano l’enfasi dalla fiducia implicita basata solo sulla posizione di rete verso l’autenticazione e l’autorizzazione esplicite di soggetti e dispositivi ([NIST SP 800-207](https://csrc.nist.gov/pubs/sp/800/207/final)); le linee guida cloud-native sottolineano analogamente le identità di applicazioni e servizi, consentendo al tempo stesso i parametri di rete come input aggiuntivi ([NIST SP 800-207A](https://csrc.nist.gov/pubs/sp/800/207/a/final)).

Chiedi al servizio ricevente quali controlli supporta e quali considera autorevoli. Preferisci una progettazione a livelli: trasporto crittografato, autenticazione e autorizzazione forti, credenziali con ambito ristretto e una restrizione IP solo quando aggiunge una barriera indipendente significativa o resta un requisito contrattuale.

L’autenticazione TLS reciproca è un’opzione particolarmente robusta quando supportata e gestita correttamente. OWASP ASVS identifica l’autenticazione client TLS, supportata da infrastruttura a chiave pubblica e meccanismi resistenti ai replay, come un metodo efficace per verificare gli endpoint nella comunicazione tra servizi ([OWASP ASVS, V12.3](https://cornucopia.owasp.org/taxonomy/asvs-5.0/12-secure-communication/03-general-service-to-service-communication-security)). Altri possibili modelli dipendono dal servizio ricevente: credenziali a breve durata, richieste firmate, connettività privata o un modello di accesso basato sull’identità. Non dichiarare equivalenza senza verificare la documentazione della destinazione e i requisiti di governance.

  • La regola IP è imposta dalla destinazione, da una policy del cliente, da un contratto o è solo una prassi storica?
  • La destinazione può utilizzare invece TLS reciproco, credenziali a breve durata, richieste firmate o connettività privata?
  • Le credenziali possono essere limitate alle azioni, ai dati e all’ambiente minimi necessari?
  • TLS è abilitato e la validazione del certificato è configurata correttamente per la connessione?
  • Una regola IP sarebbe una protezione aggiuntiva anziché l’unico controllo?
  • Il metodo scelto può essere ruotato, sottoposto ad audit e testato senza una lunga finestra di interruzione?

Comprendi l’architettura alla base dell’identità in uscita

L’identità in uscita è una proprietà dell’intero percorso di traffico, non dell’URL di un’applicazione. Nella tradizionale traduzione degli indirizzi di rete, un indirizzo privato può essere associato a un indirizzo esterno all’avvio di una sessione in uscita e la sorgente del pacchetto può essere tradotta in un indirizzo globalmente univoco ([RFC 3022](https://www.rfc-editor.org/rfc/pdfrfc/rfc3022.txt.pdf)). Nel networking Docker bridge su Linux, Docker documenta regole NAT e di masquerading per il traffico dei container ([Docker, Packet filtering and firewalls](https://docs.docker.com/engine/network/packet-filtering-firewalls/)). Docker distingue inoltre questo masquerading in uscita dalle porte pubblicate, che riguardano principalmente la possibilità per host remoti di raggiungere i container tramite gli indirizzi dell’host ([Docker with iptables](https://docs.docker.com/engine/network/firewall-iptables/)).

Questa distinzione è importante nelle distribuzioni containerizzate. L’indirizzo che accetta il traffico in ingresso su una porta pubblicata, o il dominio instradato attraverso un reverse proxy, potrebbe non essere l’indirizzo che una destinazione remota osserva per l’egress del container. Un provider può fare un’affermazione significativa sull’identità in uscita soltanto definendo i workload rilevanti, la famiglia di indirizzi, le route e il comportamento in caso di guasto o migrazione.

Gli ambienti dual-stack richiedono test espliciti. La selezione della sorgente e della destinazione IPv6 ha regole proprie e la selezione della destinazione può preferire IPv6 o IPv4 a seconda degli indirizzi sorgente disponibili ([RFC 6724](https://www.rfc-editor.org/rfc/rfc6724.html)). Un allowlist solo IPv4 non dimostra quindi che un client utilizzerà IPv4. Se la destinazione pubblica connettività IPv6, verifica ciò che il tuo workload fa effettivamente e assicurati che la policy della destinazione copra il percorso selezionato.

  • NAT e masquerading: quale indirizzo viene tradotto e in quale punto del percorso avviene la traduzione?
  • Egress da container a host: i container dell’applicazione, i worker e le attività di manutenzione condividono un percorso?
  • IPv4 e IPv6: quale famiglia viene selezionata per ogni destinazione ed è inclusa nell’allowlist?
  • Istanze multiple: repliche, worker o servizi separati possono avere identità di egress diverse?
  • Failover e migrazione: cosa vedrà la destinazione dopo sostituzione, ripristino o rilocazione?
  • Modifiche di rete gestite dal provider: eventuali cambiamenti di indirizzo sono documentati e comunicati?

Poni ai provider di infrastruttura domande precise e basate su evidenze

Evita di chiedere soltanto: “Avete un IP statico?”. La risposta può essere fuorviante se non indica direzione e ambito del traffico. Richiedi risposte scritte collegate al workload previsto e alle destinazioni che richiedono restrizioni. Un provider può documentare un indirizzo server in ingresso senza assumere alcun impegno su tutti i percorsi di traffico in uscita.

Airbip è progettato per rendere pratiche le applicazioni business e AI self-hosted gestendo l’infrastruttura cloud circostante, inclusi workload applicativi basati su Docker, routing, automazione TLS, controlli DNS, gestione del ciclo di vita e backup configurabili. Se la tua distribuzione ha un requisito rigido di egress stabile, confermalo con Airbip prima della distribuzione anziché dedurlo da un dominio personalizzato, un indirizzo pubblico dell’applicazione o il comportamento del proxy in ingresso. Se una progettazione di egress fissa e controllata dal cliente non è negoziabile e non può essere dimostrata per il percorso richiesto, scegli un modello infrastrutturale in grado di soddisfarla e documentarla.

Conserva le risposte del provider insieme al tuo inventario delle dipendenze. Il risultato utile non è una rassicurazione vaga: è una dichiarazione operativa verificabile che descriva indirizzi osservati, percorsi coperti, condizioni di cambiamento e processo di notifica.

  • Quali indirizzi IPv4 e IPv6 in uscita utilizzeranno ciascun workload e processo specificato?
  • Tali indirizzi sono documentati come stabili o possono cambiare? In quali eventi?
  • Quale traffico è coperto: container dell’applicazione, worker, scheduler, processo di manutenzione, backup, accesso amministrativo e ambiente di ripristino?
  • La dichiarazione copre solo il funzionamento normale oppure anche failover, migrazione, rebuild e ripristino?
  • Quale preavviso viene fornito prima di un cambiamento rilevante dell’indirizzo di egress e tramite quale canale?
  • Il provider può fornire un metodo di test sicuro o evidenze per il percorso in produzione?
  • Chi gestisce supporto e coordinamento se una destinazione rifiuta l’indirizzo sorgente osservato?

Pianifica le modifiche all’allowlist come un rilascio controllato

Un aggiornamento dell’allowlist coinvolge due piani di controllo: il reale percorso di traffico del mittente e la policy di accettazione del destinatario. Coordina entrambi i proprietari, scegli una finestra di modifica a basso rischio e definisci il successo usando una connessione autenticata effettiva anziché una ricerca DNS o un test dal browser. Un browser che raggiunge la tua applicazione conferma solo l’accesso in ingresso.

Dove il servizio ricevente lo consente, autorizza temporaneamente sia il vecchio sia il nuovo indirizzo esatto. Questa sovrapposizione offre una finestra di verifica e supporta il rollback se il nuovo percorso fallisce. Rimuovi tempestivamente la vecchia voce dopo il periodo di validazione concordato. Non compensare l’incertezza inserendo nell’allowlist intervalli pubblici eccessivamente ampi; questo indebolisce il confine e rende più difficile la revisione successiva.

Per ogni modifica, acquisisci destinazione testata, protocollo, famiglia di indirizzi, indirizzo sorgente osservato, timestamp e funzione dell’applicazione. Verifica il lavoro in background oltre a una richiesta interattiva. Aggiorna poi l’inventario e assicurati che ciascuna parte sappia chi rimuove le regole temporanee.

  • Nomina un responsabile della modifica, un responsabile sul lato ricevente, un approvatore e un responsabile del rollback.
  • Conferma hostname o endpoint esatto della destinazione, protocollo, porta e ambiente.
  • Ottieni gli indirizzi IPv4 e IPv6 sorgente proposti da evidenze, non da supposizioni.
  • Aggiungi una sovrapposizione temporanea di indirizzi esatti se il servizio ricevente la supporta.
  • Testa una transazione autenticata e rappresentativa da ogni processo rilevante.
  • Controlla i log e le evidenze lato destinazione per l’indirizzo sorgente effettivamente osservato.
  • Stabilisci una scadenza per rimuovere la vecchia voce e registra la conferma.
  • Mantieni un percorso di contatto di emergenza per una connessione rifiutata o un rollback.

Preparati alle modalità di guasto che sorprendono i team

Il rifiuto da parte di una destinazione di un indirizzo sorgente modificato è il guasto più visibile, ma non è l’unico. Il modello comune è un ambito incompleto: il team ha validato una richiesta web, mentre un worker, uno scheduler o una procedura di ripristino ha seguito un’altra route. Progetta i test attorno ai workflow aziendali e agli eventi operativi, non a un singolo comando curl riuscito.

Un percorso IPv6 può anche aggirare una regola solo IPv4 se il client e la destinazione selezionano IPv6. Al contrario, un test solo IPv4 può nascondere una destinazione che non dispone di una policy IPv6 utilizzabile. Includi entrambe le famiglie nel piano di test prima della distribuzione e documenta una decisione esplicita se una famiglia è disabilitata o non supportata per una connessione specifica.

Migrazione, rebuild, ripristino e failover meritano la stessa revisione della distribuzione iniziale. Se uno di questi può creare una nuova identità di egress, l’allowlist sul lato ricevente deve essere pronta prima dell’evento oppure il servizio deve disporre di un percorso di aggiornamento di emergenza testato. Se downtime o un rigoroso allowlisting esterno non possono tollerare tale incertezza, una diversa architettura di rete o un diverso modello di hosting potrebbe essere la scelta responsabile.

  • Indirizzo sorgente modificato: attiva la regola di sovrapposizione o esegui il rollback, quindi conferma l’indirizzo sorgente presso la destinazione.
  • Percorso del worker diverso: testa separatamente ciascun worker e attività pianificata; non fare affidamento sul risultato del processo web.
  • Aggiramento IPv6: ispeziona la risoluzione della destinazione e i log di connessione; aggiungi la corretta regola IPv6 o imponi il percorso supportato previsto.
  • Identità inattesa dopo migrazione: sospendi i workflow dipendenti dove è sicuro farlo, applica il processo di modifica pre-approvato ed esegui una verifica rappresentativa.
  • Regola senza proprietario: assegna un responsabile del servizio e un contatto sul lato ricevente prima della prossima finestra di modifica.
  • Proposta di intervallo di emergenza troppo ampio: trattala come un’eccezione a tempo determinato che richiede approvazione esplicita e una data di rimozione.

Domande frequenti

Un dominio personalizzato assegna alla mia applicazione self-hosted un IP in uscita stabile?

No. Un dominio personalizzato fa parte della denominazione e del routing in ingresso. Non stabilisce l’indirizzo IP sorgente che i servizi esterni vedono quando l’applicazione avvia connessioni in uscita.

Un reverse proxy o un certificato TLS determina l’identità di egress in uscita?

No. I reverse proxy come Traefik instradano le richieste in ingresso verso i servizi ([Traefik, HTTP Router](https://doc.traefik.io/traefik/reference/routing-configuration/http/routing/router/)). TLS protegge le connessioni; Let’s Encrypt verifica il controllo dei nomi di dominio durante l’emissione tramite challenge ACME ([Let’s Encrypt, Challenge Types](https://letsencrypt.org/docs/challenge-types/)). L’identità sorgente in uscita dipende dal percorso di rete di egress, inclusi routing e traduzione degli indirizzi.

Perché un container Docker potrebbe avere un’identità in uscita diversa dall’URL pubblico dell’applicazione?

La pubblicazione delle porte in ingresso e il masquerading in uscita sono funzioni di rete separate. Docker documenta regole NAT sia per il mapping delle porte sia per il masquerading, quindi non si deve presumere che l’indirizzo usato per l’accesso in ingresso sia quello visto da una destinazione in uscita ([Docker with iptables](https://docs.docker.com/engine/network/firewall-iptables/)).

Dovremmo usare l’allowlisting IP al posto di un’autenticazione robusta?

In genere, considera l’allowlisting IP come una restrizione aggiuntiva anziché come l’unica decisione di fiducia. Dove supportati, valuta trasporto crittografato, credenziali limitate nell’ambito, richieste firmate, TLS reciproco, connettività privata o controlli basati sull’identità. La scelta corretta dipende dal servizio ricevente e dai requisiti di governance.

Dobbiamo esaminare IPv6 per l’allowlisting in uscita?

Sì, in un ambiente dual-stack. Una destinazione può essere raggiunta tramite IPv6 o IPv4 a seconda degli indirizzi disponibili e del comportamento di selezione ([RFC 6724](https://www.rfc-editor.org/rfc/rfc6724.html)). Testa il percorso di connessione effettivo e assicurati che le regole del servizio ricevente coprano la famiglia di indirizzi in uso.

Cosa dovremmo chiedere ad Airbip prima di effettuare la distribuzione di un’applicazione con un rigido allowlist di egress?

Chiedi evidenze sugli indirizzi IPv4 e IPv6 in uscita per gli specifici workload e processi coinvolti, se possono cambiare, quali percorsi di traffico sono coperti, cosa accade durante migrazione o ripristino e come vengono comunicate le modifiche rilevanti. Non dedurre un comportamento di egress fisso da un sottodominio Airbip, un dominio personalizzato, il routing o la configurazione TLS.

Fonti e approfondimenti

  1. Packet filtering and firewalls — Docker
  2. Docker with iptables — Docker
  3. HTTP Router — Traefik Labs
  4. Challenge Types — Let’s Encrypt / Internet Security Research Group
  5. RFC 3022: Traditional IP Network Address Translator — IETF / RFC Editor
  6. RFC 6724: Default Address Selection for IPv6 — IETF / RFC Editor
  7. Application Security Verification Standard: General Service-to-Service Communication Security — OWASP
  8. SP 800-207A: A Zero Trust Architecture Model for Access Control in Cloud-Native Applications in Multi-Cloud Environments — NIST
  9. SP 800-207: Zero Trust Architecture — NIST
  10. SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations — NIST