centos上nginx安全设置有哪些
小樊
34
2025-11-12 00:02:48
CentOS上Nginx安全设置关键措施
1. 基础安全防护
- 隐藏Nginx版本信息:在
http或server块中添加server_tokens off;,避免响应头中泄露Nginx版本(如Server: nginx/1.25.3),减少针对性攻击风险。可通过curl -I http://localhost验证,响应头中无版本信息。
- 禁用危险HTTP方法:通过
if语句限制非必要请求方法(如TRACE、PUT、DELETE),防止恶意利用。例如全局禁止非GET、POST方法:if ($request_method !~ ^(GET|POST)$) { return 403; };或在location块中针对特定路径(如/admin)限制。
- 权限与用户管理:以非root用户(如
nginx)运行Nginx进程(user nginx;),降低权限提升风险;设置配置文件权限为640(chmod 640 /etc/nginx/nginx.conf),目录权限为755(chmod -R 755 /var/www),避免未授权访问。
2. 访问控制策略
- 基于IP的限制:使用
allow/deny指令限制敏感路径或全站的IP访问。例如,仅允许内部网段访问/admin:location /admin { allow 192.168.1.0/24; deny all; };或通过geo模块实现动态IP黑名单(如/etc/nginx/conf.d/blockips.conf中定义黑名单,if ($block_ip) { return 403; })。
- 基本身份验证:对敏感路径(如
/protected)启用用户名密码验证。步骤:用htpasswd创建密码文件(sudo htpasswd -c /etc/nginx/.htpasswd username);在Nginx配置中添加auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd;。
- 防盗链配置:防止其他站点盗用静态资源(如图片、CSS)。通过
valid_referers指令限制来源,例如:location ~* \.(jpg|gif|png)$ { valid_referers none blocked your-domain.com; if ($invalid_referer) { return 403; } }。
3. HTTPS与加密配置
- 强制HTTPS跳转:配置HTTP监听80端口并重定向到HTTPS,确保所有流量加密。例如:
server { listen 80; server_name your-domain.com; return 301 https://$host$request_uri; }。
- SSL/TLS加固:启用TLS 1.2及以上安全协议(禁用SSLv2/SSLv3),配置强加密套件(如
EECDH+AESGCM:EDH+AESGCM),启用HSTS(HTTP Strict Transport Security)强制浏览器使用HTTPS。示例:ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;" always;。
- 证书管理:使用Let’s Encrypt免费证书(通过
certbot工具自动化申请)或商业证书,确保证书未过期且在有效期内。
4. 高级安全防护
- 安全HTTP头设置:添加响应头防御常见Web攻击。例如:
X-Frame-Options "SAMEORIGIN"(防止点击劫持)、X-XSS-Protection "1; mode=block"(启用浏览器XSS过滤)、Content-Security-Policy "default-src 'self'"(限制资源加载来源)、X-Content-Type-Options "nosniff"(防止MIME类型嗅探)。
- 请求速率限制:使用
limit_req模块限制请求速率,防御CC攻击。例如,全局设置速率限制(http { limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; }),在server块中应用(limit_req zone=req_limit burst=20 nodelay;),允许每秒10个请求,突发20个请求排队。
- 目录与文件防护:禁用自动目录索引(
autoindex off;),防止暴露目录结构;限制敏感文件访问(如.conf、.log、.bak),例如:location ~* \.(conf|log|bak)$ { deny all; }。
5. 系统与运维安全
- 防火墙配置:使用
firewalld限制仅开放必要端口(80、443),阻止非法访问。例如:sudo firewall-cmd --permanent --zone=public --add-service=http; sudo firewall-cmd --permanent --zone=public --add-service=https; sudo firewall-cmd --reload。
- 日志与监控:开启详细访问日志(
access_log /var/log/nginx/access.log;)和错误日志(error_log /var/log/nginx/error.log;),定期分析日志(如用grep查找403、500错误),及时发现异常行为。
- 定期更新与漏洞管理:定期更新Nginx及依赖库(
sudo yum update nginx -y),修复已知漏洞;通过nginx -V检查编译参数,移除未使用的高危模块(如http_rewrite_module)。