修改内核参数有3种办法:一种临时修改,两种永久修改。html
临时修改是使用sysctl [选项] [参数名=值]命令;永久修改是修改/etc/sysctl.conf文件或修改/proc/sys/目录下的对应文件(例如,修改net.ipv4.tcp_synack_retries=0,即echo 0 > /proc/sys/net/ipv4/tcp_synack_retries)。vim
最多见的内核参数调优就是为了防止DoS(拒绝服务攻击)和DDoS(分布式拒绝服务攻击)。其中SYN Flood是当前最流行的DoS与DDoS的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP链接请求,经常使用假冒的IP或IP号段发来的海量请求链接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),由于对方是假冒IP,对方永远收不到包且不会回应第三个握手包。致使被攻击服务器保持大量SYN_RECV状态的“半链接”,而且会重试默认5次回应第二个握手包,塞满TCP等待链接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求链接不进来。服务器
解决办法就是配置相关参数,能够添加到/etc/sysctl.conf文件中,也能够直接修改/proc/sys/目录下的对应文件。cookie
[root@youxi1 ~]# vim /etc/sysctl.conf //添加或修改参数 net.ipv4.tcp_synack_retries = 0 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_max_syn_backlog = 20480 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 10 fs.file-max = 819200 net.core.somaxconn = 65535 net.core.rmem_max = 1024123000 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 165536 net.ipv4.ip_local_port_range = 10000 65535
参数说明:网络
1)主要参数并发
net.ipv4.tcp_synack_retries 表示回应第二个握手包(SYN+ACK包)给客户端IP后,若是收不到第三次握手包(ACK包),进行重试的次数(默认为5)。修改这个参数为0,能够加快回收半链接,减小资源消耗,可是有一个反作用:网络情况不好时,若是对方没收到第二个握手包,可能链接服务器失败,但对于通常网站,用户刷新一次页面便可。根据抓包经验,这种状况不多,但为了保险起见,能够只在被tcp洪水攻击时临时启用这个参数。之因此能够把tcp_synack_retries改成0,由于客户端还有tcp_syn_retries参数,默认是5,即便服务器端没有重发SYN+ACK包,客户端也会重发SYN握手包。
net.ipv4.tcp_syn_retries 表示当没有收到服务器端的SYN+ACK包时,客户端重发SYN握手包的次数(默认为5)。
net.ipv4.tcp_max_syn_backlog 半链接队列长度(默认为1024),加大SYN队列长度能够容纳更多等待链接的网络链接数,具体多少数值受限于内存socket
2)辅助参数
fs.file-max 系统容许的文件句柄的最大数目(也就是能打开文件的最大数量),由于链接须要占用文件句柄。注意:/etc/security/limits.conf文件内对nofile的配置(使用ulimit -n查看),还有/etc/security/limits.d/20-nproc.conf文件内对nproc的配置(使用ulimit -u查看),最好配置玩这两个参数重启下系统。
net.core.somaxconn 用来应对突发的大并发connect 请求
net.core.rmem_max 最大的TCP 数据接收缓冲(字节)
net.core.wmem_max 最大的TCP 数据发送缓冲(字节)
net.core.netdev_max_backlog 网络设备接收数据包的速率比内核处理这些包的速率快时,容许送到队列的数据包的最大数目
net.ipv4.ip_local_port_range 本机主动链接其余机器时的端口分配范围,好比说,在vsftpd主动模式会用到tcp
3)次级辅助参数分布式
注意:如下参数面对外网时,不要打开。由于反作用很明显。优化
net.ipv4.tcp_syncookies 当出现半链接队列溢出时是否向对方发送syncookies(默认为0),1表示启用cookies来处理,可防范少许SYN攻击;0表示关闭。调大半链接队列后不必
net.ipv4.tcp_tw_reuse TIME_WAIT状态的链接重用功能是否开启(默认为0),1表示容许将TIME-WAIT sockets从新用于新的TCP链接;0表示关闭。
net.ipv4.tcp_tw_recycle 时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合,1表示开启TCP链接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout TIME_WAIT状态的链接回收功能,默认值是 60,对于本端断开的socket链接,TCP保持在FIN_WAIT_2状态的时间
扩展:TCP三次握手
Client-------------------------Server
SYN ------------------------->
<------------------------SYN+ACK
ACK -------------------------> (SYN Flood就是这一步不回)