TCP SYNCookie機(jī)制

本篇文章在于淺嘗輒止的分析TCP的SYNCookie機(jī)制

一個連接的建立需要進(jìn)行TCP三次握手踢步,如下圖所示


三次握手

簡單來說侮攀,服務(wù)端收到客戶端的SYN包之后未巫,將連接放到半連接隊列中扫尺, 當(dāng)服務(wù)端再次收到客戶端的ACK包之后约急,會將連接從半連接隊列移到全連接隊列中零远, 這樣服務(wù)端的程序調(diào)用accept()方法的時候,就可以從全連接隊列中獲取到連接了.

這里要提到SYN Flood厌蔽, 如果一個客戶端在短時間內(nèi)發(fā)送大量的SYN包給服務(wù)端牵辣,而且不發(fā)送ACK包給服務(wù)端, 這樣會導(dǎo)致服務(wù)端的半連接隊列很快就被填滿了奴饮, 間接導(dǎo)致其他客戶端無法與服務(wù)端完成三次握手.

接下來纬向,通過實(shí)驗?zāi)M這樣的場景,以及如何解決它.

【實(shí)驗】
一臺ubuntu-20.04機(jī)器作為服務(wù)端(IP=192.168.0.103)戴卜, 一臺Kali機(jī)器作為客戶端(IP=192.168.0.102)

首先逾条,需要修改一個服務(wù)端的配置文件(/etc/sysctl.conf),修改的文件內(nèi)容如下


/etc/sysctl.conf

如果sysctl.conf文件中沒有對應(yīng)的屬性值則自己手動添加

屬性值的含義如下
net.ipv4.tcp_syncookies = 0 表示不開啟SYNCookie機(jī)制
net.ipv4.tcp_max_syn_backlog = 5 設(shè)置半連接隊列大小
net.core.somaxconn = 5 設(shè)置全連接隊列大小

這里只是將半連接隊列和全連接隊列設(shè)置的小了一些, 除此之外沒有其他特殊原因

接下來投剥,在服務(wù)端师脂,使用Python語言搭建一個簡單的Server程序,代碼如下

import socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('192.168.0.103',8082))
server.listen(5)
圖片.png

程序監(jiān)聽在8082端口

然后在客戶端機(jī)器上江锨,通過netwox命令吃警,向服務(wù)端持續(xù)發(fā)送SYN包,模擬SYN Flood


發(fā)起SYN Flood攻擊

以上命令會向192.168.0.103機(jī)器的8082端口發(fā)送SYN包

通過 apt install netwox 安裝netwox命令

接下來泳桦, 我們看一下服務(wù)端的一些現(xiàn)象

在服務(wù)端執(zhí)行 netstat -s | grep LISTEN 命令汤徽,可以查看半連接隊列的情況

半連接隊列已經(jīng)滿了

可以發(fā)現(xiàn),被丟棄的SYN包的數(shù)量一直在增長. 因為客戶端一直在向服務(wù)端發(fā)送SYN包灸撰, 當(dāng)半連接隊列滿了之后谒府,后面的SYN包只能被丟棄

在服務(wù)端執(zhí)行 sudo tcpdump -nn -i enp0s8 port 8082 命令,如下圖

圖片.png

192.168.0.103屬于enp0s8網(wǎng)卡

可以發(fā)現(xiàn)浮毯, 客戶端一直發(fā)送SYN包給服務(wù)端

而且通過查看系統(tǒng)日志完疫,比如使用dmesg命令或者查看 /var/log/kern.log文件,能夠發(fā)現(xiàn)如下一行信息

系統(tǒng)日志

TCP: request_sock_TCP: Possible SYN flooding on port 8082. Dropping request.
大概意思是债蓝,在8082端口可能發(fā)生了SYN Flood攻擊壳鹤, 請求被丟棄了.

假如我們有另外一個客戶端,向服務(wù)端正常的發(fā)送三次握手饰迹,比如執(zhí)行 telnet 192.168.0.103 8082 命令


圖片.png

它會一直處于連接中芳誓,直到超時失敗.

【總結(jié)】 由于半連接隊列滿了余舶,導(dǎo)致客戶端無法與服務(wù)端建立連接

針對上面的情況,TCP給出了一個解決思路锹淌,修改服務(wù)端的配置文件(/etc/sysctl.conf)匿值,將 net.ipv4.tcp_syncookies = 1 ,表示開啟SYNCookie機(jī)制赂摆, 其他的無需修改挟憔, 繼續(xù)上面的實(shí)驗

通過 netstat -s | grep LISTEN 命令,可以發(fā)現(xiàn)SYN包沒有再被丟棄 (被丟棄的數(shù)量沒有發(fā)生變化)

圖片.png

再次通過dmesg命令查看系統(tǒng)日志烟号,發(fā)現(xiàn)如下一行信息

系統(tǒng)日志

TCP: request_sock_TCP: Possible SYN flooding on port 8082. Sending cookies.
大概意思是绊谭,在8082端口可能發(fā)生了SYN Flood攻擊, 發(fā)送了cookies.

是因為在服務(wù)端開啟了SYNCookie機(jī)制汪拥, 即便半連接隊列滿了达传, 通過Cookie機(jī)制,依然可以保證讓客戶端連接到服務(wù)端.

這個時候通過另外一個客戶端執(zhí)行 telnet 192.168.0.103 8082 命令喷楣,是可以正常連接到服務(wù)端的趟大,如下圖

成功連接到服務(wù)端

【總結(jié)】開啟TCP的SYN Cookie機(jī)制,即便半連接隊列滿了铣焊,客戶端也可以成功與服務(wù)端建立連接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市罕伯,隨后出現(xiàn)的幾起案子曲伊,更是在濱河造成了極大的恐慌,老刑警劉巖追他,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坟募,死亡現(xiàn)場離奇詭異,居然都是意外死亡邑狸,警方通過查閱死者的電腦和手機(jī)懈糯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來单雾,“玉大人赚哗,你說我怎么就攤上這事」瓒眩” “怎么了屿储?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渐逃。 經(jīng)常有香客問我够掠,道長,這世上最難降的妖魔是什么茄菊? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任疯潭,我火速辦了婚禮赊堪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竖哩。我一直安慰自己哭廉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布期丰。 她就那樣靜靜地躺著群叶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝荡。 梳的紋絲不亂的頭發(fā)上街立,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音埠通,去河邊找鬼赎离。 笑死,一個胖子當(dāng)著我的面吹牛端辱,可吹牛的內(nèi)容都是我干的梁剔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼舞蔽,長吁一口氣:“原來是場噩夢啊……” “哼荣病!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渗柿,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤个盆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朵栖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颊亮,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年陨溅,在試婚紗的時候發(fā)現(xiàn)自己被綠了终惑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡门扇,死狀恐怖雹有,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悯嗓,我是刑警寧澤件舵,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站脯厨,受9級特大地震影響铅祸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一临梗、第九天 我趴在偏房一處隱蔽的房頂上張望涡扼。 院中可真熱鬧,春花似錦盟庞、人聲如沸吃沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽票彪。三九已至,卻和暖如春不狮,著一層夾襖步出監(jiān)牢的瞬間降铸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工摇零, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留推掸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓驻仅,卻偏偏與公主長得像谅畅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子噪服,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容