Задача: закрыть для доступа из-вне все порты, кроме 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 добавляет правила в свою цепочку, которые открывают доступ к слушающим портам наружу:
Как правильно решить данную проблему, что бы открытые порты контейнеров были закрыты наружу и были доступны только для определенных серверов, указанных в цепочке INPUT?
Пробовал. Но тогда все правила, которые докер создаёт самостоятельно, нужно прописывать самому. Без них контейнеры не работают.
А это очень неудобно.
Нужно как-то решить проблему без этих опций.