一个iptables规则不起作用

我遇到了以下问题:我想阻塞从networking访问的端口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将创build规则将数据包转发到您的容器。 这些数据包永远不会通过INPUT链。 请参阅: http : //www.faqs.org/docs/iptables/traversingoftables.html

您可以使用FORWARD链进行过滤。

 iptables -I FORWARD -p tcp -d 172.17.0.1 --dport 80 -j DROP 

请注意 ,这不会从本地主机丢弃连接,并且您必须使用重写的目标(即在容器中侦听端口)。

如果你需要更多的控制,你可以使用--iptables=false来运行Docker守护进程,但是你必须手动pipe理数据包转发到你的容器。