Linux iptables / conntrack 性能问题

tim*_*tim 9 linux firewall

我在实验室中有 4 台机器的测试设置:

  • 2 台旧 P4 机器(t1、t2)
  • 1 个至强 5420 DP 2.5 GHz 8 GB RAM (t3) Intel e1000
  • 1 个至强 5420 DP 2.5 GHz 8 GB RAM (t4) Intel e1000

测试 linux 防火墙的性能,因为我们在过去几个月中受到了许多 Syn-Flood 攻击。所有机器都运行 Ubuntu 12.04 64 位。t1、t2、t3通过一个1GB/s的交换机互连,t4通过一个额外的接口连接到t3。所以t3模拟防火墙,t4是目标,t1,t2扮演攻击者通过产生一个packetstorm(192.168.4.199是t4):

hping3 -I eth1 --rand-source --syn --flood 192.168.4.199 -p 80
Run Code Online (Sandbox Code Playgroud)

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

  • 股票 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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • t1+t2 设法发送每个大约 200k 数据包/s。在最好的情况下,t4 总共看到大约 200k,所以一半的数据包丢失了。
  • 尽管数据包正在流经 t3,但它在控制台上几乎无法使用(大量软中断)
  • 路由缓存垃圾收集器无法预测,并且在默认设置中被极少的数据包/秒(<50k 数据包/秒)淹没
  • 激活有状态的 iptables 规则使到达 t4 的数据包速率下降到大约 100k 数据包/秒,有效地丢失超过 75% 的数据包

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

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

Joh*_*Siu 0

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

由于这是一个测试环境,您可以在关闭 T3 日志记录的情况下尝试测试。