WordPress使用nginx禁止恶意IP访问

最近偶发搭建WordPress博客的服务器登录不上的情况,报服务超时,一个用来写写技术随笔、生活吐槽的博客,硬件资源本身就很垃圾,也没在意。这两天登上后台,翻了翻nginx访问日志,发现平时基本没流量的小站,在被很多恶意流量访问,不断被扫来扫去。可能是某些好事者,使用扫描软件在练手吧。毕竟实在没有什么攻击的价值。
既然攻击手段很初级,那就用nginx的禁用IP功能来简单防一下,原理很简单,略叙如下:

  1. 使用脚本定时扫描nginx的访问日志、或者错误日志,以IP为维度来统计访问次数(或者非法请求的次数)
  2. 一旦某IP的统计数超过某个阈值,就把此ip追加到nginx的deny配置文件中
  3. reload nginx使配置生效
  4. 另起一个定时任务,来重置被封禁的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