宝塔Nginx配置只允许域名访问 禁止直接IP访问 防止SSL泄露IP 返回ERR_EMPTY_RESPONS
宝塔的NGINX用的非常多,但是宝塔默认没有禁止别人通过IP访问,因此很容易被扫描器扫描到,加上NGINX的不是漏洞的漏洞,IP访问HTTPS的话,会自动匹配第一个站点的SSL证书给IP使用,因此会造成IP泄露(证书带域名信息,网上有扫描全网IP并读取SSL证书中域名信息的方法)
因此为了安全起见,我们需要设置两个项目
1、给IP配置上一张带错误域名的证书,防止泄露你自己的域名
2、禁止直接访问IP,将访问IP的请求,不管是HTTP还是HTTPS全部转错误页 返回状态码444 ERR_EMPTY_RESPONSE
两步其实可以合并成下面步骤操作:
1、首页在宝塔中创建一个默认站点,这里域名随意填写,只要不是你的域名就行
2、修改默认站点到新创建的这个域名
3、给IP配置上一张带错误域名的证书(给默认站点设置证书),我们这里利用了CLOUDFLARE来作为错误证书颁发源,利用CF 接入域名,可以颁发15年的仅CF CDN网络体系承认的证书的功能。
我们这里使用了cdn.bnxb.com来接入,利用CNAME接入的漏洞,我们添加了一个dnspod.com然后生成了属于 dnspod.com的证书
大家可以使用我们已经生成的这张证书,反正只要域名不是你真实的域名就行了,提供如下
公共证书
-----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-----
密钥
-----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK0HE3hTJQDg6p/fj nS92eSuRKZEZ5F4grT6tWFKNYVmhRANCAAQIP4WfZQx4/3/tIw0QDdt05DRKiIuO pghp8GVQ94JcS5fmtZqX1yx0hBU4qZ0skIJr5D2M0BmhCBQ9Kulv2YDL -----END PRIVATE KEY-----
填写到宝塔的默认站点中
保存后,点击配置文件修改配置
将前面部分改成
listen 80 default_server;
listen 443 ssl http2 default_server;
server_name default.com;
return 444;
如下图
大功告成,现在直接访问HTTP://IP 或者HTTPS://IP
就会出现这样的提示
然后网上的漏洞扫描程序,扫到的这个IP的证书就是dnspod的了,这样你的IP就不会泄露
PS:目前最新的NGINX 1.19 已经直接支持设置ssl_reject_handshake,即终止 SSL 握手阶段,可以直接不发送证书。方法如下
要求 nginx 版本 1.19.4 以上、(编译进 nginx 的)OpenSSL 版本 1.1.1i 以上,具体请执行 nginx -V 查看 nginx version 和 built with OpenSSL 的值】
server
{
listen 443 ssl http2 default_server;
server_name _;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_reject_handshake on; //启用拒绝 TLS 握手
ssl_session_cache shared:SSL:10m; //这个必须设置,不指定 ssl_session_cache 的话,会导致 Session resumption (caching) 验证失败
ssl_session_timeout 10m;
access_log /www/wwwlogs/access.log;
}
- 最新评论