温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
之前查询 Nginx 日志发现主站被 301 跳转了,想想只是跳转,没实际危害就算了,今天查询日志,发现居然变本加厉反向代理了整个站,再查发现居然还开了好多个域名反代,我也是醉了,必须采取点措施了!
一、恶意反代的危害
- 首先肯定会占用服务器资源,网站打开速度受影响。
- 其次,别人通过代理盗用你的网站数据,对用户与不是那么智能的搜索引擎而言,相当于建了一个与你一模一样的站点,那么很有可能你的站点会进搜索引擎沙箱,甚至被降权。
- 如果被恶意代理的页面,还挂有你的联盟广告(比如 Adsense),这就十分危险了,如果有人点击了上面的广告,很容易被 Adsense 封号。
- 还有很多危害,可以自行脑补 ……
二、如何屏蔽反代
屏蔽方法很多,可以在系统层面利用防火墙屏蔽,可以在服务上屏蔽,也可以在内容上屏蔽,没有必要都配置一遍,选择合适的即可。
1、防火墙配置
如果代理服务器是直接连接我们服务器,可以在防火墙上禁止该 IP 连接,以 CentOS 7 为例:
[root@UN ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="1.1.1.1" drop' --permanent
[root@UN ~]# 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、《如何阻止网站被恶意反向代理访问》
Windows 7Chrome 55.0.2883.87来自 浙江 的大神
好,学习了。
iPhone 11_2_2Safari 604.1来自 湖北 的大神
收藏,顺带点赞~
Windows 10Chrome 50.0.2661.102来自 陕西 的大神
也是被反代了,没有理。
试下这个方法
Windows XPChrome 49.0.2623.112来自 广东 的大神
说明你的文章是优质内容
也是哦,也算是一种肯定了,虽然不喜欢
Windows 10Chrome 64.0.3282.186来自 香港 的大神
之前看到V2老哥用js混淆然后给自己导流,也挺不错的
好办法
Windows 10Chrome 63.0.3239.132来自 北京 的大神
支持一下