zoukankan      html  css  js  c++  java
  • 解决DDOS攻击生产案例

    根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP.

    当然各个公司的IP并发数各有不同,上面只是举例说明。

    因为我的Nginx的WEB日志每天进行切割处理,不然所有web日志都堆在一起,查看麻烦。

    系统状态

    1 [root@nginx shell]# cat /etc/redhat-release 
    2 CentOS release 6.7 (Final)
    3 [root@nginx shell]# uname -r
    4 2.6.32-573.el6.x86_64
    5 [root@nginx shell]# /application/nginx/sbin/nginx -v
    6 nginx version: nginx/1.10.3

    1、web日志切割脚本

    脚本如下,各位网友可以根据自己的需求进行更改。

    此脚本可以放在定时任务中执行,按照天数进行切割。

    #!/bin/bash
    
    #-------------CopyRight-------------  
    #   Name:Cut Ningx logs
    #   Version Number:1.1  
    #   Type:sh  
    #   Language:bash shell  
    #   Date:2018-05-16  
    #   Author:xubing
    #   QQ:442656067
    #   Email:eeexu123@163.com  
    #   Blog:https://www.cnblogs.com/eeexu123/
    
    
    #Nginx日志轮询切割备份
    IP=$(ifconfig eth0 | awk -F "[ :]+" 'NR==2 {print $4}')
    
    #cut every day nginx log
    cut(){
      [ -d "/application/nginx/logs" ]||{
         echo "Nginx logs is not exist."
         exit 1 
      }
    
      cd /application/nginx/logs
      /bin/mv www_access.log www_access_$(date +%F).log
      /application/nginx/sbin/nginx -s reload
    }
    
    #tar nginx log file to /backup
    backup(){
      [ -d "/backup/$IP" ]||{
         mkdir -p /backup/$IP
      }
    
      tar -zcf /backup/$IP/www_access_$(date +%F).log.tar.gz www_access_$(date +%F).log
    
      #rysnc /backup file to backup server
      rsync -avz /backup/$IP rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password  //推送到备份服务器上
    }
    
    #del before 7 day nginx log
    del(){
      find /application/nginx/logs -type f -name "*$(date +%F).log" -mtime +7 | xargs rm -f
      find /backup/$IP -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
    }
    
    main(){
      cut
      sleep 2
      backup
      sleep 2
      del
    }
    main

    2、DOS攻击防护脚本

    根据上述web日志进行PV统计。此脚本可以放入定时任务中。也可以在main函数中进行while循环

    #!/bin/bash
    
    #-------------CopyRight-------------  
    #   Name:defined DoS
    #   Version Number:1.1 
    #   Type:sh  
    #   Language:bash shell  
    #   Date:2018-05-16 
    #   Author:xubing
    #   QQ:442656067
    #   Email:eeexu123@163.com  
    #   Blog:https://www.cnblogs.com/eeexu123/
    
    ch_web_log(){
      awk '{print $1}' /application/nginx/logs/www_access_$(date +%F).log|sort|uniq -c|sort -rn -k1>/tmp/ip.log  //将统计的IP访问次数放到ip.log文件中
    
      while read line
      do
        PV=`echo $line|awk '{print $1}'`    //IP访问次数
        IP=`echo $line|awk '{print $2}'`
        if [ $PV -ge 100 -a `iptables -nL|grep "$IP"|wc -l` -lt 1 ];then   //将PV大于100的IP,并且防火墙上并没有封堵此IP。不然防火墙会重复封堵IP
           iptables -I INPUT -s $IP -j DROP     //防火墙封堵
           echo "$IP" >>/tmp/`date +%F`_ip.log  //将封堵的IP放到此文件中
           echo "The DROP ip is $IP"
        fi
      done</tmp/ip.log
    }
    
    #删除被防火墙封堵的IP del(){ exec
    </tmp/$(date +%F -d '1day ago')_ip.log while read line do iptables -D INPUT -s $line -j DROP done } main(){ ch_web_log sleep 2 del } main
  • 相关阅读:
    AjaxEvent、AjaxMethod和Listeners的区别
    chm 文档突然打不开了
    ComboBox实现联动时所遇问题,待解!
    Silverlight 3 中使用WCF上传文件 (简单进度条展示)
    Eclipse 使用ApacheAnt 小记
    ApacheAnt 基础知识
    EClipse + Jdk + ApacheAnt + jetty + GWT + MySQL(Navicat)
    限制文本框输入N个字符的使用
    JAVA编程经验汇总 (载)
    Visual Studio 2010: Addin 的目录设置及其项目模板位置
  • 原文地址:https://www.cnblogs.com/eeexu123/p/9045031.html
Copyright © 2011-2022 走看看