REJECT 策略
为了满足不同的需求,Surge 有多个内置的 REJECT 策略。在大多数情况下,直接使用 REJECT 已经足够。如果存在特殊需求,可以考虑使用派生策略。
REJECT
拒绝请求,如果该请求是 HTTP 类型,则将返回一个错误页面。此行为可以通过 show-error-page-for-reject 参数进行控制。
REJECT-DROP
拒绝请求。与 REJECT 不同,此策略将静默丢弃连接。某些应用程序具有非常激进的重试逻辑,当它们在连接失败后立即重试时,会导致请求风暴。使用此策略可以缓解该问题。
REJECT-NO-DROP
如果在短时间内对某个主机名的大量请求触发了 REJECT/REJECT-TINYGIF 策略(当前版本中的阈值为 30 秒内 50 次),Surge 将自动把策略升级为 REJECT-DROP 以避免浪费大量资源。
你可以使用 REJECT-NO-DROP 策略来避免这种行为。
REJECT-TINYGIF
拒绝请求,如果该请求是 HTTP 类型,则返回一个 1 像素的透明 GIF,用于广告拦截。
预匹配拒绝 (Pre-matching Reject) iOS 5.14.0+ Mac 5.9.0+
由于 Surge 规则系统可以评估的属性范围很广,因此规则的判定只能在接收到第一个 TCP 数据包后进行。这在处理风暴请求或广告拦截需求时会导致产生过多的不必要开销。
在新版本中,Surge 添加了预匹配 (Pre-matching) 功能,以低开销快速拒绝请求。对于使用 REJECT 策略的规则,可以通过 pre-matching 标记启用此功能。
[Rule]
DOMAIN,ad.com,REJECT,pre-matching标记为 pre-matching 的规则将在正常的规则匹配过程之前生效,因此具有最高优先级。
所有标记为 pre-matching 的规则都将被提取以进行优先匹配,并在 DNS 解析和 TCP SYN 阶段执行。如果匹配了 DNS 域名,则直接返回无记录 (No Record);如果在 TCP SYN 阶段匹配,则立即生成 TCP RST 响应。在大量请求的情况下,它会升级为丢包,UDP 的处理方式也类似。
此外,每条规则每 5 分钟只会在最近请求列表中出现一次,以避免因大量请求而导致列表泛滥。
可以标记为 pre-matching 的规则类型包括:
DOMAIN 类型:DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、DOMAIN-SET、DOMAIN-WILDCARD。
IP 类型:IP-CIDR、IP-CIDR6、GEOIP、IP-ASN。
逻辑规则:AND、OR、NOT
其他:SUBNET、DEST-PORT、SRC-PORT、SRC-IP
RULE-SET 也可以被使用,但其内容同样受上述限制。
预匹配技术细节
为了获得最佳的用户体验,拒绝在预匹配阶段进行,并在使用不同的派生规则时会存在一些细节上的差异。
对于 DNS 查询
如果匹配了 REJECT 策略,Surge 将返回一个无记录的 DNS 响应。如果触发了内置于 REJECT 策略的频率限制,DNS 查询将被直接丢弃而不产生响应。
如果匹配了 REJECT-DROP 策略,DNS 查询将被直接丢弃而不产生响应。
如果匹配了 REJECT-NO-DROP 策略,它将返回一个特殊的 IP 地址 198.18.0.244;Surge 将为所有访问该地址的 TCP 连接生成 TCP RST 响应。
对于使用 IP 的 TCP 请求
如果匹配了 REJECT 策略,将直接生成 TCP RST 响应;如果触发了内置于 REJECT 策略的频率限制,它将丢弃相应的 TCP SYN 握手数据包。
如果匹配了 REJECT-DROP 策略,将直接丢弃 TCP SYN 握手数据包。
如果匹配了 REJECT-NO-DROP 策略,将直接生成 TCP RST 响应。
请注意,由于某些软件可能具有激进的重试逻辑,在请求失败后立即重试从而导致异常的 CPU 占用,因此即使对于 REJECT-NO-DROP 策略,当 Surge 在短时间内产生大量的 TCP RST 数据包时(当前版本的阈值为 3 秒内 100 次),也会触发保护机制,暂停返回 TCP RST 而直接执行丢包处理。
对于 UDP 数据包
由于 UDP 数据包没有握手开销,因此不存在预匹配阶段;它们使用主规则集进行直接匹配:
如果匹配了 REJECT 策略,将生成 ICMP Administratively Prohibited (管理上被禁止) 的响应;如果触发了内置于 REJECT 策略的频率限制,数据包将被直接丢弃。
如果匹配了 REJECT-DROP 策略,数据包将被直接丢弃。
如果匹配了 REJECT-NO-DROP 策略,将生成 ICMP Administratively Prohibited 的响应。
最后更新于
这有帮助吗?