这几天发现访问博客速度很慢, 几乎不能访问, 连接WEB服务器发现大量的SYN_RECV连接状态存在, 怀疑是中了SYN Flood攻击, 于是立即启用SYN Cookie, 虽然该方法比较被动, 治标不治本, 也加大了服务器的负担, 但是可以减缓拒绝攻击. 并启用了Apache的mod_evasive模块来防御WWW服务器的DDOS攻击. 若配合iptables、硬件防火墙等防火墙设备使用, 效果会更好.
1. 启用SYN cookies
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
2. 加大最大半连接数
# sysctl -w net.ipv4.tcp_max_syn_backlog = 2048
3. 缩短超时时间
# sysctl -w net.ipv4.tcp_synack_retries = 1
该参数定义重传次数, 默认为5号, 总超时时间为3分钟.
4. Apache启用mod_evasive模块
下载地址:http://www.zdziarski.com/projects/mod_evasive
安装
# /apche path/apxs -i -a -c mod_evasive20.c
配置httpd.conf
LoadModule evasive20_module lib/httpd/modules/mod_evasive20.so
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>
重启APACHE服务
至此, DDOS攻击被减缓, 博客访问正常.
备注:
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从上图可看到,服务器接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。