Debian上Nginx安全设置怎么做
小樊
44
2025-12-15 22:44:11
Debian 上 Nginx 安全设置实操清单
一 基础加固
- 保持系统与软件为最新:执行 sudo apt update && sudo apt upgrade -y,及时修补漏洞。
- 隐藏版本信息:在 /etc/nginx/nginx.conf 的 http 块加入 server_tokens off;,减少信息泄露。
- 限制可用 HTTP 方法:在需要的 server 块中加入
if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }
直接关闭不支持的方法。
- 合理的超时与连接:在 http 或 server 中设置
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;
在 server 或 location 中应用:
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
- 获取并自动配置证书:安装 certbot 与 python3-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;
四 安全响应头与内容安全策略
- 推荐的基础安全头:在 server 或 http 中添加
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 解析;谨慎设置可执行文件权限,避免运行账户获得不必要的执行能力。