2014-11-29 11 views
5

Używam hosta Gentoo z kontenerem Ubuntu w Dockerze. Komunikują się przez most automatycznie utworzony przez Docker. Chciałbym zrzucić cały ruch dla 192.168.0.0/16, który może wyjść z kontenera.Wyłącz dostęp do sieci LAN z kontenera 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 

Proszę dać mi znać, jeśli muszę dostarczyć dodatkowych informacji

Odpowiedz

7

Jedną z opcji byłoby uruchomić docker z --icc=false, zapobiegając pojemnik do komunikowania się z innymi pojemnikami, można pozwól pojemniki ze sobą komunikować łącząc je z --link=container_name:alias. This will not block the container from communicating with the host at this time though.

Można również pracować z iptables z reguły jak:

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

pamiętać, że gospodarz nie widzi upuścił paczkę wraca błędu ICMP, więc może REJECT jest bardziej odpowiednie w większości przypadków .

edit: sprostowanie regułę zablokować przekazanie do innych hostów:

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

iptables nie ma żadnego efektu (zakładając -o docker0). --icc = false, jak rozumiem, zapobiega komunikacji między kontenery, ale nie z hostem. W każdym razie, nadal otrzymuję udane pingi od execer exec -t -i cont1/bin/bash –

+0

Przepraszam, że poprawiłem regułę iptables – DRC

+0

Dzięki, fajny efekt. Nie mogę pingować hosta, ale mogę pingować inne fizyczne maszyny w sieci. Zakładam, że spedycja działa –

0

Jak powiedział @DRC użyć

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

Niemniej jednak zasada ta będzie blokować ruch z sieci lokalnej do listy kontener (połączenie zostanie nawiązane, ale pojemnik nie będzie w stanie odpowiedzieć)

Aby umożliwić połączenia z sieci lokalnej do kontenera, musisz dodać także

iptables -I FORWARD -i docker0 -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT 
Powiązane problemy