修改內核參數有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就是這一步不回)