統(tǒng)計(jì)每一個(gè)tcp和udp連接的IP地址和連接數(shù)
做系統(tǒng)運(yùn)維的朋友們肯定會(huì)經(jīng)常遇到DDoS攻擊的情況,,說實(shí)話,,對(duì)於這種攻擊很令人無奈,上昂貴的硬件防護(hù)設(shè)備不可能,,即使上了效果也不是100%的好,,一般來說誤殺率能低於20%就不錯(cuò)了,更多情況是各種新型的攻擊數(shù)據(jù)包導(dǎo)出不窮,,大多數(shù)乾脆就是正常的HTTP連接,,讓服務(wù)器無法拒絕。而使用開源免費(fèi)的防護(hù)軟件更是不如人意,。在這種情況下只能自己來統(tǒng)計(jì)每一個(gè)連接進(jìn)來的IP各自建立了多少個(gè)連接來判斷它是不是惡意連接,。但這也有一個(gè)問題,假如攻擊者同時(shí)控制了幾百個(gè)甚至上千個(gè)肉機(jī),,那麼他就可以做到每個(gè)攻擊IP只建立較少的連接數(shù)即可達(dá)到攻擊的目的,,對(duì)於防護(hù)方來說每個(gè)IP的連接數(shù)都在正常範(fàn)圍以內(nèi)。因此針對(duì)這種情況,,只能輔以查看IP地址歸屬地來人為判斷是否攻擊IP。 1,、利用netstat查看每一個(gè)連接進(jìn)來的TCP或UDP連接,,並計(jì)算每個(gè)IP的連接數(shù): netstat -ntu |grep -E "tcp|udp" |awk '{print $5}' |grep -E "^[1-9]" | cut -d: -f1 | sort | uniq -c | sort -n 我運(yùn)行的結(jié)果如下: 1 113.25.26.49 1 118.117.25.71 1 123.126.50.74 1 14.110.35.95 1 192.168.11.7 1 61.135.249.220 6 124.90.162.189 10 127.0.1.1 第一列是連接數(shù),第二列是連接IP 對(duì)於ipv6地址使用以下命令統(tǒng)計(jì): netstat -ntu |grep -E "tcp|udp" |awk '{print $5}' |grep -E "^.*\:.*\:.*\:" | cut -d: -f1-4 | sort | uniq -c | sort -n 我統(tǒng)計(jì)的結(jié)果如下: 1 ::ffff:xxx.xxx.xxx.xxx 2 ::ffff:119.97.220.90 2 ::ffff:127.0.0.1 9 ::ffff:121.52.210.134 10 ::ffff:127.0.1.1 到底每個(gè)IP的連接數(shù)是多少個(gè)才被認(rèn)為有DDOS攻擊嫌疑呢,?這就要靠自己判斷了,,比上面的結(jié)果可以看到,我們的系統(tǒng)很健康,,沒有DDoS攻擊的跡象,,我曾經(jīng)發(fā)現(xiàn)過100多個(gè)連接的IP,,我認(rèn)為它就是一個(gè)攻擊連接,我的定位是超過30個(gè)連接就要關(guān)注了,,超過60個(gè)連接就要準(zhǔn)備掐斷它,,超過100個(gè)連接就直接drop,同時(shí)禁止它連接,。 2,、利用tcpdump抓包工具來偵測(cè)每IP的連接數(shù): tcpdump -c 10000 -i eth0 -n dst port 80 > /tmp/ddos_ip cat /tmp/ddos_ip|awk '{print $3}'|cut -d. -f1-4|uniq -c | sort -n 2 203.208.60.206 3 203.208.60.206 5 xxx.xxx.xxx.xxx 解釋一下,-c 10000意思是抓取10000個(gè)數(shù)據(jù)包,;-i eth0意思是抓取從網(wǎng)絡(luò)接口eth0進(jìn)來的數(shù)據(jù)包,;-n 意思是不把網(wǎng)絡(luò)地址轉(zhuǎn)換成名字;dst port 80 意思是指定抓取目的端口是80的數(shù)據(jù)包,;> /tmp/ddos_ip 意思是把抓取結(jié)果輸出到文件/tmp/ddos_ip中,。 第二條命令是查看輸出文件內(nèi)容,同時(shí)統(tǒng)計(jì)每個(gè)訪問IP的連接數(shù),,由於我只指定抓取了10個(gè)包,,因此統(tǒng)計(jì)結(jié)果一共只有2+3+5=10個(gè)包。 我們還可以用一條命令來達(dá)以統(tǒng)計(jì)的目的: tcpdump -c 10 -i eth0 -n dst port 80|awk '{print $3}'|cut -d. -f1-4|uniq -c | sort -n 注意如果80端口的連接訪問很稀疏的話,,這條命令運(yùn)行起來很得費(fèi)些時(shí)間,,因?yàn)樗プ?0000個(gè)滿足條件的數(shù)據(jù)包才會(huì)停止,因此要耐心等待,。一般網(wǎng)站訪問正常的情況下就不要使用這個(gè)方法了,。 用tcpdump查看連接到tcp 80端口的連接IP要比netstat詳細(xì)得多,也準(zhǔn)確得多,。正常情況下我一般只用netstat看一下,,非正常情況我才會(huì)使用tcpdump。 |
|