小韓寫Shell -- 分析web紀錄檔解決DOS攻擊案例

2020-09-22 13:00:41

前言

        在日常工作中,我們在某一時間段或者某一天甚至某一週內,網站會有一個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

總結:

      此指令碼在工作中還是會常用到的,有興趣的小夥伴可以收藏下。