插件窝 干货文章 Nginx的运维安全和安全运维

Nginx的运维安全和安全运维

Nginx 配置 安全 使用 931    来源:    2025-04-20

Nginx 运维安全与安全运维指南

一、Nginx 基础安全配置

1. 最小化安装与版本管理

  • 使用最新稳定版:定期更新到最新稳定版本以获取安全补丁
  • 移除无用模块:编译时仅包含必要模块 ./configure --without-http_autoindex_module
  • 删除默认页面:移除 /usr/share/nginx/html/* 下的默认文件

2. 权限与用户配置

user nginx;  # 使用专用低权限用户
worker_processes auto;  # 自动设置worker进程数

3. 敏感信息保护

server_tokens off;  # 隐藏Nginx版本信息

二、HTTPS 安全配置

1. SSL/TLS 最佳实践

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

2. HSTS 配置

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

3. 证书管理

  • 使用 Let's Encrypt 自动续期
  • 禁用弱加密算法 (如 SHA-1)

三、访问控制与防护

1. IP 访问限制

location /admin {
    allow 192.168.1.0/24;
    deny all;
}

2. 速率限制

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location / {
        limit_req zone=one burst=20;
    }
}

3. Web 应用防火墙

  • 使用 ModSecurity 模块
  • 配置 OWASP CRS 规则集

四、日志与监控

1. 详细日志配置

log_format security '$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/security.log security;

2. 日志分析

  • 使用 ELK 堆栈或 Graylog 分析日志
  • 设置异常请求告警 (如 400/500 错误激增)

3. 实时监控

  • 使用 Prometheus + Grafana 监控 Nginx 指标
  • 监控关键指标:请求率、错误率、响应时间

五、高级安全配置

1. 防DDoS配置

# 限制连接数
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;

# 限制特定请求类型
limit_req_zone $binary_remote_addr zone=flood:10m rate=30r/m;

2. 内容安全策略 (CSP)

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' cdn.example.com";

3. 安全头部配置

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";

六、安全运维实践

1. 配置审计

  • 定期使用 nginx -t 测试配置
  • 使用工具如 Lynis 进行安全审计
  • 实施配置变更管理流程

2. 备份策略

  • 配置文件备份 /etc/nginx/
  • 日志轮转配置 /etc/logrotate.d/nginx
  • 证书备份 /etc/letsencrypt/

3. 应急响应

  • 准备快速关闭恶意流量的脚本
  • 制定DDoS响应预案
  • 保留取证用的日志和内存dump

七、常见漏洞防护

1. 目录遍历防护

location ~* \.(php|asp|jsp)$ {
    deny all;
}

2. HTTP 方法限制

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

3. SQL 注入防护

set $block_sql_injections 0;
if ($query_string ~ "union.*select.*\(") {
    set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
    return 403;
}

通过以上全面的安全配置和运维实践,可以显著提升Nginx服务器的安全性,防范大多数常见攻击。安全是一个持续的过程,需要定期审查和更新安全策略。