linux内核关闭tcp校验,linux内核tcp调优规范与方案
1、TCP常用內(nèi)核參數(shù)優(yōu)化
上一篇我們介紹了服務(wù)器上有大量的TIME_WAIT等待,可能造成的危害,以及給web服務(wù)器帶來負擔。如何解決這個問題呢,其實,解決思路很簡單,就是讓服務(wù)器能夠快速回收和重用那些TIME_WAIT的資源即可。這就是對tcp調(diào)優(yōu)。
在linux系統(tǒng)上,對tcp調(diào)優(yōu)主要是通過調(diào)整Linux內(nèi)核參數(shù)來實現(xiàn)的,其實主要是對/proc文件系統(tǒng)進行設(shè)置,/proc文件系統(tǒng)是一種內(nèi)核和內(nèi)核模塊用來向進程(process) 發(fā)送信息的機制(所以叫做/proc)。通過這個偽文件系統(tǒng)我們可以和內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)進行交互,在運行中改變內(nèi)核參數(shù)。 與其他文件系統(tǒng)不同,/proc存在于內(nèi)存之中而不是硬盤上。proc文件系統(tǒng)以文件的形式向用戶空間提供了訪問接口,這些接口可以用于在運行時獲取相關(guān)信息或者修改參數(shù)配置,因而它是非常方便的一個接口。
/proc目錄下存放著大多數(shù)的內(nèi)核參數(shù),并且可以在系統(tǒng)運行的同時進行更改, 但是,重新啟動機器后就會失效,怎么解決呢,我們可以通過將更改的內(nèi)核參數(shù)寫入 /etc/sysctl.conf文件中實現(xiàn)永久更改,在/etc/sysctl.conf文件中添加或者修改如何設(shè)置:
#對于一個新建連接,內(nèi)核要發(fā)送多少個SYN連接請求才決定放棄,不應(yīng)該大于255,默認值是5,這里設(shè)置為2.
net.ipv4.tcp_syn_retries=2
#表示當keepalive啟用的時候,TCP發(fā)送keepalive消息的頻度。缺省是7200秒,改為300秒
net.ipv4.tcp_keepalive_time=300
#表示孤兒socket廢棄前重試的次數(shù),重負載web服務(wù)器建議調(diào)小。
net.ipv4.tcp_orphan_retries=1
#表示如果套接字由本端要求關(guān)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間
net.ipv4.tcp_fin_timeout=30
#表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。
net.ipv4.tcp_max_syn_backlog = 8192 (注意:這個隊列大小除了系統(tǒng)設(shè)置外,程序里面也要設(shè)置)
#表示開啟SYN Cookies。當出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻 擊,默認為0,表示關(guān)閉
net.ipv4.tcp_syncookies = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關(guān)閉
net.ipv4.tcp_tw_reuse = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關(guān)閉
net.ipv4.tcp_tw_recycle = 1
修改完之后執(zhí)行/sbin/sysctl -p讓參數(shù)生效。
其實TIME-WAIT的問題還是比較好處理的,可以通過調(diào)節(jié)服務(wù)器參數(shù)實現(xiàn),有時候還會出現(xiàn)CLOSE_WAIT很多的情況,CLOSE_WAIT是在對方關(guān)閉連接之后服務(wù)器程序自己沒有進一步發(fā)出ACK信號。換句話說,就是在對方連接關(guān)閉之后,程序里沒有檢測到,或者程序壓根就忘記了這個時候需要關(guān)閉連接,于是這個資源就一直被程序占著。所以解決CLOSE_WAIT過多的方法還需要檢查程序,檢查代碼,因為問題很大程度上出在服務(wù)器程序中。
到此為止,TCP優(yōu)化到一段落。
2、TCP洪水攻 擊(SYN Flood)的診斷和處理
SYN Flood是當前最流行的DoS(拒絕服務(wù))與DDoS(分布式拒絕服務(wù))的方式之一,這是一種利用TCP協(xié)議缺陷,發(fā)送大量偽造的TCP連接請求,常用假冒的IP或IP號段發(fā)來海量的請求連接第一個握手包(SYN包),被攻 擊服務(wù)器回應(yīng)第二個握手包(SYN+ACK包),因為對方是假冒IP,對方永遠收不到包且不會回應(yīng)第三個握手包。導致被攻 擊服務(wù)器保持大量SYN_RECV狀態(tài)的“半連接”,并且會重試默認5次回應(yīng)第二個握手包,直到塞滿TCP等待連接隊列,資源耗盡(CPU滿負荷或內(nèi)存不足),讓正常的業(yè)務(wù)請求連接不進來。
那么如何診斷SYN Flood問題呢,一般情況下如果發(fā)現(xiàn)網(wǎng)站打開緩慢、CPU負載高、ssh登陸慢甚至登陸不上,同時在系統(tǒng)日志中發(fā)現(xiàn)如下信息:
[root@test ~]# tail -f /var/log/messages
Mar 12 02:38:03 test kernel: possible SYN flooding on port 80. Sending cookies.
Mar 12 02:39:04 test kernel: possible SYN flooding on port 80. Sending cookies.
Mar 12 02:40:04 test kernel: possible SYN flooding on port 80. Sending cookies.
如果出現(xiàn)類似這種情況,那可能就是遭遇了TCP洪水***。
此時,通過如下命令檢查TCP連接狀態(tài):
[root@localhost ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIMEWAIT 7807
FINWAIT1 59
ESTABLISHED 8112
FINWAIT2 809
SYNRECV 198098
CLOSING 27
LASTACK 36
檢查發(fā)現(xiàn),SYNRECV連接數(shù)會非常多。
針對這個問題,首先要做應(yīng)急處理,那就是找到請求數(shù)請最多的IP地址,查找攻 擊來源,使用如下命令組合:
[root@localhost ~]# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n3
36.171.242
149.130.152
149.130.18
查到可疑的IP后,利用iptables臨時封掉最大嫌疑攻 擊的IP或IP號段。
接著,還需要調(diào)整系統(tǒng)內(nèi)核參數(shù),來抵擋這種攻 擊,根據(jù)上面對SYN Flood攻 擊的特點,我們只需修改操作系統(tǒng)內(nèi)核參數(shù)即可有效緩解。主要參數(shù)如下:
net.ipv4.tcpsyncookies = 1
net.ipv4.tcpmaxsynbacklog = 81920
net.ipv4.tcpsynackretries = 2
三個參數(shù)的含義分別為啟用SYN Cookie、設(shè)置SYN最大隊列長度以及設(shè)置SYN+ACK最大重試次數(shù)。
SYN Cookie的作用是緩解服務(wù)器資源壓力。啟用之前,服務(wù)器在接到SYN數(shù)據(jù)包后,會立即分配存儲空間,并隨機化一個數(shù)字作為SYN號發(fā)送SYN+ACK數(shù)據(jù)包。然后保存連接的狀態(tài)信息等待客戶端確認。而在啟用SYN Cookie之后,服務(wù)器不再馬上分配存儲空間,而且通過基于時間種子的隨機數(shù)算法設(shè)置一個SYN號,替代完全隨機的SYN號。發(fā)送完SYN+ACK確認報文之后,清空資源不保存任何狀態(tài)信息。直到服務(wù)器接到客戶端的最終ACK包。同時,通過Cookie檢驗算法鑒定是否與發(fā)出去的SYN+ACK報文序列號匹配,匹配則通過完成握手,失敗則丟棄。
tcpmaxsynbacklog則是使用服務(wù)器的內(nèi)存資源,換取更大的等待隊列長度,讓攻 擊數(shù)據(jù)包不至于占滿所有連接而導致正常用戶無法完成握手。
net.ipv4.tcpsynackretries是降低服務(wù)器SYN+ACK報文重試次數(shù)(默認是5次),盡快釋放等待資源。
這三種措施與攻 擊的三種危害一一對應(yīng),完完全全是對癥下藥。但這些措施也是雙刃劍,設(shè)置過大可能消耗服務(wù)器更多的內(nèi)存資源,甚至影響正常用戶建立TCP連接,因此,需要評估服務(wù)器硬件資源和大小謹慎設(shè)置。
總結(jié)
以上是生活随笔為你收集整理的linux内核关闭tcp校验,linux内核tcp调优规范与方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 情人节前夕外滩现巨型玫瑰:有男子欲买小雏
- 下一篇: 教你怎样自己组装电脑