Назад | Перейти на главную страницу

Заблокировать порт Postgres 5432, работающий в контейнере Docker с помощью iptables

Я использую рабочий стол Ubuntu 14.04 (точнее Xubuntu) и пытаюсь заблокировать внешний доступ к локально работающему порту Postgres 5432 с помощью iptables. Это мое iptables -S

-A INPUT -i lo -p tcp -m tcp --dport 5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5432 -j DROP

И iptables -L:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:postgresql
DROP       tcp  --  anywhere             anywhere             tcp dpt:postgresql

Но каким-то образом приложение сетевого сканера на моем Android, подключенное к тому же Wi-Fi, все еще может его видеть. Я могу дополнительно протестировать его с помощью утилиты PSQL на моем Android, и действительно, я могу видеть все свои таблицы. Что мне не хватает?

Изменить: стоит упомянуть, что это Postgres, работающий в контейнере докеров. Возможно, это как-то связано с этим.

Больше копал. Это похоже на поведение Docker, которое изменяет цепочку iptables FORWARD.

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-OVERLAY  all  --  anywhere             anywhere            
DOCKER-ISOLATION  all  --  anywhere             anywhere            
DOCKER     all  --  anywhere             anywhere

Chain DOCKER (2 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:postgresql

Этот сайт очерчивает проблему.

Чтобы Docker не перенаправлял весь доступ к вашему контейнеру, укажите 127.0.0.1 при запуске контейнера.

docker run -p 127.0.0.1:5432:5432 postgres