如何在NGINX设备禁止未绑定域名和 IP 访问 443 端口

2018年9月13日09:41:11 发表评论 1 阅读

简单架构:客户端→F5→Nginx

问题:例,a.xxx.com 开启了https,访问https://a.xxx.com ,正常,访问未配置https的域名,如 https://b.xxx.com 会打开https://a.xxx.com 的内容(原因不详,可能跟F5的转发配置有关,没有做虚拟主机绑定)

解决办法:为Nginx的443端口设置默认域名default_server,并拒绝访问

配置:

server {
     listen 443 default_server;
     server_name _ ;
     ssl on;
     ssl_certificate         随便设置一个ssl证书;                
     ssl_certificate_key 随便设置一个ssl证书的key;
     return 444;
}

注意:
ssl_certificate 随便设置一个ssl证书;
ssl_certificate_key 随便设置一个ssl证书的key;

这两行配置必须要有,否则Nginx会拒绝所有443的连接(正常开启https的域名也会无法访问)

如何在NGINX设备禁止未绑定域名和 IP 访问 443 端口

在NGINX设备禁止未绑定域名和 IP 访问 443 端口

Google搜索了下,这种现象就叫“域名恶意解析”,只要你的Web服务器可以通过公网IP直接访问,那么别人的域名就可以解析到你的IP上进行访问。

有两方面危害:
一、如果有一天这几个域名被指向了其他 IP,那么我会失去对应的流量;
二、不同域名指向同一个网站对 SEO 的效果不好。

知道了原因,解决就很简单,Nginx增加限制IP直接访问的配置就可以了。
在nginx配置文件nginx.conf中新增server块

1
2
3
4
5
server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

server_name 指定”_”, 或者 “–” 或者 “!@#”都可以表示一个无效的域名,Nginx通过HTTP请求中Host值来找对应的server_name,如果找不到Nginx就会讲请求送到指定了default_server的节点来处理

在NGINX设备禁止未绑定域名和 IP 访问 443 端口

如果是https的站点,80换成443,增加ssl on就好了

1
2
3
4
5
6
server {
     listen 443 default_server;
     server_name _;
     ssl on;
     return 444;
}

这样遇到恶意解析的时候,就返回444,提示无法打开页面,该网页无法正常运作。(注意:444是非标准状态码,是Nginx服务器扩展的Http错误状态码,服务器不向客户端返回任何信息,并关闭连接, 断开客户端和服务器的连接,防止恶意软件攻击威胁。)

hcyaobin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: