小韩写Shell -- 分析web日志解决DOS攻击案例

前言

        在日常工作中,我们在某一时间段或者某一天甚至某一周内,网站会有一个IP不断的访问公司的网站,这时候就需要考虑是不是有黑客在对公司的网站进行攻击,我们就要通过各种手段来预防,这里我写入了一个脚本来预防DOS攻击。

一、脚本源码

#########################我这里一个ip并发100次自动屏蔽,你也可以设置1000
[root@hya shell]# vim nginxfailIP.sh   #这里我分析的是nginx的日志版本是1.16的
#!/bin/bash
while true
do
  awk '{print $1}' /var/log/nginx/access.log | grep -v "^$" | sort | uniq -c > tmp.log
     exec < tmp.log #输入重定向
     while read line #读取文件
     do
        ip=`echo $line | awk '{print $2}'`
        count=`echo $line | awk '{print $1}'`
if [ $count -gt 100 ] && [ `iptables -n -L | grep "$ip" | wc -l` -lt 1 ]
        then
        iptables -I INPUT -s $ip -j DROP
        echo "$line is dropped" >> droplist.log
fi
    done
    sleep 3
done

二、脚本实操营

[root@hya shell]# chmod +x nginxfailIP.sh   #给脚本执行的权限
[root@hya shell]# bash -x nginxfailIP.sh     ##3秒检测一次,可以设置成定时任务 
+ true
+ awk '{print $1}' /var/log/nginx/access.log
+ sort
+ grep -v '^$'
+ uniq -c
+ exec
+ read line
++ echo 103 192.168.253.1
++ awk '{print $2}'
+ ip=192.168.253.1
++ echo 103 192.168.253.1
++ awk '{print $1}'
+ count=103
+ '[' 103 -gt 100 ']'
++ iptables -n -L
++ grep 192.168.253.1
++ wc -l
+ '[' 2 -lt 1 ']'
+ read line
+ sleep 3
##########################模拟当我访问到100的时候 
[root@hya shell]# cat droplist.log    #发现我的ip已然被drop掉了
103 192.168.253.1 is dropped

总结:

      此脚本在工作中还是会常用到的,有兴趣的小伙伴可以收藏下。

猜你喜欢

转载自blog.csdn.net/yeyslspi59/article/details/108712732