欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux服务器下对SYN洪水攻击的诊断和阻挡

程序员文章站 2022-03-29 14:48:27
Linux服务器下对SYN洪水攻击的诊断和阻挡这篇文章主要介绍了Linux服务器下对SYN洪水攻击的诊断和阻挡,需要的朋友可以参考下... 15-11-10...

1.简介
syn flood是当前最流行的dos(拒绝服务攻击)与ddos(分布式拒绝服务攻击)的方式之一,这是一种利用tcp协议缺陷,发送大量伪造的tcp连接请求,常用假冒的ip或ip号段发来海量的请求连接的第一个握手包(syn包),被攻击服务器回应第二个握手包(syn+ack包),因为对方是假冒ip,对方永远收不到包且不会回应第三个握手包。导致被攻击服务器保持大量syn_recv状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满tcp等待连接队列,资源耗尽(cpu满负荷或内存不足),让正常的业务请求连接不进来。

详细的原理,网上有很多介绍,应对办法也很多,但大部分没什么效果,这里介绍我们是如何诊断和应对的。

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

复制代码
代码如下:

# tail -f /var/log/messages
apr 18 11:21:56 web5 kernel: possible syn flooding on port 80. sending cookies.

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

复制代码
代码如下:

# netstat -n | awk '/^tcp/ {++s[$nf]} end {for(a in s) print a, s[a]}'
time_wait 16855
close_wait 21
syn_sent 99
fin_wait1 229
fin_wait2 113
established 8358
syn_recv 48965
closing 3
last_ack 313

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

复制代码
代码如下:

# netstat -n | awk '/^tcp/ {++s[$nf]} end {for(a in s) print a, s[a]}'
time_wait 42349
close_wait 1
syn_sent 4
fin_wait1 298
fin_wait2 33
established 12775
syn_recv 259
closing 6
last_ack 432

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

3.优化linux阻挡syn洪水攻击
如果在linux服务器下遭受syn洪水攻击,可以进行如下一些设置:

复制代码
代码如下:

#缩短syn- timeout时间:
iptables -a forward -p tcp –syn -m limit –limit 1/s -j accept
iptables -a input -i eth0 -m limit –limit 1/sec –limit-burst 5 -j accept
#每秒 最多3个 syn 封包 进入 表达为 :
iptables -n syn-flood
iptables -a input -p tcp –syn -j syn-flood
iptables -a syn-flood -p tcp –syn -m limit –limit 1/s –limit-burst 3 -j return
iptables -a syn-flood -j reject
#设置syncookies:
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=3072
sysctl -w net.ipv4.tcp_synack_retries=0
sysctl -w net.ipv4.tcp_syn_retries=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.forwarding=0
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
#防止ping:
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#拦截具体ip范围:
iptables -a input -s 10.0.0.0/8 -i eth0 -j drop
相关标签: Linux DDOS