首页 > 网络教程 > Linux系统下Nginx简单的防CC攻击
2014
09-02

Linux系统下Nginx简单的防CC攻击

Nginx 0.7开始提供了2个限制用户连接的模块:NginxHttpLimitZoneModule 和 NginxHttpLimitReqModule。
NginxHttpLimitZoneModule可以根据条件进行并发连接数控制。
NginxHttpLimitReqModule可以根据条件进行请求频率的控制。

  1. http {  
  2. limit_zone   my_zone  $binary_remote_addr  10m;  
  3. limit_req_zone  $binary_remote_addr  zone=my_req_zone:10m   rate=1r/s;  
  4. }  
  5. server {  
  6. …  
  7. location ~ ^/blog/(index|forumdisplay|viewthread).php$ {  
  8. limit_conn   myzone_bbs  3;  
  9. limit_req zone=bbs burst=2 nodelay;  
  10. …  
  11. }  

应用这条规则后,blog目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。
另外我们可以找个脚本来封攻击者的IP.访问者通过浏览器正常访问网站,与服务器建立的连接一般不会超过20个,我们可以通过脚本禁止连接数过大的IP访问
以下脚本通过netstat命令列举所有连接,将连接数最高的一个IP如果连接数超过150,则通过 iptables 阻止访问:
建立脚本

  1. vi stop.sh  
  1. #!/bin/sh  
  2. status=`netstat -na|awk ‘$5 ~ /[09]+:[09]+/ {print $5}’ |awk -F “:” — ‘{print $1}’ |sort -n|uniq -c |sort -n|tail -n 1`  
  3. NUM=`echo $status|awk ‘{print $1}’`  
  4. IP=`echo $status|awk ‘{print $2}’`  
  5. result=`echo “$NUM > 150” | bc`  
  6. if [ $result = 1 ]  
  7. then  
  8. echo IP:$IP is over $NUM, BAN IT!  
  9. /sbin/iptables -I INPUT -s $IP -j DROP  
  10. fi  

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

  1. */1 * * * * /root/stop.sh  
最后编辑:
作者:漱石
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复