Docker: modo corretto per limitare l'accesso a determinati indirizzi IP

Ho un contenitore Docker che espone la port 3306 a Internet. Vorrei limitare l'accesso a determinati indirizzi IP pubblici. Ad esempio, utilizziamo 1.2.3.4.

Come condizione aggiuntiva, voglio che le regole sopravvivano al riavvio del demone Docker e al riavvio del server. Questo mi permette di utilizzare iptables-persistent ( iptables-save / iptables-restore ) per ripristinare le regole quando il server viene riavviato, senza che l'avvio del dockerd interferisca con esso.

  • Un sito web ospitato nella substring 1.0.0.0/8, da qualche parte su Internet?
  • Può essere utilizzato un indirizzo IP nell'ambito privato come indirizzo pubblico?
  • Dropped il traffico IP con un server multihomed
  • Ubuntu: il driver di networking si ripristina a eth0?
  • la regola fail2ban risulta in un messaggio di errore "iptables returned 200"
  • Come configurare correttamente una zona inversa senza class in BIND 9
  • Ho provato quanto segue:

    1. Modifica della catena FORWARD :

       iptables -I FORWARD -p tcp --dport 3306 -j REJECT iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT 

      Questo funziona quando viene fatto dopo l'avvio del demone Docker. Quando riavvia il demone, Docker inserisce ulteriori regole nella parte superiore della catena e le mie regole personalizzate finiscono per essere ignorate.

    2. Modifica della catena DOCKER :

       iptables -N DOCKER # if chain does not yet exist iptables -I DOCKER -p tcp --dport 3306 -j REJECT iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT 

      Questo funziona fino a dockerd viene riavviato il dockerd . Sembra che dockerd cancella la catena DOCKER al riavvio e tutte le regole personalizzate sono andate.

    3. Utilizza --iptables=false . Mentre questo funziona in linea di principio, questa soluzione interrompe le funzionalità di inoltro Docker standard e richiede l'impostazione manualmente delle regole di inoltro.

    Sarei sorpreso se non esiste un modo adeguato per farlo. Qualche idea?

    PS: Ho fatto qualche lettura a nessuna utilità (ad esempio, i passaggi per limitare i collegamenti esterni al contenitore dock con iptables ? , Docker – Le porte esposte accessibili dalle regole esterne – iptables ignorate , ma queste domande non sembrano trattare con il problema di riavvio. )

    One Solution collect form web for “Docker: modo corretto per limitare l'accesso a determinati indirizzi IP”

    il dockersd può essere eseguito con l'opzione:

    –iptables = false

    Se non viene eseguito manualmente ma utilizzato come servizio è sufficiente aggiungere o modificare la seguente row nel file di configuration /etc/docker/daemon.json :

    "iptables": falso,

    Qui è ansible trovare una documentazione più dettagliata

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.