Linux内核参数优化 | Linux

Linux 内核参数调整与优化.

  • 内核参数配置文件/etc/sysctl.d

0,开启BBRTCP拥塞控制算法.

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

1,关闭ipv6默认开启.

net.ipv6.conf.all.disable_ipv6 = 1        
net.ipv6.conf.default.disable_ipv6 = 1

2,启用timewait快速回收

net.ipv4.tcp_tw_recycle = 1            

3,防止SYN洪水攻击保护

net.ipv4.tcp_syncookies = 1           

4,处理无源路由的包,防止黑客对服务器IP地址的攻击.

net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0

5,关闭arp响应.

net.ipv4.conf.enp1s0.arp_ignore = 1
net.ipv4.conf.enp1s0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

5,服务器忽略来自被列入网关的服务器的重定向,因重定向可以被用来进行攻击,所以我们只接受有可靠来源的重定向.

net.ipv4.conf.eth0.secure_redirects=1
net.ipv4.conf.lo.secure_redirects=1
net.ipv4.conf.default.secure_redirects=1
net.ipv4.conf.all.secure_redirects=1

6,可以配置接受或拒绝任何ICMP重定向,ICMP重定向是器传输信息的机制,比如,当网关接收到来自所接网络主机的Internet数据报时,网关可以发送重定向信息到一台主机,网关检查路由表获得下一个网关的地址,第二个网关将数据报路由到目标网络,关闭这些重定向得命令如下:

net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0

##如果这个服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能:

net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.lo.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.send_redirects=0

##开启icmp广播忽略,拒绝接受广播风暴或者smurf 攻击attacks:

net.ipv4.icmp_echo_ignore_broadcasts=1                 

#忽略所有icmp包或者pings

net.ipv4.icmp_echo_ignore_all=1            

##有些路由器针对广播祯发送无效的回应,每个都产生警告并在内核产生日志。这些回应可以被忽略

net.ipv4.icmp_ignore_bogus_error_responses=1     

#下边的命令用来对连接数量非常大的服务器进行调优:

##表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0

net.ipv4.tcp_tw_reuse = 1               

##表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0

net.ipv4.tcp_tw_recycle = 1               

##对于本端断开的socket连接,TCP保持在FIN_WAIT_2状态的时间

net.ipv4.tcp_fin_timeout = 60                

tips:

对于本端断开的socket连接,TCP保持在FIN_WAIT_2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。您可以设置该值﹐但需要注意﹐如果您的机器为负载很重的web服务器﹐您可能要冒内存被大量无效数据报填满的风险﹐FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 ﹐因为它们最多只吃 1.5K 的内存﹐但是它们存在时间更长。另外参考 tcp_max_orphans。

CLOSE_WAIT状态的生成原因

如果服务器程序APACHE处于CLOSE_WAIT状态的话,说明套接字是被动关闭的!

假设CLIENT端主动断掉当前连接,那么双方关闭这个TCP连接共需要四个packet:

Client —> FIN —> Server

Client < — ACK <— Server

这时候Client端处于FIN_WAIT_2状态;而Server 程序处于CLOSE_WAIT状态。

Client <— FIN <— Server

这时Server 发送FIN给Client,Server 就置为LAST_ACK状态。

Client —> ACK —> Server

Client回应了ACK,那么Server 的套接字才会真正置为CLOSED状态。

Server 程序处于CLOSE_WAIT状态,而不是LAST_ACK状态,说明还没有发FIN给Client,那么可能是在关闭连接之前还有许多数据要发送或者其他事要做,导致没有发这个FIN packet。

通常来说,一个CLOSE_WAIT会维持至少2个小时的时间。如果有个流氓特地写了个程序,给你造成一堆的CLOSE_WAIT,消耗资源,那么通常是等不到释放那一刻,系统就已经解决崩溃了。

改变这个值的前要经过认真的监测,避免因为死套接字造成内存溢出。

##对于所有的队列(即系统),设置最大系统发送缓存(wmem) 和接收缓存(rmem)到8MB

net.ipv4.core.wmem_max=8388608           
net.ipv4.core.rmem_max=8388608

使用如下命令调整tcp发送和接收缓存。该命令设定了三个值:最小值、初始值和最大值

##调整tcp读取缓存

net.ipv4.tcp_rmem="4096 87380 8388608"        

##调整tcp写入缓存

net.ipv4.tcp.wmem="4096 87380 8388608"        
net.ipv4.tcp_max_syn_backlog=4096

第三个值必须小于或等于wmem_max和rmem_max。

当服务器负载繁重或者是有很多客户端都是超长延时的连接故障,可能会导致half-open连接数量的增加。这对于Web服务器很来讲很平常,尤其有很多拨号客户时。这些half-open连接保存在 backlog(积压) connections 队列中。

将这个值最少设置为4096 (缺省为1024)。 即便是服务器不接收这类连接,设置这个值还能防止受到denial-of-service (syn-flood)的攻击

##设置ipfrag参数,尤其是NFS和Samba服务器

net.ipv4.ipfrag_low_thresh=262144
net.ipv4.ipfrag_high_thresh=393216

这里,我们可以设置用于重新组合IP碎片的最大、最小内存。当ipfrag_high_thresh值被指派,碎片会被丢弃直到达到ipfrag_low_thres值。
当TCP数据包传输发生错误时,开始碎片整理。有效的数据包保留在内存,同时损坏的数据包被转发。例如,设置可用内存范围从256 MB到384 MB


   转载规则


《Linux内核参数优化 | Linux》Bad-BoY 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
暴力破解防御 之 | fail2ban 暴力破解防御 之 | fail2ban
Fail2ban 暴力破解防御.Fail2ban简介.fail2Ban是一款入侵防御软件,可以保护服务器免受暴力攻击.它是用Python编程语言编写的.fail2Ban基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,
2022-03-12
下一篇 
构建高性能Linux Xanmod内核 | Linux 构建高性能Linux Xanmod内核 | Linux
构建高性能Linux内核!!!📢硬件平台说明!!💗 平台 X86_64.💗 CPU AMD Ryzen 9 3900X.💗 GPU GTX1660Ti.💗 ODM模具 Clevo NH5xAx.💗 EC Firwmare XMG
2022-03-07
  目录