centos下nginx安全设置指南
导读:CentOS 下 Nginx 安全设置指南 一 基础加固 系统与软件更新:保持系统与 Nginx 为最新稳定版,及时修补漏洞。 执行:sudo yum update -y 最小权限运行:创建专用低权限用户(如 nginx/nobod...
CentOS 下 Nginx 安全设置指南
一 基础加固
- 系统与软件更新:保持系统与 Nginx 为最新稳定版,及时修补漏洞。
- 执行:
sudo yum update -y
- 执行:
- 最小权限运行:创建专用低权限用户(如 nginx/nobody),禁止登录,用该用户启动 worker。
- 示例:
user nobody;(在 /etc/nginx/nginx.conf 的顶层配置)
- 示例:
- 隐藏版本信息:在 http 或 server 块关闭版本暴露。
- 配置:
server_tokens off;
- 配置:
- 禁用目录浏览:避免泄露目录结构。
- 配置:
autoindex off;(或编译期不启用 autoindex 模块)
- 配置:
- 隐藏后端与敏感响应头:
- 配置:
proxy_hide_header X-Powered-By; proxy_hide_header Server;
- 配置:
- 访问控制示例:对管理路径限制来源 IP。
- 配置:
location /admin { allow 192.168.1.0/24; deny all; }
- 配置:
- 日志与监控:启用结构化日志,便于审计与告警。
- 示例:
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;
- 示例:
以上措施能显著降低信息泄露与滥用风险,并提升可运维性与可观测性。
二 传输加密与 HTTPS
- 防火墙放行:仅开放 80/443。
- 执行:
sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload
- 执行:
- 获取证书:优先使用 Let’s Encrypt 自动化签发并自动配置 Nginx。
- 执行(CentOS 7+):
sudo yum install -y epel-release sudo yum install -y certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 执行(CentOS 7+):
- 强制 HTTPS 与 HSTS:将所有 HTTP 重定向到 HTTPS,并启用 HSTS。
server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; } - 自签名证书仅用于测试环境,生产环境务必使用受信任 CA 签发证书。
三 请求限制与资源防护
- 限制请求速率:缓解暴力扫描与简单 DoS。
http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { location / { limit_req zone=one burst=5 nodelay; } } } - 合理超时与连接控制:降低慢速攻击与连接耗尽风险。
client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; - 限制请求体大小:防止超大上传导致资源被占满。
- 示例:
client_max_body_size 10m;(按业务调整)
- 示例:
- 禁用危险与不必要的 HTTP 方法:仅允许业务所需方法。
if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; # 直接关闭连接 } - 目录与文件执行限制:对上传/临时目录禁止脚本执行。
location ~* ^/(uploads|templets|data)/.*\.(php|php5)$ { return 444; } - 可选 WAF:部署 ModSecurity 等 WAF 模块增强对 SQLi/XSS 等攻击的防护能力。
四 安全响应头与内容防护
- 推荐安全头(按站点策略微调):
add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trustedscripts.example.com; object-src 'none'; " always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - 说明:
- X-Frame-Options 防点击劫持;X-Content-Type-Options 防 MIME 嗅探;X-XSS-Protection 为旧浏览器提供 XSS 过滤;CSP 大幅降低 XSS/数据注入风险;HSTS 强制浏览器使用 HTTPS。
五 运维与持续安全
- 配置语法检查与热重载:变更前先校验,再平滑生效。
- 执行:
sudo nginx -t sudo systemctl reload nginx
- 执行:
- 服务与开机自启:
- 执行:
sudo systemctl enable --now nginx sudo systemctl status nginx
- 执行:
- 入侵防护:使用 fail2ban 对暴力访问进行自动封禁。
- 执行:
sudo yum install -y fail2ban sudo systemctl enable --now fail2ban
- 执行:
- 日志轮转与留存:配置 logrotate 定期压缩归档,避免磁盘被占满。
- 定期更新与漏洞监测:持续更新 Nginx 与依赖组件,关注官方安全公告与 CVE。
- 配置审计:上线前用 Gixy 等工具检查常见错误配置与安全隐患。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos下nginx安全设置指南
本文地址: https://pptw.com/jishu/756835.html
