定位 Nginx 日志中的异常 IP,通常是从访问频率、行为特征、状态码、请求内容等维度来分析。下面给你一套实用、可操作的方法(Linux 环境为主)。
常见路径:
/var/log/nginx/access.log
/var/log/nginx/error.log
确认日志格式(默认 combined):
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
awk '{print $1, $4}' access.log | cut -d: -f1-3 | sort | uniq -c | sort -nr | head
或按分钟统计:
awk '{print $1, substr($4,2,17)}' access.log | sort | uniq -c | sort -nr | head
awk '$9 ~ /40[04]/ {print $1}' access.log | sort | uniq -c | sort -nr | head
awk '$9 == 500 {print $1}' access.log | sort | uniq -c | sort -nr
grep -E "\.env|wp-admin|phpmyadmin|/admin" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
grep -iE "curl|python|java|sqlmap|nikto|scan" access.log | awk '{print $1}' | sort | uniq -c
awk '$6 == "\"POST\"" {print $1}' access.log | sort | uniq -c | sort -nr
awk '$6 ~ /"(PUT|DELETE)"/ {print $1}' access.log
grep "10/Apr/2026:15:" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
GoAccess(可视化)goaccess access.log -o report.html --log-format=COMBINED
fail2ban[nginx-botsearch]
enabled = true
logpath = /var/log/nginx/access.log
maxretry = 100
✅ 单 IP 请求量远超正常用户
✅ 高频访问不存在路径(404)
✅ 无 Referer / 奇怪 UA
✅ 固定时间批量请求
✅ 大量 POST 登录接口
如果你愿意,可以:
我可以直接帮你写精准过滤命令或 Nginx 限流配置。