前言
在日常工作中,我們在某一時間段或者某一天甚至某一週內,網站會有一個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
總結:
此指令碼在工作中還是會常用到的,有興趣的小夥伴可以收藏下。