2014-11-29 15 views
5

Sto eseguendo l'host Gentoo con il contenitore Ubuntu in Docker. Comunicano tramite bridge creato automaticamente da Docker. Vorrei eliminare tutto il traffico per 192.168.0.0/16 che potrebbe uscire dal contenitore.Disabilitare l'accesso alla LAN dal contenitore docker

$sudo iptables -S 
-P INPUT ACCEPT 
-P FORWARD ACCEPT 
-P OUTPUT ACCEPT 
-A FORWARD -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT 
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT 
-A FORWARD -i docker0 -o docker0 -j ACCEPT 
$sudo iptables -t nat -S 
-P PREROUTING ACCEPT 
-P INPUT ACCEPT 
-P OUTPUT ACCEPT 
-P POSTROUTING ACCEPT 
-N DOCKER 
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER 
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER 
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE 
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.17.0.2:443 

Per favore fatemi sapere se ho bisogno di fornire informazioni aggiuntive

risposta

7

Una possibilità potrebbe essere quella di eseguire finestra mobile con --icc=false, impedendo qualsiasi contenitore per comunicare con altri contenitori, si potrebbe quindi lasciare contenitori di comunicare tra loro collegandoli con --link=container_name:alias. This will not block the container from communicating with the host at this time though.

Si potrebbe anche funzionare con iptables con una regola come:

iptables -A INPUT -i docker0 -d 192.168.0.0/16 -j DROP 

tenere a mente che un host non vede pacchetto eliminato tornando da un errore ICMP, quindi forse REJECT è più appropriato nella maggior parte dei casi .

edit: correggere la regola per bloccare l'ora di altri host:

iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -j DROP 
+2

iptables non ha alcun effetto (presupponendo -o docker0). --icc = false come capisco impedisce le comunicazioni intercontainer, ma non con l'host. Ad ogni modo, continuo a ricevere ping all'interno di docker exec -t -i cont1/bin/bash –

+0

scusate ho corretto la regola di iptables – DRC

+0

Grazie, bel effetto. Non riesco a eseguire il ping dell'host, ma posso eseguire il ping di altre macchine fisiche nella rete. Presumo che l'inoltro funzioni –

0

Come ha detto @DRC, utilizzare

iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -j DROP 

Tuttavia, questa regola sarà bloccare il traffico dalla rete locale al vostro container (la connessione verrà stabilita ma il contenitore non sarà in grado di rispondere)

Per consentire le connessioni dalla rete locale al contenitore, è necessario aggiungere anche

iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT 
Problemi correlati