我正在使用 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