当连接跟踪表已满并且新连接即将被丢弃时,是否可以让 iptables 在负载下、攻击期间等回退到无状态过滤?
我知道这会带来一些严重的安全隐患,因此应非常谨慎地选择后备规则。此外,禁用连接跟踪时 NAT 不可避免地会中断,但这不是问题(所讨论的主机是实际的防火墙)。
任何解决方案都可能包含两个部分:
- 对 iptables 中的完整状态表做出反应(即无需通过 cron 作业或守护进程解析日志和修改规则)
- 禁用所有或部分有状态规则,或添加一些新的、优先级更高的规则,这些规则在应用状态跟踪之前接受数据包
可以吗?如果不能,有没有比通过某种日志解析检测表溢出并通过插入或删除规则或卸载连接跟踪模块做出反应更好的方法?
答案1
如果您遇到完整的连接跟踪表,则只需将其放大。
/etc/sysctl.conf
在或其包含的文件中设置以下内容:
net.ipv4.netfilter.ip_conntrack_max = 131072
(增加数量直到有足够的空间。)
在更老的 Linux 服务器上,您必须使用等效的旧的已弃用的 sysctl:
net.ipv4.ip_conntrack_max = 131072
要应用更改,请重新启动或运行:
sysctl -p
答案2
在高负载下,尤其是有大量连接时,它确实会开始变慢。因此,无状态是个好主意。
遗憾的是,没有办法即时回退到无状态过滤。不过,对于流量大的情况,您可以简单地跳过这些状态:udp、端口 80……使用不跟踪目标。
在负载非常高的情况下,我建议尽可能采用完全无状态。