TCP洪水攻击SYN Flood的诊断和处理

发布时间:2023-07-05 05:10:47

SYNFlood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。关于TCP洪水攻击SYNFlood详细的原理,网上有很多介绍,应对办法也很多,但大部分没什么效果,这里介绍我们是如何诊断和应对的。

诊断

我们看到业务曲线大跌时,检查机器和DNS,发现只是对外的web机响应慢、CPU负载高、ssh登陆慢甚至有些机器登陆不上,检查系统syslog:

#tail-f/var/log/messages

Apr1811:21:56web5kernel:possibleSYNfloodingonport80.Sendingcookies.

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

#stat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'

TIME_WAIT16855

CLOSE_WAIT21

SYN_SENT99

FIN_WAIT1229

FIN_WAIT2113

ESTABLISHED8358

SYN_RECV48965

CLOSING3

LAST_ACK313

根据经验,正常时检查连接数如下:

#stat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'

TIME_WAIT42349

CLOSE_WAIT1

SYN_SENT4

FIN_WAIT1298

FIN_WAIT233

ESTABLISHED12775

SYN_RECV259

CLOSING6

LAST_ACK432

以上就是TCP洪水攻击的两大特征。执行stat-na>指定文件,保留罪证。

应急处理

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

#stat-na|grepSYN_RECV|more

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

#iptables-AINPUT-s 173.0.0.0/8 -ptcp –dport80-jDROP

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

使用F5挡攻击

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

?

1、连接数比平时多了500万,攻击停止后恢复。

2、修改F5上我们业务的VS模式后,F5的CPU消耗比平时多7%,攻击停止后恢复。

3、用F5挡效果明显,后来因攻击无效后,用户很少来攻击了,毕竟攻击也是有成本的。

调整系统参数挡攻击

没有F5这种高级且昂贵的设备怎么办?我测试过以下参数组合能明显减小影响,准备以后不用F5抗攻击。

第一个参数tcp_synack_retries=0是关键,表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,不进行重试,加快回收“半连接”,不要耗光资源。

不修改这个参数,模拟攻击,10秒后被攻击的80端口即无法服务,机器难以ssh登录;用命令stat-na|grepSYN_RECV检测“半连接”hold住180秒;

修改这个参数为0,再模拟攻击,持续10分钟后被攻击的80端口都可以服务,响应稍慢些而已,只是ssh有时也登录不上;检测“半连接”只hold住3秒即释放掉。

修改这个参数为0的副作用:网络状况很差时,如果对方没收到第二个握手包,可能连接服务器失败,但对于一般网站,用户刷新一次页面即可。这些可以在高峰期或网络状况不好时tcpdump抓包验证下。

根据以前的抓包经验,这种情况很少,但为了保险起见,可以只在被tcp洪水攻击时临时启用这个参数。

tcp_synack_retries默认为5,表示重发5次,每次等待30~40秒,即“半连接”默认hold住大约180秒。详细解释:

Thetcp_synack_retriessettingtellsthekernelhowmanytimestoretransmittheSYN,ACKreplyto

anSYNrequest.Inotherwords,thistellsthesystemhowmanytimestotrytoestablishapassive

TCPconnectionthatwasstartedbyanotherhost.

Thisvariabletakesanintegervalue,butshouldundernocircumstancesbelargerthan255forthe

samereasonsasforthetcp_syn_retriesvariable.Eachretransmissionwilltakeaproximately30-40

seconds.Thedefaultvalueofthetcp_synack_retriesvariableis5,andhencethedefaulttimeout

ofpassiveTCPconnectionsisaproximately180seconds.

之所以可以把tcp_synack_retries改为0,因为客户端还有tcp_syn_retries参数,默认是5,即使服务器端没有重发SYN+ACK包,客户端也会重发SYN握手包。详细解释:

Thetcp_syn_retriesvariabletellsthekernelhowmanytimestotrytoretransmittheinitialSYN

packetforanactiveTCPconnectionattempt.

Thisvariabletakesanintegervalue,butshouldnotbesethigherthan255sinceeach

retransmissionwillconsumehugeamountsoftimeaswellassomeamountsofbandwidth.Each

connectionretransmissiontakesaproximately30-40seconds.Thedefaultsettingis5,which

wouldleadtoanaproximateof180secondsdelaybeforetheconnectiontimesout.

第二个参数.ipv4.tcp_max_syn_backlog=200000也重要,具体多少数值受限于内存。

以下配置,第一段参数是最重要的,第二段参数是辅助的,其余参数是其他作用的:

#vi/etc/sysctl.conf

使配置生效:

#sysctl-p

注意,以下参数面对外网时,不要打开。因为副作用很明显,具体原因请google,如果已打开请显式改为0,然后执行sysctl-p关闭。因为经过试验,大量TIME_WAIT状态的连接对系统没太大影响:

为了处理大量连接,还需改大另一个参数:

#vi/etc/security/limits.conf

在底下添加一行表示允许每个用户都最大可打开409600个文件句柄(包括连接):

*        –   nofile     409600

参考资料

文件句柄不要超过系统限制/usr/include/linux/fs.h,相关链接:blog.yufeng.info/archives/1380

#defineNR_OPEN(1024*1024)  

看了TCP洪水攻击SYN Flood的诊断和处理还看了:
  • Syn Flood攻击是利用TCP/IP协议的什么漏洞

     答:客户端通过发送在TCP报头中SYN标志置位的数据分段到服务端来请求建立连接。通常情况下,服务端会按照IP报头中的来源地址来返回SYN/ACK置位的数据包给客户端,客户端再返回ACK到服务端来完成一个完整的连接(Figure-1)。  ...

  • 如何处理ARP的攻击技巧

    导语:当你的电脑在遭受攻击的时候,会采取什么样的措施呢?以下是小编精心整理的有关电脑安全的知识,希望对大家有所帮助。很多网吧和企业网络不稳,无故掉线,经济蒙受了很大的损失。根据情况可以看出这是一种存在于网络中的一种普遍问题。出现此类问题的主...

  • 怎么处理ARP的攻击技巧

    导语:一起来学习一下如何处理ARP的攻击技巧。以下是小编精心整理的有关电脑技巧的知识,希望对大家有所帮助。很多网吧和企业网络不稳,无故掉线,经济蒙受了很大的损失。根据情况可以看出这是一种存在于网络中的一种普遍问题。出现此类问题的主要原因就是...

  • 公鸡和攻击

        大家都知道公鸡和攻击的读音是一模一样的,但是它们的意思却与众不同,第一个公鸡是指每天清晨打鸣的大公鸡,还可以做出美味的佳肴。第二个攻击意思是打击。下面就要说一个小故事。    有一天,我和妈妈回婆婆家,那时婆婆家里种的绿油油的青菜,...

  • arp断网攻击怎么办

    导语:ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。应该如何解决呢...