linux 任务计划 apache日志中每分钟访问某页面超过10,把IP屏蔽掉,并发邮件通知

1. 建立新的任务计划每分钟执行一次

 crontab -e

*/1 * * * * sh /data/bin/blockhacker.sh



2. 在/blockhacker.sh里面写下面内容:


#exit


log=`find /data/apachelog/xxx/ -name 'access' -mtime 0 |xargs ls -t |head -n 1`

#log变量是日志文件路径,我的日志文件是每天分开存放的,就这么写


fkey="\[`date +%d/%b/%G:%H:%M:`[0-9]\{2\} +0800\] \\\"POST /forum.php?mod=post&action=newthread&fid=[0-9]\{1,3\}&extra=&topicsubmit=yes"

#fkey变量是要查找的关键词\[`date +%d/%b/%G:%H:%M:`[0-9]\{2\} +0800\]是 时间正则,

#\\\"POST /forum.php?mod=post&action=newthread&fid=[0-9]\{1,3\}&extra=&topicsubmit=yes是页面正则


#echo ${log}
#echo ${fkey}

# count>=10

records=`grep "${fkey}" ${log} |awk '{print $1 }' |sort |uniq -c |sort -n  -r |grep -P  '(([5-9]\d)|(\d{2,}))\b[^\.]'`

#echo ${records}

IFS='
'
for record in ${records}
do
   
   
    ip=`echo ${record}|awk '{print $2}'`
   # cnt=`echo ${record}|awk '{print $1}'`
#if [ ${cnt} -ge 10 ] ; then  #判断IP数是否超过10次,上面${records}中'(([5-9]\d)|(\d{2,}))\b[^\.]'` 已经判断了超过10次了,就把这个注释掉了
             # echo ${ip}
             #echo ${cnt}
        iptables --list |grep -c ${ip}  #获取iptable 中被drop次数
        if [ $? -ne 0  ] ; then  #如果上一条语句中返回值不等于0
            iptables -I INPUT -s ${ip} -j DROP
            echo `date` ${ip} >>/data/bin/blockhacker.log
                        echo "IP ${ip} blocked: visit more than 10 times in 1 minute on  ServerName" | mail -s "ServerName IP DROP"  xxxxxx@qq.com  xxxx@163.com
            echo "${ip} blocked"        
        fi


#fi
    
done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值