前言
在日常工作中,我们在某一时间段或者某一天甚至某一周内,网站会有一个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
总结:
此脚本在工作中还是会常用到的,有兴趣的小伙伴可以收藏下。