
创建黑名单文件
touch /etc/nginx/conf.d/ip.conf
编辑nginx文件包含黑名单文件
vim /etc/nginx/nginx.conf
在access_log上方添加如下内容
# 黑名单文件
include /etc/nginx/conf.d/ip.conf;
access_log /var/log/nginx/access.log;
创建脚本
vim /etc/nginx/ip.sh
写入以下内容
#!/bin/bash
lastmin=`date -d'-1 minutes' +%d/%b/%Y:%H:%M`
#截取前一分钟的日志,按IP统计数量,超过300条的IP添加到临时文件中,没有满足条件的IP时会清空临时文件的内容
grep $lastmin /var/log/nginx/access.log | grep -vE '(.jpg|.jpeg|.js|.css|.gif|.bmp|.png)'|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if($1>300)print "deny "$2";"}' > /etc/nginx/conf.d/blockips_temp.txt
cat /var/log/nginx/access.log | grep 'etc/passwd' |awk '{print $1}'|sort|uniq -c|sort -rn |awk {'print $2'}
#如果临时文件内容不为空,将IP加入到配置文件中并重载nginx,否则跳过
if test -s /etc/nginx/conf.d/blockips_temp.txt; then
echo "# `date`" >> /etc/nginx/conf.d/ip.conf
cat /etc/nginx/conf.d/blockips_temp.txt >> /etc/nginx/conf.d/ip.conf
systemctl reload nginx
fi
设置脚本运行
//如果需要选择编辑器,选择2,vim
crontab -e
添加如下内容,每分钟执行一次
*/1 * * * * sh /etc/nginx/ip.sh
查看定时
crontab -l