Nginx 全方位安全防护配置指南

1. 基础防护配置

1.1 隐藏敏感信息
  • 禁用版本号暴露
    server_tokens off;
    
  • 自定义 Server 头(需安装 headers-more 模块)
    more_set_headers 'Server: Your-Custom-Name';
    
1.2 请求频率与连接数限制
  • 防止 CC 攻击
    limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s;
    limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;
    
    location / {
      limit_req zone=req_per_ip burst=10 nodelay;
      limit_conn conn_per_ip 20;  # 单IP最大并发连接数
    }
    
1.3 文件与路径防护
  • 禁止访问敏感文件
    location ~* \.(bak|conf|sql|log|env)$ {
      deny all;
      return 404;
    }
    
  • 禁用目录遍历
    location ~ /\. { deny all; }  # 隐藏文件
    autoindex off;  # 禁止目录列表
    

2. Web 攻击防护

2.1 常见攻击过滤
  • SQL 注入/XSS 拦截
    set $block 0;
    if ($query_string ~* "union.*select|eval\(|base64_decode|phpinfo") {
      set $block 1;
    }
    if ($block = 1) { return 403; }
    
  • 拦截恶意 User-Agent
    if ($http_user_agent ~* "nmap|wget|curl|sqlmap|nikto") {
      return 403;
    }
    
2.2 方法限制
  • 仅允许安全 HTTP 方法
    if ($request_method !~ ^(GET|POST|HEAD)$) {
      return 405;
    }
    
2.3 上传文件限制
  • 限制上传大小
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    

3. 访问控制

3.1 IP 黑白名单
  • 关键路径 IP 白名单
    location /admin {
      allow 192.168.1.0/24;
      allow 10.0.0.1;
      deny all;
    }
    
3.2 Basic 认证
  • 保护管理后台
    location /private {
      auth_basic "Admin Area";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }
    

4. HTTPS 强化

4.1 SSL/TLS 优化
  • 禁用弱协议/加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    
4.2 安全响应头
  • 强制 HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    
  • 内容安全策略(CSP)
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'";
    

5. 高级防护策略

5.1 动态黑名单
  • 结合 fail2ban 自动封禁
    示例 fail2ban 规则:
    # 监控 Nginx 日志,自动封禁频繁 403 的 IP
    [nginx-bad-request]
    enabled = true
    filter = nginx-bad-request
    action = iptables[name=nginx, port=http, protocol=tcp]
    logpath = /var/log/nginx/security.log
    
5.2 反向代理防护
  • 隐藏后端服务信息
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;
    
5.3 缓存安全
  • 防止缓存中毒
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 302 10m;
    proxy_no_cache $cookie_sessionid;  # 动态内容不缓存
    

6. 日志与监控

6.1 安全日志分离
  • 记录攻击行为
    log_format security '$remote_addr - $http_user_agent - [$time_local] "$request" $status';
    access_log /var/log/nginx/security.log security;
    
6.2 实时监控
  • 使用 Prometheus + Grafana
    通过 nginx-module-vts 模块监控流量、连接数等关键指标。


7. 其他关键配置

7.1 超时优化
  • 防止慢速攻击
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 65s;
    send_timeout 10s;
    
7.2 防盗链
  • 保护静态资源
    location ~* \.(jpg|png|mp4)$ {
      valid_referers none blocked *.yourdomain.com;
      if ($invalid_referer) { return 403; }
    }
    
7.3 模块安全
  • 禁用非必要模块
    编译时移除 --without-http_autoindex_module 等高风险模块。


8. 应急响应

  1. 定期备份配置nginx.conf 和站点配置。

  2. 快速封禁 IP
    iptables -A INPUT -s 1.2.3.4 -j DROP
    
  3. 一键关闭服务
    systemctl stop nginx && systemctl disable nginx
    

总结

  • 综合防御:Nginx 安全需结合网络层(防火墙)、应用层(WAF)和监控层(日志分析)。

  • 持续更新:定期升级 Nginx 版本,关注 CVE 漏洞。

  • 最小权限原则:禁用非必要功能,限制用户权限。

通过上述配置,可大幅提升 Nginx 服务器的抗攻击能力,抵御 DDoS、SQL 注入、XSS、目录遍历等常见攻击。建议结合实际业务场景调整参数,并通过 nginx -t 测试配置后重载生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javachen__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值