使用 iptables 阻止在 Docker 容器上运行的 Postgres 端口 5432

使用 iptables 阻止在 Docker 容器上运行的 Postgres 端口 5432

我正在使用 Ubuntu 14.04 桌面版(确切地说是 Xubuntu),并尝试使用 iptables 阻止外部访问本地运行的 Postgres 端口 5432。这是我的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

但不知何故,连接到同一 wifi 的 Android 上的网络扫描器应用程序仍然可以看到它。我可以使用 Android 上的 PSQL 实用程序进一步测试它,确实可以看到我的所有表。我错过了什么?

编辑:可能值得一提的是,这是在 docker 容器上运行的 Postgres。这可能与它有关。

答案1

进行了进一步挖掘。这看起来像是修改 iptables FORWARD 链的 Docker 行为。

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

相关内容