Nginx安全相关的参数总结

NGINX 安全配置参数总结

1. 基本安全配置:减少信息泄露和攻击面

这些参数主要用于隐藏服务器细节、限制不必要功能,并控制进程权限。

  • server_tokens
    解释 :控制是否在 HTTP 响应头和错误页面中显示 NGINX 版本信息。默认开启,会泄露版本(如 "Server: nginx/1.18.0"),便于攻击者针对特定漏洞发起攻击。
    配置示例 (在 http 块中):

    复制代码
    http {
        server_tokens off;
    }

    安全理由 :隐藏版本信息减少针对性攻击。结合第三方模块(如 headers-more)可进一步自定义或移除 Server 头。
    最佳实践 :在生产环境中始终关闭。如果需要完全移除头,使用 more_set_headers 'Server: ';(需安装 nginx-extras 模块)。

  • user
    解释 :指定 NGINX worker 进程运行的用户和组。默认是 root,这很危险,因为进程被劫持时攻击者可获 root 权限。
    配置示例(主配置文件顶部):

    复制代码
    user nginx nginx;

    安全理由 :遵循最小权限原则,运行在非 root 用户下限制潜在损害。创建专用用户如 "nginx" 并设置文件权限(chown -R nginx:nginx /var/wwwchmod -R 750 /var/www)。
    最佳实践:结合 SELinux 或 AppArmor 进一步隔离进程。

  • worker_processesworker_rlimit_nofile
    解释worker_processes 设置 worker 进程数(通常设为 CPU 核数);worker_rlimit_nofile 限制每个进程打开的文件描述符数,防止资源耗尽攻击。
    配置示例

    复制代码
    worker_processes auto;
    worker_rlimit_nofile 10000;

    安全理由 :限制资源使用防 DoS。auto 根据 CPU 自动调整。
    最佳实践:监控系统资源,避免过高设置导致内存溢出。

  • 禁用不必要模块
    解释 :NGINX 默认编译了许多模块(如 autoindex、userid),未使用时应禁用以缩小攻击面。需在编译时指定。
    配置示例(编译命令):

    复制代码
    ./configure --without-http_autoindex_module --without-http_userid_module --without-http_auth_basic_module
    make && make install

    安全理由 :移除未用模块减少潜在漏洞。使用 nginx -V 检查已启用模块。
    最佳实践 :仅启用必需模块,如 http_ssl_module 用于 HTTPS。

2. SSL/TLS 配置:加密通信并防范中间人攻击

HTTPS 是现代 Web 的标配,这些参数确保加密安全。

  • ssl_protocols
    解释 :指定支持的 TLS 协议版本。默认 TLSv1.2 和 TLSv1.3,但需显式禁用旧版如 TLSv1.0/1.1。
    配置示例 (在 server 块中):

    复制代码
    server {
        listen 443 ssl;
        ssl_protocols TLSv1.2 TLSv1.3;
    }

    安全理由 :旧协议有已知漏洞(如 POODLE 攻击)。TLSv1.3 提供更好性能和安全。
    最佳实践:结合 Let's Encrypt 自动续期证书。

  • ssl_ciphers
    解释 :定义允许的加密套件。优先使用支持前向保密(PFS)的强套件。
    配置示例

    复制代码
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

    安全理由 :弱套件易被破解(如 RC4、MD5)。设置 ssl_prefer_server_ciphers on; 让服务器优先选择安全套件。
    最佳实践:使用 Mozilla 的 SSL 配置生成器测试。

  • ssl_certificatessl_certificate_key
    解释 :指定服务器证书和私钥路径。证书链需完整以避免浏览器警告。
    配置示例

    复制代码
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    安全理由 :加密数据传输,防窃听。使用链证书(cat server.crt intermediate.crt > chained.crt)。
    最佳实践:权限设为 600,仅 root 可读。

  • ssl_session_cachessl_session_timeoutssl_session_tickets
    解释 :缓存 SSL 会话以复用,减少握手开销;超时控制缓存时长;票据用于会话恢复。
    配置示例

    复制代码
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    安全理由off 票据防会话劫持攻击。共享缓存优化多核系统。
    最佳实践 :结合 ssl_stapling on;ssl_stapling_verify on; 启用 OCSP Stapling,提升性能和隐私。

  • Strict-Transport-Security (HSTS)
    解释 :通过响应头强制浏览器使用 HTTPS。
    配置示例 (在 server 块中):

    复制代码
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    安全理由 :防协议降级和中间人攻击。preload 允许提交到浏览器预加载列表。
    最佳实践:先从小 max-age 测试,避免锁定错误配置。

3. 访问控制和速率限制:防范滥用和 DoS

这些参数限制访问源和请求频率。

  • allowdeny
    解释 :基于 IP 允许或拒绝访问。常用于保护管理路径。
    配置示例 (在 location 块中):

    复制代码
    location /admin {
        allow 192.168.1.0/24;
        deny all;
    }

    安全理由 :白名单限制敏感区域访问,防未授权入侵。
    最佳实践 :结合 GeoIP 模块实现地理限制(如 deny 10.0.0.0/8;)。

  • limit_req_zonelimit_req
    解释 :定义速率限制区和应用规则。基于 IP 限制请求速率。
    配置示例http 块):

    复制代码
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    location 块):

    复制代码
    limit_req zone=one burst=5 nodelay;

    安全理由 :防暴力破解和 DDoS。burst 允许突发,nodelay 立即响应。
    最佳实践:为登录页设低速率(如 5r/m),一般页设高(如 10r/s)。

  • limit_conn_zonelimit_conn
    解释 :限制每个 IP 的并发连接数。
    配置示例

    复制代码
    limit_conn_zone $binary_remote_addr zone=conn:10m;
    limit_conn conn 10;

    安全理由 :防资源耗尽攻击。
    最佳实践:结合 Fail2Ban 自动封禁违规 IP。

  • client_max_body_sizeclient_body_buffer_size
    解释 :限制请求体大小和缓冲,防缓冲溢出和 DoS。
    配置示例

    复制代码
    client_max_body_size 1m;
    client_body_buffer_size 1k;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 1k;

    安全理由 :小缓冲限制大请求攻击。如果需上传文件,针对性增大。
    最佳实践:监控日志,调整以平衡安全和功能。

4. 安全响应头:浏览器侧防护

这些头通过 add_header 添加,增强客户端安全。

  • X-Frame-Options
    解释 :防点击劫持,控制是否允许 iframe 嵌入。
    配置示例

    复制代码
    add_header X-Frame-Options "SAMEORIGIN" always;

    安全理由:防止页面被恶意站点嵌入。选项:DENY(完全禁)、SAMEORIGIN(同源允)。

  • X-XSS-Protection
    解释 :启用浏览器内置 XSS 过滤(针对旧浏览器)。
    配置示例

    复制代码
    add_header X-XSS-Protection "1; mode=block" always;

    安全理由:阻塞检测到的反射 XSS 攻击。

  • X-Content-Type-Options
    解释 :防止 MIME 类型嗅探攻击。
    配置示例

    复制代码
    add_header X-Content-Type-Options "nosniff" always;

    安全理由:确保浏览器严格遵守 Content-Type,避免执行恶意脚本。

  • Content-Security-Policy (CSP)
    解释 :定义内容加载策略,限制资源源。
    配置示例

    复制代码
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.com;" always;

    安全理由 :防 XSS 和数据注入。逐步收紧策略。
    最佳实践:使用报告模式(report-uri)监控违规。

  • Referrer-Policy
    解释 :控制 referrer 头发送。
    配置示例

    复制代码
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    安全理由:减少跨站信息泄露。

5. 日志和监控:检测与响应

  • access_logerror_log
    解释 :记录访问和错误日志。自定义格式捕获更多细节。
    配置示例

    复制代码
    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;

    安全理由 :日志用于审计攻击(如 404 扫描)。设置 warn 级别过滤噪音。
    最佳实践:使用 logrotate 轮换日志,集成 ELK Stack 或 Splunk 实时监控。

  • log_not_foundaccess_log off (针对敏感路径)
    解释 :禁用某些路径的日志以减少开销。
    配置示例

    复制代码
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    安全理由:隐藏敏感文件(如 .git、.env),防目录遍历。

6. 高级安全:WAF、文件保护和更新

  • ModSecurity 集成
    解释 :启用开源 WAF 模块过滤攻击。
    配置示例

    复制代码
    load_module modules/ngx_http_modsecurity_module.so;
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;

    安全理由 :实时检测 SQL 注入、XSS 等。使用 OWASP Core Rule Set。
    最佳实践:先学习模式监控,再切换阻塞模式。

  • 保护敏感文件
    解释 :拒绝访问备份文件、配置文件等。
    配置示例

    复制代码
    location ~* \.(bak|conf|sql|ini|log|sh|swp)$ {
        deny all;
    }

    安全理由:防信息泄露,如数据库凭证。

  • 限制 HTTP 方法
    解释 :仅允许必要方法。
    配置示例

    复制代码
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 405;
    }

    安全理由:防 TRACE 等方法滥用。

  • 定期更新和审计

    始终保持 NGINX 最新版本,监控安全公告(nginx.org/security_advisories)。使用工具如 Gixy 扫描配置漏洞,或 SSL Labs 测试 TLS。

相关推荐
气π3 小时前
【流程】——若依项目前后端打包发布到服务器
运维·服务器·oracle
YJlio3 小时前
桌面工具学习笔记(11.3):ZoomIt——演示、录屏与线上会议的放大标注神器
笔记·学习·安全
代码游侠3 小时前
复习——Linux 系统编程
linux·运维·c语言·学习·算法
qq_371802113 小时前
【自动发文测试】Windows安全
windows·安全
南京周全安全3 小时前
布利斯的安全“预”谋:以计划织就全周期防护网
安全
共绩算力3 小时前
给 TRAE SOLO 一台服务器,它能干什么?
运维·服务器
旺旺的碎冰冰~3 小时前
(十三)实例:数字签名的安全证明
安全
DKunYu3 小时前
3.负载均衡-LoadBalance
java·运维·spring cloud·微服务·负载均衡
2401_831501733 小时前
Devops之Docker安装和使用
运维·docker·devops