nginx在centos上如何实现安全防护

在 CentOS 上系统化加固 Nginx 的安全防护一 系统与网络基线保持系统与软件为最新:执行 yum update -y,及时修补内核与 Nginx 漏洞。仅开放必要端口:使用 firewalld 放行 80/443,并保留 22(SSH)以便维护。安装入侵防护:部署 fail2ban 监控 Nginx 日志并自动封禁暴力请求来源。自动化与安全更新:启用 yum-cron 的自动安全

在 CentOS 上系统化加固 Nginx 的安全防护

一 系统与网络基线

  • 保持系统与软件为最新:执行 yum update -y,及时修补内核与 Nginx 漏洞。
  • 仅开放必要端口:使用 firewalld 放行 80/443,并保留 22(SSH)以便维护。
  • 安装入侵防护:部署 fail2ban 监控 Nginx 日志并自动封禁暴力请求来源。
  • 自动化与安全更新:启用 yum-cron 的自动安全更新,降低暴露窗口。
  • 建议:生产环境保持 SELinux 为 enforcing,并通过策略与最小权限配合使用,而非直接关闭。

二 Nginx 基础加固

  • 隐藏版本信息:在 /etc/nginx/nginx.confhttp 块设置 server_tokens off;,减少信息泄露。
  • 限制可用方法:仅允许 GET/HEAD/POST,其余返回 405444(立即关闭连接)。
  • 安全响应头:统一添加 Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options、X-XSS-Protection、Referrer-Policy、Content-Security-Policy
  • 强制 HTTPS:将 HTTP→HTTPS 301 重定向,并在 443 监听启用 HTTP/2
  • 超时与资源控制:设置 client_body_timeout、client_header_timeout、keepalive_timeout、send_timeout;使用 limit_req/limit_conn 抑制暴力请求与连接耗尽。
  • 示例片段:
    • 方法限制与头部
      if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }
      add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
      add_header X-Frame-Options "SAMEORIGIN" always;
      add_header X-Content-Type-Options "nosniff" always;
      add_header X-XSS-Protection "1; mode=block" always;
      add_header Referrer-Policy "strict-origin-when-cross-origin";
      add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscripts.example.com; object-src 'none';"";
      
    • 超时与限流
      client_body_timeout 12;
      client_header_timeout 12;
      keepalive_timeout 15;
      send_timeout 10;
      
      limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
      limit_req zone=one burst=5 nodelay;
      
      limit_conn_zone $binary_remote_addr zone=addr:10m;
      limit_conn addr 100;
      

三 加密与证书部署

  • 证书获取与自动续期:安装 EPEL 后使用 certbot 一键获取 Let’s Encrypt 证书并自动配置 Nginx:
    • 安装与签发:sudo yum install -y epel-release certbot python3-certbot-nginx
    • 签发并自动配置:sudo certbot –nginx -d yourdomain.com -d www.yourdomain.com
  • 手动自签名(仅测试):生成 2048 位私钥与证书,路径建议 /etc/nginx/ssl/
  • 强加密配置:仅启用 TLSv1.2/TLSv1.3,使用 ECDHE 与高强套件,开启 HTTP/2
  • 示例片段:
    server {
        listen 443 ssl http2;
        server_name yourdomain.com www.yourdomain.com;
    
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
    
        # 可选:启用 OCSP Stapling
        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 1.1.1.1 8.8.8.8 valid=300s;
    }
    
    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        return 301 https://$host$request_uri;
    }
    

四 访问控制与请求防护

  • 敏感路径白名单:对 /admin 等管理路径限制来源 IP,并叠加 HTTP Basic 认证。
  • 上传与写入目录隔离:禁止脚本执行,仅赋予必要读写权限,避免上传目录被当作代码执行。
  • 目录遍历与别名坑:使用 alias 时务必保证 location 路径与目录路径结尾斜杠一致,否则可能被绕过导致目录遍历。
  • 防盗链:对静态资源校验 Referer,非法来源返回 403 或替换图片。
  • 示例片段:
    • 管理路径白名单与认证
      location /admin/ {
          allow 192.168.1.0/24;
          deny all;
          auth_basic "Restricted Access";
          auth_basic_user_file /etc/nginx/.htpasswd;
      }
      
    • 上传目录禁止脚本执行
      location /uploads/ {
          location ~ \.php$ { deny all; }
      }
      
    • 防盗链(示例)
      location ~* \.(jpg|jpeg|png|gif|webp)$ {
          valid_referers none blocked yourdomain.com www.yourdomain.com;
          if ($invalid_referer) {
              return 403;
              # 或 rewrite ^ /static/error.png last;
          }
      }
      

五 日志监控 备份与应急响应

  • 结构化日志与级别:定义 log_format main 并输出 $http_x_forwarded_for,错误日志设为 warn 级别以便告警。
  • 日志轮转与权限:使用 logrotate 按日轮转,限制非必要人员读取,集中到 SIEMELK 做异常检测。
  • 入侵防护联动:配置 fail2ban 监控 /var/log/nginx/access.log,对高频 4xx/5xx、爆破路径等触发封禁。
  • 备份与恢复:定期打包 /etc/nginx/var/log/nginx,变更前先 nginx -t 校验,出现异常按流程回滚。
  • 自动更新与演练:启用 yum-cron 自动安全更新,定期做配置审计与应急演练(隔离、取证、恢复、复盘)。
  • 示例片段:
    • 日志格式
      http {
        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 warn;
      }
      
    • 备份与恢复
      # 备份
      tar -czvf nginx-backup-$(date +%F).tar.gz /etc/nginx /var/log/nginx
      
      # 恢复
      tar -xzvf nginx-backup-*.tar.gz -C /
      nginx -t && systemctl restart nginx
      

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1464638.html

(0)
派派
上一篇 2025-12-03
下一篇 2025-12-03

发表回复

登录后才能评论