首页主机资讯如何监控nginx日志以防止DDoS攻击

如何监控nginx日志以防止DDoS攻击

时间2025-12-09 19:40:03发布访客分类主机资讯浏览1442
导读:监控 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
nginx日志中的状态码有哪些常见类型 nginx日志里隐藏的安全隐患你知道吗

游客 回复需填写必要信息