家里用的路由器,装了第三方固件后开了防火墙,结果发现网页打开变慢、游戏偶尔掉线、NAS访问时断时续——问题可能不在带宽,而在那几十条没人碰过的防火墙规则上。
别堆砌,先清理
很多用户习惯‘有备无患’,看到新服务就加一条规则,从不删旧的。时间一长,iptables 或 nftables 规则表里塞满重复、过期、根本没触发过的条目。比如你半年前试过远程桌面,开了 TCP 3389 入站,后来关了 Windows 远程,这条规则却一直挂着,每次包进来都要比对一次。
实测:某台 OpenWrt 路由器清理掉 47 条失效规则后,新建连接延迟下降 12ms,CPU 空闲率回升 8%。
顺序就是性能
防火墙是顺序匹配的。把高频通行的规则(比如局域网内设备互访、DNS 查询)放在前面,低频或高风险规则(如 WAN 口 SSH 登录)往后放。别让每个 DNS 请求都得扫完 20 条黑名单才放行。
常见错误写法:
-A INPUT -i eth0.2 -p tcp --dport 22 -j DROP
-A INPUT -i br-lan -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
正确顺序应该是:
-A INPUT -i br-lan -s 192.168.1.0/24 -d 192.168.1.0/24 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -i eth0.2 -p tcp --dport 22 -j DROP
用聚合代替罗列
别为每台手机单独写一条允许访问打印机的规则。用 IP 段或设备组替代:
❌ 错误示范:
允许 192.168.1.101 → 打印机
允许 192.168.1.102 → 打印机
允许 192.168.1.103 → 打印机
✅ 正确做法:-A FORWARD -s 192.168.1.100/29 -d 192.168.1.200 -p tcp --dport 631 -j ACCEPT
默认策略定调子
INPUT 默认 DROP,FORWARD 默认 DROP,OUTPUT 默认 ACCEPT——这是最稳妥的起点。别图省事设成 ACCEPT 再靠一堆拒绝规则补漏,那等于把门敞开再挨个拦人。
定期验效,不是设完就忘
每月花三分钟看一眼日志:logread | grep 'iptables denied' | tail -20
如果某条 DROP 规则连续一周零命中,它大概率可以删了;如果某条 ACCEPT 规则命中率占总流量 70%,说明它该往前挪。