插件窝 干货文章 Nginx怎么防止被域名恶意解析

Nginx怎么防止被域名恶意解析

server yourdomain 域名 Nginx 53    来源:    2025-04-24

防止Nginx被域名恶意解析的解决方案

域名恶意解析是指他人将你的服务器IP地址绑定到他们自己的域名上,从而可能造成流量劫持、SEO降权或安全风险。以下是几种有效的防护方法:

1. 默认服务器配置

配置一个默认的server块,拒绝所有未明确配置的域名访问:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    return 444; # 直接关闭连接
    # 或者返回错误页面
    # return 403;
}

2. 基于域名白名单

只允许特定的域名访问:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # 其他配置...
}

server {
    listen 80 default_server;
    server_name _;
    return 403;
}

3. HTTPS证书验证

配置HTTPS并只对合法域名颁发证书,非法域名无法通过HTTPS访问:

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;
    # 其他配置...
}

server {
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /path/to/dummy/cert.pem;
    ssl_certificate_key /path/to/dummy/key.pem;
    return 403;
}

4. 基于HTTP Host头的验证

server {
    listen 80;
    server_name _;

    if ($host !~* ^(yourdomain.com|www.yourdomain.com)$ ) {
        return 403;
    }

    # 其他配置...
}

5. 防火墙层面限制

在服务器防火墙层面限制访问:

# 只允许特定域名访问80和443端口
iptables -A INPUT -p tcp --dport 80 -m string --string "Host: yourdomain.com" --algo bm -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -m string --string "Host: yourdomain.com" --algo bm -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP

6. 使用Nginx的$http_referer验证

if ($http_referer !~* (yourdomain.com|www.yourdomain.com)) {
    return 403;
}

最佳实践建议

  1. 组合使用多种方法:例如同时使用默认服务器拒绝和HTTPS证书验证
  2. 监控日志:定期检查Nginx访问日志,发现异常域名解析
  3. CDN防护:使用CDN服务,隐藏真实服务器IP
  4. DNS层面防护:确保DNS解析正确,避免暴露服务器IP

配置完成后,记得测试并重载Nginx配置:

nginx -t && nginx -s reload

这些措施可以有效防止他人将你的服务器IP恶意绑定到他们自己的域名上。