Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧹 sr-adblock

自维护的小火箭去广告规则工厂

把上游项目的规则抓下来 → 体检 → 去重 → 修正 → 整合, 每天自动重建,产出 Shadowrocket 可以直接订阅的三层产物。

build 最近构建 广告域名 适配 App 平台 不支持 协议

本仓库不含任何节点、订阅、账号信息 —— 只有规则。

⚠️ 只支持 iOS + 小火箭(Shadowrocket)

不支持安卓,也不支持 iPhone 上的其他代理 App(Clash / sing-box / v2rayNG / Quantumult X 都读不了)。

原因很简单:产物的语法是小火箭(和 Surge 系)专用的 —— 配置里用了 policy-regex-filter、DOMAIN-SET、%APPEND%, 模块是 .srmodule(重写 / 脚本 / MITM 那套),规则集是"有类型、无策略列"的写法。 安卓客户端一种都读不了。

而且更根本的问题是:安卓上做不了"去开屏广告"这类能力 —— Clash / Mihomo 没有 HTTPS 解密(MITM),sing-box 不支持脚本, 所以本项目的模块层(改响应体、去开屏广告)在安卓上没有对应实现。

安卓能用的只有"按域名拦截"这一部分,而且必须转换格式 (Clash 要 YAML 的 payload:,sing-box 要 JSON,AdGuard 是 ||domain^)。 本项目的上游(blackmatrix7、fmz200)都提供安卓格式,可以去那里取现成的。 详见 常见问题 → 我是安卓,能用吗。


⚡ 三条链接,复制即用

配置https://raw.githubusercontent.com/ithtelab/sr-adblock/release/conf/base.conf
模块https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/ads-all.srmodule
模块https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/httpdns.srmodule

装法见 🚀 安装。base.conf 里没有任何节点,导入后自己加订阅即可 —— 地区分组会按节点名自动归类,换订阅不用改配置。


📖 写在前面 —— 请保护好自己

这个位置,之前换过两棒人。

最早是 h2y 的 Shadowrocket-ADBlock-Rules,他把小火箭的规则 划分得细致精美;他停更之后,Johnshall 接手, 一路维护到今天,做到每天北京时间 8:00 自动更新。

我们是第三棒。我们不打算做第四个"规则合集"—— 网络上不缺合集。 我们做的是把前面几棒的成果验证、去重、修正, 因为把它们的产物直接叠加起来,会互相打架(具体冲突见这里)。

先说说「信息」这件事

我们往往以为自己在打破信息的壁垒,其实打破的可能是保护自己的那道屏障。

外面的世界并不比里面更「中立」。任何平台、任何媒体、任何看起来开放的公共讨论场, 背后都有它自己的利益结构和叙事框架;它们也常常把平等、自由这类旗号挂在最显眼的地方 —— 但旗号本身说明不了内容是否可信。真正值得警惕的,是那种听起来「天然正确」、 让你觉得不必再动脑子的说法:那种潜移默化的影响,比明着骗你更有力。

但另一面同样成立:既然外面有这个问题,我们身边也不是没有。 所以唯一靠得住的不是某个网站、某个工具、某个「消息源」,而是你自己保留独立判断的习惯。

遇到任何观点 —— 包括我上面这一段 —— 都值得先问一句:这是谁说的、为什么这么说、对他有什么好处。 如果你发现自己容易被某一套说法推着走,那么不管那套说法来自哪一边, 建议先退回到自己熟悉的地方,把判断力找回来再说。

本项目的规则只提供给大家用于更便捷地学习和工作。它只是文本规则, 不提供、也不宣传任何观点,没有能力带你「翻墙」,只定义了哪些域名直连、哪些走代理。 如果你对上面这些话持相反意见,这个项目可能不适合你 —— 规则本身只是工具,用不用由你。

具体到这个项目,请务必保护好自己

这句话放在这里,是因为这个项目要做的事, 本质上就是让一个 App 解密你的 HTTPS 流量。

你为了去掉开屏广告,会把银行、支付、社交、办公的流量一并交给它。 这不是危言耸听,这是 MITM 的固有代价:

  • 开了 HTTPS 解密,就意味着被解密的那些域名,内容对你手机上的小火箭是明文的。
  • iOS 15 以下小火箭的内存预算只有 15MB,MITM 主机名塞太多会出现「模块失效」甚至「VPN 自动断开」。所以本项目把去广告拆成 726 个 per-App 模块——只装你在意的几个 App,是既省电又安全的选择。
  • 银行、券商、涉及工作机密的 App,不要解密。用 mitm-exclude.srmodule 把它们排除掉。域名层(不需要证书的那一层)通常就够拦掉它们的广告了。
  • 你的节点信息、订阅链接、截图里露出的服务器地址,不要发到公开的地方。本项目在构建时会自动扫一遍产物,确认没有节点密码混进去才会发布。

规则是为了让你用得更舒服,不是让你把身家性命交出去。 能不开解密就不开,能少解密一个域名就少解密一个 —— 这是本项目的默认取向: 三层互相独立,你可以只喝第一层(域名层,不碰证书)。

🔒 想知道"数据会不会泄露"?→ 看这份安全说明

它把风险分成三层讲清楚,并且给出可验证的依据:这个仓库会不会上传你的数据、 域名层为什么天然安全、模块层的风险边界到底有多大、83 个脚本的网络行为审计结果 (75 个完全不含网络 API、0 处"把内容 POST 出去"的代码路径、 9 个出现第三方域名的脚本逐个列出),以及按安全性从高到低的四种装法。 那份文档里还有"怎么自己验证、不用信作者"的方法。

本项目的所有产物都只是文本规则,它不会、也没有能力给你"魔法上网"。 它只定义哪些域名该直连、哪些该走代理、哪些该拦掉。


🗂 三层结构

① 域名层(不需要证书)
     ad-domain.list           285,799   拦掉大部分广告
     ad-domain-lite.list       60,148   只收被 2 个以上上游都认定的域名,怕误杀用这个
     ad-rule.list                 387   IP / 关键词 / 正则
                     ↓   装完这层就够用很久,可以先只装它
② 模块层(需要证书)
     ads-all.srmodule           4,504   改响应体、去开屏广告
     httpdns.srmodule             161   拦 HTTPDNS 绕行(必需配套)
     apps/*.srmodule              726   per-App 模块,出事时的逃生通道
     mitm-exclude.srmodule          —   排除解密的域名(银行类用)
                     ↓
③ 配置层(可选)
     base.conf                      —   代理分组 + 分流规则,节点订阅自填
层 作用 要装证书吗
① 域名层 按域名拦截广告请求,能拦掉大部分广告 ❌
② 模块层 改响应体、去开屏广告、拦 HTTPDNS,管前面拦不住的 ✅
③ 配置层 代理分组 + 分流规则,把 ①② 接起来 —

三层互相独立,可以只装其中一层。 建议先只装 ① 跑几天,确认没有误杀、日常使用正常,再上 ②。


🚀 安装

👉 第一次用、不熟悉小火箭?看这份图文教程,跟着点就行 →

它会先让你确认自己属于哪种情况(有没有节点订阅、要不要开屏广告拦截), 然后只给你看你那一节的步骤,不需要懂技术。

下面是简版(给已经熟悉小火箭的人):

1. 加配置

小火箭 → 底部 配置 → 右上角 + → 粘贴配置链接 → 下载 → 点击该配置「使用配置」。

2. 加节点

底部 首页 → 添加你自己的节点/订阅。 base.conf 里没有任何节点;地区分组按节点名自动归类,换订阅也不用改配置。

3. 装证书(只装 ① 可跳过)

「配置」→ 点正在用的配置右侧 ⓘ → 「HTTPS 解密」→ 生成新的 CA 证书 → 安装证书 → 去 iOS「设置」安装描述文件 → 「通用 → 关于本机 → 证书信任设置」里打开「完全信任」。

⚠️ 只装描述文件、不在「证书信任设置」里打开完全信任,是最常见的"装了没用"原因。

4. 加模块

「配置」→「模块」→ 右上角 + → 粘贴模块链接。

5. 断开重连一次小火箭,让规则生效。

只用域名层、不装证书的写法(点开)

把你自己的配置打开,在 [Rule] 段最上面加这两行:

DOMAIN-SET,https://raw.githubusercontent.com/ithtelab/sr-adblock/release/ruleset/ad-domain.list,REJECT
RULE-SET,https://raw.githubusercontent.com/ithtelab/sr-adblock/release/ruleset/ad-rule.list,REJECT
如果 raw 链接拉不动(国内网络常见,点开)

raw.githubusercontent.com 在国内经常连不上或时断时续。两种办法:

  1. 让小火箭自己走代理去拉(推荐):小火箭请求规则集 URL 时本来就会走它自己的隧道, 只要节点通就能拉到。加载失败时在「配置 → 规则集URL」里点重新下载。

  2. 换镜像地址:把链接里的 raw.githubusercontent.com/ithtelab/sr-adblock/release/ 换成 cdn.jsdelivr.net/gh/ithtelab/sr-adblock@release/:

    https://cdn.jsdelivr.net/gh/ithtelab/sr-adblock@release/ruleset/ad-domain.list
    

    jsDelivr 有缓存延迟(通常几小时),更新不如 raw 及时。 也可以改 config/options.yaml 里的 repo_url,让产物里的说明跟着变。


🧰 全部产物

文件 规模 什么时候用
ruleset/ad-domain.list 285,799 域名层全量。默认用它
ruleset/ad-domain-lite.list 60,148 只收录被 2 个以上独立上游都认定的域名。怕误杀就用它替换全量
ruleset/ad-rule.list 387 IP / 关键词 / 正则类规则,域名表放不下这些,两个要一起引用
module/ads-all.srmodule 4,504 去广告总模块。日常只装这一个,不要叠加别的去广告模块
module/httpdns.srmodule 161 阻止 App 绕过代理自己解析域名。必需配套,已剔除与总模块的重复
module/mitm-exclude.srmodule 预置 45 个 银行 / 券商 / 支付 / 办公 App 一律装它(已预置域名,装上就生效,装在模块列表最下方)。要加自己的在「编辑参数」里填 -域名
module/apps/*.srmodule 726 个 per-App 模块。只装你在意的几个 App,MITM 主机名最少、最省电
conf/base.conf — 配置骨架:代理分组 + 分流 + 引用上面两层
conf/private.example.conf — 私人覆盖怎么写(不想每次被上游更新覆盖自己的规则时看它)

小火箭会自动更新这些订阅(模块默认 1–7 天)。 前提:iOS「设置 → 通用 → 后台 App 刷新」要对小火箭开启。


🧩 额外可选模块(非去广告)

这些是额外功能,不属于上面那三层,按需单独导入。 它们和主模块一样做了脚本本地化、MITM 主机名补全、脏数据校验, 并保留了上游的参数声明(参数就是你在小火箭里配置它们的界面)。

怎么安装

和装主模块的方式完全一样:

小火箭 → 配置 → 模块 → 右上角 + → 粘贴链接 → 完成

链接格式固定,把模块名换掉就行:

https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/extra/<模块名>.srmodule

先装这三个(我推荐的)

https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/extra/ca-module.srmodule
https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/extra/no-ota.srmodule
https://raw.githubusercontent.com/ithtelab/sr-adblock/release/module/extra/github-cdn.srmodule
模块 装完还要做什么
ca-module ★ 换配置不再掉解密。点它的「编辑参数」,把证书内容与密码填进去,再打开开关
no-ota ★ 屏蔽 iOS 系统更新提示(去掉「设置」小红点)。想升级系统时停用即可
github-cdn 把 GitHub 的 raw 请求 302 到国内可用的 jsDelivr 镜像。装上即生效

全部模块

⚠️ 不要一次全装。 装得越多,被解密的主机名越多、越费电,出问题也越难排查。 只装你真正需要的。

👉 点这里看全部 20 个模块(每个都带可复制的完整链接)

那个索引是每次构建自动生成的,数字不会过期。下面是分组概览:

分组 模块 说明
证书 / 安全 ca-module ★ 换配置不再掉解密。小火箭的 HTTPS 解密是跟配置走的,换一次就要重开一次;装了它把证书填进参数,解密状态跟着模块走
vpn-detected 让 App 检测不到你在用代理(很多国内 App 会因为代理检测报错)
GitHub 体验包 github-pro 私有库/大文件加速。14 个参数,装完要按需填写
github-cdn 把 raw.githubusercontent.com 的请求 302 到国内可用的 jsDelivr 镜像。国内刚需
github-no-zoom 手机上逛 GitHub 禁止页面缩放
插件生态 plugin2rocket ★ 打通另一个生态:把「可莉插件中心」的 Loon 插件在手机上实时转成小火箭模块。已内嵌 Script-Hub,无需额外依赖
plugin-hub2rocket 上面那个的精简版,需要先装 Script-Hub。两个别同时装
境外卡 / WiFi Calling wificalling-hk / wificalling-uk / wificalling-us 香港/英国/美国 SIM 卡的 Wi-Fi Calling 规则,模块内自带自动匹配该国节点的策略组
talkatone Talkatone 保号与通话优化
ultramobile-wificalling Ultra Mobile 的 Wi-Fi Calling
单 App 增强 youtube-noad YouTube 去广告(纯 JS 实现,主模块里没有)
hongguo / luckin / spotify / deepseek 红果短剧 / 瑞幸 / Spotify / DeepSeek 的净化与增强
cmcc-itv 咪咕直播源(看电视直播),它引用的外部规则集已一并本地化
netinfo 在 App 内查看当前出口 IP / 节点信息,排查网络时有用
系统 no-ota ★ 屏蔽 iOS 系统更新提示 —— 去掉「设置」上的小红点和自动下载。想升级系统时停用它即可

这些模块的作者、来源与许可逐条写在 NOTICE 里。 它们来自 LOWERTOP、iab0x00、可莉等上游项目,本项目只做本地化与整合。


🩺 出问题了怎么办

某个 App 功能异常 / 图片裂 / 打不开

先用排查工具查是哪个域名被拦:

python src/lookup.py api.example.com        # 查它是否被拦、被谁拦、怎么放行
python src/lookup.py api.example.com --deep # 顺带查是哪个上游收录了它

它直接告诉你:被哪个产物拦了、命中的是哪条规则、该往 allowlist 加哪一行。 把那一行加进 config/allowlist.txt 重新构建即可。

放行名单对三层同时生效:域名层会剔除、模块层里对应的拦截规则也会剔除、 base.conf 里会生成优先级最高的 DIRECT 规则。

为什么必须作用于模块层?(点开)

小火箭里模块的规则优先级高于配置文件。所以如果只改配置不改模块, 拦不住模块里那 2800 条规则 —— 这正是很多"加了白名单还是打不开"的原因。

想临时放行、不想重新构建

小火箭 → 配置 → 选中正在用的配置 → ⓘ → 「编辑纯文本」, 把你的 DOMAIN-SUFFIX,某域名.com,DIRECT 加到 [Rule] 段最上面。 缺点:点「更新配置」会被远端文件覆盖,适合临时用。


🔧 我们相比上游改了什么

上游都是有价值的项目,但各自有坑。把它们的产物直接叠加会互相打架 —— 本项目每次构建都会在 build-report.md 里逐条报告实际改动:

去重与修正(点开看细节)
  1. 删掉 167 条上游重复规则。可莉的模块由 731 个 per-App 文件合并而成, 合并脚本有个 bug:5 个 App(闲鱼 / 小红书 / 知乎 / 网易云音乐 / 云快充) 在两个目录下各存了一份近似但不相同的文件,两份都被并了进去。
  2. 补回 18 条 SR 版缺失的规则。可莉的 Surge 版比小火箭版新(CSDN、财新等域名), 已从 Surge 版补齐;另外 4,700 条只是书写格式差异(status-code=200、pattern 加引号), 已识别为语义重复,不会重复导入 —— 否则产物会虚胖一倍。
  3. 删掉 1 条脏数据。Surge 版 [URL Rewrite] 里混进了一条 hostname - reject 残句, 会被当成「任何 URL 里含 hostname 就拦截」的正则。已按段落语法逐条校验剔除。
  4. 补全 8 个参数声明。模块里脚本引用了 logLevel、sponsorBlock、 per_filter_video_thread 等 8 个占位符,上游 #!arguments 却只声明了一个 没人引用的空开关 12306_enable。默认值已从上游 Loon V2 版插件(那里有完整声明)取回。
  5. 83 个第三方脚本全部本地化。上游约 1/4 的规则依赖 12 个第三方仓库的脚本, 上游改路径或删文件就会静默失效(规则还在、脚本 404、广告照常出现,没有任何提示)。 可莉自己就踩过这个坑(2026-09-10 的提交正是「迁移被删除的美丽修行脚本到本仓库」)。 现在全部抓进 vendor/、路径改指本仓库,且每次构建用条件请求复查上游更新。
  6. 脚本兼容性体检(上游没人做过)。这些脚本是 Loon/Surge/QX 多客户端共用的, 里面可能用到小火箭没有的 API。构建时逐个静态扫描并在 build-report-scripts.md 出报告(当前:76 安全 / 7 存疑 / 0 不兼容)。
  7. 三层用同一份放行名单,修掉「改了配置但模块还在拦」的问题。
  8. 父域压缩:.a.b.com 已覆盖 a.b.com 及其子域,冗余子域条目全部删除, 并把来源归属上交给父域(这样"两个独立来源都认定"的精简版判定才不会漏)。
  9. 策略与选项归一:上游 Reject/reject/REJECT 混用已统一; 同一规则在不同来源里只差一个 no-resolve 选项的(91 条),取并集而不是报冲突。
  10. 域名层来源取最新:Johnshall 项目 build 分支里的 ad.list 已冻结在 2025-02-08,必须取 release 分支的每日产物 —— 这类"看起来一样但不能用"的坑, 本项目已绕开并写在 config/sources.yaml 的注释里。
还有一道自检门禁(点开看检查项)

每次构建结束都会跑一遍,报告在 build-report-verify.md:

  • ✅ 产物段落名是否合法、有没有混进小火箭不支持的段落([Panel] 之类)
  • ✅ 规则类型是否都在小火箭支持范围内
  • ✅ 脚本是否全部本地化、被引用的文件是否真实存在
  • ✅ 配置里引用的产物是否都真的产出了
  • ✅ 产物里有没有混进节点密码 / 订阅令牌(公开仓库的底线)
  • ✅ 规则数相比上次是否暴跌(上游挂掉的典型征兆,跌超 20% 直接让构建失败、不发布)

🔧 想知道这些修复具体是怎么做出来的? 看 实现原理 —— 讲清了数据流水线、五个不显然的算法(父域压缩的归属上交、语义去重、 MITM 主机名反推与金融守卫、放行名单的三层生效、ETag 条件请求)、自检门禁的设计, 以及每条链路上踩过的坑。想改这个项目、或想判断它可不可信,看那份。


🔨 怎么维护

日常:什么都不用做

GitHub Actions 每天北京时间 10:00 自动重建并发布到 release 分支 (比 Johnshall 的 8:00 晚两小时 —— 等它先更新完,否则永远拿到前一天的数据)。 小火箭会自己拉新版本。

上游脚本变异了怎么办(安全门禁)

vendor/ 里的 83+ 个脚本来自 12 个第三方仓库,构建时会跟随上游更新。 如果上游某次提交塞进恶意代码,后果比"规则拦错"严重得多 —— 脚本能读到被解密流量的内容。所以加了脚本指纹锁:

  • 每个脚本的 sha256 记在 config/script-pins.txt
  • 构建时内容与指纹不一致(或出现新脚本)→ 停止发布,用户手上仍是上一版
  • 你会看到 Actions 里有条 warning,产物里有 build-report-script-changes.md, 里面列出改动的脚本、值得看一眼的行(网络调用 / 动态执行)
  • 确认没问题后:Actions → build → Run workflow → 勾选 accept_scripts, 它会更新指纹并提交,下一次构建恢复正常发布

本地确认方式是 python src/build.py --update-script-pins。

为什么要人工确认一次:规则是文本,错了顶多误拦;脚本是代码,被投毒能读到你的流量内容。 这个门禁换来的是「上游脚本内容变化必须被人看过一次」——自动化与安全兼得。

改行为:只改 config/ 下的文件

文件 作用
config/allowlist.txt 放行名单,你最常改的就是它。foo.com = 放行该域名及所有子域;*.foo.com = 只放行子域
config/blocklist-extra.txt 自己想额外拦的域名
config/sources.yaml 增删上游来源(每个来源都注明了它有什么坑)
config/options.yaml 构建选项:精简版开关与门槛、是否本地化脚本、MITM 数量阈值、订阅根地址

改完在 GitHub Actions 页面点 Run workflow,或本地跑:

pip install pyyaml     # 唯一依赖,Python 3.11+
python src/build.py                # 全量构建(联网,带缓存)
python src/build.py --offline      # 只用本地缓存
python src/build.py --refresh      # 强制重下所有上游
python src/build.py --layer domain # 只构建域名层
python src/lookup.py <域名>        # 排查某个域名为什么被拦

📁 目录说明

config/     配置源:上游清单、放行名单、构建选项          ← 你要改的
docs/       文档:[新手安装](docs/新手安装.md) · [安全说明](docs/安全说明.md) · [实现原理](docs/实现原理.md)
src/        构建工具(3,100 行 Python)
  build.py      构建入口:三层编排 + 报告
  parse.py      各上游格式 → 统一中间表示
  merge.py      合并 / 去重 / 父域压缩 / 放行名单
  module.py     模块解析、语义去重、脏数据校验、参数解析
  emit_*.py     域名层 / 模块层 / 配置层的产物输出
  vendor.py     第三方脚本本地化与兼容性体检
  apps.py       per-App 模块生成
  verify.py     产物自检门禁
  lookup.py     误杀排查工具(日常最常用)
vendor/     本地化的第三方脚本(构建产出,不入库)
dist/       构建产出(发布到 release 分支)
cache/      上游原始文件缓存(不入库)

分支分工:main 只放源码与配置;release 只放产物, 每天以单个 orphan 提交强推 —— 不然 28 万行的域名表每天全量提交,会把仓库历史撑爆。


❓ 常见问题

我是安卓手机,能用吗?

不能。 产物的语法是小火箭/Surge 系专用的:

产物 用的东西 安卓能读吗
conf/base.conf [Proxy Group] + policy-regex-filter、DOMAIN-SET、RULE-SET ❌
module/*.srmodule 模块格式([URL Rewrite]/[Body Rewrite]/[Map Local]/[Script]/[MITM]) ❌
ruleset/*.list 有规则类型、无策略列的规则集写法 ❌(格式不同)

更根本的问题是:安卓上做不了"去开屏广告"。 这一层的原理是让 App 解密 HTTPS 流量再改写响应体,而:

  • Clash / Mihomo 没有 MITM(不解密就改不了内容)
  • sing-box 不支持脚本
  • v2rayNG 等只做分流

所以安卓能用的只有按域名拦截(也就是本项目的①域名层),而且必须先转格式: Clash 要 YAML 的 payload:、sing-box 要 JSON、AdGuard 用 ||domain^。

安卓用户建议:直接去上游找现成的安卓格式,别转换本项目的产物:

  • blackmatrix7/ios_rule_script 的 rule/Clash/Advertising/ —— 同一个源,Clash YAML
  • 它的 rule/AdGuard/Advertising/Advertising.txt —— 就是 AdGuard 语法
  • Clash 用户还可以用 rule-providers 直接订阅 YAML

本项目不支持安卓,也不打算支持 —— 这是定下来的决定,不是待办事项。

理由不是"做不了",而是"做了没意义":技术上确实可以新增一层输出 (域名层的域名是通用的,转成 Clash YAML / sing-box JSON 就行), 但它只能覆盖①域名层 —— 而安卓客户端从原理上就拿不到本项目的核心价值 (没有 MITM、没有脚本,去开屏广告无从谈起)。 与其让域名层换个格式再多维护一套,不如把精力放在小火箭这一层做深。

安卓用户请直接去上游取现成格式(见上面三条),那里是同一批数据源,维护得比转换更好。

我是 iPhone,但用的是 Clash / Quantumult X / Stash,能用吗?

不能直接使用。 本项目只针对 Shadowrocket(小火箭) 输出: .srmodule 模块、DOMAIN-SET/RULE-SET 写法、policy-regex-filter 这些分组参数, 都是小火箭/Surge 的语法。

Quantumult X 的重写要用 [rewrite_local] + url ... jsonjq-response-body 那种写法, Clash / Stash 用 YAML —— 都和小火箭不同,没有测试过、也不保证可用。

Surge(iOS/macOS)格式和小火箭最接近,本项目的模块内容理论上能被 Surge 读, 但没有测试过,不要当成支持。

如果你用的是 Loon / QX,去可莉(fmz200)那边找对应格式,他同时维护了 Loon/plugin/、QuantumultX/rewrite/ 的同类产物。

装完没效果?
  1. 确认小火箭「全局路由」是配置模式 —— 模块里的规则只在配置模式下生效。
  2. 确认 HTTPS 解密已开启且证书被完全信任(只装描述文件不信任是没用的)。
  3. 部分 App 要清缓存或重装才生效(上游作者的原话)。
  4. 看 build-report-verify.md 确认产物本身没问题。
会不会拖慢网速?

域名匹配在小火箭里是编译成搜索树 + 哈希缓存的(Johnshall 与 SR 作者交流后记录在案, 属于社区转述而非官方文档,所以只对域名类规则可信)。 URL-REGEX 是正则扫描、IP-CIDR 未带 no-resolve 时还要额外解析域名, 这两类是真实的开销来源。本项目已给能带的 IP 规则都加了 no-resolve。

为什么 ad-rule.list 和模块里都有域名规则?

两层的定位不同:ad-rule.list 是长尾兜底(28 万条域名), 模块里那 2800 条是最高优先级(模块规则优先于配置,所以广告域名不会被你的分流规则放走)。 重复不会导致重复拦截,只是层级分工。

「MITM 主机名 1,010 个」是什么意思?会不会太多?

先说这是什么。 你要去掉开屏广告,就得让小火箭"看懂"那些 App 的网络内容 —— 这叫 HTTPS 解密(MITM)。但小火箭不会解密所有网站(那既危险又费资源), 只解密一份名单上的域名,这份名单就写在模块里:

[MITM]
hostname = %APPEND% gab.122.gov.cn, ad.12306.cn, ...

当前总模块的这份名单是 1,010 个域名。

为什么数量要盯着。 每解密一个域名,小火箭都要保存解密状态、证书、连接上下文, 这些占内存。而 iOS 给"网络扩展"(VPN 类 App 运行的地方)的内存是有上限的 —— 社区手册记录的经验值是:iOS 15 以下约 15MB,iOS 15 及以上约 50MB。

名单越长,越容易撞到上限。撞到之后的表现很典型:

  • 模块突然不生效了(规则还在,但广告照常出现)
  • VPN 自己断开、或者连着但完全没网

所以本项目做了两件事:① 构建时盯着这个数量,超过 1,100 就告警; ② 提供 726 个 per-App 模块 —— 只装你在意的几个 App,名单能降到几十个。

你该怎么做:

你的设备 建议
iPhone + iOS 15 及以上 1,010 个在 50MB 预算里,基本没问题,可以继续用总模块
iPhone + iOS 14 或更老 换成 per-App 模块(只装需要的几个 App),别装总模块
出现"模块失效 / VPN 自动断开" 这就是内存不够的信号 → 停用总模块,改用 per-App 模块

想自己看范围有多大:小火箭 →「数据」→「代理」→ 打开日志记录, 日志里带 MITM 标记的请求就是正在被解密的。

顺带说明:httpdns.srmodule 和 mitm-exclude.srmodule 的主机名都很少 (9 个和 45 个),占内存的只有 ads-all 那个总模块。

会不会收集/上传我的信息?

不会。仓库里只有规则。构建时只做一件事:从各上游的公开 URL 下载文本。 唯一的"外发"是……没有。所有产物都在你自己的机器和你的仓库里。


📜 许可与署名

构建代码是 MIT。整合的规则来自多个上游,各有各的许可 (blackmatrix7 是 GPL-2.0、Johnshall 是 CC-BY-SA-4.0、部分项目未声明许可), 逐源署名与说明见 NOTICE。二次分发前请先读它。

如果这个项目帮到了你,给上游点个 Star —— 规则是他们写的,我们只是把它们整理干净。

About

自维护的小火箭(Shadowrocket)去广告规则工厂|整合 5 个上游、去重修正、三层产物、每日自动重建

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages