Linuxiptables规则混乱_防火墙规则整理技巧

2次阅读

理顺iptables规则的关键是厘清执行顺序、删除冗余、合并同类、固化底线。先用带行号命令查现状,识别重复允许/拒绝、缺established放行、端口重复、nat与Filter不匹配等混乱模式,再分步删冗余、移关键规则至前、合多端口为一、设默认drop并加reject提示,最后保存防丢失。

Linuxiptables规则混乱_防火墙规则整理技巧

iptables规则混乱,本质是规则顺序错、冗余多、逻辑不清。解决关键不在删多少,而在理清“谁该先过、谁该拦住、谁不该管”。下面从实操角度说清楚怎么把一团乱麻的规则理顺。

先看清现状:用带序号的方式列出规则

直接运行命令,别只看-L:

  • sudo iptables -L input -n –line-numbers —— 只看INPUT链,带行号,最常用
  • sudo iptables -t nat -L -n –line-numbers —— 查NAT类规则,避免和filter规则混在一起
  • sudo iptables -S —— 输出原始命令格式,适合备份或复盘逻辑(比如看到-A INPUT -j DROP在第20行,就知道它可能挡住了后面所有规则)

识别典型混乱模式

以下情况一出现,基本就是规则失控信号:

  • 同一IP或网段被反复允许又拒绝(如先-A INPUT -s 192.168.1.100 -j ACCEPT,后面又-D INPUT -s 192.168.1.100 -j DROP,但没删干净)
  • 默认策略是DROP,但没放通ESTABLISHED/RELATED连接,导致ssh断连后无法恢复
  • 大量重复端口规则(比如80端口被写了5条ACCEPT,分散在不同位置)
  • nat表里PREROUTING和POSTROUTING规则与filter表中的INPUT/FORWARD不匹配(例如做了DNAT却没开FORWARD或对应INPUT)

分步整理:删、移、合、固

不建议一次性全清,按节奏操作更稳妥:

  • 删冗余:用行号精准删除,比如sudo iptables -D INPUT 7删第7条;或按条件删,如sudo iptables -D INPUT -s 10.0.0.0/8 -j DROP
  • 移顺序:把关键基础规则提到前面——本地回环(-i lo)、已建立连接(-m conntrack –ctstate ESTABLISHED,RELATED)、SSH白名单(-p tcp –dport 22 -s 192.168.10.0/24)
  • 合同类:把多个端口合并成一条,如http/https/DNS:-p tcp -m multiport –dports 22,80,443 -j ACCEPTudp也可类似处理
  • 固底线:整理完务必设置默认策略,例如sudo iptables -P INPUT DROP,再确认最后一条是-j REJECT –reject-with icmp-host-prohibited(比DROP更友好,便于排障)

保存和防丢失

linux重启后规则消失是常态,必须固化:

  • ubuntu/debiansudo iptables-save > /etc/iptables/rules.v4
  • centos 6:sudo service iptables save
  • CentOS 7+(使用iptables-services):sudo iptables-save > /etc/sysconfig/iptables,再systemctl restart iptables
  • 额外建议:每次大改前执行sudo iptables-save > /root/iptables-$(date +%F).bak,留个退路
text=ZqhQzanResources