zoukankan      html  css  js  c++  java
  • ip防刷脚本

    #!/bin/sh
    #防刷脚本
    
    #env
        ACCESS_PATH=/home/wwwlogs
        ACCESS_LOG=y.log
        IPTABLES_TOP_LOG=iptables_top.log
        DROP_LOG=droplist.log
        HISTORY_LOG=history.log
    #ip白名单
        noip=`cat noip.list`
    #防刷阈值
        limitnum=500
    #统计请求日志
        while true
            do
            awk '{print$1}' ${ACCESS_PATH}/${ACCESS_LOG} 
            | egrep -vi  "${noip}" 
            | sort 
            | uniq -c 
            | sort -rn 
            | head -20 
            >${ACCESS_PATH}/${IPTABLES_TOP_LOG}
     
    #判断是否达到阈值
        exec<${ACCESS_PATH}/${IPTABLES_TOP_LOG}
        while read line
            do
            count=$(echo $line | awk '{print$1}')
            ip=$(echo $line |awk '{print$2}')
            [ "$count" -gt "$limitnum" ] && {
            iptables -I INPUT -s $ip -j DROP;
            echo -e " $line is droppedc">>${ACCESS_PATH}/${DROP_LOG}
            }
            done
     #发送告警
        sendnum=`cat ${ACCESS_PATH}/${DROP_LOG}|wc -L`
        [ "$sendnum" -gt "0" ] && {
        content="报警:$(hostname) $(date +%X) $(cat ${ACCESS_PATH}/${DROP_LOG}) 
        以上IP访问次数频繁,单IP 1分钟超过阈值${limitnum}请注意查看"
        python /server/scripts/iptables/sms.py 15900009999 "${content}"
        cat ${ACCESS_PATH}/droplist.log >>${ACCESS_PATH}/${HISTORY_LOG}
        >${ACCESS_PATH}/${DROP_LOG}|
        }
    #清除1分钟内数据,准备下一次新数据
     
        >${ACCESS_PATH}/${IPTABLES_TOP_LOG}
        sleep 60
        done
    
    #!/bin/sh
    #防刷脚本
    
    #env
        ACCESS_PATH=/home/wwwlogs
        ACCESS_LOG=y.log
        IPTABLES_TOP_LOG=iptables_top.log
        DROP_LOG=droplist.log
    #防刷阈值
        limitnum=500
    #统计请求日志
        while true
            do
            awk '{print$1}' ${ACCESS_PATH}/${ACCESS_LOG} 
            | sort 
            | uniq -c 
            | sort -rn 
            | head -20 
            >${ACCESS_PATH}/${IPTABLES_TOP_LOG}
     
    #判断是否达到阈值
        exec<${ACCESS_PATH}/${IPTABLES_TOP_LOG}
        while read line
            do
            count=$(echo $line | awk '{print$1}')
            ip=$(echo $line |awk '{print$2}')
            [ "$count" -gt "$limitnum" ] && {
            iptables -I INPUT -s $ip -j DROP;
            echo -e " $line is droppedc">>${ACCESS_PATH}/${DROP_LOG}
            }
            done
     
    #清除1分钟内数据,准备下一次新数据
     
        >${ACCESS_PATH}/${IPTABLES_TOP_LOG}
        sleep 60
        done
    
  • 相关阅读:
    Android 开发笔记___复选框__checkbox
    Android 开发笔记___FrameLayout
    Android 开发笔记___RelativeLayout
    Android 开发笔记___初级控件之实战__计算器
    Android 开发笔记___shape
    Android 开发笔记___DateUtil——Time
    改良版 导航栏自动跟随
    简洁 js排序算法
    简单使用rem方案适配移动设备
    导航栏监听页面滚动跟随 简单封装
  • 原文地址:https://www.cnblogs.com/lixiuran/p/6396498.html
Copyright © 2011-2022 走看看