Linux 跟踪连接netfilter 调优
Netfilter介绍
linux内核中的netfilter是一款强大的基于状态的防火墙,具有连接跟踪(conntrack)的实现。conntrack是netfilter的核心,许多增强的功能,例如,地址转换(NAT),基于内容的业务识别(l7, layer-7 module)都是基于连接跟踪。
nf_conntrack模块在kernel 2.6.15(2006-01-03发布) 被引入,支持ipv4和ipv6,取代只支持ipv4的ip_connktrack,用于跟踪连接的状态,供其他模块使用。
主要参数介绍
- 注:跟踪的连接用哈希表存储,每个桶(bucket)里都是1个链表,默认长度为4KB
- 注:netfilter的哈希表存储在内核空间,这部分内存不能swap
- 注:哈希表大小 64位 最大连接数/8 32 最大连接数/4
- 注:32位系统一条跟踪几率约为300字节。
- 注:在64位下,当CONNTRACK_MAX为 1048576,HASHSIZE 为 262144 时,最多占350多MB
状态查看
1、查找:buckets哈希表大小,max最大几率的连接条数
2、查找:哈希表使用情况
3、查找:当前跟踪的连接数
4、跟踪连接详细信息
连接跟踪调优
- 计算公式
- CONNTRACK_MAX(最大几率的连接条数) = 内存个数10241024*1024/16384/2 = ***
- Buckets(哈希表大小) = CONNTRACK_MAX/4 = ***(Byte字节)
- 跟踪数暂用最内存大小 = CONNTRACK_MAX * 300(Byte字节)= ***(Byte字节)
注:如果不能关掉防火墙,基本思路就是,调大nf_conntrack_buckets和nf_conntrack_max,调小超时时间。 注:除了有关联的参数,尽量一次只改一处,记下默认值,效果不明显或更差就还原。
1、哈希表桶大小 调优
注:net.netfilter.nf_conntrack_buckets 不能直接改(报错)
2、最大追踪连接数修改 调优
3、响应时间 调优
**禁用连接跟踪模块 **
注:只要iptables还有规则用到nat和state模块,就不适合关掉netfilter,否则这些规则会失效。
禁用步骤
1、整理确认关闭该模块后不会影响功能
2、移除相关模块
https://arthurchiao.art/blog/conntrack-design-and-implementation/
评论区