善良如我——漫漫封禁路

我只是个RSS爱好者,花点小钱,办个小站,为有缘人服务。

我不是程序员,我也不想深入Linux,nginx,php等等那些并不很感兴趣的技术。

一个kindle才几G,存满了认真看几年都看不完。这个么小破站1000G流量居然不够用,行动起来,该封的封。

一 、善意提醒

goaccess 日志分析软件,可直接终端显示、real-time HTML、Json、或生成静态html。按流量排序,筛查高流量用户。

先别直接封,看看是怎么回事

bash:tail -n 5000 /var/log/nginx/access.log | grep -E ‘*.*.35.154’

大家觉得这种抓取频率能忍吗?忍吧,别一棍子打死,先提醒一下。

nginx:if ($remote_addr ~ “*.*.35.154|*.*.34.153|*.*.*.152”){rewrite ^/(.*) /error.xml break;}

这些IP对本站发起的任何请求都将收到类似这样的文件:

其实没几天我主动就给解封了,想着您也能体量我不是。

二、丢包

总有人会根本不理你那茬,或订阅较多,或……(整个肖申克只有老黑一人有罪,你们都没问题)

1.随机

nginx:

可根据UA或IP过滤随机丢包,request_id是由32个16进制数随机组成,前两位只要是012345abcde组成的返回304。

goaccess 每小时自动生成前20名高流量用户,加入此ip组。

还是有一定效果的:

如果效果不明显要不试试0-8a-e。真要这样吗,还能不能愉快的玩耍了,能不能自觉点呢。

后面会去除UA过滤,总会有误伤。不过排在前面的大多数是flowerss,这问题不言自明了吧,要不你们跟作者去反映一下?

2.分时段

iptables+ipset+crontab

bash:

每天凌晨0点到6点禁止访问,同样来自上面规则,晚十一点时排名前20的高流量用户。

3.fail2ban(已弃用,太占cpu)

a.高流量

30分钟内超过45次xml文件的有效下载(代码 200),阻止访问一小时。

我的想法是就算你订阅了本站的45个RSS(难道是真爱?!),30分钟来取一次,并不影响你下次的收取。像flowerss这种从不对比文件新旧、默认间隔又很短的必然会进入这个规则,要么你跟作者去反馈把程序写成熟点,要么主动降低抓取频率。

b.高频次

30分钟超300次xml文件下载或扫描(代码200或304),阻止访问一小时

以上参考feedly、inoreader、theoldreader等的抓取频率和性质而定,可能随时更改。

三、离我远点

总之在我的水平之内已经仁至义尽了,如果这样还挡不住你,只能封ip了,拜拜。

41条评论

  1. 感谢你的分享.
    问下,我用inoreader订阅的,会给流量带来很大压力吗?

    1. 现成的服务,如inoreader、feedly等都不会有任何问题。
      个人手机电脑装的客户端也基本没有问题。
      绝大部分的问题是有自己的服务器,会装个程序,根本没有善待资源的概念,什么都讲究抢。流量是有限的,他们抢的越多,大伙剩的越少。

      1. 应该每天更新一次就够了。给你每天12封,根本看不过来。

  2. 可以试试Nginx的流量控制,也是根据访客IP地址来过滤请求,这样就不用去查哪个IP请求数量太多然后再对特定的IP设置限制规则了。

    下面的Nginx配置可以记录大小10MB的访客记录(protect_wp:10m)大概160,000条访问记录。对于每一个唯一的IP地址($binary_remote_addr,依据访客的远程地址作为筛选条件,以binary形式存储节省存储空间),每分钟最多处理20个请求(20r/m, 20 requests per minute),最多存放30个请求在等待队列里(burst=30)。

    里面的protect_wp是规则ID,可以换成其他的字符串。不同的规则记录的日志不共享,也就是说不同规则的日志中同一个IP的访问次数不会互相累加。

    limit_req_zone $binary_remote_addr zone=protect_wp:10m rate=20r/m;
    server {
    location ~ /permission.php {
    limit_req zone=protect_wp burst=30 nodelay;
    # proxy_pass, fastcgi_pass …
    }
    }

    这里面设置的20r/m 和 burst=30 都是针对同一个IP地址的规则。 数字是我用在WordPress里面的,可以根据需要改成其他大小。

    Nginx的流量控制是通过计算最小时间间隔实现的,也就是说,30r/m和0.5r/s是一样的,都规定了每两个请求之间必须间隔500ms。如果不添加burst参数(不允许并发请求),那么500ms内同一个IP地址产生了10个并发请求,只有第一个会被处理,其余的9个请求直接返回503。

    burst=30 设置了并发请求的等待队列的大小为30,除了当前正在处理的1个请求之外,一个特定的IP最多同时可以有30个请求添加进等待队列里面,队列满了之后,后续请求会返回503。比如,设置rate=20r/m , burst=30,那么300ms内只会处理一个请求(理论是333ms,官网说折算到100ms,具体是向上还是向下取整,还有待查证),同时设置30个队列位置。如果一个IP发送了34个请求,那么Nginx会先处理1个请求,同时把30个请求放在队列里面,最后的3个请求返回503。

    除此之外,还可以把nodelay设置成delay=15。这是一个分阶段的流量控制,能做到前15个请求不延迟处理。一般设置nodelay就足够限制滥用了,。

    这个是Nginx官方对流量控制功能的介绍:
    https://www.nginx.com/blog/rate-limiting-nginx/
    这个是一个网友对官方介绍的翻译:
    https://blog.p2hp.com/archives/7032

    我感觉官方的介绍不是很明白,我第一次看的时候用了不少时间才理解,我在想等我有时间写一个更详细的说明。最后,这个RSS网站很好用,感谢你的慷慨分享,希望这些能帮你减少一些运维的工作量,也希望网站和RSS服务能长久的运行下去

    1. 网址贴的太多跑待审里了😊。
      谢谢,有时间试试。唉,真不想整明白这么多“无用”的技术。

  3. 您好,之前我刚刚接触到RSSHub的时候,您的网站和RSSHub的订阅源给了我很大的帮助,使我体验到了RSSHub的魅力,您的一些订阅源至今仍是我重要的信息来源之一。

    我在那个时候也留言感谢过您,现在突然想起,就又到这里来看看,发现您在这上面付出了蛮多的,感觉一直白嫖蛮不好的……马上就毕业了,想着工作以后能稍稍支持一下您。

    再次感谢您的付出!

    1. 客气了。还是学生的话就别乱花钱了,好好学习,找好工作孝敬父母

  4. 是不是有人白嫖拿去做成产品对外服务了?如果是自用,做个miniflux服务,也不用高频刷新啊,不可能从早到晚挂在上面刷吧。

    1. 大多还是自用的。是有产品应用过来拿,也都比较注意,我也就没理会。

  5. 三年来一直使用INOREADER订阅博主的几个新闻源,刚才去检查了下这几个新闻源的更新频率,都是60分钟。博主别太生气,体制国情就这样,只能想法尽量防住小人,回头继续请杯茶

  6. 用了一年多了感觉,谢谢老哥。不懂技术,用的inoreader免费版和reeder客户端,只能聊尽微薄心意。

    1. 谢谢支持。
      其实绝大部分朋友都不用理会,用成熟的第三方和手机软件不可能影响到。
      就算我“针对”的那前20多个人,他们应该也感觉不到,我已经尽力了。流量确实下来了很多

  7. 请问能抓取一下微信公众号“冷兔”的rss吗,感谢感谢

    1. 公众号的反爬很严格,免费服务基本不可能。建议用付费服务,也不贵。

  8. 在kindle上有什么好的feedx阅读推荐吗,排版老是要缩放

  9. 站长好,一直在用您的订阅服务,很高效。最近后知后觉发现纽时双语的源似乎自4月16日起就没有更新了,还想请问一下是什么状况。

    1. 原来取的是APP里的源,最近失效了。还想取app的源,json,干净。抓不到包,没办法,只能用网页的了,已经弄得非常干净了,不知道会不会删掉一些正常内容,还请及时反馈。

  10. “纽约时报中文网热门图集”订阅源是不是出问题了,好着急呀,每天都看这个的,请版主帮忙看看还有救吗

      1. 站长您好:

        纽约时报和图集这两个RSSHub源在国内的网络下都无法显示图片,如果您方便的话,希望能解决一下,麻烦您了!

        谢谢!

        1. 这些图片很早就已经处理过了,并不是原网站的地址。如果还不能访问那就没办法了。
          我这里移动宽带、移动4G、电信4G都是能直接访问的

  11. 用kindlezs.com推送您这边的rss,为啥会显示频道读取错误啊

    1. 这个不清楚,所有都一样吗
      不过我打开这个网站它弹出了个通知,每月20号到次月2号期间不正常,不知道是不是它的问题

  12. 请问下,我一个月前才开始用RSS和贵站资源。自己用的Reeder,在iPhone、iPad、Mac各装了一个客户端,用了一个月,同步选项都是On Start
    一周前发现feedx的所有资源都拉不下来了,开梯子才能拉(包括内地新闻)
    是IP被封禁了吗,为什么呢?

    1. 如果认真读了这篇就知道你这种情况不可能在封禁之列,况且都一个多月没手动封禁了(永久封的一个巴掌就能数过来)
      是用top订阅的?
      可以试试其他国内的源,也不行的话就没办法了。

      1. 好吧,谢谢回复,总之用梯子还能拉到,问题不大
        非常感谢

        1. reeder是需要挂梯子才可以读取的,好像是reeder软件本身的问题

  13. 博海拾贝https://bh.sb/这个网站能否考虑做个rss,官方的那个rss订阅地址http://feed.luobo8.com/好像挂了。

  14. 一直订阅站长的资源,谢谢你!!不知道站长有时间可以做一个Harvard Business Review的rss源吗?

  15. 感谢站长,境外微信支付经常不灵,一直偶尔有请家人帮忙付款支持。
    使用本地Emacs/gnus (16.75.*.*)订阅,但重启时默认检查所有订阅的feedx大概10个源,时不时被封,能否请楼主提示如何避免?
    另外,gwene上有Harvard Business Review开放源,但可能需要用Usernet。

    1. 现在长期封的只有3个ip,我查了下,根据规则封的也没有16.75这个,应该不是我这边的问题。
      规则是北京时间0-4点流量排在前20的封ip,其他时段并不直接封,只要能访问本站那就说明没问题

  16. 站长好!用cloudflare的服务的话,同样的内容不同的人反复访问,应该可以省下大量流量吧?
    另外,BUYVM是不限流量的,有需要的时候还可以另外租储存盘,价格很便宜。
    多谢!

  17. 哈哈,专门去检查了下自己的tiny tiny rss,确认了下收取频率是一天一次

  18. 您好, 我看了一下你的订阅地址, 貌似没有开启任何压缩.
    如果您乐意的话, 您可以在nginx那边开启gzip压缩, 理论上能节省超过一半的流量.
    做起来并不复杂, 一般在nginx的配置文件server块里简单加一个gzip on;就好. 也不会特别吃cpu.
    希望能帮你节约一些成本. 感谢您的站.

回复 karlmarx 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注