Aria2 自动 ban 掉迅雷的脚本(仅限 Linux)
通过 Aria2 rpc (就是API)自动查找迅雷的 peer 然后使用 iptables + ipset 来 ban (所以 windows 不修改是没法用的)
这是不修改 Aria2 源码(其实就是自己太菜了 改不动 CPP)而 ban 掉迅雷的一个办法
当然经过简单改造,就可以屏蔽其它的特定客户端了 (现在的默认配置文件已经屏蔽了 迅雷 / 影音先锋 / qq旋风 / 百度网盘)
依赖 nodejs
ipset
iptables
// 整个脚本是 js 写的,可以轻松移植成别的语言 比如 py
除了 ArchLinux 安装 nodejs 自行参考官方教程
sudo apt-get install ipset
sudo pacman -S ipset yarn
sudo yum install ipset
git clone https://github.com/makeding/aria2_ban_thunder.git
cd aria2_ban_thunder
cp config_sample.js config.js
nano config.js # 或者 vim config.js 自己编辑一下
-
配置config.json 由于有注释,请复制 config_sample.js 无注释版本改
{ "base_url": "http://127.0.0.1:6800/jsonrpc", // aria2 rpc 地址 一般为 http://ip:6800/jsonrpc "secret": "test", // rpc 密钥 对应 rpc-secret "block_keywords": [ // 要 block 的客户端关键字 ] }
-
配置启动
参考配置
[Unit]
Description=aria2 ban thunder via ipset
After=network.target
[Service]
Type=forking
User=root
Restart=on-failure
RestartSec=5s
# 这里的路径自己改改
ExecStart=/root/.aria2/aria2_ban_thunder/startup.sh
ExecStop=/root/.aria2/aria2_ban_thunder/shutdown.sh
[Install]
WantedBy=multi-user.target
路径:
/etc/systemd/system/aria2_ban_thunder.service
(或者其它你喜欢的服务名)
systemctl daemon-reload
systemctl enable aria2_ban_thunder.service
systemctl start aria2_ban_thunder.service
# 自己安装
# yarn global add pm2
# pacman -S pm2 # ArchLinux
pm2 start --name 'aria2_ban_thunder' app.js
pm2 save
pm2 startup
客户端 | Peer名称 |
---|---|
迅雷 | XL SD |
影音先锋 | XF |
qq旋风 | QD |
百度网盘 | BN(可能) |
未知 | unknow |
以上吸血 peer 参考了来自隔壁的 qBittorrent-Enhanced-Edition 项目的源码,在这里表示感谢
如果还想屏蔽更多的 bt 客户端,可以参考 参考这边的源码 (没有什么必要啦 就迅雷之类的会吸血)
ban 未知的 peer 按照需求添加啦
由于家庭宽带是动态 IP 有几率 ban 了的 IP 今天是迅雷 明天就变 qBittorrent 了,所以还是要考虑解 ban IP
这里需要了解 ipset 的用法 使用 man ipset
| ipset -h
就知道用法了,下面是操作示范
单个 ip:
ipset del bt_blacklist (输入ip)
整个列表扬了(可以直接复制下面的运行):
# 1.先停止脚本(取决于你用什么方式运行的)
systemctl stop bt_blacklist
pm2 stop aria2_ban_thunder
# 2.把 iptables 规则删了
iptables -D INPUT -m set --match-set bt_blacklist src -j DROP
iptables -D FORWARD -m set --match-set bt_blacklist src -j DROP
# 3.ipset 炸了整个列表
ipset destory bt_blacklist
# 4.ipset iptables 都添加回去
ipset create bt_blacklist hash:ip hashsize 4096
iptables -I INPUT -m set --match-set bt_blacklist src -j DROP
iptables -I FORWARD -m set --match-set bt_blacklist src -j DROP
ipset 自带了个 timeout 的功能(详情 man ipset)
因为大家基本是动态ip的关系,今天这个 ip 是吸血客户端,明天也许就是正常用户了,为了降低误杀概率,还是加了这个功能
如果你觉得好用请推荐给别人
有什么问题 发 issue 就可以了,或者自己改改 发个 pr
MIT