Почему перестают работать очевидные правила iptables на хостовой машине, если на сервере запущены какие-либо docker контейнеры?
Давай разбираться.
Если коротко, то когда ты запускаешь docker контейнеры, то все начинает работать через одно место, по правилам маршрутизации самого docker’а. И плевать он хотел что у тебя там на хостовой машине было ранее сконфигурировано в плане безопасности.
Давай рассмотрим на примере как с этим можно побороться.
Вводные: На сервере крутится контейнер nginx, порты 80 и 443 смотрят в мир, то есть открыты для всех.
Задача: Нужно, чтобы порты 80 и 443 были доступны только для определенных IP адресов.
Если бахнуть на хостовой машине так:
-A INPUT -s xxx.xxx.xxx.xxx/32 -p tcp -m tcp --dport 80,443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
То порты 80 и 443 так же будут доступны всем желающим. Вот на эти грабли почти каждый и наступает.
А решение простое, правим немного свой