iptables 规则混乱,nat PREROUTING

iptables 规则混乱,nat PREROUTING

我很难理解这组 iptables 规则到底起什么作用。

端口 22 是否收到数据包并且端口 2222 也收到该数据包的副本?或者数据包是否跳过端口 22 重定向到端口 2222?有人可以详细向我解释一下这些规则的作用吗?提前谢谢!

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222

答案1

不会。只有监听端口的本地进程2222才会接收数据包。如果该进程回复,则将进行反向转换,传出的reply数据包将从端口发出22

第四条规则将使任何遇到发往端口 的数据包22将被重新路由到您的本地端口2222,即使这些数据包原本不是发往此机器的。由于您没有其他匹配条件,因此除了从此机器发出的连接外,其他任何人都会这样。

实际上,这会拦截任何直通 SSH 流量。如果有人将此系统设置为网关并尝试连接到 LAN 之外的任何 SSH 服务,他们最终将连接到在端口上运行的服务2222。如果他们已经建立了信任(文件中有真实服务器的密钥known_hosts,或者已使用 DNSSEC 正确发布),他们的尝试将被其客户端拒绝,并发出有关正在进行的中间人攻击的适当警告(此规则本质上就是这样)。

请咨询Netfilter 数据包流图

顺便说一句,你不需要在这种情况下启用 IP 转发,因为数据包不需要转发(即使没有REDIRECT规则也必须转发)。而且您不需要对链进行任何操作FORWARD,因为它不会被遍历。因此第一和第二个命令是多余的。在nat表之后,数据包将重新定位到本地计算机;当路由决策发生时,数据包将被发送到链INPUT。这是您可以控制此数据包的地方,并且那里的数据包已经转换为端口2222,因此第三个命令中的规则是正确的。

相关内容