如何监控nginx日志以防止DDoS攻击
导读:监控 Nginx 日志以防御 DDoS 的实操方案 一 监控体系与告警设计 日志采集与存储:确保启用访问日志(常见路径为**/var/log/nginx/access.log**),使用包含**$remote_addr、status、re...
监控 Nginx 日志以防御 DDoS 的实操方案
一 监控体系与告警设计
- 日志采集与存储:确保启用访问日志(常见路径为**/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与组件版本,审计日志保留策略与磁盘占用,定期做攻防演练验证告警与封禁链路有效性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何监控nginx日志以防止DDoS攻击
本文地址: https://pptw.com/jishu/767418.html
