DDoS防御实操:Nginx日志监控方案

一 监控体系与告警设计
- 日志采集与存储:确保启用访问日志(常见路径为**/var/log/nginx/access.log**),使用包含**$remote_addr、status、request、http_user_agent、http_x_forwarded_for等字段的日志格式,便于按来源、路径、状态码、UA 等维度分析;将日志接入ELK/Graylog**或集中式日志平台,便于检索与可视化。
- 实时与离线分析:实时用tail -f观察异常激增;离线用Logwatch或自建脚本按分钟/小时聚合统计,识别异常峰值与异常路径。
- 指标与阈值示例:按 IP 统计5xx/4xx 比例、每秒请求数(RPS)、URI 访问频次、异常 UA/Referer、异常 HTTP 方法;为每项设定动态阈值(如过去 5 分钟均值 + 3σ),超过即触发告警。
- 告警与处置:通过企业微信/钉钉/邮件/信息推送;处置动作包括自动封禁、降权、切换维护页、或联动CDN/WAF提升清洗能力。
二 基于日志的自动封禁与联动处置
- Fail2Ban 联动:监控Nginx 错误日志(如频繁 4xx/5xx、异常 URL),自动调用防火墙封禁;在**/etc/fail2ban/jail.local**中启用并配置监控路径、时间窗与封禁时长,异常即触发封禁。
- 脚本自动拉黑:按日志片段自动生成 Nginx 黑名单并热加载。示例(每两小时扫描最近5万条,单 IP 命中**>5000**则封禁):
提示:阈值与扫描窗口需结合业务基线调优,避免误封搜索引擎或内网网段。#!/usr/bin/env bash
acc_log="/var/log/nginx/access.log"
blockip="/usr/local/nginx/conf/vhost/blockip.conf"
tmp=$(mktemp)
tail -n50000 "$acc_log" |
awk '{print $1,$7,$9}' |
grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou|360|bing|soso|403|api" |
awk '{print $1}' | sort | uniq -c | sort -rn |
awk '$1>5000{print "deny "$2";"}' > "$tmp"
# 排除公司网段
sed -i '/116.228.62.38/d' "$tmp"
# 写入黑名单并热加载
cat "$tmp" > "$blockip"
/usr/local/nginx/sbin/nginx -s reload
rm -f "$tmp"
三、Nginx内置限流与访问控制的强化
- 请求速率限制(漏桶):按 IP 限制每秒请求数,允许一定突发且不排队,超出返回503。示例:
http {
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=10r/s;
server {
location / {
limit_req zone=per_ip burst=20 nodelay;
proxy_pass http://backend;
}
}
} - 并发连接数限制:限制单 IP 同时连接数,防止连接耗尽。示例:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_conn addr 30;
proxy_pass http://backend;
}
}
} - 访问控制与白名单:对**/admin等敏感路径仅允许内网或指定网段访问;对已知恶意 IP 使用deny**指令封禁。示例:
location /admin {
allow 192.168.1.0/24;
deny all;
}
deny 203.0.113.45; - 安全头与信息泄露防护:关闭版本号server_tokens off;,添加X-Frame-Options、X-XSS-Protection、X-Content-Type-Options等安全头,降低被利用风险。
四 分层防护与持续优化
- 边界与清洗:在源站前接入CDN/WAF进行流量清洗与速率限制,源站仅放行清洗后流量,显著降低直接攻击压力。
- 防火墙联动:结合iptables/ufw对异常来源做速率限制或封禁,作为 Nginx 策略的补充与兜底。
- 动态调参:基于监控指标与告警反馈,持续微调rate、burst、limit_conn等阈值;对搜索引擎与可信爬虫设置白名单或单独限流策略,避免误伤。
- 维护与演练:定期更新Nginx与组件版本,审计日志保留策略与磁盘占用,定期做攻防演练验证告警与封禁链路有效性。