Shadowrocket REJECT 规则写法:屏蔽域名的原理、适用范围与局限

说明 REJECT 策略在连接层拦截请求的方式、适合写进规则的域名类型,以及为什么它无法保证清除所有页面内容。

本文速览

REJECT 是规则命中后执行的拒绝策略,不是页面元素选择器。本文面向已经使用 Shadowrocket(小火箭)、希望限制特定域名连接的用户,说明 DOMAIN 与 DOMAIN-SUFFIX 的写法、Global Routing 的选择、规则顺序和误拦截排查方法。操作以用户已有自己的服务商与订阅、已有可用配置为前提;先备份配置,再用一条规则验证,不直接导入来源不明的大型列表。

REJECT 在哪里生效

一条分流规则包含匹配条件和命中后的策略。以 DOMAIN,ads.example.com,REJECT 为例,DOMAIN 指定匹配完整域名,ads.example.com 是匹配值,REJECT 指定拒绝处理。它与 DIRECT 的区别是:DIRECT 仍然尝试直接连接目标,REJECT 则不把这条命中的连接按正常直连或代理路径交付给目标。

应用请求 隧道接管 规则匹配 拒绝处理 请求失败

上面的流程只描述被 Shadowrocket 接管、且进入规则判断的请求。域名规则能否命中,还取决于该连接是否有可供匹配的域名信息。连接记录只有目标 IP、没有关联域名时,不能仅凭浏览器地址栏里的名称就断言 DOMAIN 规则一定会命中。

REJECT 不等于改写 DNS,也不等于编辑网页。它不会自动读取 HTTPS 响应里的页面结构,更不会按某个按钮的文字或图片位置删除内容。浏览器可能表现为资源加载失败、图片空缺或请求报错;具体显示由网站自己的错误处理逻辑决定,不应把某一种页面外观当作 REJECT 的固定效果。

域名规则的最小写法

配置文件中的规则通常写在 [Rule] 段。以下域名均为文档示例,不是可用的屏蔽清单。实际操作时,应从自己的连接记录中确认目标名称,再只添加与目标范围一致的规则。不要因为某个域名名称里包含 ads 或 track,就直接认定它可以安全拦截。

[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,metrics.example.net,REJECT
FINAL,DIRECT

第一行只针对 ads.example.com,不会顺带覆盖 img.ads.example.com。第二行覆盖 metrics.example.net 本身以及它的子域名,例如 event.metrics.example.net;不会按任意字符串去匹配 notmetrics.example.net。域名字段不填写协议前缀、路径、查询参数或端口。

精确范围

关键字
DOMAIN
匹配值
ads.example.com
策略
REJECT
适用条件
已确认单个主机用途,先做窄范围验证。

先使用完整域名,减少误伤同一服务下其他主机的可能。

后缀范围

关键字
DOMAIN-SUFFIX
匹配值
metrics.example.net
策略
REJECT
适用条件
已确认该域名及下属主机可以一起拒绝。

扩大到后缀匹配前,核对其下是否还有登录、图片或接口服务。

示例中的 FINAL,DIRECT 仅用于展示一个完整的最小规则段,意思是前面的规则没有命中时走 DIRECT。已有配置可能使用其他最终策略,不要为了添加 REJECT 而替换原有 FINAL,也不要把整个示例追加到已有 FINAL 后面。修改的通常只是目标拒绝规则,原有分流结构应当保留。

启用 Config 并检查匹配顺序

写入规则不代表当前连接已经使用它。先到 Config 确认编辑的是当前使用的配置并保存,再回到 Home → Global Routing 选择 Config。Proxy 与 Direct 是全局路由选择,不应用它们来验证配置文件中的逐条分流;Scene 按场景配置决定实际路由,排错时先明确它当前选择了什么,不把 Scene 当成 Config 的同义词。

  1. 备份:在 Config 保留原配置副本,记录原有 FINAL 与目标域名附近的规则。
  2. 添加:把一条已确认的 DOMAIN 拒绝规则放到可能抢先命中的宽泛规则之前,并保证它位于 FINAL 之前。
  3. 选择:回到 Home,将 Global Routing 设为 Config,确认连接开关已开启。
  4. 重试:关闭目标页面或应用后重新发起访问,必要时重新连接,让测试产生新的连接。
  5. 核对:查看这次请求的目标、命中规则和最终策略;没有对应的新记录时,不先得出规则无效的结论。

规则按顺序判断,先命中的规则决定处理策略。例如先写 DOMAIN-SUFFIX,example.com,DIRECT,再写 DOMAIN,ads.example.com,REJECT,后者就可能没有执行机会,因为目标已被前面的父域名规则接走。GEOIP 与 IP-CIDR 分别依据 IP 的地区归属和地址网段匹配;它们不是页面分类工具,也需要结合前后顺序检查。

[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
FINAL,DIRECT

这份顺序表达的是“先拒绝指定主机,再允许该域名范围中的其余连接,最后兜底”。若已有配置使用规则集或策略组,也要检查它们是否在前面覆盖了目标。不要只搜索到一条 REJECT 就结束排查,完整的判断依据是当前配置、当前路由姿态和实际命中记录三者一致。

适用范围与页面残留

较适合单独拦截的对象,是用途已经确认、与主要业务相对独立的请求域名。仅凭域名看起来像统计服务,还不足以确认它没有业务依赖。有些接口同时负责会话初始化、功能开关或资源签名,拒绝之后可能不仅少了一次统计,也会导致应用无法进入下一步。

请求情况REJECT 能处理什么需要注意什么
独立资源主机拒绝命中该主机的连接先确认主机没有承担必要资源分发。
同域名不同路径域名规则会影响整个主机的相关连接不能只拒绝 /banner 而保留同主机的 /login。
正文内嵌内容不能靠独立域名规则剥离同一响应里的片段正文已经携带的图片数据或文字不会被自动删除。
本地缓存资源只能影响之后发生且命中规则的请求缓存命中可能不会触发新的目标连接。
共享 CDN 地址IP 规则可影响该地址上的连接同一 IP 可能承载多个无关域名,误拦截范围更大。

判断:先缩小到主机,再决定是否扩大

只有确认同一后缀下的主机都可以拒绝,才把 DOMAIN 改为 DOMAIN-SUFFIX。若目标内容与登录或正文共用同一主机,应停止扩大域名范围,而不是改用更宽的 IP 网段来追求页面清空。

HTTPS 的加密内容不会因为配置了 REJECT 就变成可供逐段筛选的明文。本篇的域名规则不需要为此开启 HTTPS Decryption,也不需要安装解密证书。若目标是删除页面里的特定元素,那属于内容层处理问题,不能用连接层规则的成功与否代替判断。

用新连接验证并保留回退

验证应当围绕一个已确认的真实请求进行,而不是打开文档示例域名期待看到特定结果。先记录未添加规则时的访问状态,再添加一条规则、发起新请求、检查命中情况。每轮只改变一个条件,才能区分是规则顺序、缓存、连接复用还是目标本身发生了变化。

  1. 建立基线:在原配置下完成一次目标操作,记下时间、域名,以及登录、图片、播放等必要功能是否正常。
  2. 单条测试:加入精确 DOMAIN 规则,保存并确认当前配置;不要同时切换服务、协议和 DNS 设置。
  3. 产生新请求:重新打开目标应用或页面。刷新仍可能使用缓存,已有长连接也未必立即重新进行分流判断。
  4. 读取证据:检查新连接记录是否显示预期目标及 REJECT。若记录指向其他主机,应先核对请求链,不批量添加猜测域名。
  5. 测试回退:删除或注释刚添加的规则,再重试同一操作。只有故障随规则添加与撤销对应变化,才能把它列为主要嫌疑。
  6. 保留记录:确认有效后记录拦截理由和影响范围;配置更新后再次检查这条本地修改是否仍在当前使用的文件中。

如果购买或配置来源发生混淆,应先区分客户端与连接服务。Shadowrocket 是闭源商业应用,客户端买断 ≠ 线路套餐。本文不提供、不销售、不推荐节点或订阅;已有订阅的更新也不等于本地 REJECT 规则一定会同步保留,需分别检查服务信息与配置文件的更新结果。

常见问题与恢复操作

写了 REJECT,为什么页面还能看到原来的图片?

先核对是否产生了新连接。页面可能使用本地缓存,也可能从另一个主机加载相同资源。重新打开页面后查看目标请求记录;若目标确实命中 REJECT 但图片仍在,检查它是否为内嵌内容,不要继续扩大后缀范围。

开关已经打开,规则为什么完全没反应?

按顺序核对 Home → Global Routing 是否为 Config、Config 中当前使用的文件是否包含新规则、规则是否放在 FINAL 及其他提前命中的规则之前。随后重新发起连接;仅保存文件却仍使用其他配置,不会让新规则生效。

拦截后登录失败,要把整份配置删掉吗?

先撤销最近添加的那条规则,保留其他设置不变,再重新连接并测试登录。若恢复正常,把后缀规则收窄为已确认的单个主机,或保留该域名正常访问。共享认证、风控和接口域名不宜仅凭名称直接拒绝。

换一种协议,REJECT 会不会拦得更彻底?

不会因此获得页面内容筛选能力。Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuard 涉及连接与传输方式;REJECT 的范围由匹配条件、规则顺序和当前路由决定。先修正规则,不把切换协议当作扩大拦截范围的方法。

最终保留的应当是一组可解释、可验证、可回退的规则。遇到功能异常,先撤销最近的变动,再检查命中记录。若某个目标没有独立可分离的主机范围,接受连接层规则的边界,比持续扩大拒绝范围更容易维持正常访问。

前往 App Store