2017-03-21 3 views
0

Wie schränkt man den Port eines Containers, der von Docker offengelegt wird, von nur einer Liste von IPs ein? Nur diese IP-Liste könnte auf diesen Port zugreifen.Einschränken von Docker exponierter Port von nur bestimmten IP-Adressen

Ich habe versucht, dass:

iptables -I DOCKER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable 
iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_1 --destination HOST_IP_1 -j ACCEPT 
iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_2 --destination HOST_IP_1 -j ACCEPT 
iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_3 --destination HOST_IP_1 -j ACCEPT 
+0

diese Frage hilft das? http://stackoverflow.com/questions/30769829/docker-ignores-iptable-rules-when-using-p-portport?rq=1 – Zach

+0

iptables sind Reihenfolge empfindlich. Sie lehnen ab, bevor Sie jemals Ihre Regeln akzeptieren. – BMitch

Antwort

0

Von der Docker Führung here:

Docker Vorwärts Regeln standardmäßig alle externen IP-Adressen ermöglichen. Um nur einer bestimmten IP oder einem bestimmten Netzwerk den Zugriff auf die Container zu erlauben, fügen Sie oben in der DOCKER-Filterkette eine negierte Regel ein. Zum Beispiel den externen Zugriff so beschränken, dass nur 8.8.8.8 Quell-IP die Behälter zugreifen können, könnte die folgende Regel hinzugefügt werden:

$ iptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j DROP

In Ihrem Fall, da Sie mehrere IP-Adressen erlauben, möchte ich so etwas wie dies denken sollte funktionieren:

iptables -I DOCKER -s EXTERNAL_IP_1 -p tcp --dport PORT_X -j ACCEPT 
iptables -I DOCKER -s EXTERNAL_IP_2 -p tcp --dport PORT_X -j ACCEPT 
iptables -I DOCKER -s EXTERNAL_IP_3 -p tcp --dport PORT_X -j ACCEPT 
iptables -I DOCKER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable 
3

Ihre Politik ist Whitelist, ist es besser, einen eigenen Bedürfnissen zu schaffen dies allein chain handhaben.

Zum Beispiel, ich habe einen redis Container, ich will es nur für bestimmte IP-Adressen dienen:

$ docker run -d -p 6379:6379 redis:2.8 

Nach dem Start redis Container, sehen die iptables wie folgt aus:

$ iptables -t filter -nL 
Chain DOCKER (1 references) 
target  prot opt source    destination 
ACCEPT tcp -- 0.0.0.0/0   172.17.0.2   tcp dpt:6379 

erstellen unsere eigenen Kette:

$ iptables -N CUSTOM_REDIS 
$ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 172.31.101.37 --destination 172.17.0.2 -j ACCEPT 
$ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 172.31.101.38 --destination 172.17.0.2 -j ACCEPT 
$ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 0.0.0.0/0 --destination 172.17.0.2 -j DROP 

Ersetzen Sie die ursprüngliche Regel mit cust om Kette:

$ iptables -R DOCKER 1 -p tcp --source 0.0.0.0/0 --destination 172.17.0.2 --dport 6379 -j CUSTOM_REDIS 

Nun meine redis nur Zugriff durch ip: 172.31.101.37 und 172.31.101.38.

Hinweis:

  • 172.17.0.2 ist die ip von redis Container
+0

Ich stehe vor dem gleichen Problem und ich versuche immer noch, mein Gehirn um Docker zu bekommen. Momentan erstelle ich den Container, der den Java Rest Service enthält, und ich lege ihn an Devop weiter. Ich frage mich, ob dieses Skript etwas ist, das ich in eine Dockerfile einbetten kann? Vielen Dank – jscriptor

Verwandte Themen