PBH-BTN / PeerBanHelper

BT 反吸血工具 - 自动封禁不受欢迎、吸血和异常的 BT 客户端,并支持自定义规则。PeerId黑名单/UserAgent黑名单/IP CIDR/假进度/超量下载/进度回退/多播追猎/连锁封禁/伪装检测 支持 qBittorrent/Transmission/Deluge/BiglyBT/Vuze(Azureus)/BitComet
GNU General Public License v3.0
1.51k stars 36 forks source link

[TODO] IPFS/P2P 改造 + 规则订阅重写 #425

Open Ghost-chu opened 4 weeks ago

Ghost-chu commented 4 weeks ago

前言

在很长一段时间里,规则订阅都是 PBH 封禁的主力。PBH-BTN 通过维护 BTN-Collected-Rule 仓库的规则,并借助 Github 的 CDN 来向用户分发。

然而由于不可抗力,尽管通过 jsdelivr 和 CloudFlare 辅助分发,仍然有一部分用户无法获取订阅规则,导致 PBH 只能完全依赖本地算法反吸血,影响了反吸血的效果。

一个可行而直接的办法是使用境内 CDN,速度快,联通性也好。备案也不是问题。然而作为反吸血工具,生来就是容易被攻击的对象之一。一旦遭到恶意攻击,那真是一觉睡醒房子都没了。

解决方案

对于帮助 BT 社区反吸血的我们,自然也要充分利用 P2P 技术。答案是:引入 libp2p,并深入使用其基础之上的 IPFS 星际文件系统

借助 IPNS,PBH 可以在像传统互联网的 DNS 的 IPNS 中,更新解析记录,并让 PBH 从新的 CID 下载特定数据。这一过程是完全去中心化的,因此也自带抗攻击效果。

每个 PBH 都会成为一个 IPFS 节点,互相发现节点、传递数据、并彼此帮助中继流量。能够极大的改善获取 IP 规则的联通性。
而对于提供方,我们也只需要运行数个种子节点,用来向 IPFS 网络更新数据即可。

得益于去中心化网络的特性,攻击者很难知道网络中哪个节点是真正的核心节点。 一旦我们更新文件,新的规则文件会在整个网络中传递。每个 PBH 获取到规则后也会向其它需要规则的 PBH 提供数据。除非攻击者干掉整个 IPFS 网络中所有的节点(成千上万台设备),否则攻击就完全不会起到效果。

更进一步

前面提到 IPFS 基于 libp2p,PBH 还可以更进一步,直接使用 libp2p 建立端到端去中心化连接。

如果有人用过 BiglyBT/Vuze/Azureus,那么可能知道 BBT 有一个种子的评分、标签和聊天系统。这套系统实际上没有依赖任何服务器,而是完全基于 DHT 的去中心化系统。

PBH 也应该考虑利用 libp2p 实现一套类似的系统,可以给某个特定 IP 地址进行评级,打标,建立一个分布式的信誉库。这样即使未来 BTN 服务器不再继续运行,使用 PBH 的用户仍可使用此系统初步判断 IP 的信誉情况。

除此以外也有很多好玩的玩法,然而由于技术实现和法律风险,它们可能最终不会加入 PBH 或者延后加入:

规则订阅重写

由于目前发展,规则订阅显然需要进行改进。一个是前面提到的 IPFS 支持,另一个是真正支持 PeerGuardian 格式。目前 IP 区间在内部是被转换为 CIDR 存储和使用的,因此需要原生支持 IP 区间写法。

不考虑订阅 PeerID 和 ClientName,一个是太容易被修改,现在相当一部分吸血者都使用 qb tr 这种正规客户端冒充,另一个是用户完全能够根据特征自己修改规则。

Gaojianli commented 4 weeks ago

新的规则订阅需要考虑支持peername等其他封禁规则,甚至支持订阅脚本

2024年9月4日 03:13,Ghost_chu @.***> 写道:

前言

在很长一段时间里,规则订阅都是 PBH 封禁的主力。PBH-BTN 通过维护 BTN-Collected-Rule 仓库的规则,并借助 Github 的 CDN 来向用户分发。

然而由于不可抗力,尽管通过 jsdelivr 和 CloudFlare 辅助分发,仍然有一部分用户无法获取订阅规则,导致 PBH 只能完全依赖本地算法反吸血,影响了反吸血的效果。

一个可行而直接的办法是使用境内 CDN,速度快,联通性也好。备案也不是问题。然而作为反吸血工具,生来就是容易被攻击的对象之一。一旦遭到恶意攻击,那真是一觉睡醒房子都没了。

解决方案

对于帮助 BT 社区反吸血的我们,自然也要充分利用 P2P 技术。答案是:引入 libp2p https://libp2p.io/,并深入使用其基础之上的 IPFS 星际文件系统 https://ipfs.tech/

借助 IPNS,PBH 可以在像传统互联网的 DNS 的 IPNS 中,更新解析记录,并让 PBH 从新的 CID 下载特定数据。这一过程是完全去中心化的,因此也自带抗攻击效果。

每个 PBH 都会成为一个 IPFS 节点,互相发现节点、传递数据、并彼此帮助中继流量。能够极大的改善获取 IP 规则的联通性。 而对于提供方,我们也只需要运行数个种子节点,用来向 IPFS 网络更新数据即可。

得益于去中心化网络的特性,攻击者很难知道网络中哪个节点是真正的核心节点。 一旦我们更新文件,新的规则文件会在整个网络中传递。每个 PBH 获取到规则后也会向其它需要规则的 PBH 提供数据。除非攻击者干掉整个 IPFS 网络中所有的节点(成千上万台设备),否则攻击就完全不会起到效果。

更进一步

前面提到 IPFS 基于 libp2p,PBH 还可以更进一步,直接使用 libp2p 建立端到端去中心化连接。

如果有人用过 BiglyBT/Vuze/Azureus,那么可能知道 BBT 有一个种子的评分、标签和聊天系统。这套系统实际上没有依赖任何服务器,而是完全基于 DHT 的去中心化系统。

PBH 也应该考虑利用 libp2p 实现一套类似的系统,可以给某个特定 IP 地址进行评级,打标,建立一个分布式的信誉库。这样即使未来 BTN 服务器不再继续运行,使用 PBH 的用户仍可使用此系统初步判断 IP 的信誉情况。

除此以外也有很多好玩的玩法,然而由于技术实现和法律风险,它们可能最终不会加入 PBH 或者延后加入:

PBH 连接到下载器能够获取种子列表,是否能够搓一个求种功能?有的时候为了节约资源,长期无人下载的种子或者当时热门的种子在一段时间后会被用户暂停。其他人自然也就无法连接下载。通过可以向其它已知拥有特定种子的用户发送续种请求,请求恢复种子 在上面的基础上,有时会遇到联通性不好的问题。可能由于 ISP 的 QOS,或者干脆路由问题丢包断连。libp2p 已知可以通过 TCP/QUIC/WebSocket/WebTransport/WebRTC 等方式连接,且自带 NAT 打洞穿透。再加上前面提到的中继,也许可以帮助其他人改善连接性和下载速度 以及更多… 规则订阅重写

由于目前发展,规则订阅显然需要进行改进。一个是前面提到的 IPFS 支持,另一个是真正支持 PeerGuardian 格式。目前 IP 区间在内部是被转换为 CIDR 存储和使用的,因此需要原生支持 IP 区间写法。

— Reply to this email directly, view it on GitHub https://github.com/PBH-BTN/PeerBanHelper/issues/425, or unsubscribe https://github.com/notifications/unsubscribe-auth/AESYDLRWYTGSZESFP5X5JXLZUYC4ZAVCNFSM6AAAAABNSYNOF6VHI2DSMVQWIX3LMV43ASLTON2WKOZSGUYDGNJYGY2TAMI. You are receiving this because you are subscribed to this thread.

starobots commented 2 weeks ago

这不就变成emule xtreme的部分功能了么。诶。

SteveYu000 commented 1 day ago

好想法!我之前也想过类似的办法,但太不成熟了,最终就没有提出来。 不过有一个疑惑:攻击者会不会冒充规则分发者污染整个网络?