JacobWang
JacobWang
Published on 2025-08-15 / 4 Visits
0
0

WAF软件反代模式部署内核参数优化说明

1.连接跟踪表大小

net.netfilter.nf_conntrack_max

作用:控制内核同时能跟踪的网络连接数量上限(包含:TCP、UDP、ICMP等)
应用场景:有状态防火墙、NAT、WAF、负载均衡等
影响:
太小:高并发时表会满导致丢包,dmesg里会出现f_conntrack: table full, dropping packet
太大:每条记录大约占230~400B内存,调高会占用过多内存

2.文件描述符限制

fs.file-max
fs.nr_open

作用:
fs.file-max :系统级最大可同时打开的文件数(包含socket)
s.nr_open :单个进程理论可打开的最大文件数上限
影响:
如果业务(尤其是长连接)打开的FD数接近限制,会报Too many open files
必须配合ulimit -n才能让进程世纪用到更高的值

3.网络队列

net.core.netdev_max_backlog

作用:内核网络接口接收队列的长度(数据包崽内核排队的最大数值)
场景:高PPS(包每秒)环境,防止因为内核处理不及时导致丢包
影响:
太小:高并发网卡丢包
太大:占内存(对大内存及其影响不大)

net.core.somaxconn

作用:监听socket的半连接队列最大长度
场景:高并发TCP服务器,防止新连接被拒绝
影响:
太小:高并发场景下可能会出现connection refused或SYN backlog overflow
太大:会消耗更多内存在维护队列

4.本地端口范围

net.ipv4.ip_local_port_range

作用:系统为客户端动态分配的本地端口范围(临时端口)
默认:通常为32768 60999,建议改为1024 65535,增加可用端口
场景:高并发短连接客户端,防止端口耗尽
注意:范围太小可能会导致EADDRNOTAVAIL错误

5.TCP SYN队列

net.ipv4.tcp_max_syn_backlog

作用:半连接对接大小(还未完成三次握手的连接数量上限)
场景:地域SYN Flood攻击,或在高连接建立速率下防止丢连接
影响:
太小:连接建立慢或丢失
太大:多占内存

6.TIME_WAIT优化

net.ipv4.tcp_max_tw_buckets

作用:TIME_WAIT状态socket最大数量
场景:HTTP等短连接服务会产生大量的TIME_WAIT
影响:
太小:TIME_WAIT太多会被强制清理,可能会导致端口复用时出现连接复位
太大:占内存

net.ipv4.tcp_fin_timeout

作用:FIN——WAIT2状态保持的秒数,决定连接管壁厚资源释放速度
影响:
太小:可能影响需要长FIN_WAIT2的协议
太大:占用socket资源

net.ipv4.tcp_tw_reuse

作用:允许重用TIME_WAIT状态的socket(只对客户端有效)
影响:减少TIME_WAIT占用的端口,适合短连接客户端

net.ipv4.tcp_tw_recycle

作用:快速回收TIME_WAIT
建议:保持0

7.TCP窗口与内存

net.ipv4.tcp_window_scaling

作用:是否允许TCP窗口缩放(支持大于64KB的接收窗口)
场景:高速网络(千兆/万兆)

net.ipv4.tcp_mem

作用:TCP全局内存使用阈值,包含三个值:min,pressure,max,单位:页,1页通常为4KB
(1)min:低于此值时TCP不会回收内存
(2)pressure:高于此值时会开始回收
(3)max:高于此值时会强制回收
场景:高带宽、大并发需要调高,否则可能触发TCP内存不足


Comment