看了下nginx
的访问日志,发现很多试探性的请求,路径是各种后台地址之类的。这种请求有个特点,就是直接通过ip
访问,所以我决定禁止通过ip
直接访问的请求访问我的服务器。
访问服务器的443端口时,无论nginx
是否允许通过ip
访问,它都会返回服务器的证书用于建立连接。由于证书中包含域名等信息,会导致源站暴露,这也是我们需要禁止通过ip
访问的原因之一。怎么解决这个问题呢?
方案一:配置无效证书到默认站点
我们可以使用OpenSSL生成自签证书,安装 OpenSSL:
1 | apt update |
在任意目录下,生成自签名SSL证书和密钥,文件路径自行替换:
1 | openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/nginx/ssl/fake_private_key.key -out /etc/nginx/ssl/fake_origin_certificate.crt |
我们在nginx
的配置文件中新建一个server
,填入以下内容并适当修改
1 | server { |
经过上面的配置后只能通过域名来访问80和443端口,直接通过ip
访问会直接断开连接(返回HTTP 444),一定程度上避免了潜在的安全风险。
方案二:配置ssl_reject_handshake
这个配置项用于拒绝握手,也不会提供显示证书,需要nginx
版本号在1.19.4以上,无需创建假证书
1 | server { |
文档链接: http://nginx.org/en/docs/http/ngx_http_ssl_module.html