14 October 2011

Linux下如何简单的防止CC攻击

分类:Linux VPS教程 by 阿川

很多朋友的网站经常遭到恶意攻击.今天给大家带来LNMP环境(如何配置参考:Centos下安装LNMP环境(Linux+Nginx+Mysql+php))如何简单防御CC攻击.
Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule和NginxHttpLimitReqModule。
NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。
NginxHttpLimitReqModule可以根据条件进行请求频率的控制。

http {
limit_zone   myzone  $binary_remote_addr  10m;
limit_req_zone $binary_remote_addr zone=bbs:10m rate=1r/s;
}
server {
...
location ~ ^/bbs/(index|forumdisplay|viewthread).php$ {
limit_conn   myzone  2;
limit_req zone=bbs burst=3 nodelay;
...
}

应用这条规则后,bbs目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。

另外我们可以找个脚本来封攻击者的IP.访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问
以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables阻止访问:

#!/bin/sh
status=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`
NUM=`echo $status|awk '{print $1}'`
IP=`echo $status|awk '{print $2}'`
result=`echo "$NUM > 150" | bc`
if [ $result = 1 ]
then
echo IP:$IP is over $NUM, BAN IT!
/sbin/iptables -I INPUT -s $IP -j DROP
fi

运行crontab -e,将上述脚本添加到crontab每分钟自动运行:

* * * * * /root/xxxx.sh

收缩
  • QQ咨询

  • 在线咨询
  • 联系我们
  • 联系我们
  • 技术支持
  • 联系我们
  • 联系我们