当前位置:首页 > 技术文章 > 正文内容

别让SSL证书暴露了你的网站服务器IP

arlanguage5个月前 (12-19)技术文章28

我们通常会用cdn套到服务器ip上,来为网站或者后端程序做加速、防御。可是nginx在设计上有个小缺陷,会因为ssl证书泄露网站的原IP

原理

用Nginx部署网站,在默认或不正确的配置下,网站开启ssl,直接访问ip的443端口,即ip:443,Nginx会返回默认一个站点的ssl证书,间接的能让别人扫到这个ip对应的域名。

原理就是对ip的443端口发送clienthello,对方回复的 serverhello中有ssl证书,ssl证书里的common name 有域名信息。这样就知道了解析这个ip的域名。所以更准确的说是IP的443端口可能会暴露了域名。

动作再大一点,批量扫描机房的ip段,把对应的域名-ip 的多值映射表统计起来。以后想查某个域名对应的源站 ip 查这个表就够了,这是黑产喜欢干的事。

同时也是很多站点,明明套上了cdn,依然能被打到源站IP的原因。

解决办法

禁止直接访问IP

# 禁止IP直接访问网站
server {
      listen       80 default_server;
      listen       [::]:80 default_server;
      server_name  _;
      return 444;
}

自签IP的SSL证书,返回444

自签证书的目的不是为了访问,而是避开Nginx的这个缺陷。生成自签的IP SSL证书可以用开源的Mkcert(https://myssl.com/create_test_cert.html)工具。Mkcert使用起来稍微麻烦,或者用一个测试证书的在线网页工具:https://myssl.com/create_test_cert.html


在填写域名的位置填上IP地址,点生成按钮会自动测试证书展示在下面,各自保存为.pem文件和.key文件。然后在nginx里配置上“return 444”,类似配置大概:

{
listen 80 ;
listen 443 ssl http2 default_server;
server_name ip;

  #HTTP_TO_HTTPS_END
    ssl_certificate    xxxx.pem;
    ssl_certificate_key   xxxx.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

return 444;
  
}

购买合法IP站点的SSL证书

花点小钱买个合法的IP SSL证书配置到nginx里,IP证书一般一二百左右。

加钱,世界触手可及。

仅允许指定cdn的IP访问

Nginx仅允许指定cdn的IP访问,避免放到公网上被任何人扫。以腾讯云CDN段为例,在Nginx网站配置文件里,添加如下:

location / {
allow   58.250.143.0/24;
allow   58.251.121.0/24;
allow   59.36.120.0/24;
allow   61.151.163.0/24;
allow   101.227.163.0/24;
allow   111.161.109.0/24;
allow   116.128.128.0/24;
allow   123.151.76.0/24;
allow   125.39.46.0/24;
allow   140.207.120.0/24;
allow   180.163.22.0/24;
allow   183.3.254.0/24;
allow   223.166.151.0/24;
  deny    all;
}

查一下使用的CDN商家的文档,如果有新的IP段更新,也加到里面。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/339.html

标签: nginx 指定ip
分享给朋友:

“别让SSL证书暴露了你的网站服务器IP” 的相关文章

通过nginx解决跨域问题

假设当前页面中的ajax域名和端口号与当前页面访问的请求域名和端口号都不一致,浏览器是有自我保护机制,能访问到该请求但无法获取结果集,这就是跨域问题,前后端经常会出现跨域问题,解决跨域问题的方式很多,这里介绍下如何通过nginx解决跨域问题开发中经常遇到上图问题1、原理就是域名,端口号,协议全部要一...

解决Apache 2.4+PHP5.6不支持CURL

跑一个demo,突然发现,服务器上最普通的Apache 2.4+PHP5.6组合,不支持curl,报告没有curl_init函数;而php.ini里面已经打开了php_curl.dll,而且php -i的输出是正常的,说明curl是可以执行的。折腾了半天百思不得其解,最后索性把php5.6、apac...

Nginx 的日志 nginx的日志能否保存到日志审计里面?

Nginx 的日志主要有 2 个,一个是 access.log, 一个是 error.log。如果你不进行任何配置的话,这 2 个日志将会使用默认的日志配置,这个日志将会位于/var/log/nginx 目录中。针对虚拟主机的配置如果你使用了 Nginx 为虚拟主机的话。那么你可以在你的虚拟主机的配...

08《Nginx 入门教程》Nginx 的 Http 模块介绍(中)

在前面介绍完 post-read、server-rewrite、find-config、rewrite 和 post-rewrite 阶段后,我们将继续学习 preaccess 和 access 两个阶段,中间会涉及部分模块,一同进行说明。1. preaccess 阶段在 preaccess 阶段在...

基于一次ContentDownload变慢而进行的网站性能优化

平时运行无常的网站,突然出现了某个接口TTFB缓慢问题,于是乎开始定位和解决,先说明一下网站的技术栈: 编程语言:PHP、Javascript、Vue、Java 开发框架:Laravel、SpringBoot 中间件:Redis、Kafka、Nginx 数据库:Mysql、MongoDB 云服务:腾...

「网络」运维需要掌握的 17 个实用技巧

1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可以用来承接前面的结果,然后将要执行的动作,一般跟find在一起用的很多,fi...