iptables规则按顺序匹配,DROP优先于ACCEPT导致后续ACCEPT不生效;ufw与iptables混用会互相覆盖;conntrack表满使NEW包被误拒;nftables与iptables后端不一致引发链跳转失效。
iptables 规则顺序导致 DROP 优先于 ACCEPT
Linux 的 iptables 是按顺序匹配规则的,一旦某条规则匹配成功(比如一条 DROP),后续规则就不再检查。常见误操作是先加了全局 DROP,再加 ACCEPT,结果后者根本没机会生效。
排查方法:
– 运行 sudo iptables -L -n -v --line-numbers 查看带行号和包计数的规则列表
– 关注 pkts 列:如果某条 ACCEPT 规则的计数始终为 0,而它前面的 DROP 计数持续增长,基本就是顺序问题
– 临时调整:用 sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT 把 SSH 规则插到最前面测试
ufw 和 iptables 同时启用引发双重拦截
ufw 本质是 iptables 的封装,两者共存时容易互相覆盖或重复加载规则,尤其在重启后 ufw 自动重载可能清掉你手动加的 iptables 规则。
判断是否冲突:
– 执行 sudo ufw status verbose,观察输出里是否有 “Status: active”
– 再执行 sudo iptables -L INPUT | head -10,对比规则内容是否与 ufw 声明的一致
– 若 ufw 已启用,**不要直接用 iptables -A 添加规则**,应改用 ufw allow 或修改 /etc/ufw/before.rules
conntrack 状态干扰导致 NEW 包被拒绝
某些防火墙规则依赖连接状态(如 -m state --state RELATED,ESTABLISHED -j ACCEPT),但若系统启用了 nf_conntrack 且连接跟踪表溢出,新连接的 NEW 包可能无法正确标记状态,进而被后续规则误判丢弃。