为什么即使端口已被接受,iptables 也会阻止此 curl?

为什么即使端口已被接受,iptables 也会阻止此 curl?

这是一个重置 iptables 的简单脚本

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I INPUT  -p tcp --dport 8000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 8000 -j ACCEPT

在此之后如果我

curl another-machine:8000/filename

连接挂起,似乎发生了 DROP 而不是 ACCEPT。如果我

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

那么上述curl命令就起作用了。

但端口8000显然设置为ACCEPT即使DROP是策略也是如此。

在此处输入图片描述

那么为什么连接无法接通呢?

答案1

偏僻的港口和目的地端口不是一回事。如果传出的数据包以 8000 作为其目标端口,那么传入的回复将以它作为来源端口(即镜像):

                local                   remote

 src 192.168.1.71:36932  --OUTPUT-->  151.101.1.69:8000 dest  TCP [SYN]

dest 192.168.1.71:36932  <--INPUT---  151.101.1.69:8000 src   TCP [SYN, ack]

换句话说,只会-A INPUT -p tcp --sport 8000匹配它。

处理这个问题更常见的方式是使用有状态的防火墙:

-A INPUT -m state --state ESTABLISHED -j ACCEPT

相关内容