色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何防御 SYN 攻擊?

lhl545545 ? 來源:Linux愛好者 ? 作者:Linux愛好者 ? 2020-06-18 10:30 ? 次閱讀

前言

網(wǎng)上許多博客針對(duì)增大 TCP 半連接隊(duì)列和全連接隊(duì)列的方式如下:

增大 TCP 半連接隊(duì)列方式是增大 tcp_max_syn_backlog;

增大 TCP 全連接隊(duì)列方式是增大 listen() 函數(shù)中的 backlog;

這里先跟大家說下,上面的方式都是不準(zhǔn)確的。

“你怎么知道不準(zhǔn)確?”

很簡(jiǎn)單呀,因?yàn)槲易隽藢?shí)驗(yàn)和看了 TCP 協(xié)議棧的內(nèi)核源碼,發(fā)現(xiàn)要增大這兩個(gè)隊(duì)列長(zhǎng)度,不是簡(jiǎn)簡(jiǎn)單單增大某一個(gè)參數(shù)就可以的。

接下來,就會(huì)以實(shí)戰(zhàn) + 源碼分析,帶大家解密 TCP 半連接隊(duì)列和全連接隊(duì)列。

“源碼分析,那不是勸退嗎?我們搞 Java 的看不懂呀”

放心,本文的源碼分析不會(huì)涉及很深的知識(shí),因?yàn)槎急晃覄h減了,你只需要會(huì)條件判斷語句 if、左移右移操作符、加減法等基本語法,就可以看懂。

另外,不僅有源碼分析,還會(huì)介紹 Linux 排查半連接隊(duì)列和全連接隊(duì)列的命令。

“哦?似乎很有看頭,那我姑且看一下吧!”

行,沒有被勸退的小伙伴,值得鼓勵(lì),下面這圖是本文的提綱:

本文提綱

正文

什么是 TCP 半連接隊(duì)列和全連接隊(duì)列?

在 TCP 三次握手的時(shí)候,Linux 內(nèi)核會(huì)維護(hù)兩個(gè)隊(duì)列,分別是:

半連接隊(duì)列,也稱 SYN 隊(duì)列;

全連接隊(duì)列,也稱 accepet 隊(duì)列;

服務(wù)端收到客戶端發(fā)起的 SYN 請(qǐng)求后,內(nèi)核會(huì)把該連接存儲(chǔ)到半連接隊(duì)列,并向客戶端響應(yīng) SYN+ACK,接著客戶端會(huì)返回 ACK,服務(wù)端收到第三次握手的 ACK 后,內(nèi)核會(huì)把連接從半連接隊(duì)列移除,然后創(chuàng)建新的完全的連接,并將其添加到 accept 隊(duì)列,等待進(jìn)程調(diào)用 accept 函數(shù)時(shí)把連接取出來。

半連接隊(duì)列與全連接隊(duì)列

不管是半連接隊(duì)列還是全連接隊(duì)列,都有最大長(zhǎng)度限制,超過限制時(shí),內(nèi)核會(huì)直接丟棄,或返回 RST 包。

實(shí)戰(zhàn) - TCP 全連接隊(duì)列溢出

如何知道應(yīng)用程序的 TCP 全連接隊(duì)列大小?

在服務(wù)端可以使用 ss 命令,來查看 TCP 全連接隊(duì)列的情況:

但需要注意的是 ss 命令獲取的 Recv-Q/Send-Q 在「LISTEN 狀態(tài)」和「非 LISTEN 狀態(tài)」所表達(dá)的含義是不同的。從下面的內(nèi)核代碼可以看出區(qū)別:

如何防御 SYN 攻擊?

在「LISTEN 狀態(tài)」時(shí),Recv-Q/Send-Q 表示的含義如下:

如何防御 SYN 攻擊?

Recv-Q:當(dāng)前全連接隊(duì)列的大小,也就是當(dāng)前已完成三次握手并等待服務(wù)端 accept() 的 TCP 連接個(gè)數(shù);

Send-Q:當(dāng)前全連接最大隊(duì)列長(zhǎng)度,上面的輸出結(jié)果說明監(jiān)聽 8088 端口的 TCP 服務(wù)進(jìn)程,最大全連接長(zhǎng)度為 128;

在「非 LISTEN 狀態(tài)」時(shí),Recv-Q/Send-Q 表示的含義如下:

如何防御 SYN 攻擊?

Recv-Q:已收到但未被應(yīng)用進(jìn)程讀取的字節(jié)數(shù);

Send-Q:已發(fā)送但未收到確認(rèn)的字節(jié)數(shù);

如何模擬 TCP 全連接隊(duì)列溢出的場(chǎng)景?

測(cè)試環(huán)境

實(shí)驗(yàn)環(huán)境:

客戶端和服務(wù)端都是 CentOs 6.5 ,Linux 內(nèi)核版本 2.6.32

服務(wù)端 IP 192.168.3.200,客戶端 IP 192.168.3.100

服務(wù)端是 Nginx 服務(wù),端口為 8088

這里先介紹下 wrk 工具,它是一款簡(jiǎn)單的 HTTP 壓測(cè)工具,它能夠在單機(jī)多核 CPU 的條件下,使用系統(tǒng)自帶的高性能 I/O 機(jī)制,通過多線程和事件模式,對(duì)目標(biāo)機(jī)器產(chǎn)生大量的負(fù)載。

本次模擬實(shí)驗(yàn)就使用 wrk 工具來壓力測(cè)試服務(wù)端,發(fā)起大量的請(qǐng)求,一起看看服務(wù)端 TCP 全連接隊(duì)列滿了會(huì)發(fā)生什么?有什么觀察指標(biāo)?

客戶端執(zhí)行 wrk 命令對(duì)服務(wù)端發(fā)起壓力測(cè)試,并發(fā) 3 萬個(gè)連接:

如何防御 SYN 攻擊?

在服務(wù)端可以使用 ss 命令,來查看當(dāng)前 TCP 全連接隊(duì)列的情況:

如何防御 SYN 攻擊?

其間共執(zhí)行了兩次 ss 命令,從上面的輸出結(jié)果,可以發(fā)現(xiàn)當(dāng)前 TCP 全連接隊(duì)列上升到了 129 大小,超過了最大 TCP 全連接隊(duì)列。

當(dāng)超過了 TCP 最大全連接隊(duì)列,服務(wù)端則會(huì)丟掉后續(xù)進(jìn)來的 TCP 連接,丟掉的 TCP 連接的個(gè)數(shù)會(huì)被統(tǒng)計(jì)起來,我們可以使用 netstat -s 命令來查看:

如何防御 SYN 攻擊?

上面看到的 41150 times ,表示全連接隊(duì)列溢出的次數(shù),注意這個(gè)是累計(jì)值。可以隔幾秒鐘執(zhí)行下,如果這個(gè)數(shù)字一直在增加的話肯定全連接隊(duì)列偶爾滿了。

從上面的模擬結(jié)果,可以得知,當(dāng)服務(wù)端并發(fā)處理大量請(qǐng)求時(shí),如果 TCP 全連接隊(duì)列過小,就容易溢出。發(fā)生 TCP 全連接隊(duì)溢出的時(shí)候,后續(xù)的請(qǐng)求就會(huì)被丟棄,這樣就會(huì)出現(xiàn)服務(wù)端請(qǐng)求數(shù)量上不去的現(xiàn)象。

全連接隊(duì)列溢出

全連接隊(duì)列滿了,就只會(huì)丟棄連接嗎?

實(shí)際上,丟棄連接只是 Linux 的默認(rèn)行為,我們還可以選擇向客戶端發(fā)送 RST 復(fù)位報(bào)文,告訴客戶端連接已經(jīng)建立失敗。

如何防御 SYN 攻擊?

tcp_abort_on_overflow 共有兩個(gè)值分別是 0 和 1,其分別表示:

0 :表示如果全連接隊(duì)列滿了,那么 server 扔掉 client 發(fā)過來的 ack ;

1 :表示如果全連接隊(duì)列滿了,那么 server 發(fā)送一個(gè) reset 包給 client,表示廢掉這個(gè)握手過程和這個(gè)連接;

如果要想知道客戶端連接不上服務(wù)端,是不是服務(wù)端 TCP 全連接隊(duì)列滿的原因,那么可以把 tcp_abort_on_overflow 設(shè)置為 1,這時(shí)如果在客戶端異常中可以看到很多 connection reset by peer 的錯(cuò)誤,那么就可以證明是由于服務(wù)端 TCP 全連接隊(duì)列溢出的問題。

通常情況下,應(yīng)當(dāng)把 tcp_abort_on_overflow 設(shè)置為 0,因?yàn)檫@樣更有利于應(yīng)對(duì)突發(fā)流量。

舉個(gè)例子,當(dāng) TCP 全連接隊(duì)列滿導(dǎo)致服務(wù)器丟掉了 ACK,與此同時(shí),客戶端的連接狀態(tài)卻是 ESTABLISHED,進(jìn)程就在建立好的連接上發(fā)送請(qǐng)求。只要服務(wù)器沒有為請(qǐng)求回復(fù) ACK,請(qǐng)求就會(huì)被多次重發(fā)。如果服務(wù)器上的進(jìn)程只是短暫的繁忙造成 accept 隊(duì)列滿,那么當(dāng) TCP 全連接隊(duì)列有空位時(shí),再次接收到的請(qǐng)求報(bào)文由于含有 ACK,仍然會(huì)觸發(fā)服務(wù)器端成功建立連接。

所以,tcp_abort_on_overflow 設(shè)為 0 可以提高連接建立的成功率,只有你非常肯定 TCP 全連接隊(duì)列會(huì)長(zhǎng)期溢出時(shí),才能設(shè)置為 1 以盡快通知客戶端。

如何增大 TCP 全連接隊(duì)列呢?

是的,當(dāng)發(fā)現(xiàn) TCP 全連接隊(duì)列發(fā)生溢出的時(shí)候,我們就需要增大該隊(duì)列的大小,以便可以應(yīng)對(duì)客戶端大量的請(qǐng)求。

TCP 全連接隊(duì)列足最大值取決于 somaxconn 和 backlog 之間的最小值,也就是 min(somaxconn, backlog)。從下面的 Linux 內(nèi)核代碼可以得知:

如何防御 SYN 攻擊?

somaxconn 是 Linux 內(nèi)核的參數(shù),默認(rèn)值是 128,可以通過 /proc/sys/net/core/somaxconn 來設(shè)置其值;

backlog 是 listen(int sockfd, int backlog) 函數(shù)中的 backlog 大小,Nginx 默認(rèn)值是 511,可以通過修改配置文件設(shè)置其長(zhǎng)度;

前面模擬測(cè)試中,我的測(cè)試環(huán)境:

somaxconn 是默認(rèn)值 128;

Nginx 的 backlog 是默認(rèn)值 511

所以測(cè)試環(huán)境的 TCP 全連接隊(duì)列最大值為 min(128, 511),也就是 128,可以執(zhí)行 ss 命令查看:

如何防御 SYN 攻擊?

現(xiàn)在我們重新壓測(cè),把 TCP 全連接隊(duì)列搞大,把 somaxconn 設(shè)置成 5000:

如何防御 SYN 攻擊?

接著把 Nginx 的 backlog 也同樣設(shè)置成 5000:

如何防御 SYN 攻擊?

最后要重啟 Nginx 服務(wù),因?yàn)橹挥兄匦抡{(diào)用 listen() 函數(shù), TCP 全連接隊(duì)列才會(huì)重新初始化。

重啟完后 Nginx 服務(wù)后,服務(wù)端執(zhí)行 ss 命令,查看 TCP 全連接隊(duì)列大小:

如何防御 SYN 攻擊?

從執(zhí)行結(jié)果,可以發(fā)現(xiàn) TCP 全連接最大值為 5000。

增大 TCP 全連接隊(duì)列后,繼續(xù)壓測(cè)

客戶端同樣以 3 萬個(gè)連接并發(fā)發(fā)送請(qǐng)求給服務(wù)端:

如何防御 SYN 攻擊?

服務(wù)端執(zhí)行 ss 命令,查看 TCP 全連接隊(duì)列使用情況:

如何防御 SYN 攻擊?

從上面的執(zhí)行結(jié)果,可以發(fā)現(xiàn)全連接隊(duì)列使用增長(zhǎng)的很快,但是一直都沒有超過最大值,所以就不會(huì)溢出,那么 netstat -s 就不會(huì)有 TCP 全連接隊(duì)列溢出個(gè)數(shù)的顯示:

如何防御 SYN 攻擊?

說明 TCP 全連接隊(duì)列最大值從 128 增大到 5000 后,服務(wù)端抗住了 3 萬連接并發(fā)請(qǐng)求,也沒有發(fā)生全連接隊(duì)列溢出的現(xiàn)象了。

如果持續(xù)不斷地有連接因?yàn)?TCP 全連接隊(duì)列溢出被丟棄,就應(yīng)該調(diào)大 backlog 以及 somaxconn 參數(shù)。

實(shí)戰(zhàn) - TCP 半連接隊(duì)列溢出

如何查看 TCP 半連接隊(duì)列長(zhǎng)度?

很遺憾,TCP 半連接隊(duì)列長(zhǎng)度的長(zhǎng)度,沒有像全連接隊(duì)列那樣可以用 ss 命令查看。

但是我們可以抓住 TCP 半連接的特點(diǎn),就是服務(wù)端處于 SYN_RECV 狀態(tài)的 TCP 連接,就是在 TCP 半連接隊(duì)列。

于是,我們可以使用如下命令計(jì)算當(dāng)前 TCP 半連接隊(duì)列長(zhǎng)度:

如何模擬 TCP 半連接隊(duì)列溢出場(chǎng)景?

模擬 TCP 半連接溢出場(chǎng)景不難,實(shí)際上就是對(duì)服務(wù)端一直發(fā)送 TCP SYN 包,但是不回第三次握手 ACK,這樣就會(huì)使得服務(wù)端有大量的處于 SYN_RECV 狀態(tài)的 TCP 連接。

這其實(shí)也就是所謂的 SYN 洪泛、SYN 攻擊、DDos 攻擊。

測(cè)試環(huán)境

實(shí)驗(yàn)環(huán)境:

客戶端和服務(wù)端都是 CentOs 6.5 ,Linux 內(nèi)核版本 2.6.32

服務(wù)端 IP 192.168.3.200,客戶端 IP 192.168.3.100

服務(wù)端是 Nginx 服務(wù),端口為 8088

注意:本次模擬實(shí)驗(yàn)是沒有開啟 tcp_syncookies,關(guān)于 tcp_syncookies 的作用,后續(xù)會(huì)說明。

本次實(shí)驗(yàn)使用 hping3 工具模擬 SYN 攻擊:

如何防御 SYN 攻擊?

當(dāng)服務(wù)端受到 SYN 攻擊后,連接服務(wù)端 ssh 就會(huì)斷開了,無法再連上。只能在服務(wù)端主機(jī)上執(zhí)行查看當(dāng)前 TCP 半連接隊(duì)列大小:

同時(shí),還可以通過 netstat -s 觀察半連接隊(duì)列溢出的情況:

上面輸出的數(shù)值是累計(jì)值,表示共有多少個(gè) TCP 連接因?yàn)榘脒B接隊(duì)列溢出而被丟棄。隔幾秒執(zhí)行幾次,如果有上升的趨勢(shì),說明當(dāng)前存在半連接隊(duì)列溢出的現(xiàn)象。

大部分人都說 tcp_max_syn_backlog 是指定半連接隊(duì)列的大小,是真的嗎?

很遺憾,半連接隊(duì)列的大小并不單單只跟 tcp_max_syn_backlog 有關(guān)系。

上面模擬 SYN 攻擊場(chǎng)景時(shí),服務(wù)端的 tcp_max_syn_backlog 的默認(rèn)值如下:

如何防御 SYN 攻擊?

但是在測(cè)試的時(shí)候發(fā)現(xiàn),服務(wù)端最多只有 256 個(gè)半連接隊(duì)列,而不是 512,所以半連接隊(duì)列的最大長(zhǎng)度不一定由 tcp_max_syn_backlog 值決定的。

接下來,走進(jìn) Linux 內(nèi)核的源碼,來分析 TCP 半連接隊(duì)列的最大值是如何決定的。

TCP 第一次握手(收到 SYN 包)的 Linux 內(nèi)核代碼如下,其中縮減了大量的代碼,只需要重點(diǎn)關(guān)注 TCP 半連接隊(duì)列溢出的處理邏輯:

如何防御 SYN 攻擊?

從源碼中,我可以得出共有三個(gè)條件因隊(duì)列長(zhǎng)度的關(guān)系而被丟棄的:

如果半連接隊(duì)列滿了,并且沒有開啟 tcp_syncookies,則會(huì)丟棄;

若全連接隊(duì)列滿了,且沒有重傳 SYN+ACK 包的連接請(qǐng)求多于 1 個(gè),則會(huì)丟棄;

如果沒有開啟 tcp_syncookies,并且 max_syn_backlog 減去 當(dāng)前半連接隊(duì)列長(zhǎng)度小于 (max_syn_backlog 》》 2),則會(huì)丟棄;

關(guān)于 tcp_syncookies 的設(shè)置,后面在詳細(xì)說明,可以先給大家說一下,開啟 tcp_syncookies 是緩解 SYN 攻擊其中一個(gè)手段。

接下來,我們繼續(xù)跟一下檢測(cè)半連接隊(duì)列是否滿的函數(shù) inet_csk_reqsk_queue_is_full 和 檢測(cè)全連接隊(duì)列是否滿的函數(shù) sk_acceptq_is_full :

如何防御 SYN 攻擊?

從上面源碼,可以得知:

全連接隊(duì)列的最大值是 sk_max_ack_backlog 變量,sk_max_ack_backlog 實(shí)際上是在 listen() 源碼里指定的,也就是 min(somaxconn, backlog);

半連接隊(duì)列的最大值是 max_qlen_log 變量,max_qlen_log 是在哪指定的呢?現(xiàn)在暫時(shí)還不知道,我們繼續(xù)跟進(jìn);

我們繼續(xù)跟進(jìn)代碼,看一下是哪里初始化了半連接隊(duì)列的最大值 max_qlen_log:

如何防御 SYN 攻擊?

從上面的代碼中,我們可以算出 max_qlen_log 是 8,于是代入到 檢測(cè)半連接隊(duì)列是否滿的函數(shù) reqsk_queue_is_full :

如何防御 SYN 攻擊?

也就是 qlen 》》 8 什么時(shí)候?yàn)?1 就代表半連接隊(duì)列滿了。這計(jì)算這不難,很明顯是當(dāng) qlen 為 256 時(shí),256 》》 8 = 1。

至此,總算知道為什么上面模擬測(cè)試 SYN 攻擊的時(shí)候,服務(wù)端處于 SYN_RECV 連接最大只有 256 個(gè)。

可見,半連接隊(duì)列最大值不是單單由 max_syn_backlog 決定,還跟 somaxconn 和 backlog 有關(guān)系。

在 Linux 2.6.32 內(nèi)核版本,它們之間的關(guān)系,總體可以概況為:

1. 當(dāng) max_syn_backlog 》 min(somaxconn, backlog) 時(shí), 半連接隊(duì)列最大值 max_qlen_log = min(somaxconn, backlog) * 2;

2. 當(dāng) max_syn_backlog 《 min(somaxconn, backlog) 時(shí), 半連接隊(duì)列最大值 max_qlen_log = max_syn_backlog * 2;

半連接隊(duì)列最大值 max_qlen_log 就表示服務(wù)端處于 SYN_REVC 狀態(tài)的最大個(gè)數(shù)嗎?

依然很遺憾,并不是。

max_qlen_log 是理論半連接隊(duì)列最大值,并不一定代表服務(wù)端處于 SYN_REVC 狀態(tài)的最大個(gè)數(shù)。

在前面我們?cè)诜治?TCP 第一次握手(收到 SYN 包)時(shí)會(huì)被丟棄的三種條件:

如果半連接隊(duì)列滿了,并且沒有開啟 tcp_syncookies,則會(huì)丟棄;

若全連接隊(duì)列滿了,且沒有重傳 SYN+ACK 包的連接請(qǐng)求多于 1 個(gè),則會(huì)丟棄;

如果沒有開啟 tcp_syncookies,并且 max_syn_backlog 減去 當(dāng)前半連接隊(duì)列長(zhǎng)度小于 (max_syn_backlog 》》 2),則會(huì)丟棄;

假設(shè)條件 1 當(dāng)前半連接隊(duì)列的長(zhǎng)度 「沒有超過」理論的半連接隊(duì)列最大值 max_qlen_log,那么如果條件 3 成立,則依然會(huì)丟棄 SYN 包,也就會(huì)使得服務(wù)端處于 SYN_REVC 狀態(tài)的最大個(gè)數(shù)不會(huì)是理論值 max_qlen_log。

似乎很難理解,我們繼續(xù)接著做實(shí)驗(yàn),實(shí)驗(yàn)見真知。

服務(wù)端環(huán)境如下:

如何防御 SYN 攻擊?

配置完后,服務(wù)端要重啟 Nginx,因?yàn)槿B接隊(duì)列最大和半連接隊(duì)列最大值是在 listen() 函數(shù)初始化。

根據(jù)前面的源碼分析,我們可以計(jì)算出半連接隊(duì)列 max_qlen_log 的最大值為 256:

客戶端執(zhí)行 hping3 發(fā)起 SYN 攻擊:

如何防御 SYN 攻擊?

服務(wù)端執(zhí)行如下命令,查看處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù):

如何防御 SYN 攻擊?

可以發(fā)現(xiàn),服務(wù)端處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù)并不是 max_qlen_log 變量的值。

這就是前面所說的原因:如果當(dāng)前半連接隊(duì)列的長(zhǎng)度 「沒有超過」理論半連接隊(duì)列最大值 max_qlen_log,那么如果條件 3 成立,則依然會(huì)丟棄 SYN 包,也就會(huì)使得服務(wù)端處于 SYN_REVC 狀態(tài)的最大個(gè)數(shù)不會(huì)是理論值 max_qlen_log。

我們來分析一波條件 3 :

從上面的分析,可以得知如果觸發(fā)「當(dāng)前半連接隊(duì)列長(zhǎng)度 》 192」條件,TCP 第一次握手的 SYN 包是會(huì)被丟棄的。

在前面我們測(cè)試的結(jié)果,服務(wù)端處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù)是 193,正好是觸發(fā)了條件 3,所以處于 SYN_RECV 狀態(tài)的個(gè)數(shù)還沒到「理論半連接隊(duì)列最大值 256」,就已經(jīng)把 SYN 包丟棄了。

所以,服務(wù)端處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù)分為如下兩種情況:

1. 如果「當(dāng)前半連接隊(duì)列」沒超過「理論半連接隊(duì)列最大值」,但是超過 max_syn_backlog - (max_syn_backlog 》》 2),那么處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù)就是 max_syn_backlog - (max_syn_backlog 》》 2);

2. 如果「當(dāng)前半連接隊(duì)列」超過「理論半連接隊(duì)列最大值」,那么處于 SYN_RECV 狀態(tài)的最大個(gè)數(shù)就是「理論半連接隊(duì)列最大值」;

每個(gè) Linux 內(nèi)核版本「理論」半連接最大值計(jì)算方式會(huì)不同。

在上面我們是針對(duì) Linux 2.6.32 版本分析的「理論」半連接最大值的算法,可能每個(gè)版本有些不同。

比如在 Linux 5.0.0 的時(shí)候,「理論」半連接最大值就是全連接隊(duì)列最大值,但依然還是有隊(duì)列溢出的三個(gè)條件:

如何防御 SYN 攻擊?

如果 SYN 半連接隊(duì)列已滿,只能丟棄連接嗎?

并不是這樣,開啟 syncookies 功能就可以在不使用 SYN 半連接隊(duì)列的情況下成功建立連接,在前面我們?cè)创a分析也可以看到這點(diǎn),當(dāng)開啟了 syncookies 功能就不會(huì)丟棄連接。

syncookies 是這么做的:服務(wù)器根據(jù)當(dāng)前狀態(tài)計(jì)算出一個(gè)值,放在己方發(fā)出的 SYN+ACK 報(bào)文中發(fā)出,當(dāng)客戶端返回 ACK 報(bào)文時(shí),取出該值驗(yàn)證,如果合法,就認(rèn)為連接建立成功,如下圖所示。

開啟 syncookies 功能

syncookies 參數(shù)主要有以下三個(gè)值:

0 值,表示關(guān)閉該功能;

1 值,表示僅當(dāng) SYN 半連接隊(duì)列放不下時(shí),再啟用它;

2 值,表示無條件開啟功能;

那么在應(yīng)對(duì) SYN 攻擊時(shí),只需要設(shè)置為 1 即可:

如何防御 SYN 攻擊?

如何防御 SYN 攻擊?

這里給出幾種防御 SYN 攻擊的方法:

增大半連接隊(duì)列;

開啟 tcp_syncookies 功能

減少 SYN+ACK 重傳次數(shù)

方式一:增大半連接隊(duì)列

在前面源碼和實(shí)驗(yàn)中,得知要想增大半連接隊(duì)列,我們得知不能只單純?cè)龃?tcp_max_syn_backlog 的值,還需一同增大 somaxconn 和 backlog,也就是增大全連接隊(duì)列。否則,只單純?cè)龃?tcp_max_syn_backlog 是無效的。

增大 tcp_max_syn_backlog 和 somaxconn 的方法是修改 Linux 內(nèi)核參數(shù):

增大 backlog 的方式,每個(gè) Web 服務(wù)都不同,比如 Nginx 增大 backlog 的方法如下:

最后,改變了如上這些參數(shù)后,要重啟 Nginx 服務(wù),因?yàn)榘脒B接隊(duì)列和全連接隊(duì)列都是在 listen() 初始化的。

方式二:開啟 tcp_syncookies 功能

開啟 tcp_syncookies 功能的方式也很簡(jiǎn)單,修改 Linux 內(nèi)核參數(shù):

如何防御 SYN 攻擊?

方式三:減少 SYN+ACK 重傳次數(shù)

當(dāng)服務(wù)端受到 SYN 攻擊時(shí),就會(huì)有大量處于 SYN_REVC 狀態(tài)的 TCP 連接,處于這個(gè)狀態(tài)的 TCP 會(huì)重傳 SYN+ACK ,當(dāng)重傳超過次數(shù)達(dá)到上限后,就會(huì)斷開連接。

那么針對(duì) SYN 攻擊的場(chǎng)景,我們可以減少 SYN+ACK 的重傳次數(shù),以加快處于 SYN_REVC 狀態(tài)的 TCP 連接斷開。

如何防御 SYN 攻擊?

責(zé)任編輯:pj

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11310

    瀏覽量

    209603
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9184

    瀏覽量

    85484
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    642

    瀏覽量

    29226
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    網(wǎng)絡(luò)攻擊中常見的掩蓋真實(shí)IP的攻擊方式

    會(huì)將攻擊數(shù)據(jù)包中的源IP地址替換為偽造的IP地址。 這種偽造不僅讓受害者在回應(yīng)時(shí)無法準(zhǔn)確找到攻擊者的真實(shí)位置,而且可能引發(fā)不必要的誤會(huì)和服務(wù)濫用。 比如說,在SYN Flood這類攻擊
    的頭像 發(fā)表于 12-12 10:24 ?102次閱讀

    IDS、IPS與網(wǎng)安防御

    入侵檢測(cè)系統(tǒng)(IDS)和入侵防御系統(tǒng)(IPS)是網(wǎng)絡(luò)安全防御的重要工具。 入侵檢測(cè)系統(tǒng)通過持續(xù)分析網(wǎng)絡(luò)流量和系統(tǒng)日志等信息,當(dāng)發(fā)現(xiàn)可疑傳輸時(shí),IDS會(huì)迅速發(fā)出警報(bào),通知管理員采取相應(yīng)措施。例如,當(dāng)
    的頭像 發(fā)表于 09-18 10:42 ?375次閱讀

    DDoS對(duì)策是什么?詳細(xì)解說DDoS攻擊難以防御的理由和對(duì)策方法

    攻擊規(guī)模逐年增加的DDoS攻擊。據(jù)相關(guān)調(diào)查介紹,2023年最大的攻擊甚至達(dá)到了700Gbps。 為了抑制DDoS攻擊的危害,采取適當(dāng)?shù)膶?duì)策是很重要的。 特別是在網(wǎng)站顯示花費(fèi)時(shí)間或頻繁出
    的頭像 發(fā)表于 09-06 16:08 ?361次閱讀

    服務(wù)器被ddos攻擊多久能恢復(fù)?具體怎么操作

    服務(wù)器被ddos攻擊多久能恢復(fù)?如果防御措施得當(dāng),可能幾分鐘至幾小時(shí)內(nèi)就能緩解;若未采取預(yù)防措施或攻擊特別猛烈,則可能需要幾小時(shí)甚至幾天才能完全恢復(fù)。服務(wù)器被DDoS攻擊的恢復(fù)時(shí)間取決
    的頭像 發(fā)表于 08-13 09:56 ?492次閱讀

    香港高防服務(wù)器是如何防ddos攻擊

    香港高防服務(wù)器,作為抵御分布式拒絕服務(wù)(DDoS)攻擊的前沿陣地,其防御機(jī)制結(jié)合了硬件、軟件和網(wǎng)絡(luò)架構(gòu)的多重策略,為在線業(yè)務(wù)提供了堅(jiān)實(shí)的保護(hù)屏障。以下是對(duì)香港高防服務(wù)器防御DDoS攻擊
    的頭像 發(fā)表于 07-18 10:06 ?266次閱讀

    恒訊科技分析:高防ip攻擊超過了防御峰值怎么辦?

    面對(duì)DDoS攻擊流量超過高防IP設(shè)定的防御峰值時(shí),可以采取以下措施進(jìn)行應(yīng)對(duì): 1、了解攻擊特征:首先,需要分析攻擊的類型、規(guī)模和持續(xù)時(shí)間,這有助于確定
    的頭像 發(fā)表于 07-09 16:06 ?234次閱讀

    無人機(jī)主動(dòng)防御系統(tǒng)不起作用嗎

    起作用。無人機(jī)主動(dòng)防御系統(tǒng)是一種用于保護(hù)無人機(jī)免受攻擊的系統(tǒng)。這種系統(tǒng)可以有效地防止無人機(jī)被敵方攻擊,提高無人機(jī)的生存能力。然而,無人機(jī)主動(dòng)防御系統(tǒng)并不是萬能的,它也存在一定的局限性。
    的頭像 發(fā)表于 07-08 09:57 ?531次閱讀

    無人機(jī)主動(dòng)防御系統(tǒng)有什么作用

    無人機(jī)主動(dòng)防御系統(tǒng)是一種用于保護(hù)無人機(jī)免受攻擊或干擾的系統(tǒng)。這種系統(tǒng)可以提高無人機(jī)的安全性和可靠性,確保無人機(jī)在執(zhí)行任務(wù)時(shí)能夠正常運(yùn)行。 無人機(jī)主動(dòng)防御系統(tǒng)的定義和分類 無人機(jī)主動(dòng)防御
    的頭像 發(fā)表于 07-08 09:54 ?623次閱讀

    無人機(jī)主動(dòng)防御系統(tǒng)有哪些

    無人機(jī)主動(dòng)防御系統(tǒng)是一種用于保護(hù)無人機(jī)免受攻擊的系統(tǒng)。隨著無人機(jī)在軍事、民用和商業(yè)領(lǐng)域的廣泛應(yīng)用,無人機(jī)的安全問題也日益凸顯。本文將介紹無人機(jī)主動(dòng)防御系統(tǒng)的各個(gè)方面。 無人機(jī)主動(dòng)防御
    的頭像 發(fā)表于 07-08 09:50 ?1098次閱讀

    無人機(jī)主動(dòng)防御系統(tǒng)安裝需要備案嗎

    無人機(jī)主動(dòng)防御系統(tǒng)是一種用于保護(hù)無人機(jī)免受攻擊的系統(tǒng),它可以有效地防止無人機(jī)被黑客攻擊、干擾、劫持等。在安裝無人機(jī)主動(dòng)防御系統(tǒng)時(shí),需要考慮以下幾個(gè)方面: 法律法規(guī)要求 在安裝無人機(jī)主動(dòng)
    的頭像 發(fā)表于 07-08 09:46 ?411次閱讀

    常見網(wǎng)絡(luò)攻擊防御方法

    反射型是將腳本代碼放在URL中,當(dāng)用戶點(diǎn)擊URL,該請(qǐng)求就會(huì)通過服務(wù)器解析返回給瀏覽器,在返回的響應(yīng)內(nèi)容中出現(xiàn)攻擊者的XSS代碼,瀏覽器執(zhí)行時(shí)就會(huì)中招了。
    的頭像 發(fā)表于 03-28 10:57 ?563次閱讀

    DDoS攻擊的多種方式

    方的,這類攻擊稱為分布式拒絕服務(wù)攻擊,其中的攻擊者可以有多個(gè)。DDOS攻擊有以下幾種方式。 SYN Flood
    的頭像 發(fā)表于 01-12 16:17 ?628次閱讀

    【虹科分享】一種動(dòng)態(tài)防御策略——移動(dòng)目標(biāo)防御(MTD)

    文章主要探討了網(wǎng)絡(luò)安全領(lǐng)域中的動(dòng)態(tài)防御策略,特別是針對(duì)規(guī)避性威脅的“移動(dòng)目標(biāo)防御”(MTD)技術(shù)。本文分析了攻擊者常用的規(guī)避技術(shù),并探討了如何利用移動(dòng)目標(biāo)防御技術(shù)來對(duì)抗這些威脅。傳統(tǒng)的
    的頭像 發(fā)表于 01-04 14:07 ?571次閱讀
    【虹科分享】一種動(dòng)態(tài)<b class='flag-5'>防御</b>策略——移動(dòng)目標(biāo)<b class='flag-5'>防御</b>(MTD)

    一種動(dòng)態(tài)防御策略——移動(dòng)目標(biāo)防御(MTD)

    網(wǎng)絡(luò)攻擊的技術(shù)變得愈發(fā)難測(cè),網(wǎng)絡(luò)攻擊者用多態(tài)性、混淆、加密和自我修改喬裝他們的惡意軟件,以此逃避防御性的檢測(cè),于是移動(dòng)目標(biāo)防御(MTD)技術(shù)出現(xiàn)了,通過動(dòng)態(tài)地改變
    的頭像 發(fā)表于 01-04 08:04 ?1495次閱讀
    一種動(dòng)態(tài)<b class='flag-5'>防御</b>策略——移動(dòng)目標(biāo)<b class='flag-5'>防御</b>(MTD)

    CSRF攻擊的基本原理 如何防御CSRF攻擊

    在當(dāng)今數(shù)字化時(shí)代,隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,網(wǎng)絡(luò)安全問題變得日益突出,網(wǎng)絡(luò)攻擊手段也日益猖獗。在眾多網(wǎng)絡(luò)安全攻擊手段中,CSRF(跨站請(qǐng)求偽造)攻擊是一種被廣泛認(rèn)為具有潛在危害且常見的攻擊
    的頭像 發(fā)表于 01-02 10:12 ?2755次閱讀
    CSRF<b class='flag-5'>攻擊</b>的基本原理 如何<b class='flag-5'>防御</b>CSRF<b class='flag-5'>攻擊</b>
    主站蜘蛛池模板: 精品熟女少妇AV久久免费A片| 亚洲精品无码久久久久A片空 | 99热都是精品| 俄罗斯少女人体| 狠狠操天天操夜夜操| 免费在线观看的毛片| 午夜福利理论片高清在线| 中文在线观看永久免费| 俄罗斯1819y0u| 黑人娇小BBW| 清晨紧湿爱运动h高h| 亚洲精品97福利在线| 99久久久国产精品免费调教| 国产啪视频在线播放观看| 乱淫67194| 性欧美金发洋妞xxxxbbbb| 259luxu高跟黑色丝袜系列| 国产精品久久vr专区| 伦理电影2499伦理片| 忘忧草在线影院WWW日本二| 18 japanese宾馆直播| 国产极品白嫩超清在线观看| 久久亚洲人成国产精品| 水蜜桃亚洲一二三四在线| 中文字幕日本一区| 国产传媒在线播放| 免费在线观看国产| 亚洲人成在线播放无码| 成人片在线播放| 久久亚洲伊人中字综合精品| 无人区日本电影在线观看| 99久久综合精品免费| 含羞草最新版本| 日韩一区二区三区免费体验| 中文字幕无码亚洲视频| 国产学生在线播放精品视频| 起碰免费公开97在线视频| 在线免费视频国产| 国产亚洲精品久久久久久禁果TV | 日本高清天码一区在线播放| 一线高清视频在线播放|