#/bin/bash
#日志文件蛾绎,可以根據(jù)需要改成你自己的路徑
logfile=/www/wwwlogs/
#取出nginx一分鐘內(nèi)的日志
#Nginx日志格式:
# 192.168.0.161 - - [26/Mar/2015:14:29:20 +0800] "GET / HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36" -
#日志文件
#logfile=/data/logs/nginx/admin.kuaiyouxi.com.log
#開(kāi)始時(shí)間
start_time=`date -d"$last_minutes minutes ago" +"%H:%M:%S"`
echo "$start_time"
#start_time="14:29:20"
#結(jié)束時(shí)間
stop_time=`date +"%H:%M:%S"`
echo "$stop_time"
#stop_time="14:35:36"
#過(guò)濾出單位之間內(nèi)的日志并統(tǒng)計(jì)最高ip數(shù)鸦列,請(qǐng)?zhí)鎿Q為你的日志路徑
tac $logfile/www.gwell.cc.log | awk -v st="$start_time" -v et="$stop_time" ' {t=substr($4,RSTART+14,21);if(t>=st && t<=et) {print $0}}' |awk '{print $1}'|sort | uniq -c | sort -nr > $logfile/log_ip_top10
ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
ip=`cat $logfile/log_ip_top10 | awk '{if($1>100)print $2}'`
echo "一分鐘內(nèi)大于50次的IP"
echo "$ip"
# 單位時(shí)間[1分鐘]內(nèi)單ip訪問(wèn)次數(shù)超過(guò)2次的ip記錄入black.txt,這里為了測(cè)試設(shè)置了2,你需要改成其它的數(shù)字
for line in $ip
do
echo $line >> $logfile/black.txt
if [ `/usr/bin/firewall-cmd --list-all|grep "$line"|wc -l` -ge 0 ]; then
/usr/bin/firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='$line' drop" --permanent
fi
done
/usr/bin/firewall-cmd --reload