排查 Nginx 日志中的攻击行为,核心思路是:先找异常特征 → 定位攻击类型 → 结合日志和配置做防护。下面按实战方式给你一套方法。
常见路径:
/var/log/nginx/access.log
/var/log/nginx/error.log
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
示例:
1.2.3.4 - - [10/Apr/2024:12:00:01 +0800] "GET /admin.php HTTP/1.1" 404 153 "-" "curl/7.68"
特征
排查命令
# 统计 404 最多的 IP
awk '$9==404 {print $1}' access.log | sort | uniq -c | sort -nr | head
# 常见敏感路径
grep -E '/(admin|wp-login|phpmyadmin|\.env|config)' access.log
特征
排查命令
# 统计每 IP 请求数
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
# 按分钟统计请求量
awk '{print $4}' access.log | cut -c 1-18 | uniq -c
特征
union select、<script>、or 1=1排查命令
grep -Ei 'union|select|<|script|or 1=1' access.log
特征
排查
# 统计 UA
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -nr
grep -Ei '\.php\?|eval|cmd=|shell' access.log
tail -f error.log
常见攻击相关错误:
connect() failedupstream timed out(可能被打挂)client sent invalid request# 查看并封 IP
iptables -A INPUT -s 1.2.3.4 -j DROP
或用 Nginx:
deny 1.2.3.4;
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server_tokens off;goaccess(实时可视化)nginx-log-analyzer如果你愿意,可以把一段匿名化后的 Nginx 日志贴出来,我可以直接帮你分析是哪种攻击、该怎么处理。