Shadowrocket REJECT 規則設定:封鎖原理、比對順序與適用範圍

說明 REJECT 如何依網域與 IP 規則拒絕連線、規則由上而下的比對順序,以及規則無法處理的情況與原因。

本文重點

REJECT 是命中規則後拒絕連線的策略,不是網頁元素過濾器。本文適合已備妥自有設定的 Shadowrocket(小火箭)使用者,說明如何選擇網域或 IP 比對、將例外放在正確位置,以及一次只修改一條規則來排查誤封。請先確認 Global Routing 設為 Config,再確認目前 Config 中實際生效的規則。

一、REJECT 何時生效:先比對目標,再執行策略

每條規則都要回答兩個問題:請求是否符合比對條件?符合後要採取什麼策略?例如 DOMAIN-SUFFIX,example.com,REJECT 中,DOMAIN-SUFFIX 是比對類型,example.com 是比對值,REJECT 才是動作。命中後,該連線會遭拒絕,不會因為連線失敗就繼續套用下一條規則。

應用程式發出請求 流量進入通道 檢查路由模式 由上而下比對 執行拒絕策略

這個流程的前提是目標流量會經過 Shadowrocket 處理。若連線開關關閉、流量未經通道,或目前路由模式未使用這份規則,修改 REJECT 就不會直接改變該請求的去向。因此,請依序確認連線狀態、路由模式、設定檔與命中規則,而不是先大量新增封鎖項目。

REJECT 主要影響網路請求,不會刪除頁面上已顯示的文字、圖片佔位區或應用程式的本機內容。請求遭拒時,可能會出現資源載入失敗、圖片空白、應用程式重試或錯誤提示。實際情況取決於應用程式本身的錯誤處理方式,不能認定所有應用程式都會出現同一種畫面變化。

二、REJECT 規則語法:優先使用網域,謹慎設定 IP 範圍

只封鎖單一完整主機名稱時,使用 DOMAIN;要涵蓋某個網域及其子網域時,使用 DOMAIN-SUFFIX。比對值請填主機名稱,不包含 https://、連接埠、斜線路徑或查詢參數。例如,要比對 https://ads.example.com/banner 的主機,應填入 ads.example.com,而不是整段網址。

網域比對

DOMAIN
ads.example.com,REJECT
DOMAIN-SUFFIX
example.com,REJECT
比對範圍
前者只比對完整主機名稱;後者涵蓋根網域及其子網域

規則列中的鍵和值以英文逗號分隔,不填 URL 路徑。

IP 比對

IP-CIDR
192.0.2.8/32,REJECT,no-resolve
IP-CIDR6
2001:db8::8/128,REJECT,no-resolve
no-resolve
不會為了比對這條 IP 規則而主動解析目標網域

IP 範例均為文件專用位址;同一共用位址上的其他服務也可能受影響。

DOMAIN-SUFFIX,example.com,REJECT 可涵蓋 example.com 和 img.example.com,但不代表會比對任何含有這段字元的網域。若只想封鎖單一資源主機,請勿直接擴大到整個主網域;登入、圖片與 API 可能分布在同一主網域的不同子網域。

IP-CIDR 用來比對 IPv4 位址或網段,/32 表示單一 IPv4 位址,/24 則表示包含 256 個位址的網段。若對共用基礎設施套用大範圍網段的 REJECT,可能連帶影響多個無關網域。網域背後的 IP 位址也可能變更,因此記錄一次解析結果後長期封鎖該 IP,並不等同於穩定封鎖該網域。

/32
IPv4 單一位址比對前綴
/128
IPv6 單一位址比對前綴
443
HTTPS 預設連接埠,不是網域規則的填寫項目

三、規則比對順序:精確例外在前,FINAL 在後

使用依設定檔規則處理流量時,系統會由上而下檢查規則,第一條命中的規則就會決定採用的策略。後面較精確的項目不會自動取代前面已命中的寬泛規則。最常見的錯誤,是先設定整個網域後綴的 REJECT,再把要保留的子網域放在後面;如此一來,例外規則就永遠不會生效。

[Rule]
DOMAIN,account.example.com,DIRECT
DOMAIN-SUFFIX,example.com,REJECT
IP-CIDR,192.0.2.8/32,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT

在這段順序範例中,account.example.com 會先命中第一條規則,不再繼續比對第二條;只有 img.example.com 會遭後綴規則拒絕。GEOIP,CN,DIRECT 依據目標 IP 的地理位置資料庫進行比對,而非依網頁語言判斷。若它排在 REJECT 前面,符合條件的請求可能會先直接連線。

請求目標依範例命中的規則策略
account.example.com第一條 DOMAINDIRECT
img.example.com第二條 DOMAIN-SUFFIXREJECT
直接連線至 192.0.2.8第三條 IP-CIDRREJECT
未命中前述條件的請求FINALDIRECT

FINAL 是最後的兜底規則,不需要填入網域比對值。此處使用 FINAL,DIRECT 只是為了讓範例完整,不代表你應將原設定的最終策略改為 DIRECT。實際操作時,請保留原有的最終策略,只將已確認的精確規則插入適當位置;同一份設定中也不要為了新增封鎖項目而重複加入 FINAL。

結論:新增拒絕規則前,先檢查上方的寬泛比對

如果 REJECT 沒有生效,請先檢查它前面的 DOMAIN-SUFFIX、IP-CIDR、GEOIP 和 FINAL;持續將規則加到檔案末尾,通常無法修正優先順序錯誤。

四、在 Config 中修改並驗證:一次只新增一條規則

以下依 Home、Config、Settings 的介面結構說明檢查位置,實際編輯入口仍以目前的應用程式介面為準。請先備份目前可正常使用的設定,再編輯目前選取的 Config。不要只憑檔案名稱判斷是否正在使用,也不要把訂閱清單更新誤認為設定規則已更新。

  1. 確認使用模式。在 Home 檢查連線狀態與 Global Routing。驗證設定規則時請選擇 Config;Proxy、Direct 不適用於本文的規則命中驗證。若使用 Scene,請先確認目前場景實際採用的路由設定。
  2. 確認目標設定。前往 Config,確認目前選取的檔案,先備份,再找到 [Rule] 區段。若已有此區段,請直接編輯其中的項目,不要在檔案末尾另外建立一組重複結構。
  3. 新增最精簡的規則。先選定確實需要拒絕的完整主機名稱,使用 DOMAIN 規則,並將它放在相關的寬泛規則之前;其他既有策略則保持不變。
  4. 儲存並套用。確認儲存後的檔案仍是目前選取的設定,並依介面提示套用。若需要重新建立連線,請留意其他正在進行的網路工作可能受到影響。
  5. 重新發出請求。關閉後重新開啟目標頁面或相關應用程式,盡可能建立新連線。記錄目標網域、命中的規則與策略;若記錄中沒有足夠資訊,請勿只憑頁面空白就判定已命中 REJECT。
  6. 一次只回復一項變更。移除剛新增的這條規則,儲存後以相同操作重新測試。比較前後狀況,再決定要保留規則、縮小範圍或繼續排查。

既有連線、瀏覽器快取與應用程式本機快取,都可能讓規則修改後的畫面與預期不同。請優先重新發出目標請求,而不是連續修改多項設定。記錄時應區分「新請求遭拒」、「沒有發出新請求」及「請求已成功但畫面未變」;這三種情況需要採取不同的後續處理。

五、封鎖能力的限制:同網域內容、快取與共用 IP

網域規則只能依據它能辨識的目標資訊來分流。如果正常 API 與要封鎖的內容使用相同主機名稱,只有 URL 路徑不同,DOMAIN 和 DOMAIN-SUFFIX 就無法區分兩者。將該主機名稱設為 REJECT,往往也會一併拒絕正常 API。

因此,REJECT 可用來拒絕明確的目標連線,但無法保證清除所有推廣內容,也不能保證封鎖後頁面版面依然完整。改用 Shadowsocks、VMess、VLESS、Trojan、Hysteria2 或 WireGuard 等協定,不會讓 DOMAIN-SUFFIX 自動具備讀取並篩選網頁內容的能力;出站協定與規則比對各自負責不同工作。

六、常見問題:規則未生效、誤封與更新後變化

規則已經加入,為什麼目標仍然能開啟?

先在 Home 確認 Global Routing 設為 Config,再到 Config 確認選取的檔案。檢查 REJECT 上方是否已有命中的放行規則,接著重新建立連線並確認實際目標。若頁面內容來自快取,仍看得到舊內容並不能證明網路請求已獲放行。

加入規則後無法登入,需要直接關閉所有規則嗎?

先移除剛新增的那條規則並重新測試。若問題恢復正常,請確認遭拒的主機是否負責登入或驗證。將寬泛的後綴規則縮小為已確認的特定主機;若確實需要保留某個子網域,請在寬泛的 REJECT 前設定精確例外,並沿用適當的原有策略。

更新訂閱後,手動設定的 REJECT 為什麼好像不見了?

分別檢查 Home 中的訂閱內容與 Config 中的規則檔案。伺服器清單更新和設定檔更新並不是同一回事;若遠端設定重新下載,本機修改可能會被覆蓋。請比對已儲存的備份並確認檔案來源,再還原必要項目,不要直接用舊檔案覆蓋整份設定。

可以把 FINAL 改成 REJECT,省去逐條新增規則嗎?

這會拒絕所有未命中前面規則的請求,而不只是某一類內容。除非正在建立明確的允許清單且了解其影響,否則請保留原有 FINAL 策略,並使用精確的 DOMAIN 或已核對的 IP 項目進行局部控管。

長期維護時,請記錄每次修改的目標主機、修改原因與回復方式。發現誤封時,先恢復正常使用,再分析目標請求;不要同時修改 DNS、出站協定與整套規則,否則難以判斷是哪個步驟改變了結果。若要繼續查找問題,可參考排查手冊,核對目前設定與連線記錄。

本文假設使用者已有自己的服務供應商與訂閱,僅說明本機規則的管理方式。本網站不提供、不販售也不推薦節點、訂閱或連線服務。買斷客戶端 ≠ 線路方案;新增 REJECT 也不會產生新的連線設定。

取得 Shadowrocket 與延伸閱讀

iPhone / iPad 版於 App Store 一次性付費 $2.99;Mac(Apple 晶片 / Intel)、Windows、Android、Linux 版免費。前往下載指南選擇對應平台;iPhone / iPad 的系統需求以 App Store 頁面標示為準,並確認開發者為 Shadow Launch Technology Limited、App ID 為 932747118。

下載 Shadowrocket