Linux服务器下对SYN洪水攻击的诊断和阻挡
程序员文章站
2022-07-03 10:31:10
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
上一篇: python如何在循环引用中管理内存
下一篇: python如何为创建大量实例节省内存