admin管理员组

文章数量:1567260

【问题背景】

        一般一个大型的互联网站点都会有一个域名(比如:www.aaa、www.bbb),这个域名在申请的时候,必须向工信部备案。此外,这个域名会绑定一个或者多个公网IP(国内一般需要向三大运营商购买)。这个公网IP一般用的是80端口,并且公网的IP和80端口,会映射到内网的一个IP地址(负载的IP+端口),然后负载后面会挂N个内网应用服务器的地址。这样公网的用户就可以通过这个域名来访问内网的应用了。

比如,我们日常使用的微软的搜索引擎(cn.bing),它就有一个公网的IP,我们可以通过ping域名来获取这个公网IP(204.79.197.200)。如下图所示:

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

        现在有恶意用户,会通过一些手段,申请一个恶意(伪)域名,然后和其他网站的公网IP绑定(具体如何绑定,这里就不再探讨了)映射关系,这样用户就可以通过这个恶意(伪)域名来访问一个正规的网站了。

【解决方案】

        遇到这种问题时,就需要在做一些反制和加固措施,比如向相关部门投诉恶意(伪)域名,目标是让恶意域名解除和自己网站公网IP的绑定关系,下线恶意(伪)域名。如果这个方案比较麻烦,甚至恶意域名注册地在国外,那就只能在自己的系统后台进行加固来反制了。

        这里以Nginx为例,Nginx在全球网站中的使用比例还是相当高的,其主要的功能就是为后端的应用服务提供反向代理和负载均衡的功能。如现在Nginx上代理了一个域名为wwwskylee的网站,其server{}块的配置如下:

    server {
        listen       80;
        server_name  wwwskylee cnskylee;
        
        。。。此处省略一万行。。。
    }

 我们在Windows系统的hosts文件中分别配置正确域名和伪域名和服务器IP的映射关系


# 正确的域名
192.168.223.199 wwwskylee cnskylee

# 伪造的域名
192.168.223.199 www.forge-site

 这个时候,我们可以发现,上面的三个域名都可以访问到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://wwwskylee/$1 permanent;
    }

 这时候我们再使用伪造的域名访问,发现浏览器中的域名会变成wwwskylee这个正确的域名,并且用户无法通过浏览器的返回键,返回到之前那个伪域名。

相比两种方案,第二种对用户可能更加的友好,而第一种略显粗暴,哈哈哈~~~

本文标签: 恶意域名Nginx