Always been imitated
Never surpassed

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状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据
如果用户与服务器发起连接请求只进行到第二次握手而不再响应服务器,服务器就会不停地等待用户的确认,如果过多这样的连接就会把服务器端的连接队列占满就会导致正常的用户无法建立连接。

所以我们直接从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是一个开关,是否打开SYN Cookie 功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN 的重试连接次数,将默认的参数减小来控制SYN连接次数的尽量少。

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

[root@web ~]# more /etc/rc.d/rc.local
#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
ulimit -HSn 65535
/usr/local/apache2/bin/apachectl start
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3

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

#sysctl -w net.ipv4.tcp_max_syn_backlog=2048
#sysctl -w net.ipv4.tcp_syncookies=1
#sysctl -w net.ipv4.tcp_synack_retries=3
#sysctl -w net.ipv4.tcp_syn_retries=3

iptables相关设置:

iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

–limit 1/s 限制syn并发数每秒1次

防端口扫描

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

死亡之ping

iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables-save >/etc/sysconfig/iptables

进行查看,#iptables -L

限制单IP并发数

使用iptables限制单个地址的并发连接数量:

iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT

5、限制C类子网并发数

使用iptables限制单个c类子网的并发链接数量:

iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 24 -j REJECT

6、限制单位时间内连接数

iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --set
iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --update --seconds 60 --hitcount 30 -j DROP

设置如下:

7、修改modprobe.conf

为了取得更好的效果,需要修改/etc/modprobe.conf

options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60

作用:记录10000个地址,每个地址60个包,ip_list_tot最大为8100,超过这个数值会导致iptables错误

8、限制单个地址最大连接数

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j D

通过上述这些设置,可以缓解SYN攻击带来的影响,但如果遭到几百几千G的T级流量洪水攻击,那只能选择像墨者安全那样的商业级的防DDOS服务了。墨者盾高防可以隐藏服务器真实IP,利用新的WAF算法过滤技术,清除DDOS异常流量,保障服务器正常运行。

赞(0)
@请尊重原创,未经允许不得转载:军S小站 » SYN简单防范措施

抢沙发

评论前必须登录!

 

智慧源于勤奋,伟大出自平凡

联系我们

© 2019 军S小站   ©备案号: 蜀ICP备17043886号-2    网站地图   友情链接