Linux大量404日志访问及恶意多连接自动拉黑IP

  • 3
  • 748 views
  • A+
所属分类:日志

由于付生保个人博客本身没有做过url更改,但是在检查日志的时候发现大量404访问记录。访问的路径还千奇百怪。本人水平有限,也不知道是什么样的工具或者蜘蛛会大量访问这种地址。于是乎,想起了网上流行的防止CC的脚本是不是可以改造下。如果某个IP地址访问404页面大于多少次后,就将该IP拉黑。在一天的某个时段定时释放。

脚本(需设置Log地址、ip多少访问连接拉黑(num)及ip访问404页面多少次拉黑(ipnum));


#!/bin/bash

#脚本名称:ShengBao Scripts

#版本 :0.1

#支持网址:http://shengbao.org

#更新说明

##############################设置###########################

num=20

ipnum=500

logfile=/data/wwwlogs/shengbao.org_nginx.log

whitelist=`cat <<eof

#############################白名单###########################

200

Baidu

360

ce.baidu.com

.xml

.html

spider

index.php

yunjiasu

google

bing

sougou

haosou

##########################shengbao.org########################

eof`

function check () {

iplist=`netstat -an |grep -w ^tcp.*:"80\|443"|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'`

loglist=`cat $logfile|grep -i -v "$whitelist" |grep 404|awk -F ' ' '{print $1}'|sort|uniq -c|sort -nr |awk -v str=$ipnum '{if ($1>str){print $2}}'`

echo -e "$iplist \n" >> /tmp/iplist

echo -e "$loglist \n" >> /tmp/loglist

if [ -f /tmp/fireip ];then

fireiptmp=`grep -vwf /tmp/loglist /tmp/iplist`

echo -e "$fireiptmp \n" >>/tmp/fireiptmp

# fireip=`cat /tmp/fireiptmp /tmp/fireip | awk '!a[$0]++ {print $0}'`

fireip=`grep -vwf /tmp/fireip /tmp/fireiptmp `

if [[ ! -z $fireip ]];then

echo -e "$fireip \n" >> /tmp/fireip

fi

else

fireip=`grep -Fv /tmp/iplist /tmp/loglist`

fireip=`grep -vwf /tmp/iplist /tmp/loglist`

echo -e "$fireip \n" > /tmp/fireip

fi

echo

if [[ ! -z $fireip ]];then

for black_ip in $fireip

do

if [ -f/usr/bin/systemctl ];then

iptables -nL | grep $black_ip > /dev/null ||( firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address="$black_ip" reject ")

firewall-cmd --reload

else

iptables -nL | grep $black_ip > /dev/null ||(iptables -I INPUT -s $black_ip -j DROP )

fi

done

fi

}

function uncheck () {

if [ -f /tmp/fireip ];then

unfireip=`cat /tmp/fireip`

for writ_ip in $unfireip

do

if [ -f/usr/bin/systemctl ];then

firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address="$writ_ip" reject "

firewall-cmd --reload

else

iptables -nL | grep $writ_ip ||(iptables -I INPUT -s $writ_ip -j ACCEPT )

fi

done

else

echo "fire_ip null"

fi

rm -rf /tmp/fireip

rm -rf /tmp/fireiptmp

rm -rf /tmp/loglist

rm -rf /tmp/iplist

}

if [[ $1 == unip ]];then

uncheck

exit

fi

while true;do

check >/dev/null

done

Linux大量404日志访问及恶意多连接自动拉黑IP

运行


下载地址:

此处为隐藏的内容!
发表评论并刷新,才能查看

执行命令:crontab -e

*/1 * * * * /bin/bash /root/checkip.sh

停止运行:fg调用后台脚本到前台,crtl+c结束。

释放ip地址: sh checkip unip

 

weinxin
付生保个人博客
一个运维工程师的自媒体个人博客网站。也是关注IT技术学习和经验分享的原创独立自媒体个人博客。
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  2   博主  1

    • avatar sunny 0

      非常不错的文章哦。

      • avatar jues 0

        不错的文章,和我网站写的 Linux自动把恶意IP加入黑名单 类似哈,不过我的只是小试牛刀;

          • avatar shengbao Admin

            @jues 互相学习啊!