Shadowrocket REJECT 규칙 사용법: 차단 원리와 적용 범위

규칙의 위에서 아래로 이어지는 매칭 순서부터 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,REJECTads.example.com과 정확히 일치요청 기록의 호스트 이름과 완전히 일치하는지 확인
DOMAIN-SUFFIX,example.com,REJECTexample.com과 하위 도메인에 일치로그인, 이미지, API가 같은 도메인 접미사를 사용하는지 확인
IP-CIDR,192.0.2.7/32,REJECT,no-resolveIPv4 대상 주소 하나와 일치문서 설명용 예시 주소이며 실제 차단 대상이 아닙니다

IP-CIDR은 IP 주소 범위를 기준으로 매칭하고, GEOIP는 IP의 지리적 위치 정보를 기준으로 매칭합니다. 둘 다 도메인 접미사 매칭과는 다릅니다. 예시의 no-resolve는 이 IP 규칙을 위해 별도로 도메인 조회를 하지 않는다는 뜻입니다. 따라서 요청에 도메인만 있는 경우 이 주소 규칙과 반드시 일치한다고 볼 수 없습니다. 공유 IP에 REJECT를 적용하면 같은 주소를 사용하는 다른 사이트에도 영향을 줄 수 있습니다.

3개 규칙
이전 섹션 예시: 정확한 예외, 접미사 차단, FINAL 마무리
/32
IPv4 주소 하나만 매칭하며 전체 네트워크 대역은 포함하지 않음
443
HTTPS에서 흔히 사용하는 포트이며 DOMAIN의 도메인 필드에는 입력하지 않음

먼저 정확히 매칭한 다음 범위를 넓히기

요청 기록에서 확인한 호스트 이름 하나로 DOMAIN 규칙을 먼저 만드세요. 다른 하위 도메인도 거부해야 한다고 확인된 경우에만 DOMAIN-SUFFIX로 바꾸면 서비스 도메인 전체를 한꺼번에 차단하는 일을 피할 수 있습니다.

적용 범위 확인하기: REJECT는 웹페이지 요소별로 필터링할 수 없음

REJECT는 페이지에서 별도로 요청하는 특정 도메인처럼 독립적으로 식별할 수 있는 네트워크 대상을 거부하는 데 적합합니다. 웹페이지 요소를 걸러내는 기능은 아닙니다. 본문, 이미지, 차단하려는 콘텐츠가 같은 호스트 이름을 사용한다면 간단한 도메인 규칙으로 특정 경로만 구분할 수 없습니다. 해당 도메인을 거부하면 본문 API, 로그인 확인 또는 정적 리소스 로드까지 실패할 수 있습니다.

HTTPS가 암호화된다고 해서 모든 도메인 규칙이 무효가 되는 것은 아닙니다. 그렇다고 REJECT가 웹페이지 내용을 복호화해 검사하는 것도 아닙니다. 네트워크 대상을 차단하려고 HTTPS 복호화를 먼저 켜거나 인증서를 설치하지 마세요. 이 글의 규칙 검증에는 그런 작업이 필요하지 않습니다. 웹페이지에 빈 공간이 남아 있어도 규칙이 실패한 것은 아닙니다. 네트워크 요청을 거부해도 페이지 레이아웃에서 해당 영역이 자동으로 제거되지 않을 수 있습니다.

검증 및 되돌리기: 실제 요청으로 오차단 확인

Config에서 변경 사항을 저장한 뒤 해당 구성이 활성화되어 있는지 다시 확인하세요. Home으로 돌아가 Global Routing이 Config인지 확인하고, 필요하면 연결을 다시 설정한 다음 대상 페이지를 새로 열어 요청을 발생시키세요. 앱 내 요청 기록에서 대상 도메인이나 IP, 적용된 정책, 확인 가능한 규칙 정보를 살펴보세요. 기록 메뉴와 표시 항목은 현재 화면을 기준으로 확인하면 됩니다.

  1. 원본 구성을 먼저 보관: 수정 전에 복구할 수 있는 사본을 보관하고 추가한 규칙의 위치를 기록하세요. 나중에 변경을 되돌릴 수 있어야 합니다.
  2. 한 번에 한 항목만 변경: 먼저 정확한 규칙 하나를 추가하고 저장한 뒤 검증하세요. Global Routing, DNS, 여러 IP 규칙을 동시에 바꾸면 원인을 파악하기 어렵습니다.
  3. 새 요청이 발생했는지 확인: 기록에 대상 요청이 없다면 페이지를 새로고침하거나 관련 기능을 다시 여세요. 캐시된 결과나 기존 연결을 새 규칙의 결과로 오해하지 않도록 합니다.
  4. 실제 적용 정책 확인: 기록에 DIRECT 또는 다른 정책이 표시되면 더 앞에 있는 규칙과 일치했는지 확인하세요. REJECT가 표시되는데도 페이지에 콘텐츠가 남아 있다면 캐시와 다른 요청 도메인을 살펴보세요.
  5. 최소 범위로 되돌리기: 가장 최근에 추가한 규칙부터 취소하세요. 접미사 차단을 유지해야 한다고 확인되면 정확한 예외를 그보다 위에 두고 기존 구성에서 필요한 허용 정책을 사용하세요.

허용한다고 해서 반드시 DIRECT를 사용해야 하는 것은 아닙니다. DIRECT는 직접 연결을 뜻합니다. 기존 구성에서 프록시를 사용해야 하는 서비스라면 원래 적용되던 정책을 복원하세요. 앞서 나온 DIRECT는 예외 규칙의 순서를 보여주는 예시일 뿐, 모든 서비스에 그대로 적용하면 안 됩니다. 복원할 정책 이름이 정책 그룹을 참조한다면 해당 이름이 현재 구성에 있는지도 확인하세요.

REJECT를 설정했는데도 왜 열리나요?

먼저 Home에서 Global Routing이 Config인지 확인하고, Config에서 활성화된 파일을 확인하세요. 요청을 다시 발생시킨 뒤 실제 호스트 이름을 확인합니다. 앞선 허용 규칙과 일치했다면 같은 REJECT 규칙을 반복해서 추가하지 말고 순서를 조정하세요.

규칙을 추가한 뒤 로그인 버튼이 계속 로딩되면 어떻게 하나요?

가장 최근에 추가한 규칙을 취소하고 로그인 과정을 다시 열어 요청 기록에서 인증 또는 API 도메인을 확인하세요. 범위가 넓은 DOMAIN-SUFFIX가 잘못 차단했다면 DOMAIN으로 범위를 좁히거나 필요한 정확한 예외를 그보다 앞에 추가하세요.

Connectivity Test가 정상이면 차단에 성공한 건가요?

아닙니다. Home의 Connectivity Test는 연결 가능 여부를 확인하는 기능이며 지정한 도메인이 REJECT와 일치했다는 뜻은 아닙니다. 대상 기능에서 요청을 발생시킨 뒤 해당 요청의 처리 기록을 확인해야 합니다.

구독을 업데이트하면 직접 작성한 규칙이 유지되나요?

먼저 Home의 서버 구독 업데이트와 Config의 구성 파일 업데이트를 구분하세요. 서버 목록 업데이트는 [Rule] 편집과 다릅니다. 원격 구성을 다시 가져오면 로컬 변경 사항이 덮어써질 수 있습니다. 작업 전에 사본을 보관하고 업데이트 후 현재 파일과 규칙 위치를 확인하세요. 구독 링크는 이용 중인 서비스 제공업체에서 받으세요.

최종 확인에서는 두 가지를 모두 만족해야 합니다. 대상의 새 요청에 예상한 REJECT가 적용되고, 유지해야 하는 로그인·이미지·API 요청에는 올바른 정책이 적용되어야 합니다. 특정 페이지가 열리지 않는지만으로 규칙이 정확하다고 판단할 수 없습니다. 재현 가능한 대상, 명확한 매칭 범위, 복구 가능한 구성이 이후 관리의 기준입니다.

App Store 정품 확인