网站被人反代做了镜像站,怎么破?

之前查询 Nginx 日志发现主站被 301 跳转了,想想只是跳转,没实际危害就算了,今天查询日志,发现居然变本加厉反向代理了整个站,再查发现居然还开了好多个域名反代,我也是醉了,必须采取点措施了!

一、恶意反代的危害

  • 首先肯定会占用服务器资源,网站打开速度受影响。
  • 其次,别人通过代理盗用你的网站数据,对用户与不是那么智能的搜索引擎而言,相当于建了一个与你一模一样的站点,那么很有可能你的站点会进搜索引擎沙箱,甚至被降权。
  • 如果被恶意代理的页面,还挂有你的联盟广告(比如 Adsense),这就十分危险了,如果有人点击了上面的广告,很容易被 Adsense 封号。
  • 还有很多危害,可以自行脑补 ……

二、如何屏蔽反代

屏蔽方法很多,可以在系统层面利用防火墙屏蔽,可以在服务上屏蔽,也可以在内容上屏蔽,没有必要都配置一遍,选择合适的即可。

1、防火墙配置

如果代理服务器是直接连接我们服务器,可以在防火墙上禁止该 IP 连接,以 CentOS 7 为例:

[[email protected] ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="1.1.1.1" drop' --permanent
[[email protected] ~]# firewall-cmd --reload

如果代理服务器更换了 IP,我们就要再配置防火墙,而且若代理服务器使用了 CDN 来反代,那么这种方法将不适用,除非你确定自己也不会用 CDN。

2、Nginx 配置

在站点配置文件中新增一段:

server {
......
       if ($host !~ vircloud.net) {
           return 444;
       }
......
}

代理服务器访问直接不回应,若要跳转到自己的网站,可以把 444 改成网站链接,此方法最简单彻底。

3、.htaccess 屏蔽

.htaccess

RewriteEngine On
RewriteBase /
php_value auto_append_file proxy.php

proxy.php

<?php
$f = getenv("HTTP_X_FORWARDED_FOR");
$server = getenv("HTTP_HOST");
if (($f!="")&&($server!="vircloud.net")&&($server!="www.vircloud.net")){
    echo '本服务器禁止反向代理!';
}
?>

4、JavaScript 屏蔽

直接在网页中添加:

<script type="text/javascript">  
if (document.domain != 'vircloud.net' && document.domain != 'www.vircloud.net'){  
window.location.href='https://www.vircloud.net/';  
}  
</script>  

如果是反代者使用了 iframe,那么应该再加一段判断:

<script type="text/javascript">
  if (top.location != self.location) {
    top.location=self.location;
}
</script>

或者

<script type="text/javascript">
var url=window.location.href;
if(window!=parent)
parent.navigate(url);
</script>

厉害的反代者会直接把 js 替换掉,所以这种方法不能完美屏蔽。

5、PHP 屏蔽

$proxy_rs = $this -> proxy_filter();
if( $proxy_rs != 'vircloud.net' || $proxy_rs != 'www.vircloud.net' )
{
    echo '非法反向代理访问';
    header('Location: http://www.vircloud.net/');
    exit;
}
public function proxy_filter()
{
    $svrUrl = 'http://' . $_SERVER['SERVER_NAME'].$_SERVER["PHP_SELF"];
    if (!empty($_SERVER["QUERY_STRING"]))
    {
        $svrUrl .= "?".$_SERVER["QUERY_STRING"];
    }
    return $svrUrl;
    return $_SERVER['SERVER_NAME'];
}

6、refer 屏蔽

此方法针对 301 跳转,Nginx 下配置:

server{
.....
if ($http_referer ~* (.*\.abc.com|abc.com)){
  return 444;
}
......
}

扩展阅读:
1、《Typecho 如何设置文章密码保护
2、《网站如何屏蔽垃圾蜘蛛爬取?


参考文章:
1、《如何阻止网站被恶意反向代理访问


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 反代修复 的文章

 本文最后更新于 2018/03/12 20:38:50,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 运维 > 网站被人反代做了镜像站,怎么破?

精选评论

  1. superman
    superman 回复

    Windows 10Chrome 63.0.3239.132来自 北京 的大神

    支持一下

  2. 4Rou
    4Rou 回复

    Windows 10Chrome 64.0.3282.186来自 香港 的大神

    之前看到V2老哥用js混淆然后给自己导流,也挺不错的

    1. VirCloud
      VirCloud 回复

      Windows 10Chrome 64.0.3282.140来自 福建 的大神

      好办法 icon_biggrin.gif

  3. 思绪的空中生活
    思绪的空中生活 回复

    Windows XPChrome 49.0.2623.112来自 广东 的大神

    说明你的文章是优质内容

    1. VirCloud
      VirCloud 回复

      Windows 10Chrome 64.0.3282.140来自 福建 的大神

      也是哦,也算是一种肯定了,虽然不喜欢

  4. zhujiwiki
    zhujiwiki 回复

    Windows 10Chrome 50.0.2661.102来自 陕西 的大神

    也是被反代了,没有理。
    试下这个方法

  5. LALA
    LALA 回复

    iPhone 11_2_2Safari 604.1来自 湖北 的大神

    收藏,顺带点赞~

  6. zvv
    zvv 回复

    Windows 7Chrome 55.0.2883.87来自 浙江 的大神

    好,学习了。

    1. VirCloud
      VirCloud 回复

      Windows 7Chrome 63.0.3239.132来自 福建 的大神

      icon_redface.gif