我正在尝试用 python 做 flask 教程,它在端口 5000 上运行服务器。当我停止 iptables 时,我可以连接到我的(远程)服务器,但是当我运行 iptables 时,连接超时。
我不知道哪条规则阻碍了我的连接。
# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:commplex-main
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:commplex-main
Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:distinct
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
因此,当我停止 iptables 时,我可以连接。当它运行时,我无法连接。这表明是防火墙在阻止,对吗?
有什么想法从哪里开始吗?
答案1
看起来你用了类似的东西
iptables -A INPUT ...
将端口 5000 的规则添加到防火墙配置中。
请注意,INPUT 链所做的第一件事是将所有数据包发送到 RH-Firewall-1-INPUT 链。最后一件事是
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
防火墙按照列表中出现的顺序处理数据包并执行规则,第一个获胜。这意味着数据包永远不会到达您的
tcp -- anywhere anywhere state NEW tcp dpt:commplex-main
tcp -- anywhere anywhere tcp dpt:commplex-main
INPUT 链末尾的规则。
您需要使用 -I(插入)选项将端口 5000 的规则添加到 INPUT 或 RH-Firewall-1-INPUT 链
iptables -I RH-Firewall-1-INPUT ...
因为使用 -A(添加)会将规则放在链的末尾,而 -I 会将它们放在提供的行号之后,如果没有提供 --lune-number,则放在第 1 行。