Linux iptables / conntrack 性能问题

Linux iptables / conntrack 性能问题

我在实验室里有一个包含 4 台机器的测试装置:

  • 2 台旧 P4 机器(t1、t2)
  • 1 Xeon 5420 DP 2.5 GHz 8 GB RAM (t3) 英特尔 e1000
  • 1 Xeon 5420 DP 2.5 GHz 8 GB RAM (t4) 英特尔 e1000

测试 Linux 防火墙的性能,因为在过去的几个月里我们遭受了多次 syn-flood 攻击。所有机器都运行 Ubuntu 12.04 64 位。t1、t2、t3 通过 1GB/s 交换机互连,t4 通过额外的接口连接到 t3。因此,t3 模拟防火墙,t4 是目标,t1、t2 扮演攻击者,通过数据包风暴(192.168.4.199 是 t4):

hping3 -I eth1 --rand-source --syn --flood 192.168.4.199 -p 80

t4 丢弃所有传入数据包以避免与网关混淆、t4 的性能问题等。我在 iptraf 中查看数据包统计信息。我已按如下方式配置防火墙 (t3):

  • stock 3.2.0-31-generic #50-Ubuntu SMP 内核
  • rhash_entries=33554432 作为内核参数
  • sysctl 如下:

    net.ipv4.ip_forward = 1
    net.ipv4.route.gc_elasticity = 2
    net.ipv4.route.gc_timeout = 1
    net.ipv4.route.gc_interval = 5
    net.ipv4.route.gc_min_interval_ms = 500
    net.ipv4.route.gc_thresh = 2000000
    net.ipv4.route.max_size = 20000000
    

(我做了很多调整以使 t1+t2 发送尽可能多的数据包时 t3 保持运行)。

这些努力的结果有些奇怪:

  • t1+t2 设法每秒发送大约 200k 个数据包。t4 在最佳情况下总共发送大约 200k 个数据包,因此一半的数据包丢失了。
  • 尽管数据包正在流经控制台,但 t3 在控制台上几乎无法使用(软中断数量较多)
  • 路由缓存垃圾收集器根本无法预测,在默认设置下,每秒的数据包数量非常少(<50k 数据包/秒)
  • 激活有状态的 iptables 规则会使到达 t4 的数据包速率下降到大约 100k 数据包/秒,实际上会丢失超过 75% 的数据包

这是我主要关心的 - 使用两台旧的 P4 机器发送尽可能多的数据包 - 这意味着网络上的几乎每个人都应该能够做到这一点。

所以我的问题是:我是否忽略了配置或测试设置中的一些重要点?是否有其他方法可以构建防火墙系统,尤其是在 smp 系统上?

答案1

我将迁移到不再具有路由缓存的内核 >= 3.6。这应该可以解决您的部分问题。

答案2

您在 T3 上的日志设置如何?如果记录了所有丢弃的数据包,则磁盘 I/O 可能是原因。

由于这是一个测试环境,您可以尝试关闭 T3 日志记录进行测试。

相关内容