Цепочка Docker в iptables переопределяет правила INPUT - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть сервер, и я запускаю несколько док-контейнеров.Эти контейнеры имеют несколько портов, которые не открыты.Я добавил правила INPUT, чтобы разрешить доступ к этим портам только с 1 ip, и после этого у меня есть правило DROP.

Это должно заблокировать любой доступ к портам, кроме моего домашнего ip.Теперь оказывается, что docker просто разрешает все, и docker каким-то образом может переопределять правила ввода, потому что правила ввода не работают.

Я считаю, что это связано с правилом FORWARDING, которое выглядит следующим образом:

Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhereACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere

Я сбросил все правила, а затем получаю действительно странные ошибки отDocker такие вещи, как:

driver failed programming external connectivity on endpoint gogs (b62814647bf440e923c009da0ca76185fac2f89a9534eb11792dbcb07ef3ffbf): (iptables failed: iptables --wait -t filter -A DOCKER ! -i br-5dd41982af68 -o br-5dd41982af68 -p tcp -d 172.18.0.6 --dport 3000 -j ACCEPT: iptables: No chain/target/match by that name.

Как я могу убедиться, что правила ввода переопределяют все, чтобы фильтрация портов в цепочке INPUT прекратила доступ для всех, кроме меня?

1 Ответ

0 голосов
/ 30 ноября 2018

Я нашел ответ.Оказывается, что цепочка INPUT пропущена и вместо нее используется цепочка FORWARDING.Первое правило цепочки FORWARDING - читать цепочку DOCKER-USER.Эта цепочка будет содержать правила докера, которые не переопределяются докером.

Допустим, вы хотите, чтобы ваш домашний IP имел доступ к определенным портам и блокировал их для всех остальных.Используйте эти 2 правила:

iptables -A DOCKER-USER -i eth0 -s YOURIP -p tcp -m conntrack --ctorigdstport 8000:10000 -j ACCEPT
iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 5000:9999 -j DROP

Также вам необходимо использовать параметр ctorigdstport, поскольку существует форма перевода nat, а параметр dport не будет работать.

...