最近偶发搭建WordPress博客的服务器登录不上的情况,报服务超时,一个用来写写技术随笔、生活吐槽的博客,硬件资源本身就很垃圾,也没在意。这两天登上后台,翻了翻nginx访问日志,发现平时基本没流量的小站,在被很多恶意流量访问,不断被扫来扫去。可能是某些好事者,使用扫描软件在练手吧。毕竟实在没有什么攻击的价值。
既然攻击手段很初级,那就用nginx的禁用IP功能来简单防一下,原理很简单,略叙如下:
- 使用脚本定时扫描nginx的访问日志、或者错误日志,以IP为维度来统计访问次数(或者非法请求的次数)
- 一旦某IP的统计数超过某个阈值,就把此ip追加到nginx的deny配置文件中
- reload nginx使配置生效
- 另起一个定时任务,来重置被封禁的ip,毕竟不能永远封禁这个ip地址,还需要解封。
具体脚本如下:
统计恶意ip脚本如下:
#!/bin/bash
confdir=/somedir/block_ip.conf #nginx封锁配置文件路径
logdir=/somedir/access.log #nginx访问日志文件路径
#检测文件
test -e ${confdir} || touch ${confdir}
drop_ip=""
#循环遍历日志文件取出访问量大于某50的ip
for drop_ip in $(cat ${logdir} | awk -F ', client:' '{print $2}' | grep -v '^$' | awk -F ',' '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>50) print $2}')
do
grep "${drop_ip}" ${confdir} | grep -v '#deny' && eg=1 || eg=0;
if [ ${eg} -eq 0 ];then
echo "deny ${drop_ip};">>$confdir #把“deny IP;”语句写入封锁配置文件中
echo ">>>>> `date '+%Y-%m-%d %H:%M:%S'` - 发现攻击源地址 -> ${drop_ip} " >> /somedir/nginx_deny.log #记录log
fi
done
/usr/sbin/nginx -s reload
解封脚本如下:
#!/bin/bash
sed -i 's/^deny/#&/g' /somedir/block_ip.conf #把nginx封锁配置文件中的内容注释掉
/usr/sbin/nginx -s reload #重载配置文件
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=1535
近期评论