iptables 规则不起作用

iptables 规则不起作用

我面临以下问题:我想阻止从网络访问端口 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 命令后我没有做任何事情。

答案1

看起来您正在使用 Docker。当公开容器端口时,Docker 将创建规则以将数据包转发到您的容器。这些数据包永远不会经过 INPUT 链。请参阅:http://www.faqs.org/docs/iptables/traversingoftables.html

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

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

笔记,这不会断开来自本地主机的连接,并且您必须使用重写的目的地(即容器中的监听端口。)

如果您想要更多控制,您可以使用 运行 Docker 守护程序--iptables=false,但您必须手动管理到容器的数据包转发。

相关内容