如何加速 Firewalld 或者应该放弃它而改用 nftables?

如何加速 Firewalld 或者应该放弃它而改用 nftables?

我们遇到了一个问题,我们设置了一个运行服务的服务器,该服务器能够在端口 3535(为此应用程序任意分配)上同时处理数百个连接。我们在这个近端主机上运行了防火墙,允许来自远端主机的连接,并且一切运行正常。我们遇到的问题是远端主机一次只能建立几个连接,并且需要 30 秒以上的时间才能获得这些连接。我们在近端接收主机上看到的最多连接平均约为 35 个。我们关闭了防火墙,它立即增加到 850 个连接,远端报告连接时没有问题,也没有延迟,并且运行了 15 分钟(直到我们重新打开防火墙)。

我们有一套非常简单的规则,没有进行任何限制。firewalld 中是否有默认限制需要禁用,或者我应该去 nftables,如果是,它实际上会表现得更好还是我在追逐幽灵?我的 ISP 没有使用 VMWARE,因此没有可用的外部解决方案。

提前致谢。David

答案1

firewalld 的维护者在这里。

Firewalld 目前不支持加速(软件快速路径或硬件卸载)。不过,我认为可以使用 nftablesflowtable基础架构添加这两项功能。不过,只有少数 NIC 支持 flowtable 卸载。

话虽如此,你所描述的听起来不对。那真是糟糕的性能。Firewalld 实际上并不执行防火墙。它构建 iptables/nftables 规则集并应用它们。iptables/nftables 规则的执行发生在内核/netfilter 中。

您可以考虑禁用某些可选的防火墙功能。IPv6_rpfilter众所周知,它在扩展环境中存在性能问题,因为它需要 FIB 查找。还请考虑可能导致频繁更新规则或添加大量规则的其他因素,例如 fail2ban。

编辑于 2023-06-07:现在使用firewalld支持 nftables flowtable.这可能会显著提高转发流量的吞吐量。

答案2

经过大量研究,我们发现 nftables 并不是这里的“救星”。在这种情况下,它的表现并不比 iptables 好,所以没什么帮助。

整体性能问题似乎是 Firewalld 软件防火墙的限制,必须通过外部防火墙等解决。其他人也遇到了同样的问题,但尚未解决: https://forums.centos.org/viewtopic.php?t=58673

答案3

您可以尝试复制firewalld生成的iptables/nftables规则,禁用firewalld,然后再次粘贴iptables/nftables规则,这样您就可以确认firewalld是否有其他限制参数。

如果仍然受限,则是生成的规则,您可以尝试优化规则或使用 iptables/nftables 从头开始​​构建。

如果不是,那么这可能是防火墙的限制,或者更可能是防火墙的错误。

相关内容