【问题背景】
一般一个大型的互联网站点都会有一个域名(比如:www.aaa.com、www.bbb.com.cn),这个域名在申请的时候,必须向工信部备案。此外,这个域名会绑定一个或者多个公网IP(国内一般需要向三大运营商购买)。这个公网IP一般用的是80端口,并且公网的IP和80端口,会映射到内网的一个IP地址(负载的IP+端口),然后负载后面会挂N个内网应用服务器的地址。这样公网的用户就可以通过这个域名来访问内网的应用了。
比如,我们日常使用的微软的搜索引擎(cn.bing.com),它就有一个公网的IP,我们可以通过ping域名来获取这个公网IP(204.79.197.200)。如下图所示:

联网查询,就可以知道上面这个IP所在的位置:美国 华盛顿 雷德蒙德

现在有恶意用户,会通过一些手段,申请一个恶意(伪)域名,然后和其他网站的公网IP绑定(具体如何绑定,这里就不再探讨了)映射关系,这样用户就可以通过这个恶意(伪)域名来访问一个正规的网站了。
【解决方案】
遇到这种问题时,就需要在做一些反制和加固措施,比如向相关部门投诉恶意(伪)域名,目标是让恶意域名解除和自己网站公网IP的绑定关系,下线恶意(伪)域名。如果这个方案比较麻烦,甚至恶意域名注册地在国外,那就只能在自己的系统后台进行加固来反制了。
这里以Nginx为例,Nginx在全球网站中的使用比例还是相当高的,其主要的功能就是为后端的应用服务提供反向代理和负载均衡的功能。如现在Nginx上代理了一个域名为www.cnskylee.com的网站,其server{}块的配置如下:
server {
listen 80;
server_name www.cnskylee.com cnskylee.com;
。。。此处省略一万行。。。
}
我们在Windows系统的hosts文件中分别配置正确域名和伪域名和服务器IP的映射关系
# 正确的域名
192.168.223.199 www.cnskylee.com cnskylee.com
# 伪造的域名
192.168.223.199 www.forge-site.com
这个时候,我们可以发现,上面的三个域名都可以访问到nginx的欢迎页面了


要解决这个问题有两种方法,一种很暴力,直接返回403给访问这个伪域名的用户。另外一种,就是使用Nginx的rewrite功能,将用户访问伪域名重定向到正确的域名。
我们先来测试第一种,在nginx.conf文件中增加下面的server{}块配置,注意:不是在原有的80端口的server{}块中修改配置!
server {
listen 80 default_server;
server_name _;
return 403;
}
然后校验配置、reload。再次用伪造的域名访问测试,发现页面返回403,禁止访问!

第二种配置不好贴图,所以这里就不做测试了,感兴趣的可以自己测试。同样是新增一个server{}块,然后校验配置、reload配置。
server {
listen 80 default_server;
server_name _;
rewrite ^(.*) http://www.cnskylee.com/$1 permanent;
}
这时候我们再使用伪造的域名访问,发现浏览器中的域名会变成www.cnskylee.com这个正确的域名,并且用户无法通过浏览器的返回键,返回到之前那个伪域名。
相比两种方案,第二种对用户可能更加的友好,而第一种略显粗暴,哈哈哈~~~
文章讲述了大型网站如何处理恶意域名绑定其公网IP的问题。通过Nginx的配置,可以实现对恶意域名返回403Forbidden或重定向至正确域名,以此保护网站并提供用户体验。
3329

被折叠的 条评论
为什么被折叠?



