Shadowrocket REJECT 規則設定:封鎖原理、適用範圍與限制

了解 Shadowrocket 規則的由上而下比對方式、REJECT 如何封鎖指定網域,以及封鎖失效或誤擋時的排查與放行方法。

本文重點

本文適合已有可用設定檔,準備調整封鎖規則的 Shadowrocket(小火箭)使用者。先在 Home 確認 Global Routing,再到 Config 檢查目前設定檔的 [Rule]:以 DOMAIN 精確比對,透過 DOMAIN-SUFFIX 涵蓋子網域,並將例外規則排在封鎖規則前,再查看請求記錄驗證。文中的網域與位址僅供語法示範,不代表有可用服務。

先確認 Home 與 Config:REJECT 在哪裡生效

在 Home 查看 Global Routing,驗證本文規則時選擇 Config,再到 Config 確認目前使用的設定檔。開啟該設定檔的編輯畫面,檢查 [Rule] 區段。只將規則寫入某個檔案、卻未啟用該檔案,不會改變目前連線的處理方式;同樣地,若 Home 的連線開關已關閉,也不能根據瀏覽結果判斷這份規則是否生效。

REJECT 是規則比對成功後採用的策略,不是規則類型,也不是伺服器名稱。規則會先判斷請求是否符合條件,符合後才執行拒絕處理。它不需要先將請求送到某台代理伺服器再拒絕,也不會刪除已儲存在本機的網頁內容。

驗證步驟

Home
確認連線開關已開啟
Global Routing
選擇 Config
Config
確認已啟用剛修改的設定檔
[Rule]
檢查規則順序與最終策略

先確認設定檔有參與請求處理,再判斷規則本身是否正確。

Global Routing 模式

Config
依目前設定檔中的規則分流
Proxy
全域代理,不適用於驗證本文的規則分流
Direct
全域直連,不適用於驗證本文的規則分流
Scene
依場景設定運作,需另外確認目前使用的場景

排查期間固定使用 Config,避免場景變更干擾驗證。

Settings → On Demand 用來管理依條件建立或中斷連線的行為,不能取代 [Rule] 中的網域比對。若測試時連線狀態反覆變化,請先檢查 On Demand 的條件;不要一再新增 REJECT 規則,試圖解決連線本身無法維持的問題。

了解比對順序:符合前面的規則後即停止

在一般規則分流中,規則會由上而下依序檢查。請求符合某條規則後,就會採用該規則指定的策略,不會繼續往下尋找「更合適」的策略。因此,精確放行規則通常排在範圍較廣的封鎖規則前,而 FINAL 則用來處理前面都未符合的請求。

請求進入通道 由上而下檢查規則 符合第一條規則 執行指定策略 記錄處理結果
[Rule]
# 先允許這個精確網域直連
DOMAIN,help.example.com,DIRECT
# 再拒絕 example.com 及其子網域
DOMAIN-SUFFIX,example.com,REJECT
# 此片段中的其他請求直連,僅供語法示範
FINAL,DIRECT

在這三條規則中,help.example.com 會先符合第一條並使用 DIRECT;media.example.com 符合第二條並使用 REJECT;其他未符合規則的網域則由 FINAL 處理。如果將第二條移到第一條上方,說明頁面也會遭到拒絕,因為它同樣是 example.com 的子網域。

選擇規則範圍:DOMAIN 與 DOMAIN-SUFFIX 的用法

只想封鎖明確的主機名稱時,優先使用 DOMAIN。若要涵蓋主網域及其所有子網域,再使用 DOMAIN-SUFFIX。兩種寫法的目標欄位都只填網域本身,不包含通訊協定、連接埠、路徑或查詢參數;例如不能將整個 https://ads.example.com/banner 當成網域欄位。

規則範例比對範圍使用前檢查
DOMAIN,ads.example.com,REJECT精確比對 ads.example.com確認請求記錄中的主機名稱完全相符
DOMAIN-SUFFIX,example.com,REJECT比對 example.com 及其子網域確認登入、圖片與介面是否共用此網域後綴
IP-CIDR,192.0.2.7/32,REJECT,no-resolve比對單一 IPv4 目標位址此處為文件示範位址,並非實際封鎖目標

IP-CIDR 依 IP 位址範圍比對,GEOIP 則依 IP 地理位置比對,兩者都不同於網域後綴比對。範例中的 no-resolve 表示不為這條 IP 規則額外觸發網域解析;若此時請求只有網域資訊,不能認定它一定會符合該位址規則。對共用位址直接使用 REJECT,也可能影響同一位址上的其他網站。

3 條
上一節範例:精確例外、後綴封鎖、FINAL 收尾
/32
比對單一 IPv4 位址,不涵蓋整個網段
443
HTTPS 常用連接埠,不要填入 DOMAIN 的網域欄位

先精確比對,再擴大範圍

先依請求記錄中確認的單一主機名稱建立 DOMAIN 規則;只有確認其他子網域也應拒絕時,才改用 DOMAIN-SUFFIX,避免一次封鎖整個服務網域。

釐清適用範圍:REJECT 無法依網頁元素篩選

REJECT 適合拒絕可獨立識別的網路目標,例如頁面單獨請求的某個網域。它不是網頁元素篩選器:若本文、圖片與需要封鎖的內容共用同一個主機名稱,單純的網域規則就無法只針對其中一個路徑。拒絕該網域可能同時導致本文介面、登入驗證或靜態資源載入失敗。

HTTPS 加密不代表所有網域規則都會失效,但 REJECT 本身也不會解密並檢查網頁內容。不要只為了封鎖某個網路目標,就先啟用 HTTPS 解密或安裝憑證;本文的規則驗證不需要這些操作。也不要因為網頁留下空白區塊,就認定規則失效:網路請求遭拒後,頁面版面不一定會自動移除原有區域。

驗證與復原:從實際請求找出誤擋原因

在 Config 儲存修改後,再次確認該設定檔已啟用。回到 Home 確認 Global Routing 設為 Config,必要時重新連線,再次開啟目標頁面以觸發新請求。在 App 內的請求記錄中查看目標網域或 IP、處理策略及可查看的規則資訊;記錄入口與欄位請以目前介面顯示為準。

  1. 先保留原始設定檔:修改前留存可還原的副本,並記下新增規則的位置,確保可以復原,不必只能繼續新增規則。
  2. 每次只修改一項:先新增一條精確規則,儲存並驗證;不要同時修改 Global Routing、DNS 和多條 IP 規則,否則難以判斷變化的來源。
  3. 確認是否出現新請求:若記錄中沒有目標請求,請重新載入頁面或重新開啟相關功能,避免將快取或舊連線誤認為新的規則結果。
  4. 核對實際策略:若記錄顯示 DIRECT 或其他策略,請檢查是否符合較前面的規則;若顯示 REJECT 但頁面仍有內容,請檢查快取及其他請求網域。
  5. 以最小範圍復原:先撤銷最近新增的規則。確認確實需要保留後綴封鎖時,再將精確例外放在它上方,並使用原有設定檔所需的放行策略。

放行不代表一定要使用 DIRECT。DIRECT 表示直連;如果某項服務在原設定檔中應使用代理,就應恢復原本採用的策略。前文的 DIRECT 只是用來示範例外規則的順序,不能直接套用到所有服務。如果要還原的策略名稱引用了策略群組,也要確認該名稱存在於目前的設定檔中。

設定 REJECT 後,為什麼還是能開啟?

先到 Home 確認 Global Routing 是否設為 Config,再到 Config 確認啟用的檔案。重新觸發請求後查看實際主機名稱;若符合前面的放行規則,請調整規則順序,而不是重複新增相同的 REJECT 規則。

新增規則後,登入按鈕一直轉圈怎麼辦?

撤銷最近新增的規則,重新開啟登入流程,並檢查請求記錄中的驗證或介面網域。若是範圍過廣的 DOMAIN-SUFFIX 造成誤擋,請縮小為精確的 DOMAIN,或在其前方加入必要的精確例外。

Connectivity Test 正常,就能證明封鎖成功嗎?

不能。Home 中的 Connectivity Test 用來檢查連線是否可達,不代表指定網域已符合 REJECT。請讓目標功能發出請求,再核對該次請求的處理記錄。

更新訂閱後,手動編寫的規則會保留嗎?

請先區分 Home 中伺服器訂閱的更新,以及 Config 中設定檔的更新。更新伺服器清單不等於編輯 [Rule];重新取得遠端設定檔則可能覆蓋本機修改。操作前請保留副本,更新後核對目前使用的檔案與規則位置。訂閱連結請向你的服務供應商取得。

最終驗收需同時符合兩點:目標的新請求依預期使用 REJECT,且需要保留的登入、圖片與介面仍採用正確策略。只確認「某個頁面無法開啟」不足以證明規則準確;可重現的目標、明確的比對範圍,以及可還原的設定檔,才是後續維護的依據。

App Store 正版確認