Задать вопрос

Как закрыть порты открытые Docker?

Добрый день!

Задача: закрыть для доступа из-вне все порты, кроме 22, 80 и 443. При этом сервера, находящиеся в одной локальной сети должны иметь доступ ко всем портам, слушающим на данном сервере.

Создал правила iptables:

-P INPUT DROP
-A INPUT -p tcp -m tcp -m multiport --dports 22,80,443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3/1 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -s 192.168.1.100/32 -j ACCEPT
-A INPUT -s 192.168.1.101/32 -j ACCEPT
-A INPUT -s 192.168.1.102/32 -j ACCEPT
-A INPUT -i docker0 -j ACCEPT

Все работает, но после запуска docker-контейнеров, docker добавляет правила в свою цепочку, которые открывают доступ к слушающим портам наружу:

-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-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
-A DOCKER -d 172.17.0.5/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 9200 -j ACCEPT
-A DOCKER -d 172.17.0.6/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 27017 -j ACCEPT
-A DOCKER -d 172.17.0.7/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 27017 -j ACCEPT
-A DOCKER -d 172.17.0.12/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER -d 172.17.0.20/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 11211 -j ACCEPT
-A DOCKER-ISOLATION -j RETURN

Как правильно решить данную проблему, что бы открытые порты контейнеров были закрыты наружу и были доступны только для определенных серверов, указанных в цепочке INPUT?
  • Вопрос задан
  • 4271 просмотр
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Попробуйте настроить docker, опираясь на официальную документацию по конфигурации сети:
https://docs.docker.com/v1.8/articles/networking/

Думаю, если вы отключите некоторые параметры, например --ip-forward и --iptables, то сможете использовать собственные цепочки правил.
Ответ написан
@MOTORIST
Создаешь файлик
/etc/systemd/system/docker.service.d/noiptables.conf

Кидаешь в файлик
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --iptables=false

Дальше настраиваешь через iptables
Ответ написан
Комментировать
moropsk
@moropsk
если акутально еще, нашел тут https://fralef.me/docker-and-iptables.html

делаем так
docker run --name squid -d --restart=always \
--publish 192.168.2.41:3128:3128 \
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы