首页 » VPS 知识 » 浏览内容

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


2012-11-16 19:04:01 1,520 0 发表评论 字体: 作者:C.K.

体验版 88 元,个人版 128 元,多用户版 288元个人版160元升级到多用户版。

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

http {
  • limit_zone   my_zone  $binary_remote_addr  10m;
  • limit_req_zone  $binary_remote_addr  zone=my_req_zone:10m   rate=1r/s;
  • }
  • server {
  • ...
  • location ~ ^/blog/(index|forumdisplay|viewthread).php$ {
  • limit_conn   myzone_bbs  3;
  • limit_req zone=bbs burst=2 nodelay;
  • ...
  • }
  • 应用这条规则后,blog目录下的index.php、forumdisplay.php和viewthread.php这些页面同一个IP只许建立3个连接,并且每秒只能有1个请求(突发请求可以达到2个)。

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

    vi stop.sh
  • #!/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每分钟自动运行:

    */1 * * * * /root/stop.sh

      网站统计 Statistics

      • 创建时间: 2005年1月3日 距今4762 天
      • 日志总数: 2461
      • 评论总数: 630
      • 标签总数: 654
      • 链接总数: 273
      • 最后更新: 2017-7-1 18:16:33
      • 您是本站第 13195894 位访客

      广告区 Guǎng Gào