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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan芙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值