与中文视听网盗链斗智斗勇 VPS不明流量排查兼Nginx防盗链实践

与中文视听网盗链斗智斗勇 VPS不明流量排查兼Nginx防盗链实践

先来SEO一波这个网站(老SEO了) 中文视听网网址是多少?中文视听网网址是什么?中文视听网官网是什么?中文视听网收听VOA直播

“中文视听网”,公众号cnshuxue“数学视窗”,从21年6月份开始,使用本站免费的公益广播加速代理进行牟利。他们利用这项服务赚取每人每月3元的行为,严重背离了公益广播加速服务的本意。我多次进行拦截,他们多次突破我的拦截。下文讲述的就是我与“中文视听网”盗链网站斗争的故事。

再来介绍一下什么是盗链。盗链是指服务提供商自己不提供服务的内容,而是通过技术手段绕过其它有利益的最终用户界面,直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。

(怎么感觉我跟王刚说故事的主持人一样很好😂 总之,下面就是正文啦,敬请观看)

背景

Xiaomage's Blog自2020年开始,向广播爱好者提供完全免费的公益广播加速服务,用以广播爱好者学习和交流使用。(2021年11月7日宣布停止运营)

广播加速服务位于德国的服务器,近两个月(注记:指2021年6月和7月)以来一直流量消耗非常大,750G的流量每个月都能使用接近80%。但是就算我自己和身边的朋友抛开其他的服务器不用,只用这台德国的服务器,流量消耗应该也就在150G,双向三百G左右,现在的流量消耗很不正常。

过年的3月份前后,这台服务器曾经遭受了CC攻击,月流量使用彪上六七百G,光是Nginx的日志文件在硬盘里就塞了好几个G。后来我调整防火墙策略,基本将这部分攻击流量降得很低了。

然而,最近两个月流量使用量又再飙升,上个月使用了568G流量,而这个月才过一半多,还剩下十多天呢,已经用的比上个月流量多了,有一天一天就用了接近100G。今天决定再次进行排查,查查到底是怎么回事。

VPS流量图

开始排查

首先登录到服务器,使用iftop命令排查当前服务器中的流量。当时的截图并没有保存,但就像下面的截图一样,看上去很正常:跑着的广播加速服务连接到的是Cloudflare的CDN和电台官方直播源源站的IP;下方持续了几个月不停的CC攻击没带来多少网络流量,连一个字节都不到。我观察了很长时间,都没有看到有什么可疑的、传送大流量的IP出现。除了总体的流量消耗有点快,广播加速服务消耗的流量有些多之外并没有异常。我这时已经没有头绪了,失去了排查的方向。

这时候我偶然间打开了服务器上的PHP探针,服务器的CPU、硬件负载并不高(AMD YES!)。突然,随着页面的下滑,一个爆红的指标进入了我的视野——硬盘要满了!还有一个G多一点硬盘就满了。什么把硬盘填满了呢?

来看看吧。使用du --max-depth=1 -h /,先看看根目录下面有啥。emm,/data文件夹,里面只有几近是静态网站和网站日志文件的文件夹占了接近4个G。在往下看看,du --max-depth=1 -h /data,wwwlogs文件夹吃了近3个G。跟上次本攻击的表现一模一样。难道又被攻击了?怎么日志文件这么大?我的博客主站几个月的日志文件才只有几百兆,一台梯子加广播加速服务器怎么这么多日志文件?

果然最大的日志是加速服务器虚拟主机的文件,3个G。咋一看都是正常的访客数据,就像下图一样的:

Nginx日志

我博客主站都没这么大的流量,为什么广播加速站流量会这么大呢?我登录了Cloudflare CDN后台,看到统计数据傻眼了,近一周80G+的流量,很多来自于一个“gbtv.sinaapp.com”的网站:

Cloudflare统计

再回头一看Nginx日志,其中有很多来自于“http://gbtv.sinaapp.com/bfq/rfazb.php”的请求。打开这个网站,我更...傻了:

网站截图

这TM不是拿着我的服务器资源卖钱的吗?没有经过我允许,直接这么干?用着我花真金白银买来的服务器,白嫖我维护的精力和时间,结果他们躺着赚钱?!虽然这个网站每月人均收费不高,但是访客多,每月在微信公众号上为他打赏的有上百人,再加上直接微信支付宝支付的,用户数量更多。没有经过我的允许,用盗用我的资源,服务他这么多访客...感觉气不打一处来。当即决定反击回去。

Nginx层面拦截

我打算在Nginx层面上对他们网站的Referer进行拦截,告知他们的访客事情的原委。怎么做呢?

Nginx中有一个内置的模块,叫做ngx_http_referer_module,默认这个模块会被在编译的时候自动编译到Nginx中的,不编译进去的话还要添加--without-http_referer_module的编译参数。因此大多数编译好的Nginx中已经有这个模块了,无需再次进行编译。

我的设想是判断Referer中来自“中文视听网”的请求,如果是来自“中文视听网”的请求,则301到一段用谷歌娘的声音录制好的,告知访客事情原委的音频,这样,"中文视听网"的受害者就能在播放器中听到这段录音了;而Referer中不包含"gbtv.sinaapp.com"的正常访客则不会受到影响。

经过一番查找和摸索,相关的Nginx配置文件如下:

    if ($http_referer ~* "gbtv") { #利用正则表达式(其实这里只需要模糊匹配就好了,所以实际上不用写正则)进行匹配
      return 301 https://bbx.xmgspace.me/zwstw.mp3; #进行301
    }

很简短,但是能解决问题,这就够了。

此外,我还在访问日志中发现了大量useragent为"okhttp"的请求。okhttp是一个HTTP请求框架,广泛用于移动开发中。这应该是有人开发了APP,把我的直播源放到了APP中;然而又没来得及改UA。因为流量同样很大,也不是本站的访客直接使用的,因此还是决定一起Ban掉。因为流量的来源不明,这次不用在Nginx层面上大动干戈了,直接从Cloudflare防火墙中添加一条Deny规则就可以了。

去年我也曾经因为流量过大,存在滥用行为,暂时关停了加速服务;后来服务器多了起来,于是将流量相对较多的一台拿出来重新上线了这一服务,还请且用且珍惜。

再下一步的行动就是继续多加监测,防止滥用,而又不会影响到正常的使用者;多服务器负载均衡,平衡流量消耗。有时觉得时候再慢慢做吧。这次事件就先记录到这里。

(上述文字在2021年7月份左右完成。)


卷土重来

这一部分记录的是2021年11月1日前后的事情。
在7月份之后的“自卫反击”后,“中文视听网”暂时消声觅迹了,我也将服务器迁移到了Euserv,以降低我自己服务器的压力(不然流量还是不够用,Eusrev好歹算是无限流量)。尽管是免费的服务器,我还是要花费精力来进行维护。但是,近日(2021年11月1日前后),我在cloudflare后台再次监测到了大量异常refer,一场的流量来自rtv.cbu.net等多个站点. 打开这些页面,又是熟悉的“中文视听网”,“中文视听网”卷土重来。目前收集到的“中文视听网”相关域名如下:

rtv.cbu.net
gbtv.sinaapp.com
rtv.s500.xrea.com
cnzahuo.sourceforge.net
gbtv.eu.org
gbtv.gitee.com
cngbtv.ml
foodkx.s500.xrea.com
ratv.ml
wan.epizy.com
gbtv.ezyro.com
等等等等......

本来想全部加入黑名单,但鉴于对方域名之多,我们打算直接开启refer白名单,只有空白refer或者白名单中的域名refer才能访问广播加速服务,否则将302到中国之声的广播源上。nginx代码如下:

    valid_referers none blocked *.xmgspace.me *.qq.com *.google.com *.baidu.com *.sogou.com;
    if ($invalid_referer) {
      return 302 https://bbx.xmgspace.me/radio/cnr/live/zgzs/index.m3u8;
    }

nginx白名单规则在11月2日左右被部署,效果立竿见影,来自“中文视听网”的盗链流量迅速减少。在11月5日,来自"rtv.cbu.net"等网站的异常流量基本消失。

屡禁不止

这一部分记录的是2021年11月7日前后的事情。
这两天,虽然来自“中文视听网”的异常refer消失了,但是总请求量并没有明显减少。这很是奇怪。直到我顺着之前留下的refer打开了“中文视听网”盗链的页面。
看截图,懂得都懂,直接将refer设为了空。好家伙,反refer防盗链算是被他们玩明白了。有这心思,自己申请euserv搭建十个的功夫都出来了。

被门外的不绝于耳的“EDG牛逼”吵醒后,我失眠了😂看了一眼服务器状态后,我失眠的更厉害了。这样下去,这台服务器早晚得被封。

下一步还能怎么办呢?方案是有的,能彻底的解决这个问题;但是需要大量的时间进行开发,现有的正常用户用户也会受到很大的影响。现在开发的话,是能开发出来;但是立即推,我应该得要参加2023考研了。这个代价我承受不起,为了一个“中文视听网”也不值当的。

*
*
*

思前想后,我想出了最终的解决方案:关闭广播加速服务。这不是一个单纯的技术问题。这项服务风险大,需要我投入不少人力物力;吃力不讨好,白嫖给人赚钱,一个月六七百,到现在他们应该赚了不少,一想就来气;风险也大,万一请喝茶就难办了。专心准备考研了,别23再来一遍。向sourceforge report一波abuse,练习英语一小作文,也许是我现在最应该做的事情了。


本来是想彻底关停的,但是感觉有些鲁莽草率,对用户太不负责任了。11月7日的改动只是关闭了两个受到滥用最严重电台(RFA VOA)在浏览器端的访问,还没有彻底关停所有电台,还希望各位且听且珍惜。另外屏蔽了数个武汉的IP段和"中文视听网"站长的设备,暂时他们应该不会有动作了。

本文永久链接:https://blog.xmgspace.me/archives/traffic-check-and-nginx-anti-theft.html
本文文章标题:与中文视听网盗链斗智斗勇 VPS不明流量排查兼Nginx防盗链实践
如无特殊说明,只要您标明转载自Xiaomage's Blog,就可自由转载本文。禁止CSDN/采集站采集转载。
授权协议:署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)

评论

  1. skip
    Macintosh Chrome
    1天前
    2024-3-18 15:41:32

    还有一种思路,针对故意清除 Referer 请求头的情况,可以去检查 accept 字段,参考这里:https://blog.wolfogre.com/posts/anti-hotlinking-without-referer/#%E5%BC%BA%E5%8C%96%E9%98%B2%E7%9B%97%E9%93%BE

  2. 一个不愿意透露姓名的王先生
    Windows Chrome
    1年前
    2023-3-10 19:17:47

    可以弄个网管鉴权,直接动态管理,

  3. 墨枫梧桐
    Windows Chrome
    1年前
    2022-10-27 19:51:47

    盗链确实是个问题啊,很多做站的都碰到了这种情况
    DE BA7MQN 73送上

    • 博主
      墨枫梧桐
      Windows Edge
      1年前
      2022-10-29 20:57:14

      是的,不过这篇文章里提到的这个网站收敛了很多,已经停止盗链行为了。后期会加强监测,尽量少让这些人钻空子。
      谢谢你的支持~ 73 Over.

  4. solderwire
    Android Chrome
    已编辑
    2年前
    2021-11-16 1:27:32

    辛苦了
    我也申请了一台免费的EUserv,审核还没过,就是每个月要手动续期挺烦人的,github上面有脚本可用,但最近官方又加了邮件验证码,以前的脚本全歇菜了…请问你现在是怎么解决的?我买了现在的腾讯云之后已经元气大伤了,暂时不想再碰付费的VPS了。
    Oracle Cloud的ARM机器显然是最香的,永久免费也不需要续期,但是现在国内基本上很难申请到,也必须要有信用卡才能申请,申请到了也很容易被封号,我一个朋友两张信用卡都被Oracle Cloud拉黑了。现在弄了个Hax.co.id玩了玩,1C512M5G的配置,线路极差,装了个面板再套CF速度有了,打算拿来练手Linux,结果发现那玩意更离谱,要一周一续期。
    还有就是以后有时间能写个关于如何优化Cloudflare路由的文章吗?我也借鉴一下,现在我的网站用CF访问忽快忽慢的,延迟也挺高,不是很稳

    • 博主
      solderwire
      Windows Edge
      2年前
      2021-11-16 23:16:06

      我的Euserv一直是手动续期 每次续期之后,提前一个月之后的闹铃 也就每月续期一次,续期流程也不是特别麻烦,还是手动续期吧,相比脚本也稳一些。
      甲骨文我莫得信用卡 以后有了可以试试 多半是-600s😂
      优化cloudflare的文章以后会出的 得等到12月份了...现在没有时间写新文章
      用Euserv的话 可以用我欧洲自选的cloudflare IP. Cname到cloudflare-eu.xmgspace.me就可以了,都是找的cloudflare欧洲的IP

      • solderwire
        Xiaomage
        Macintosh Safari
        已编辑
        2年前
        2021-11-20 10:09:54

        德鸡刚拿到手没几天 昨天晚上开始就失联了🤣ServerStatus里面显示维护中,面板和SSH都连不上,ping也没响应。到后台重启,重装系统都没反应。我看了下你的德鸡还是好好的,个人认为是我那台所在的节点挂了🤣然而EUserv免费用户没有邮件技术支持,提交工单需要几百欧的手续费……幸好那台机器暂时只是用来练手,没有任何重要数据

        • 博主
          solderwire
          Windows Edge
          2年前
          2021-11-20 12:54:54

          等一段时间就好了 德机就是这样,没有SLA和工单的 过一段时间自己就好了,过段时间再重装试试。上面也千万别放重要数据,数据丢了的话就没办法咯

  5. xiaoyu
    Windows Chrome
    3年前
    2021-7-20 5:53:56

    hhhh.,随着学习的深入,看学长的博客越来越不吃力了~ ̄﹃ ̄

    • 博主
      xiaoyu
      Windows Edge
      3年前
      2021-7-21 22:04:13

      加油!以后会越来越轻松的~

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇