总会有些无聊人的会攻击你的网站,跑你 VPS 流量、试你网站密码、探测你网站源数据等等,这个老王在《利用 iftop 解决 Linux 由于带宽占用过高导致无法远程连接的问题》也分享过类似的经历,本文就给大家分享一个 Shell 脚本,分析 Nginx 日志文件找出恶意 IP(访问频次过高)。
一、Shell 分析 Nginx 日志
如果你用的 LNMP 一键脚本,那么 Nginx 日志默认在 /home/wwwlogs
下,日志中有访问时间、访问者 IP、网站 URL 等信息。
下面这个简单的 Shell 脚本可以分析 Nginx 日志文件,将最近 4000 条网站访问记录中,出现频次超过 200 次的 IP 全部找出来:
# 定义访问次数上限 200 num=200 # 定义检查日志文件中的最后 4000 行数据 check_num=4000 LOG_DIR=/home/wwwlogs cd $LOG_DIR LOG_FILE=laowangblog.com.nginx.log # 筛选日志文件 IP=`tail $LOG_FILE -n $check_num|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if ($1>'$num'){print $2}}'` for i in $IP # 对这些 IP 的操作 do .... done
二、自动化 & 封禁这些 IP
自动化自然就是借助 crontab,如何处理这些恶意 IP,自然就是通过 iptables 拉黑了, 这些教程之前老王也分享过。
如果你的垃圾 IP 特别多,也可以用 ipset,结合 iptables 也是非常方便的,自行 Google 一下就行。