google了若干篇文献之后发现简单的iptables优化实在是简单和泛滥得很的一个议题。对于不太长的规则表,最简单而有效的优化策略就是按照规则被引用的频率进行排序、使用 -m state 和用户自定义规则链。我目前所作的,就是对21, 4021和它们对应的被动端口配置filter表,而优化的策略就是:
1. 在针对IP和端口进行过滤之前加上语句
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2. 把这4种端口分别写进4个用户自定义规则链,并且在INPUT中引用这4个规则链,如下:
# new chain for port 21
/sbin/iptables -N allow21
/sbin/iptables -A allow21 -p tcp -s 123.45.670.0/24 --dport 21 -j ACCEPT
/sbin/iptables -A allow21 -p tcp -s 123.45.671.0/24 --dport 21 -j ACCEPT
/sbin/iptables -A allow21 -p tcp -s 123.45.672.0/24 --dport 21 -j ACCEPT
/sbin/iptables -A allow21 -p tcp -s 123.45.673.0/24 --dport 21 -j ACCEPT
/sbin/iptables -A allow21 -p tcp -s 123.45.675.0/24 --dport 21 -j ACCEPT
# allow connection to port 21
/sbin/iptables -A INPUT -p tcp --dport 21 -j allow21
按照我的设想,这样做有两个好处。其一就是把用户端的动作进行了分解,登录时和下载时只需要遍历一个自定义链,再加上-m state的帮助,性能应该可以得到提升。其二就是INPUT表实际上只包含4条规则而最常用到的21端口又排在最前面,这样也可以减少遍历的次数。
3. 本来原先是对eth0和eth1两张网卡分别进行了设置,后来发现并不需要如此高而不实的安全性,干脆就省掉对网络界面的定义了。
经我自己测试,效能反正有提高就是了。至于是不是能就此完工,就看那位学长是不是满意了。