Debian系统下iptables出站流量重定向至本地端口问题咨询
解决iptables出站流量被重定向至本地端口的问题
老兄,我仔细看了你贴的Debian上的iptables脚本,发现问题出在你只处理了filter表的规则,完全没碰nat表——而出站流量被重定向这种事儿,大多是nat表的OUTPUT链里残留了旧规则导致的。
你的脚本开头只清空了filter表的链和规则:
$IPT --flush $IPT --delete-chain
但默认情况下iptables操作的是filter表,nat、mangle这些表的旧规则根本没被清理,要是之前有人(或者你自己)配置过REDIRECT目标的规则,比如把某类出站流量重定向到本地端口,这些规则会一直生效,搞乱你的出站流量。
修正后的完整脚本
我给你调整了脚本,加上了清空所有表规则的操作,同时保留你原来的filter表策略:
#!/bin/sh IPT="/sbin/iptables" # 清空所有表的旧规则与自定义链(关键!) $IPT --flush $IPT --delete-chain $IPT -t nat --flush $IPT -t nat --delete-chain $IPT -t mangle --flush $IPT -t mangle --delete-chain # 设置三条默认链的默认策略 $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT # 允许自由使用回环接口 $IPT -A INPUT -i lo -j ACCEPT # 所有TCP会话需以SYN包起始 $IPT -A INPUT -p tcp ! --syn -m state --state NEW -s 0.0.0.0/0 -j DROP # 接收入站TCP数据包 $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -p tcp --dport 22 -m state --state NEW -s 0.0.0.0/0 -j ACCEPT # 接收入站ICMP消息 $IPT -A INPUT -p ICMP --icmp-type 8 -s 0.0.0.0/0 -j ACCEPT # Windows虚拟机相关规则(补全你没写完的部分) $IPT -A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT # 这里可以继续补充你原来没写完的virbr0相关规则
额外排查步骤
如果你想确认是不是nat表的锅,可以先运行这条命令查看nat表的所有规则:
iptables -t nat -L -n -v
如果看到带有REDIRECT目标的规则,那就是它在搞鬼——用修正后的脚本执行一次就能清空这些规则。
另外提醒一句:以后写iptables脚本的时候,记得要处理所有可能涉及的表,不然旧规则残留很容易出这种莫名其妙的问题。
内容的提问来源于stack exchange,提问作者Christoph Ritzer
相关产品推荐
相关产品推荐

