温馨提示×

Nginx配置防火墙规则有哪些技巧

小樊
43
2025-12-27 15:36:39
栏目: 编程语言

Nginx 配置防火墙规则实用技巧

一 分层设计与最小暴露

  • 在系统层仅开放必要端口:优先只放通 TCP 80/443(HTTP/HTTPS),远程管理端口如 22/3389 建议限制来源 IP 或改为跳板机访问;云上通过安全组实现同样的“最小权限”。
  • 在主机层使用 iptables/firewalld/UFW 实施默认拒绝(或严格区域策略),再按需放行;Windows 上用 Windows Defender 防火墙仅允许 nginx.exe80/443 的入站。
  • 在应用层用 Nginx 的 allow/deny、limit_req/limit_conn 做细粒度控制,形成“系统防火墙 + 主机防火墙 + Nginx 应用层”的三道防线。
  • 对外隐藏源站真实 IP,前置 CDN/WAF/云清洗,减少直接暴露带来的风险。

二 关键规则清单与示例

  • 系统层端口与进程放行(示例)
    • Linux(firewalld):仅放行 80/443/22,并限制管理端口来源;必要时对 http 设置速率限制(如每秒 10 次)。
    • Windows(PowerShell):仅允许 nginx.exe 监听 80/443;管理端口(如 8080)可基于 IP/时间段 精细化放行。
  • Nginx 应用层访问控制
    • IP 白名单/黑名单:对 /admin/ 等敏感路径仅允许内网段;对恶意 IP 直接 deny
    • 请求方法限制:仅允许 GET/POST/HEAD,其他方法返回 405/444
    • 速率与并发:限制每秒请求数与并发连接数,抑制暴力破解与爬虫占线。
    • 协议与加密:强制 HTTPS,启用 TLS 1.2/1.3 与强套件,配置 HSTS
  • 示例(可直接复用)
    • firewalld 最小放行与限速
      • 放行端口:firewall-cmd --permanent --add-service=http --add-service=https --add-service=ssh && firewall-cmd --reload
      • 限速示例:firewall-cmd --permanent --add-rich-rule=‘rule family=“ipv4” service name=“http” limit value=“10/s” accept’ && firewall-cmd --reload
    • Windows 防火墙仅放行 Nginx
      • New-NetFirewallRule -DisplayName “Nginx HTTP” -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
      • New-NetFirewallRule -DisplayName “Nginx HTTPS” -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow
    • Nginx 应用层关键片段
      • IP 白名单与黑名单
        location /admin/ { allow 192.168.1.0/24; deny all; }
        deny 203.0.113.5; allow all;
      • 方法限制
        if ($request_method !~ ^(GET|POST|HEAD)$) { return 405; }
      • 速率与并发
        http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=ops:10m; }
        server { limit_req zone=one burst=20 nodelay; limit_conn ops 10; }
      • 安全响应头与跳转
        add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff;
        server { listen 80; return 301 https://$host$request_uri; }
        ssl_protocols TLSv1.2 TLSv1.3; add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;

三 缓解 DDoS 与恶意流量

  • 速率与连接控制:在 Nginx 侧用 limit_req/limit_conn 限制单 IP 的 QPS 与并发,优先丢弃异常突发;在 iptables/firewalld 侧可对 NEW 连接做速率阈值控制,作为第二道闸门。
  • 协议与 ICMP 治理:限制 ICMP 速率,避免 ping 洪水;禁用不必要的协议与端口。
  • 边界与上游协同:启用 CDN/WAF/云清洗 吸收与过滤大流量;对管理口与敏感接口设置来源 IP 白名单时间窗(如仅工作时间开放调试端口)。
  • 监控与处置:对 Nginx 访问/错误日志与防火墙日志建立基线告警,异常时联动封禁;必要时临时切换为检测模式验证误报后再全量启用。

四 进阶与维护

  • 部署 WAF(如 ModSecurity):在 Nginx 中集成 ModSecurity,加载核心规则集,拦截 SQLi/XSS/目录遍历 等常见攻击;对误报使用 DetectionOnly 模式与按规则/参数排除,逐步上线。
  • 地理与内容治理:基于 GeoIP 模块按国家/地区限制访问;对异常 User-Agent/Referer 与可疑参数进行拦截或挑战。
  • 版本隐藏与超时加固:关闭 server_tokens,设置 client_body_timeout/client_header_timeout/keepalive_timeout/send_timeout 抵御慢速攻击;限制 client_max_body_size 防止滥用上传。
  • 持续运营:定期更新 Nginx/模块/规则库,开展季度渗透测试与日志审计,验证规则有效性与覆盖率。

0