CentOS中文网

CentOS防SYN攻击

CentOS中文网 https://www.centos.net.cn 2014-11-21 02:16 出处:网络 编辑:@iCMS
今天早上一到公司登录公司官网的时候感觉挺慢,登录服务器查看官网访问情况:

今天早上一到公司登录公司官网的时候感觉挺慢,登录服务器查看官网访问情况:

[root@web~]#netstat-anp|awk'{print$6}'|sort|uniq-c|sort-rn

172ESTABLISHED

59CONNECTED

589SYN_RECV

15STREAM

SYN居然这么高,继续追查是那些ip发出的SYN:

[root@tweb~]#netstat-an|grepSYN|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|more

570x.x.x.x

(ip就不写出了,是山东枣庄联通的一个ip),只是这一个ip就发出了这么多的syn请求连接,本来我们web服务器的并发数不是很高,这样一来正常的用户请求得不到相应,页面无法打开。因为硬件防火墙归集团IT部管理,我没有权限,所以只能在本地服务器上做些措施对SYN攻击进行部分减缓。

首先说一下SYN的攻击原理:

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

CentOS防SYN攻击

如果用户与服务器发起连接请求只进行到第二次握手而不再响应服务器,服务器就会不停地等待用户的确认,如果过多这样的连接就会把服务器端的连接队列占满就会导致正常的用户无法建立连接。所以我们直接从SYN的连接上进行如下改动:

查看linux默认的syn配置:

[root@web~]#sysctl-a|grep_syn

net.ipv4.tcp_max_syn_backlog=1024

net.ipv4.tcp_syncookies=1

net.ipv4.tcp_synack_retries=5

net.ipv4.tcp_syn_retries=5

tcp_max_syn_backlog是SYN队列的长度,加大SYN队列长度可以容纳更多等待连接的网络连接数。tcp_syncookies是一个开关,是否打开SYNCookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试连接次数,将默认的参数减小来控制SYN连接次数的尽量少。

以下是我修改后的参数,可以根据自己服务器的实际情况进行修改:

[root@web~]#more/etc/rc.d/rc.local

#!/bin/sh

#Thisscriptwillbeexecuted*after*alltheotherinitscripts.

#Youcanputyourowninitializationstuffinhereifyoudon't

#wanttodothefullSysVstyleinitstuff.

touch/var/lock/subsys/local

ulimit-HSn65535

/usr/local/apache2/bin/apachectlstart

#####

sysctl-wnet.ipv4.tcp_max_syn_backlog=2048

sysctl-wnet.ipv4.tcp_syncookies=1

sysctl-wnet.ipv4.tcp_synack_retries=3

sysctl-wnet.ipv4.tcp_syn_retries=3

为了不重启服务器而使配置立即生效,可以执行

#sysctl-wnet.ipv4.tcp_max_syn_backlog=2048

#sysctl-wnet.ipv4.tcp_syncookies=1

#sysctl-wnet.ipv4.tcp_synack_retries=3

#sysctl-wnet.ipv4.tcp_syn_retries=3

也有的人喜欢用访问控制列表来防止SYN的攻击,在一定程度上减缓了syn的攻击:

Syn洪水攻击

#iptables-AINPUT-ptcp--syn-mlimit--limit1/s-jACCEPT

--limit1/s限制syn并发数每秒1次

防端口扫描

#iptables-AFORWARD-ptcp--tcp-flagsSYN,ACK,FIN,RSTRST-mlimit--limit1/s-jACCEPT

死亡之ping

#iptables-AFORWARD-picmp--icmp-typeecho-request-mlimit--limit1/s-jACCEPT

#>iptables-save>/etc/sysconfig/iptables

进行查看,#iptables-L

ACCEPTtcp--anywhereanywheretcpflags:FIN,SYN,RST,ACK/SYNlimit:avg1/secburst5

ACCEPTtcp--anywhereanywheretcpflags:FIN,SYN,RST,ACK/RSTlimit:avg1/secburst5

ACCEPTicmp--anywhereanywhereicmpecho-requestlimit:avg1/secburst5

再次进行查看syn连接:

[root@web~]#netstat-an|grepSYN|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-nr|more

2010.92.10.220

1125.43.36.199

明显SYN连接数已经下来了。

0

精彩评论

暂无评论...
验证码 换一张
取 消