Netfilter 规则操作缓慢

Netfilter 规则操作缓慢

我有一个使用“ip”和“iptables”工具维护 GRE 隧道和防火墙规则的脚本。设置数百个隧道和每个接口的地址运行良好。每个接口花费不到 0.1 秒,但是当我开始执行防火墙规则时,一切都变慢了,每次插入花费 >0.5 秒。

为什么运行速度这么慢?我该怎么做才能提高速度?

似乎我可以尝试使用 ipset,但我真的觉得内核或其他东西出了问题。有趣的是,前 10 条规则运行得很快,然后速度就变慢了。

mybox(root) foo# iptables -V
iptables v1.3.5
mybox(root) foo# uname -a 
Linux foo 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
mybox(root) foo# cat test.sh
#!/bin/sh

for n in {1..100}
do
  /sbin/iptables -A OUTPUT -s ${n} -j ACCEPT
  /sbin/iptables -D OUTPUT -s ${n} -j ACCEPT
done
mybox(root) foo# time ./test.sh

real    1m38.839s
user    0m0.100s
sys     1m38.724s

感谢任何帮助。干杯!

答案1

第一:你的内核是非常过时了。你的 也一样iptables

第二:问题在于每一个调用iptables,发生的事情是:

  1. iptables将整个表从内核拉到用户空间
  2. iptables修改用户空间中的表
  3. iptables将表推回到内核空间

iptables相反,按照您想要的方式配置规则集,然后使用 保存它iptables-save > some_file_name所有的规则集将使用命令一次性恢复iptables-restore < some_file_name

(当然,用some_file_name您想要保存规则集的文件的名称替换它。)

相关内容