温馨提示×

nginx日志如何排查攻击

小樊
51
2026-09-11 13:31:55
栏目: 网络安全

排查 Nginx 日志中的攻击行为,核心思路是:先找异常特征 → 定位攻击类型 → 结合日志和配置做防护。下面按实战方式给你一套方法。


一、Nginx 日志基础

1. 日志位置

常见路径:

/var/log/nginx/access.log
/var/log/nginx/error.log

2. 默认访问日志格式

$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"

二、常见攻击类型 & 排查方法

1️⃣ 扫描 / 探测攻击

特征

  • 大量 404
  • 请求奇怪路径(/admin、/.env、/phpmyadmin)
  • User-Agent 为扫描器

排查命令

# 统计 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

2️⃣ CC / DoS 攻击(高频请求)

特征

  • 同一 IP 短时间大量请求
  • 状态码多为 200 或 404

排查命令

# 统计每 IP 请求数
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

# 按分钟统计请求量
awk '{print $4}' access.log | cut -c 1-18 | uniq -c

3️⃣ SQL 注入 / XSS

特征

  • URL 中含 union select<script>or 1=1

排查命令

grep -Ei 'union|select|<|script|or 1=1' access.log

4️⃣ 恶意爬虫 / 采集

特征

  • 请求频率高
  • UA 异常或无 UA
  • 只爬内容页

排查

# 统计 UA
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -nr

5️⃣ 后门 / Webshell 访问

grep -Ei '\.php\?|eval|cmd=|shell' access.log

三、结合 error.log 看更深层问题

tail -f error.log

常见攻击相关错误:

  • connect() failed
  • upstream timed out(可能被打挂)
  • client sent invalid request

四、快速封禁攻击 IP(临时)

# 查看并封 IP
iptables -A INPUT -s 1.2.3.4 -j DROP

或用 Nginx:

deny 1.2.3.4;

五、长期防护建议

Nginx 层

  • 限制请求频率
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
  • 禁止非法 UA
  • 隐藏版本 server_tokens off;

系统层

  • 安装 fail2ban
  • WAF(如 ModSecurity)

六、进阶:用工具分析

  • goaccess(实时可视化)
  • ELK / Grafana + Loki
  • nginx-log-analyzer

如果你愿意,可以把一段匿名化后的 Nginx 日志贴出来,我可以直接帮你分析是哪种攻击、该怎么处理。

0