域名绑定攻击(也称为Host头攻击或虚拟主机绑定攻击)是指攻击者通过伪造HTTP请求中的Host头,绕过Nginx的反向代理配置,直接访问到后端服务器的攻击方式。
这种攻击可能导致: - 绕过访问控制 - 访问未授权的网站内容 - 可能造成缓存污染 - 潜在的SSRF(服务器端请求伪造)风险
当Nginx配置不当的反向代理时,攻击者可以: 1. 修改HTTP请求中的Host头 2. 使请求被转发到非预期的后端服务器 3. 访问到本应受限制的资源
server {
listen 80;
server_name _; # 匹配任意域名
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
server {
listen 80;
server_name example.com www.example.com; # 只允许特定域名
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
server {
listen 80 default_server;
server_name _;
# 拒绝非法Host头的请求
if ($host !~* ^(example.com|www.example.com)$ ) {
return 444; # 关闭连接
}
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
location / {
proxy_pass http://backend;
proxy_set_header Host $http_host; # 包含端口信息
}
location / {
proxy_pass http://backend;
proxy_set_header Host "example.com"; # 硬编码合法域名
}
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
# 后端服务器应验证X-Forwarded-Host
}
# 只允许来自特定IP的反向代理请求
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
检查当前Nginx配置是否易受攻击:
curl -H "Host: evil.com" http://your-nginx-server
如果返回了正常内容而非错误页面,则可能存在漏洞。
通过以上措施,可以有效防御Nginx反向代理中的域名绑定攻击,提高Web应用的整体安全性。