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.

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. )

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