LINUX.ORG.RU

Настройка iptables для docker

 ,


0

2

Добрый день.

Не понимаю, что нужно блокировать в iptables, для того, что бы из вне, через интерфейс с белым IP не было доступа к docker.

И так имеется:

enp5s0 интерфейс внутренней сети за NAT

enp6s0 интерфейс со статическим внешним IP для nginx сервиса.

Nginx поднимаю внутри контейнера docker, с пробросом портов 80,443.

Работает служба iptables:

Очищаю все цепочки iptables

$IPT -F

$IPT -F -t nat

$IPT -F -t mangle

$IPT -X

$IPT -X -t nat

$IPT -X -t mangle

Устанавливаю политики по умолчанию для трафика

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP

Далее открываю порты

$IPT -A INPUT -i enp6s0 -p tcp --dport 80 -j ACCEPT

$IPT -A INPUT -i enp6s0 -p tcp --dport 443 -j ACCEPT

При запуске докера, докер прописывает свои правила в forvard

Вопрос: будет ли доступен докер и его контейнеры из вне через enp6s0? Или все таки нужно еще добавлять правило:

iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

согласно https://docs.docker.com/network/iptables/ ??

Мне нужно что бы из вне, доступа к самой службе докера не было, и только был доступен контейнер с nginx с портами 80,443.

Заранее премного благодарен


В целом там чёрт ногу сломит. Я советую пользоваться внешним фаерволом, если есть такая опция.

Вот мой сниппет:

cat /etc/iptables/rules.v4
*filter
:INPUT DROP
:DOCKER-USER -
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp3s0 -m state --state established,related -j ACCEPT
-A INPUT -i enp3s0 -p icmp -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m state --state new --dport 22 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m state --state new --dport 80 -j ACCEPT
-A INPUT ! -i enp3s0 -s 172.16.0.0/12 -j ACCEPT
-A DOCKER-USER -i enp3s0 -m state --state established,related -j RETURN
-A DOCKER-USER -i enp3s0 -p icmp -j RETURN
-A DOCKER-USER -i enp3s0 -j DROP
COMMIT

не гарантирую, что работает правильно, но может быть подойдёт для вдохновения.

vbr ★★★
()
Ответ на: комментарий от vbr

плюсую этого регистранта. внешний фаервол - самая простая опция. иначе - пляски с iptables-save

вона чо нашел: https://medium.com/swlh/manage-iptables-firewall-for-docker-kubernetes-daa5870aca4d

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от vbr

Почитал информацию, в целом как понял у пакета есть два варианта пути: PreRouting->INPUT->OUTPUT->PostRouting, или PreRouting->Forward->PostRouting (это пакет который не попадет не доступен локальным процессам, а пройдет сквозь OS и будет следовать далее, именно в docker. Таким образом, как я понимаю, все ограничения INPUT DROP работать не будут, так как пакеты уйдут в цепочку FORWARD. Но цепочку FORWARD DROP переписывает DOCKER, и по этому DOCKER и контейнеры доступны через внешний IP, по цепочке FORWARD. Поэтому нужно добавить ограничение в цепочку DOCKER-USER

Если ошибаюсь, прошу поправить меня.

hitec
() автор топика