我面临以下问题:我想阻止从网络访问的端口 8000(阻止除来自 127.0.0.1 的连接之外的所有连接)。因此,为了简化我的问题,作为第一步,我决定使用以下规则阻止对端口 8000 的所有访问:
iptables -A INPUT -p tcp --dport 8000 -j DROP
现在,我知道我应该采取相反的方法,即删除除受信任的连接之外的所有连接,但我决定将其用于教育目的。
iptables -L
向我展示了这个输出:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.17.0.1 tcp dpt:80
不幸的是,我仍然成功地从端口 8000 访问服务器。你能告诉我我必须做什么吗?执行 drop rule 命令后我什么也没做。
看起来你正在使用 Docker。当暴露容器端口时,Docker 将创建规则以将数据包转发到您的容器。这些数据包永远不会通过 INPUT 链。见: http: //www.faqs.org/docs/iptables/traversingoftables.html
您可以使用 FORWARD 链进行过滤。
请注意,这不会从 localhost 断开连接,您必须使用重写的目标(即容器中的侦听端口。)
如果您想要更多控制,您可以使用 运行 Docker 守护程序
--iptables=false
,但您必须手动管理将数据包转发到您的容器。