宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

代码笔记1周前更新
39 0

在使用宝塔面板搭建网站的过程中,许多用户忽略了一个关键的安全隐患:默认情况下,Nginx 会允许通过服务器 IP 地址直接访问站点。如果服务器开启了 HTTPS,这种访问方式可能会暴露 SSL 证书中绑定的真实域名,进而导致服务器 IP 被识别并关联到具体域名,带来潜在安全风险。

为了避免这种情况,我们需要对 Nginx 进行配置优化,禁止IP直接访问,并返回 ERR_EMPTY_RESPONSE(状态码 444)以防止暴露任何内容


为什么要禁止IP直接访问?

  1. 防止SSL证书泄露域名信息
    当有人通过 IP 地址访问你的 HTTPS 服务时,Nginx 默认会返回第一个可用的证书。如果该证书属于你的真实域名,攻击者就能通过扫描 SSL 证书信息获取你的域名。

  2. 防止被扫描器批量识别
    网络中存在大量工具可以扫描全网 IP,读取返回的 SSL 证书信息来构建域名-IP映射,从而开展针对性攻击。


配置目标

我们希望实现以下两个目的:

  • 给 IP 分配一张与自身无关的“伪造”证书(非真实域名)

  • 访问 IP(HTTP 或 HTTPS)统一返回状态码 444,即 ERR_EMPTY_RESPONSE,中止连接响应


配置步骤详解(宝塔面板)

第一步:创建默认站点

  1. 登录宝塔面板

  2. 新建一个网站,域名随意填写(请勿使用你真实域名,如 fake.domain.com

  3. 宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

    宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

  4. 创建后,设置其为 默认站点

  5. 宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

    宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式


第二步:为默认站点配置伪造SSL证书

  • 可以使用 Cloudflare 或其他平台申请一个与真实业务无关的域名证书。

  • 我们这里使用了cdn.bnxb.com来接入,利用CNAME接入的漏洞,我们添加了一个dnspod.com然后生成了属于 dnspod.com的证书
  • 大家可以使用我们已经生成的这张证书,反正只要域名不是你真实的域名就行了,提供如下(可直接使用):

伪造SSL证书内容(示例):

证书(Certificate)

-----BEGIN CERTIFICATE-----
MIIDITCCAsagAwIBAgIUTcEWLzynkLCFCoAC1iDH2vG3EkYwCgYIKoZIzj0EAwIw
gY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTgwNgYDVQQL
Ey9DbG91ZEZsYXJlIE9yaWdpbiBTU0wgRUNDIENlcnRpZmljYXRlIEF1dGhvcml0
eTAeFw0xOTAxMTMxNDMxMDBaFw0zNDAxMDkxNDMxMDBaMGIxGTAXBgNVBAoTEENs
b3VkRmxhcmUsIEluYy4xHTAbBgNVBAsTFENsb3VkRmxhcmUgT3JpZ2luIENBMSYw
JAYDVQQDEx1DbG91ZEZsYXJlIE9yaWdpbiBDZXJ0aWZpY2F0ZTBZMBMGByqGSM49
AgEGCCqGSM49AwEHA0IABAg/hZ9lDHj/f+0jDRAN23TkNEqIi46mCGnwZVD3glxL
l+a1mpfXLHSEFTipnSyQgmvkPYzQGaEIFD0q6W/ZgMujggEqMIIBJjAOBgNVHQ8B
Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB
/wQCMAAwHQYDVR0OBBYEFCEZF6Eyem01XPbgwr6DXLZV1qsQMB8GA1UdIwQYMBaA
FIUwXTsqcNTt1ZJnB/3rObQaDjinMEQGCCsGAQUFBwEBBDgwNjA0BggrBgEFBQcw
AYYoaHR0cDovL29jc3AuY2xvdWRmbGFyZS5jb20vb3JpZ2luX2VjY19jYTAjBgNV
HREEHDAaggwqLmRuc3BvZC5jb22CCmRuc3BvZC5jb20wPAYDVR0fBDUwMzAxoC+g
LYYraHR0cDovL2NybC5jbG91ZGZsYXJlLmNvbS9vcmlnaW5fZWNjX2NhLmNybDAK
BggqhkjOPQQDAgNJADBGAiEAnrequCk/QZOOrcPH6C3Hgcy4SPNUy5rQtku/aYkj
qQoCIQCN6IyYNiXuwG+8jUgJrveiirBjiz2jXZSTEfVAyibjTg==
-----END CERTIFICATE-----

私钥(Private Key)

-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK0HE3hTJQDg6p/fj
nS92eSuRKZEZ5F4grT6tWFKNYVmhRANCAAQIP4WfZQx4/3/tIw0QDdt05DRKiIuO
pghp8GVQ94JcS5fmtZqX1yx0hBU4qZ0skIJr5D2M0BmhCBQ9Kulv2YDL
-----END PRIVATE KEY-----

将这些内容填写到宝塔默认站点的 SSL 设置中,保存即可。

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式


第三步:修改Nginx默认站点配置

点击该默认站点的配置文件(conf),修改最顶部的 server 块如下:

server {
    listen 80 default_server;
    server_name _;
    return 444;
}
server {
    listen 443 ssl default_server;
    server_name _;

    ssl_certificate    /www/server/panel/vhost/cert/default.46.la/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/default.46.la/privkey.pem;
    return 444;
}
宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

大功告成,现在直接访问HTTP://IP 或者HTTPS://IP

就会出现这样的提示

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

宝塔Nginx配置只允许域名访问 禁止IP访问配置教程:防止SSL证书泄露IP的正确方式

不论是通过 HTTP 还是 HTTPS 请求 IP,都会被直接中断连接,不会暴露任何信息。


推荐:使用Nginx 1.19以上版本的原生方式(可选)

Nginx 在 1.19.4+ 版本引入了 ssl_reject_handshake 指令,可直接中止 TLS 握手,避免返回任何证书信息。

示例配置:

server {
    listen 443 ssl http2 default_server;
    server_name _;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_reject_handshake on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    access_log /www/wwwlogs/access.log;
}

✅ 注意:需确认你的 Nginx 编译版本支持该指令(nginx -V 查看),同时使用 OpenSSL 1.1.1i 或以上。


配置效果验证

完成以上配置后,通过浏览器访问:

  • http://<你的IP>

  • https://<你的IP>

会发现页面无法打开,并提示 ERR_EMPTY_RESPONSE,意味着配置生效,任何尝试直接通过 IP 获取内容或证书信息的行为都将失败。


总结

通过以上设置,我们成功实现了以下目标:

  • 禁止 IP 访问站点内容

  • 避免 SSL 泄露真实域名

  • 提升服务器整体安全性

建议所有使用宝塔+Nginx 部署网站的站长都参考本教程进行配置,防止因 IP 暴露而带来的安全风险。

© 版权声明

暂无评论

本文暂时没有评论,来添加一个吧(●'◡'●)