Shadowrocket REJECT 规则怎么写:屏蔽域名的原理与做不到的事

解释 REJECT 策略在规则匹配中如何起作用,说明 DOMAIN-SUFFIX 与 REJECT 的写法、匹配顺序,以及它为什么无法保证拦截所有内容。

本文速览

REJECT 拒绝策略用于阻止匹配规则的连接,不是网页元素过滤器。本文适合已经使用 Shadowrocket(小火箭)、准备修改 Config 配置的用户:先理解域名匹配,再添加一条可回退的规则,最后用新请求验证命中情况,区分规则未生效、缓存未清除与内容无法单独屏蔽。

REJECT 的作用:拒绝连接,不编辑页面

一条规则包含匹配条件和处理策略。DOMAIN-SUFFIX,example.com,REJECT 的含义是:当用于规则判断的目标域名是 example.com 或其子域名时,采用 REJECT 拒绝策略。它并不是先下载页面再删除某个模块,也不会根据页面上的文字判断内容类型。

发起新请求 进入连接处理 获取匹配信息 按序匹配规则 执行拒绝策略

这条流程有两个前提:请求确实由 Shadowrocket 处理,且当前使用的路由模式会执行这份配置的规则。只把规则文字保存在某个文件里,不能证明它已经参与连接处理。应用已显示的缓存内容,也不一定会触发新的网络请求。

REJECT 与 DIRECT 直连策略、PROXY 代理策略承担不同职责。DIRECT 仍然发起连接,只是不通过代理出站;PROXY 使用代理路径;REJECT 则拒绝该次连接。把 REJECT 改成 DIRECT 不等于另一种屏蔽方式,而是允许连接按直连路径尝试建立。

DOMAIN-SUFFIX 写法:域名不带协议和路径

在配置文件的 [Rule] 规则段中,每条规则独占一行,字段之间用英文逗号分隔。下面是独立的语法示例,不是让你覆盖现有文件的完整配置。现有文件已有 [Rule] 时,将规则加入该段,不要重复建立规则段。

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

单个域名匹配

关键字
DOMAIN
匹配值
metrics.example.com
处理策略
REJECT
匹配范围
仅该域名,不自动包含其子域名

只想拒绝一个已确认的主机名时,先选精确匹配。

域名后缀匹配

关键字
DOMAIN-SUFFIX
匹配值
ads.example.com
处理策略
REJECT
匹配范围
ads.example.com 及其下级子域名

范围扩大前,先确认子域名是否还承担登录、图片或接口请求。

DOMAIN-SUFFIX,example.com,REJECT 会覆盖 example.com 与 a.example.com,不会因为字母相同就匹配 notexample.com。它按域名层级后缀判断,不是任意字符串搜索,也不需要写成 *.example.com。

规则顺序:先命中的条件决定处理结果

对本文使用的普通规则,按配置中从上到下的顺序判断,先匹配的规则决定策略。后面的拒绝规则不会推翻已经匹配到的允许规则。因此,排查时应同时看目标规则与它前面的规则,而不是只确认文件里出现了 REJECT。

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

这个例子先允许 account.example.com 直连,再拒绝该域名后缀下的其他匹配请求。若把后缀拒绝规则移到第一行,账号子域名也会先命中 REJECT,后面的精确例外便失去作用。实际编辑时应保留原配置的出站策略,不能因为演示使用 DIRECT 兜底,就把自己的 FINAL 最终规则一并改成 DIRECT。

规则类型判断依据排查重点
DOMAIN-SUFFIX目标域名及子域名后缀是否被前面的域名允许规则提前匹配
IP-CIDR目标 IP 是否属于指定网段同一地址可能承载多个不同域名
GEOIP目标 IP 的地理归类不能用地理归类代替具体内容识别
FINAL前面规则均未命中时兜底置于常规匹配规则之后

域名规则与 IP 规则使用的信息不同。域名不可用于判断时,不能假设后缀规则仍会命中;如果前面已有一条匹配目标 IP 的允许规则,也需要检查它对后续域名规则的影响。不要看到请求最终连接到某个 IP,就立即拒绝整个网段,共用地址的其他服务也可能受影响。

在 Config 中应用:一次只改一个目标

修改与验证应分开进行。先确认当前配置和路由模式,再添加单条规则,最后观察新请求。Global Routing 全局路由中的 Config 配置模式用于按配置规则分流;Proxy 代理模式与 Direct 直连模式不能拿来验证这份配置的 REJECT 规则是否生效。Scene 场景模式还需要核对当前场景的实际设置,初次测试宜先切回 Config。

4 项
Global Routing:Proxy / Direct / Config / Scene
443
HTTPS 常用端口,不填写在域名匹配值中
1 条
每轮新增一条测试规则,便于定位与撤回

判断:先验证配置,再扩大屏蔽范围

用单个已知域名确认 REJECT 能命中后,再决定是否改为 DOMAIN-SUFFIX;不要同时更换配置、切换出站与批量添加规则,否则难以确定结果由哪项改动造成。

  1. 确认文件。进入 Config 配置页面,核对当前选用的配置,先保存备份,再打开其编辑功能。不要修改一份未被选用的同名文件。
  2. 加入规则。在 [Rule] 段加入一条目标明确的 REJECT 规则,放在可能提前放行它的宽泛规则之前,并保留必要的精确允许例外。
  3. 保存并应用。返回 Home 首页,在 Global Routing 全局路由中选择 Config 配置模式,确认连接开关处于开启状态;必要时重新建立连接,让后续测试使用已保存的配置。
  4. 制造新请求。关闭原有测试页面后重新访问目标,查看请求记录中的目标域名、命中规则与处理策略。原先已建立的长连接不适合作为唯一测试依据。
  5. 验证回退。删除刚添加的规则并保存、重新应用,再对同一目标发起新请求。拒绝和撤回后的结果应能对应变化,才有较清晰的因果依据。

Settings → On Demand 按需连接设置控制的是自动连接行为,不是域名屏蔽名单。如果测试时尝试手动关闭连接却又自动连上,应先检查 On Demand,避免把自动重连误认为规则无法撤回。配置文件如果会被远程更新覆盖,还应保留自己的修改记录,并在更新后复核规则是否仍在。

屏蔽边界:同域名内容无法只凭后缀细分

域名级拒绝适用于“这个目标连接整体都不需要”的情况。如果正常内容与待屏蔽内容来自同一个域名,DOMAIN-SUFFIX 看见的是同一个匹配值,不能只允许其中一部分路径。对 HTTPS 请求,不能把这条规则当作读取并分析加密页面内容的工具。

拒绝连接也不保证页面留下的空白区域消失。页面布局由应用或网站自身决定;资源加载失败后,原本预留的区域可能保留,也可能出现错误提示。REJECT 解决的是连接是否继续的问题,不承担排版修复职责。

常见现象:按命中记录决定下一步

下面的排查顺序以用户已拥有可用配置为前提。若问题涉及订阅,订阅链接从你的服务商处获取;客户端购买与线路套餐不是同一事项。不要为解决一条 REJECT 规则的问题,同时替换整份订阅和所有路由设置。

规则写好了,网页怎么还打得开?

先在 Home 首页核对 Global Routing 全局路由是否为 Config 配置模式,再到 Config 配置页面核对当前选用的文件。重新打开目标并查看新请求:页面可能使用了另一个资源域名,也可能只是显示缓存,不能只看页面有没有出现。

记录已经显示 REJECT,内容为什么还在?

把记录中的域名与实际加载内容的请求逐一对应。拒绝一个统计域名不代表内容资源也被拒绝;关闭测试页面、排除相关缓存影响后再请求,并检查是否出现备用域名。不要把多次失败重试误读成拒绝策略没有执行。

加上规则后,登录和图片一起坏了怎么办?

先撤回本轮新增的规则并重新应用配置,确认功能恢复。然后把 DOMAIN-SUFFIX 后缀匹配收窄为 DOMAIN 精确匹配;如确需保留允许例外,将该例外放在宽泛拒绝规则前面。同域名承载多项功能时,应停止扩大屏蔽范围。

配置更新后原本有效的规则不见了?

到 Config 配置页面检查更新后的文件内容,并与备份比较,确认是否覆盖了本地改动,或切换到了另一份配置。按原来的插入位置恢复单条规则后,再执行一次新请求测试,不要直接粘贴多个重复的规则段。

最终判断应落在三个可检查的事实:使用的是哪份配置、新请求命中了哪条规则、撤回改动后现象是否恢复。能稳定重现这三项,再保留规则;无法对应时,先缩小测试目标,而不是继续叠加拒绝条目。

App Store 正版核对