针对apache日志,封IP

回复 收藏
请求量每分钟大于60次的请求IP,需要封掉,每隔20分钟解封一次
  1. #! /bin/bash
  2. ## To block the ip of bad requesting.
  3. ## Writen by andyleeli 2012-02-01.
  4. logdir="/data/log/apache-2.0.59"
  5. d1=`date +%Y%m%d`
  6. logfile="$logdir/www-access_$d1.log"
  7. d2=`date -d "-5 min" +%H:%M`
  8. n1=`grep -n $d2:00 $logfile|head -n1|awk -F":" '{print $1}'`
  9. n2=`wc -l $logfile |awk '{print $1}'`
  10. tmpdir="/tmp/badip"
  11. [ -d $tmpdir ] || mkdir -p $tmpdir
  12. sed -n "$n1,$n2"p $logfile >$tmpdir/tmp.log
  13. awk '{print $1}' $tmpdir/tmp.log|sort -n |uniq -c |awk '$1>300 {print $2}' >$tmpdir/bad.ip
  14. d3=`date +%M`
  15. if [ $d3 -eq "20" ] || [ $d3 -eq "40" ] || [ $d3 -eq "00" ]; then
  16.         /usr/sbin/iptables -nvL OUTPUT|grep 'eth0' |grep 'DROP' |awk '$1<20 {print $9}'>$tmpdir/good.ip
  17.         if [ -s $tmpdir/good.ip ]; then
  18.         for ip in `cat $tmpdir/good.ip`
  19.         do
  20.                 /usr/sbin/iptables -D OUTPUT -o eth0 -p tcp --sport 80 -d $ip -j DROP
  21.                 d4=`date +%Y%m%d-%H:%M`
  22.                 echo "$d4 $ip unblock" >>$tmpdir/unblock.ip
  23.         done
  24.         fi
  25.         /usr/sbin/iptables -Z OUTPUT
  26. fi
  27. goodip="180.153.5.|112.64.234."
  28. if [ -s $tmpdir/bad.ip ] ; then
  29.     egrep -v $goodip $tmpdir/bad.ip >$tmpdir/bad2.ip
  30.     for ip in `cat $tmpdir/bad2.ip`
  31.     do
  32.         /usr/sbin/iptables -A OUTPUT -o eth0 -p tcp --sport 80 -d $ip -j DROP
  33.         d4=`date +%Y%m%d-%H:%M`
  34.         echo "$d4 $ip block" >>$tmpdir/block.ip
  35.     done
  36. fi
2012-02-02 09:32 举报
已邀请:
0

镂空的记忆

赞同来自:

学习一下 louz
0

xxm1900

赞同来自:

学习一下 louz

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: