A 公司近期发现一个问题,他们的新闻网站在互联网上出现了一个李鬼网站。该网站的域名已经更换,但网站内容与 A 公司的新闻网站完全一致。不幸的是,该仿冒网站中插入了恶意的 JavaScript,给 A 公司的声誉造成了严重的负面影响。经过分析,发现 A 公司的网站遭到了恶意代理的攻击。

鉴于这一情况,我整理了之前遇到的几次恶意代理事件,有的解决了也有的情况不好解决,供大家共同分析参考。

被固定的代理服务器代理

这种比较好处理,你可以构造一个路径去访问这个恶意代理域名。有针对性的去找代理服务器的源 IP 是谁。

101.100.xxx.xx - - [09/Jun/2023:09:55:37 +0800] “GET /whomi/xxxx HTTP/1.1”

根据请求的源 IP,我们可以使用 iptables 或者 nginx 的策略对访问进行禁封。

例如,iptables 规则示例

1
iptables -A INPUT -s 101.100.xxx.xx -p tcp -j DROP

以及,nginx 规则示例

1
2
3
4
location / {
deny 101.100.xxx.xx;
……
}

被 cdn 代理

cdn 厂商会有一批回源节点,而且无法保证这批 IP 不变化,这种封 IP 就不大优雅了,所以我们优先不考虑封禁 IP。

一般 cdn 在回源的时候,到原站的请求都会有特征,这些特征是无法去除的,比如 cloudflare 的 cf-xxx 之类的 Header。我们可以对带这些 Header 的请求进行封禁。

HTTP request headers

以下是通过 nginx 方式,禁止携带 cf-ray Header 的请求访问我们的 nginx。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http {
map $http_cf_ray $has_cf_ray {
default 0;
'' 0;
~. 1;
}

server {
...
if ($has_cf_ray) {
return 403;
}
...
}
}

使用 js 方式跳转的显性 url 代理

这种其实不算是代理,只是你访问他的域名,会重定向到你的域名上,但是可气的是他可能搞一个奇奇怪怪的域名转给你。就比如前几年 3q 大战的时候,f**kqq 会转到 360 上。

这时候你可以抓一下请求,如果访问他的域名会出现一个 200 OK 的 Response,并且这个 Response 里面是通过 js 方式进行跳转的,那我们可以使用 Referer 进行限制,把指定 Referer 的请求干掉。

例如下面的 nginx 配置,我们把带 https://XXXXXXX/ Referer 的请求跳转到 http://localhost 上。

1
2
3
if ($http_referer = "https://XXXXXXX/") {
return 301 http://localhost;
}

使用 iframe 嵌入方式实现的代理

这种情况以及很少了,浏览器出于对安全的考虑,在逐步限制跨域 iframe 的能力。

在我们的网站中插入这段 js,可以使得再被 iframe 嵌套时,跳转到 iframe 的域名上。

1
2
3
<script type="text/javascript">
if (top.location != self.location)top.location=self.location;
</script>

暂时无法使用技术手段解决的方法

域名服务商的显性 url 转发,这种转过来的请求没有特征,不好限制。