温馨提示×

Debian上Nginx安全设置怎么做

小樊
44
2025-12-15 22:44:11
栏目: 智能运维

Debian 上 Nginx 安全设置实操清单

一 基础加固

  • 保持系统与软件为最新:执行 sudo apt update && sudo apt upgrade -y,及时修补漏洞。
  • 隐藏版本信息:在 /etc/nginx/nginx.confhttp 块加入 server_tokens off;,减少信息泄露。
  • 限制可用 HTTP 方法:在需要的 server 块中加入
    if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }
    直接关闭不支持的方法。
  • 合理的超时与连接:在 httpserver 中设置
    client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10;
    events 中设置 worker_connections 1024;(按服务器规格调整)。
  • 日志与监控:使用明确的日志格式并提升错误日志级别,便于审计与告警:
    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;
  • 运行账户最小权限:确保 Nginx 以非 root 运行(Debian 包默认常见为 www-data),避免使用 root 启动 worker。

二 访问控制与请求限制

  • 速率与并发限制:在 http 中定义共享内存区域并限制请求速率与并发连接数,缓解 DoS/暴力请求
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    serverlocation 中应用:
    limit_req zone=one burst=5 nodelay; limit_conn addr 100;
  • 敏感路径白名单:对后台等敏感路径限制来源 IP,并叠加基础认证
    location /admin/ {
    allow 192.168.1.0/24; allow 10.0.0.0/8; deny all;
    auth_basic “Restricted Access”; auth_basic_user_file /etc/nginx/.htpasswd; }
  • 禁用特定目录的脚本执行:对上传/附件等目录禁止解析 PHP,降低上传 webshell 风险
    location ~ /(attachments|upload)/.*.(php|php5)?$ { deny all; }
  • 精细化访问控制:可按需禁止某些路径或文件类型的访问(如包含敏感信息的目录、备份文件等)。

三 传输加密与 HTTPS

  • 获取并自动配置证书:安装 certbotpython3-certbot-nginx,一键申请并配置
    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    证书到期自动续期可通过 sudo certbot renew --dry-run 测试。
  • 强制 HTTPS 与 HSTS:将 HTTP(80) 重定向到 HTTPS(443),并设置 Strict-Transport-Security
    server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$host$request_uri; }
    server { listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always; … }
  • 安全的 SSL/TLS 参数:仅启用 TLSv1.2/TLSv1.3,使用强密码套件并开启 OCSP Stapling
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
    ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;

四 安全响应头与内容安全策略

  • 推荐的基础安全头:在 serverhttp 中添加
    add_header X-Frame-Options “SAMEORIGIN”;
    add_header X-XSS-Protection “1; mode=block”;
    add_header X-Content-Type-Options “nosniff”;
    add_header Referrer-Policy “strict-origin-when-cross-origin”;
    add_header Content-Security-Policy “default-src ‘self’ http: https: data: blob: ‘unsafe-inline’”;
    说明:CSP 可按站点实际资源来源进行收紧,避免过度放宽。
  • 可选增强头:如 X-Permitted-Cross-Domain-Policies 等,视业务需求添加。

五 防火墙与入侵防护及权限最小化

  • 防火墙:使用 UFW 仅开放必要端口
    sudo apt install -y ufw
    sudo ufw allow 22/tcp
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable && sudo ufw status
  • 入侵防护:部署 fail2ban 监控 Nginx 日志并自动封禁恶意来源(如针对 80/443 的暴力访问)
    sudo apt install -y fail2ban
    按实际日志路径与频率配置 jail 规则。
  • 系统与账户安全:保持系统更新、禁用不必要的服务、设置强密码策略禁用 root 直登、使用 SSH 密钥 登录,降低服务器整体攻击面。
  • 文件与进程权限最小化:网站目录由 root 拥有,Nginx/PHP-FPM 运行账户仅授予读取网站文件与写入上传目录的权限;对上传目录禁用 PHP 解析;谨慎设置可执行文件权限,避免运行账户获得不必要的执行能力。

0