Ubuntu 24.04下iptables规则配置异常问题求助
Ubuntu 24.04下iptables规则配置异常问题求助
你遇到的问题根源其实出在规则里的-i any这个参数上——iptables根本不认识any这个网络接口名称,所以你设置的两条规则实际上完全没有生效,相当于白写了!
咱们来拆解下原因和对应的现象:
- 当你执行
iptables -A INPUT -i any -p tcp --dport 22 -j ACCEPT时,因为any不是系统合法的网络接口名(正常接口一般是ens33、eth0这类,你可以用ip link show查看自己的接口),这条规则根本不会匹配任何流入的流量。 - 同理,第二条
iptables -A INPUT -i any -j DROP也因为接口参数无效,不会对任何流量起作用。
这就完美解释了你看到的所有情况:
- 为什么telnet 22端口能通?因为Ubuntu默认的INPUT链策略是
ACCEPT,所有流量都允许进入,和你加的规则完全无关。 - 为什么telnet未监听的8888端口会收到重置?这是正常的TCP行为——当目标端口没有进程在监听时,系统会自动发送RST包回应连接请求,和iptables没有关系。
- 为什么用
nc -l -p 8888监听后能连接上?还是因为默认策略是ACCEPT,流量直接通过了。
修正方案
很简单,把规则里无效的-i any去掉(如果要匹配所有接口的流量),或者换成你实际的网络接口名称:
匹配所有接口的正确规则:
# 允许所有接口的22端口TCP连接 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 丢弃所有其他流入的流量 iptables -A INPUT -j DROP
仅针对特定接口(比如ens33)的规则:
iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i ens33 -j DROP
另外提醒下:设置完规则后,别忘了保存规则避免重启后丢失。Ubuntu 24.04可以执行iptables-save > /etc/iptables/rules.v4,然后安装iptables-persistent包来实现开机自动加载规则。
备注:内容来源于stack exchange,提问作者Vincent Godin




