修改核心引數有3種辦法:一種臨時修改,兩種永久修改。
臨時修改是使用sysctl [選項] [引數名=值]命令;永久修改是修改/etc/sysctl.conf檔案或修改/proc/sys/目錄下的對應檔案(例如,修改net.ipv4.tcp_synack_retries=0,即echo 0 > /proc/sys/net/ipv4/tcp_synack_retries)。
最常見的核心引數調優就是為了防止dos(拒絕服務攻擊)和ddos(分布式拒絕服務攻擊)。其中syn flood是當前最流行的dos與ddos的方式之一,這是一種利用tcp協議缺陷,傳送大量偽造的tcp連線請求,常用假冒的ip或ip號段發來的海量請求連線的第乙個握手包(syn包),被攻擊伺服器回應第二個握手包(syn+ack包),因為對方是假冒ip,對方永遠收不到包且不會回應第三個握手包。導致被攻擊伺服器保持大量syn_recv狀態的「半連線」,並且會重試預設5次回應第二個握手包,塞滿tcp等待連線佇列,資源耗盡(cpu滿負荷或記憶體不足),讓正常的業務請求連線不進來。
解決辦法就是配置相關引數,可以新增到/etc/sysctl.conf檔案中,也可以直接修改/proc/sys/目錄下的對應檔案。
[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佇列長度可以容納更多等待連線的網路連線數,具體多少數值受限於記憶體
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主動模式會用到
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就是這一步不回)
參考:linux下防禦ddos攻擊的操作梳理
linux系統核心引數優化
linux之核心引數調優
調優1 調優2調優3 調優4net.ipv4.tcp syncookies 1 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp fin timeout 30 net.ipv4.tcp keepalive time 1200...
linux系統之核心調優
1 編輯核心配置檔案 永久性 vim etc sysctl.con2 引數及簡單說明 net.ipv4.tcp fin timeout 2 保持在fin wait 2狀態的時間,使系統可以處理更多的連線。此引數值為整數,單位為秒。net.ipv4.tcp tw reuse 1 開啟重用,允許將tim...
Linux核心 修改TCP IP調優引數
所有的tcp ip調優引數都位於 proc sys net 目錄.例如,下面是最重要的一些調優引數,後面是它們的含義 1.proc sys net core rmem max 最大的tcp資料接收緩衝 2.proc sys net core wmem max 最大的tcp資料傳送緩衝 3.proc ...