Несмотря на iptables, я могу получить доступ к порту 80 в Google Cloud - почему? - PullRequest
0 голосов
/ 03 октября 2018

Я использую экземпляр контейнера Google Cloud (cos-beta-70-11021-29-0) и запускаю nginx:

docker run --name xx -d -p 80:80 nginx

Я могу получить доступ к странице приветствия nginx, несмотря напорт 80 не открыт в iptables:

$ sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 23 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

Почему так?

1 Ответ

0 голосов
/ 03 октября 2018

Чтобы открыть порт, вы должны связать внутреннюю сеть докеров с внешней, поэтому Docker добавляет свою собственную цепочку DOCKER в iptables, управляемую сама.Когда вы открываете порт в контейнере, используя опцию -p 80:80, Docker добавляет правило в эту цепочку.

В вашем списке правил вы можете найти:

-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT

Если вы не хотите, чтобы Docker возился с iptables, вы можете добавить аргумент --iptables=false к вашему исполнителю демона Docker, но тогда, вероятно, часть expose вашей команды docker может не работать автоматически, и вам может потребоватьсядобавить некоторые дополнительные правила iptables.Я не проверял это.

Вы можете найти эти опции /etc/default/docker или /etc/systemd/system/docker.service.d в зависимости от того, используете ли вы systemd, upstart или другие ...

Возможно, вы захотитепроверьте любую из этих ссылок:

https://docs.docker.com/config/daemon/systemd/

https://docs.docker.com/engine/reference/commandline/dockerd//#daemon-configuration-file

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...