SYN FLOOD 相关 原文

原理

利用TCP的缺陷,发送大量的伪造的TCP链接请求,常用假冒的ip发送第一个握手包,服务器回应后,收不到第三个握手,服务器保持大量的SYN_RECV的半链接。并且重试5次回应,晒满TCP链接。

模拟工具

https://github.com/EmreOvunc/Python-SYN-Flood-Attack-Tool/blob/master/SYN-Flood.py

http://man.linuxde.net/hping3

诊断

当业务曲线大跌时,检查机器和DNS,web机器响应慢,cpu负载高,ssh登录缓慢。

检查log tail -f /var/log/messages

检查连接数增多,并且SYN_RECV 连接特别多:

netstat -n awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

http://0daysecurity.com/articles/hping3_examples.html

netstat -na>指定文件

应急处理

根据netstat查看到的对方IP特征:

netstat -na |grep SYN_RECV|more 利用iptables临时封掉最大嫌疑攻击的IP或IP号段,例如对方假冒173...号段来攻击,短期禁用173...这个大号段(要确认小心不要封掉自己的本地IP了!)

iptables -A INPUT -s 173.0.0.0/8 -p tcp -dport 80 -j DROP

再分析刚才保留的罪证,分析业务,用iptables解封正常173...*号段内正常的ip和子网段。这样应急处理很容易误伤,甚至可能因为封错了导致ssh登陆不了服务器,并不是理想方式。

F5阻挡

应急处理毕竟太被动,因为本机房的F5比较空闲,运维利用F5来挡攻击,采用方式:让客户端先和F5三次握手,连接建立之后F5才转发到后端业务服务器。后来被攻击时F5上看到的现象:

调整参数