首页主机资讯Nginx在Ubuntu中的安全设置指南

Nginx在Ubuntu中的安全设置指南

时间2025-11-17 21:35:04发布访客分类主机资讯浏览732
导读:Nginx 在 Ubuntu 的安全设置指南 一 基础加固与最小暴露面 更新系统与组件:执行 sudo apt update && sudo apt upgrade -y,保持 Nginx 与依赖为最新安全版本。 防火墙仅...

Nginx 在 Ubuntu 的安全设置指南

一 基础加固与最小暴露面

  • 更新系统与组件:执行 sudo apt update & & sudo apt upgrade -y,保持 Nginx 与依赖为最新安全版本。
  • 防火墙仅放行必要端口:使用 UFW 放行 SSH(22)HTTP(80)HTTPS(443),并启用防火墙。
    示例:sudo ufw allow 22/tcp;sudo ufw allow 80/tcp;sudo ufw allow 443/tcp;sudo ufw enable。
  • 隐藏版本与指纹:在 /etc/nginx/nginx.confhttp 块设置 server_tokens off; ,减少信息泄露。
  • 限制可用 HTTP 方法:在需要的 server 块中仅允许 GET/HEAD/POST,其余返回 444 关闭连接。
  • 合理的超时与缓冲:设置 client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; ,降低慢速攻击与资源占用。
  • 日志与监控:定义结构化日志格式,记录 $remote_addr、X-Forwarded-For 等关键字段,便于审计与溯源。
  • 资源与速率限制:在 http 定义共享内存区,在 server/location 应用 limit_req,抑制暴力扫描与突发流量。
  • 错误页面安全:统一错误页面并标记为 internal,避免泄露目录结构与内部路径。

二 传输加密与 HTTPS 部署

  • 获取证书:使用 Certbot 一键申请并自动配置 Let’s Encrypt 证书(同时支持自动续期)。
    示例:sudo apt install -y certbot python3-certbot-nginx;sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com。
  • 强制 HTTPS:新增 listen 80server 块,返回 301 跳转至 https://$host$request_uri
  • 现代 TLS 配置:启用 TLSv1.2/TLSv1.3,使用 ECDHEAEAD 套件,开启 HTTP/2,并开启 OCSP Stapling 提升握手与验证性能与安全。
  • 证书与密钥路径:将 ssl_certificate 指向 fullchain.pemssl_certificate_key 指向私钥 domain.key
  • 可选 WSS:如需 WebSocket Secure,在 location /wss/ 使用 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “Upgrade”; 反向代理到后端 WebSocket 服务。

三 访问控制与速率限制

  • 速率限制:在 http 定义 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; ,在 location / 应用 limit_req zone=one burst=5 nodelay; ,平滑突发并抑制滥用。
  • 方法限制:仅允许 GET/HEAD/POST,对 PUT/DELETE/TRACE 等危险或不必要的动词直接拒绝(返回 444)。
  • 连接与缓冲:结合 worker_processes auto; worker_connections 1024; client_max_body_size 8m; 等,防止资源耗尽与放大攻击。
  • 防火墙层面:仅开放 22/80/443,对管理口与数据库等后端端口不做公网暴露。

四 运行环境与持续运维

  • 进程与权限:以 www-data 运行 Nginx,使用最小权限原则;静态资源与日志目录设置合适的 ownershipmode
  • 自动安全更新:安装并启用 unattended-upgrades,仅勾选安全更新,减少暴露窗口。
  • 配置与证书备份:定期备份 /etc/nginx/var/log/nginx,并验证配置语法 sudo nginx -t 后再重载。
  • 监控与指标:部署 nginx-prometheus-exporter 暴露 /nginx_status,结合 Prometheus/Grafana 做可用性与攻击面观测。
  • 变更流程:遵循“编辑→语法检查→灰度/重载→回滚预案”的闭环,变更前先备份。

五 可直接使用的配置片段

# /etc/nginx/nginx.conf 关键片段
http {
    
  include       mime.types;
    
  default_type  application/octet-stream;
    

  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;
    

  server_tokens off;
    

  # 速率限制:每 IP 10 r/s,突发 5
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    

  client_max_body_size 8m;
    
  client_body_buffer_size 10K;
    
  client_header_buffer_size 1k;
    
  large_client_header_buffers 2 1k;
    

  client_body_timeout 12;
    
  client_header_timeout 12;
    
  keepalive_timeout 15;
    
  send_timeout 10;
    

  # 现代 TLS 套件与 HTTP/2
  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 on;
    
  ssl_session_cache shared:SSL:10m;
    
  ssl_session_timeout 1d;
    
  ssl_stapling on;
    
  ssl_stapling_verify on;
    
  resolver 8.8.8.8 8.8.4.4 valid=300s;
    
  resolver_timeout 5s;
    

  include /etc/nginx/conf.d/*.conf;
    
  include /etc/nginx/sites-enabled/*;

}

# /etc/nginx/sites-available/example.com 关键片段
server {
    
  listen 80;
    
  server_name example.com www.example.com;
    
  return 301 https://$host$request_uri;

}


server {
    
  listen 443 ssl http2;
    
  server_name example.com www.example.com;
    

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    

  root /var/www/example.com/html;
    
  index index.html;


  # 仅允许 GET/HEAD/POST
  if ($request_method !~ ^(GET|HEAD|POST)$) {
    
    return 444;

  }
    

  # 速率限制
  limit_req zone=one burst=5 nodelay;
    

  # 安全错误页面
  error_page 404 500 502 503 504 /error.html;

  location = /error.html {
    
    internal;
    
    root /var/www/secure-errors;

  }


  location / {
    
    try_files $uri $uri/ =404;

  }


  # 可选:WebSocket Secure
  # location /wss/ {
    
  #   proxy_pass http://127.0.0.1:8080;
    
  #   proxy_http_version 1.1;
    
  #   proxy_set_header Upgrade $http_upgrade;
    
  #   proxy_set_header Connection "Upgrade";
    
  #   proxy_read_timeout 3600s;

  # }

}
    
  • 启用站点:sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  • 检查与生效:sudo nginx -t & & sudo systemctl reload nginx

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


若转载请注明出处: Nginx在Ubuntu中的安全设置指南
本文地址: https://pptw.com/jishu/749367.html
Ubuntu系统如何升级Nginx到最新版本 Ubuntu上Nginx性能优化有哪些技巧

游客 回复需填写必要信息