做系统运维的朋友们肯定会经常遇到DDoS攻击的情况,说实话,对于这种攻击很令人无奈,上昂贵的硬件防护设备不可能,即使上了效果也不是100%的好,一般来说误杀率能低于20%就不错了,更多情况是各种新型的攻击数据包导出不穷,大多数乾脆就是正常的HTTP连接,让服务器无法拒绝。而使用开源免费的防护软件更是不如人意。在这种情况下只能自己来统计每一个连接进来的IP各自建立了多少个连接来判断它是不是恶意连接。但这也有一个问题,假如攻击者同时控制了几百个甚至上千个肉机,那麽他就可以做到每个攻击IP只建立较少的连接数即可达到攻击的目的,对于防护方来说每个IP的连接数都在正常范围以内。因此针对这种情况,只能辅以查看IP地址归属地来人为判断是否攻击IP。
1、利用netstat查看每一个连接进来的TCP或UDP连接,并计算每个IP的连接数:
我运行的结果如下:
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
第一列是连接数,第二列是连接IP
对于ipv6地址使用以下命令统计:
netstat -ntu |grep -E "tcp|udp" |awk '{print $5}' |grep -E "^.*:.*:.*:" | cut -d: -f1-4 | sort | uniq -c | sort -n
我统计的结果如下:
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
到底每个IP的连接数是多少个才被认为有DDOS攻击嫌疑呢?这就要靠自己判断了,比上面的结果可以看到,我们的系统很健康,没有DDoS攻击的迹象,我曾经发现过100多个连接的IP,我认为它就是一个攻击连接,我的定位是超过30个连接就要关注了,超过60个连接就要准备掐断它,超过100个连接就直接drop,同时禁止它连接。
2、利用tcpdump抓包工具来侦测每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个数据包;-i eth0意思是抓取从网络接口eth0进来的数据包;-n 意思是不把网络地址转换成名字;dst port 80 意思是指定抓取目的端口是80的数据包;> /tmp/ddos_ip 意思是把抓取结果输出到文件/tmp/ddos_ip中。
第二条命令是查看输出文件内容,同时统计每个访问IP的连接数,由于我只指定抓取了10个包,因此统计结果一共只有2+3+5=10个包。
我们还可以用一条命令来达以统计的目的:
注意如果80端口的连接访问很稀疏的话,这条命令运行起来很得费些时间,因为它要抓足10000个满足条件的数据包才会停止,因此要耐心等待。一般网站访问正常的情况下就不要使用这个方法了。
用tcpdump查看连接到tcp 80端口的连接IP要比netstat详细得多,也准确得多。正常情况下我一般只用netstat看一下,非正常情况我才会使用tcpdump。
没有评论