首页主机资讯怎样用nginx日志监控网络攻击

怎样用nginx日志监控网络攻击

时间2025-11-22 02:12:04发布访客分类主机资讯浏览446
导读:用 Nginx 日志监控网络攻击的实操方案 一 基础准备与日志规范 启用并规范日志格式,确保包含可用于溯源与安全分析的字段:客户端 $remote_addr、请求 $request、状态码 $status、响应体大小 $body_byte...

用 Nginx 日志监控网络攻击的实操方案

一 基础准备与日志规范

  • 启用并规范日志格式,确保包含可用于溯源与安全分析的字段:客户端 $remote_addr、请求 $request、状态码 $status、响应体大小 $body_bytes_sent、来源 $http_referer、用户代理 $http_user_agent、以及经过代理时的 $http_x_forwarded_for。示例:
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
        
    access_log /var/log/nginx/access.log main;
        
    error_log  /var/log/nginx/error.log;
    
    
  • 若经过 CDN/反向代理,优先使用 $http_x_forwarded_for 作为源 IP 判断依据,并在日志分析侧据此聚合与告警。
  • 配置 日志轮转(如 logrotate)避免磁盘被占满,保证长期可分析性。

二 快速发现攻击的常用方法

  • 实时监控与基线观察
    • 实时查看新增日志:tail -f /var/log/nginx/access.log
    • 快速筛查异常状态码:grep -E " 404|403|500 " /var/log/nginx/access.log | tail -n 50
    • 观察错误日志中的异常路径与扫描迹象:tail -n 200 /var/log/nginx/error.log
  • 常见攻击特征举例
    • 敏感文件与信息泄露探测:如 /.env、/.git/、/phpinfo.php、/debug.php、/status.php
    • 目录遍历与后台入口扫描:如 /admin/、/config/、/uploads/、/backup/
    • 已知产品与漏洞路径探测:如 /solr/、/jasperserver/、/owncloud/status.php、/Telerik.Web.UI
    • 恶意载荷与僵尸网络特征:如 wget/chmod、/tmp/、Mozi.m
    • 异常 User-Agent、异常 Referer、短路径随机探测(如 /[a-zA-Z0-9]{ 4,8} )等
  • 速率与错误异常
    • 短时间内大量请求(潜在 DDoS/暴力扫描
    • 大量 404(内容探测)、500(漏洞利用尝试或后端异常)

三 自动化检测与封禁

  • 使用 Fail2Ban(推荐)
    • 启用 Nginx 相关 jail,配置监控访问/错误日志并自动封禁恶意 IP
    • 可自定义过滤器,覆盖敏感路径、扫描特征、登录爆破等模式;支持 iptables/nftables/firewalld 等动作。
    • 示例(在 jail.local 启用或新增自定义 filter.d 规则后重启服务):
      [nginx-http-auth]
      enabled = true
      filter = nginx-http-auth
      logpath = /var/log/nginx/error.log
      maxretry = 5
      bantime = 3600
      
      [nginx-badbots]
      enabled = true
      filter = nginx-badbots
      logpath = /var/log/nginx/access.log
      maxretry = 100
      findtime = 600
      bantime = 86400
      
  • 轻量脚本自动封禁(无外部依赖时的临时方案)
    • 思路:按时间窗口统计 IP 请求数,超过阈值即加入 iptables DROP;支持白名单与自动解封。
    • 示例(每分钟检查一次,阈值 200 req/min,封禁 3600 秒):
      LOG_FILE="/var/log/nginx/access.log"
      TIME_WINDOW=$(date --date='1 minute ago' "+%d/%b/%Y:%H:%M")
      THRESHOLD=200
      BAN_TIME=3600
      WHITELIST=("127.0.0.1" "192.168.0.0/24")
      
      is_whitelisted() {
      
        local ip=$1
        for w in "${
      WHITELIST[@]}
          ";
           do
          if [[ $w == *"/"* ]];
           then
            ipcalc -nb "$w" "$ip" 2>
          /dev/null | grep -q "YES" &
          &
           return 0
          elif [[ $ip == $w ]];
       then
            return 0
          fi
        done
        return 1
      }
      
      
      grep "$TIME_WINDOW" "$LOG_FILE" | awk '{
      print $1}
          ' | sort | uniq -c | sort -nr | while read cnt ip;
           do
        if ! is_whitelisted "$ip" &
          &
           [ "$cnt" -gt "$THRESHOLD" ];
           then
          iptables -C INPUT -s "$ip" -j DROP 2>
      /dev/null || {
          
            iptables -A INPUT -s "$ip" -j DROP
            echo "$(date) BAN $ip ($cnt req/min)" >
          >
           /var/log/nginx/ban.log
            (sleep "$BAN_TIME";
           iptables -D INPUT -s "$ip" -j DROP) &
      
          }
          
        fi
      done
      
    • 建议:生产环境优先使用 Fail2Ban;脚本方案务必配置白名单、解封与审计日志。

四 集中化监控与可视化

  • 日志集中与检索
    • 使用 ELK Stack(Elasticsearch + Logstash + Kibana)GraylogSplunk 收集与索引 Nginx 日志,构建仪表盘与告警规则。
  • 指标与告警
    • IP/URI/UA/状态码/返回大小 为维度建立基线,对以下指标设置阈值告警:
      • 单位时间请求速率(按 IP/URI 分桶)
      • 404/403/500 错误率突增
      • 敏感路径命中次数
      • 异常 User-Agent 与非常规 Referer
    • 可结合 Prometheus + Grafana(通过 nginx-exporter/日志转指标)或 Zabbix/Nagios 实现可视化与通知。

五 防护加固与最佳实践

  • Nginx 层面降低可被利用面
    • 启用速率限制:使用 limit_req_zone/limit_req 限制单 IP 请求速率,缓解 DDoS/暴力 场景。
    • 配置 IP 黑名单geoip 限制高风险来源。
    • 添加安全响应头:如 X-Frame-Options、X-XSS-Protection、X-Content-Type-Options、Strict-Transport-Security 等。
  • 运维与治理
    • 保持 Nginx 与依赖组件及时更新,移除无用模块与默认页面。
    • 规范日志保留与归档,定期审计异常模式与趋势。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 怎样用nginx日志监控网络攻击
本文地址: https://pptw.com/jishu/754002.html
Debian下phpstorm如何配置自动补全 Tomcat日志与系统性能关联分析

游客 回复需填写必要信息