确保 Nginx 服务器的安全性是维护网站或 Web 应用程序防护的第一道防线。以下是一些关键的安全配置实践,旨在提高 Nginx 的安全性,防止常见威胁和漏洞。
1. 更新与加固
- 保持最新版本:始终运行最新的 Nginx 版本,及时修复已知的安全漏洞。
- 禁用不必要的模块:移除未使用的模块,减少攻击面。
2. 配置防火墙
- 限制访问:仅允许必要的 IP 或子网访问 Nginx。
- 开放端口:只开启必需的服务端口,如 80(HTTP)和 443(HTTPS),并禁止其他端口。
3. TLS/SSL 设置
- 启用 HTTPS:强制使用 HTTPS,拒绝纯 HTTP 访问。
- 强密码和证书:使用强大的加密套件,如 TLS 1.3,并定期更换 SSL 证书。
- HSTS:实施 HTTP Strict Transport Security,强制浏览器记住网站只能通过 HTTPS 访问。
4. 保护敏感信息
- 隐藏版本信息:防止泄露 Nginx 版本和其他敏感信息。
server_tokens off; - 限制目录列表:禁止目录浏览。
autoindex off;
5. DOS/DDoS 防护
- 限制速率:控制来自单一 IP 的请求频率,避免资源耗尽。
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; limit_req zone=mylimit burst=5 nodelay; - IP 黑白名单:阻止恶意 IP,或者只允许信任的 IP 访问。
6. 安全日志
- 增强日志记录:记录详细的访问信息以便审查异常活动。
- 错误页面自定义:自定义错误页面,提供友好提示而不是服务器内部信息。
7. 网站根目录和文件权限
- 严格文件权限:确保文件和目录权限最小化,避免敏感文件被公开访问。
- root 目录:指定安全的 root 目录,不要使用高权限目录。
8. 代理缓存
- 缓存设置:合理利用缓存,减轻服务器压力,但确保缓存策略不会暴露敏感数据。
9. 使用 WAF
- 部署 Web 应用防火墙:如 ModSecurity 或 OWASP Core Rule Set,拦截恶意请求。
10. 定期审核与监控
- 日志分析:定期审查日志,查找可疑行为。
- 渗透测试:定期进行安全审计和渗透测试,验证防御措施的有效性。
示例配置片段
以下是一个简化版的安全 Nginx 配置示例:
server {
listen 443 ssl http2;
# SSL 设置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.3;
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
location / {
# 限制速率
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
# 安全日志
error_log /var/log/nginx/error.log;
# 限制目录列表
autoindex off;
# 隐藏版本信息
server_tokens off;
# 安全头
more_set_headers "X-XSS-Protection: 1; mode=block";
more_set_headers "X-Frame-Options: DENY";
more_set_headers "X-Content-Type-Options: nosniff";
# 增强CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self'; frame-src 'none'; object-src 'none';";
}
}
# 非 SSL 端口重定向
server {
listen 80;
server_name example.com www.example.com;
rewrite ^(.*)$ https://example.com/$1 permanent;
}
此配置结合了多个安全实践,涵盖加密、DDoS 防护、安全头注入等多个方面。不过,实际生产环境中应根据具体需求和环境进行适当调整。
通过遵循上述建议和不断的学习,可以大大提升 Nginx 服务器的安全性,降低遭受攻击的风险。