> CentOS > CentOS安全 >

centos防火墙中配置阻止80端口攻击的方法

当服务器受到大量的SYN_RECV攻击,80端号占死,网站打不开时,通过配置iptables防火墙,以及修改系统参考,以保证网站可以正常访问的方法。

问题描述:
centos服务器中,接收到大量的SYN_RECV数据包,80端号占死,网站打不开。

有硬件防火墙的话,这些小规模的数据包攻击,根本不是问题。

1,如果没有硬件防火墙,则可以按如下的方法解决之。
 

复制代码代码示例:
sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookies
sysctl -w net.ipv4.tcp_synack_retries=1 #降低syn重试次数
sysctl -w net.ipv4.tcp_syn_retries=1 #降低syn重试次数
sysctl -w net.ipv4.tcp_max_syn_backlog=6000 #最大半连接数
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0 #不接受重定向的icmp數據包
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=60
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.icmp_echo_ignore_all=1 #禁止ICMP
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 #ICMP禁止广播

2,限制单位时间内连接数
例如:
 

复制代码代码示例:
iptables -N syn-flood
iptables -A FORWARD -p tcp --syn -j syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -p tcp --syn -m limit --limit 3/s --limit-burst 1 -j ACCEP
iptables -A syn-flood -j DROP
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --syn -m state --state NEW -j DROP

3,另外,还可以考虑这样,更加牢固一些。
 

复制代码代码示例:
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEP

在流量不大时,此法可以暂时保证80端口的正常访问。

如果内核支持iptables,那么可以使用connlimit用, iptables设定部份,也可以使用:
 

复制代码代码示例:
iptables -I FORWARD -p tcp --syn -m connlimit --connlimit-above 5 -j DROP
 


 

复制代码代码示例:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT

对付SYN FLOOD的话,可以这样:
 

复制代码代码示例:
sysctl -w net.ipv4.tcp_syncookies=1        #启用使用syncookies
sysctl -w net.ipv4.tcp_synack_retries=1        #降低syn重试次数
 

其他IPTABLES的限制速度功能不能用来对付SYN FLOOD的(不能阻止拒绝服务,但是确实可以防止服务器CRASH)。

就介绍这些吧,在centos中适时运用iptables防火墙,以及做好相关系统参数的配置,以抵挡一些恶意的攻击。

(责任编辑:IT)