作为IT工程师,修复Nginx漏洞需要系统性的方法。以下是详细修复方案:
nginx -v
检查已知漏洞: - CVE数据库:https://cve.mitre.org/ - Nginx安全公告:http://nginx.org/en/security_advisories.html
# Ubuntu/Debian
sudo apt update
sudo apt upgrade nginx
# CentOS/RHEL
sudo yum update nginx
resolver 8.8.8.8 valid=10s;
resolver_timeout 5s;
http2_max_requests 1000;
http2_max_concurrent_streams 128;
server {
# 禁用不必要HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
# 隐藏Nginx版本号
server_tokens off;
# 安全头部
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
# 限制缓冲区大小防溢出
client_body_buffer_size 16k;
client_header_buffer_size 1k;
client_max_body_size 1m;
large_client_header_buffers 4 8k;
}
禁用危险模块:
- 移除或注释不需要的模块如 ngx_http_autoindex_module
- 检查已编译模块:
nginx -V 2>&1 | grep -- '--with-'
# 设置正确权限
chown -R nginx:nginx /var/www/html
chmod -R 750 /var/www/html
# 限制配置文件权限
chmod 640 /etc/nginx/conf.d/*
# 错误日志监控配置
error_log /var/log/nginx/error.log warn;
# 访问日志记录更多安全相关信息
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
nginx -t
考虑添加ModSecurity等WAF:
load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
通过以上综合措施,可以显著提高Nginx服务器的安全性。对于关键业务系统,建议在测试环境验证所有更改后再部署到生产环境。