linux防火墙规则按从上到下顺序匹配,匹配即执行动作且不再检查后续规则;宽泛规则前置会导致精细规则失效,应遵循“先特殊后一般、先允许再拒绝”原则,通过带行号命令查看并用-i/-d调整顺序。

Linux防火墙(如iptables或nftables)的规则顺序直接决定数据包是否被允许或拒绝。规则是按从上到下的顺序逐条匹配的,一旦匹配成功,就立即执行对应动作(ACCEPT、DROP等),后续规则不再检查。因此,把宽泛规则(如“全部放行”)放在前面,会导致后面更精细的限制规则完全失效。
规则顺序错误的典型表现
常见现象包括:
- 明明添加了 DROP 某IP的规则,但该IP仍能访问服务
- 设置了允许SSH(端口22)的规则,却连不上——因为前面有一条默认DROP策略已生效
- 自定义的限速或日志规则没触发,因被更早的ACCEPT规则“截胡”
如何确认当前规则顺序是否合理
使用以下命令查看带编号的规则列表,重点关注链(INPUT/OUTPUT/FORWARD)中规则的排列逻辑:
iptables -L INPUT --line-numbers(iptables)
nft list chain ip filter INPUT(nftables)
观察是否符合“先特殊后一般、先允许再拒绝”的原则。例如:允许已建立连接(ESTABLISHED,RELATED)、开放必要端口(22/80/443)、再限制异常流量、最后是默认策略(DROP或REJECT)。
修复顺序问题的常用操作
- 插入新规则到指定位置:
iptables -I INPUT 3 -s 192.168.1.100 -j DROP(在第3行插入) - 删除某行规则:
iptables -D INPUT 5(删除INPUT链第5条) - 调整已有规则位置:先删除再用 -I 插入到目标序号
- 保存修改后的规则(避免重启丢失):
iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或service iptables save(RHEL/CentOS 6)
避免顺序踩坑的建议
- 默认策略设为 DROP 前,确保至少有一条允许本机管理流量的规则(如本地回环、已建立连接、特定管理IP)
- 测试新规则时,加一条带LOG目标的规则辅助排查:
iptables -I INPUT 2 -m state --state NEW -p tcp --dport 22 -j LOG --log-prefix "SSH-ATTEMPT: " - 生产环境修改前,先用
iptables-restore --test验证规则语法和逻辑 - 优先使用语义更清晰的工具(如nftables)管理复杂策略,其语法天然支持命名链和更直观的流程控制










