규칙
Chute는 사용자 정의 규칙에 따라 요청을 다른 프록시 서버로 전달하거나 호스트에 직접 연결할 수 있습니다.
우선순위
규칙은 설정 파일에 나타나는 순서대로 첫 번째부터 마지막까지 매칭됩니다. 즉, 목록 상단의 규칙이 하단의 규칙보다 높은 우선순위를 가집니다.
구성
각 규칙은 규칙 유형, 트래픽 매처(FINAL 규칙 제외), 프록시 정책의 3부분으로 구성됩니다: TYPE, VALUE, POLICY. 예: DOMAIN-SUFFIX,apple.com, DIRECT IP-CIDR, 192.168.0.0/16,ProxyA
프록시 정책은 프록시, 정책 그룹, DIRECT 또는 REJECT를 포함한 정책 이름 중 하나로 지정되어야 합니다. 규칙은 기본 동작을 정의하기 위해 FINAL 규칙으로 끝나는 것이 좋습니다. 설정에 FINAL 규칙이 없으면 Chute는 FINAL,DIRECT가 추가된 것처럼 동작합니다.
예:
[Rule]
DOMAIN-SUFFIX,company.com,ProxyA
DOMAIN-KEYWORD,google,DIRECT
GEOIP,US,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,ProxyB
규칙 유형
도메인 기반 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| DOMAIN | DOMAIN,www.apple.com,Proxy |
정확한 도메인 일치 |
| DOMAIN-SUFFIX | DOMAIN-SUFFIX,apple.com,Proxy |
도메인 접미사 일치 |
| DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,Proxy |
도메인에 키워드 포함 |
| DOMAIN-WILDCARD | DOMAIN-WILDCARD,*.apple.com,Proxy |
와일드카드 도메인 일치 |
| DOMAIN-REGEX | DOMAIN-REGEX,^mail\..+\.com$,Proxy |
도메인 정규식 일치 |
| DOMAIN-SET | DOMAIN-SET,https://example.com/domains.txt,DIRECT |
URL에서 다운로드하는 도메인 세트 |
IP 기반 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT |
CIDR 범위의 IP 주소 |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
CIDR 범위의 IPv6 주소 |
| GEOIP | GEOIP,US,DIRECT |
GeoIP 데이터베이스의 국가 코드 |
| IP-ASN | IP-ASN,13335,DIRECT |
지정된 ASN에 속하는 IP 주소 |
HTTP 수준 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
User-Agent 헤더 |
| URL-REGEX | URL-REGEX,^http://google\.com,DIRECT |
URL이 정규식과 일치 |
| PROTOCOL | PROTOCOL,TLS,Proxy |
감지된 프로토콜 (HTTP/TLS/QUIC 등) |
프로세스 규칙 (Mac 전용)
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| PROCESS-NAME | PROCESS-NAME,Telegram,Proxy |
프로세스 이름 (와일드카드 매칭) |
| PROCESS-PATH | PROCESS-PATH,/Applications/Safari.app,Proxy |
전체 프로세스 경로 (와일드카드 매칭) |
| PROCESS-NAME-REGEX | PROCESS-NAME-REGEX,^Safari$,DIRECT |
프로세스 이름 (정규식 매칭) |
포트 및 소스 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| DEST-PORT | DEST-PORT,80,DIRECT |
대상 포트 |
| SRC-IP | SRC-IP,192.168.20.100,DIRECT |
소스 IP 주소 (단일 IP 또는 CIDR) |
| SRC-PORT | SRC-PORT,52345,DIRECT |
소스 포트 |
| IN-PORT | IN-PORT,6152,DIRECT |
Chute의 수신 프록시 포트 |
고급 매칭 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| SUBNET | SUBNET,TYPE:WIFI,Proxy |
네트워크 서브넷 속성 (TYPE, BSSID, SSID, ROUTER) |
| HOSTNAME-TYPE | HOSTNAME-TYPE,AAAA,Proxy |
DNS 레코드 유형 (A/AAAA 등) |
| IN-TYPE | IN-TYPE,SOCKS5,Proxy |
인바운드 연결 유형 (HTTP/SOCKS5/TUN) |
| IN-USER | IN-USER,user1,Proxy |
인바운드 인증 사용자 이름 |
| IN-NAME | IN-NAME,my-proxy,Proxy |
인바운드 프록시 서버 이름 |
알림: 고급 매칭 규칙은 설정 파서에서 허용되지만, 현재 Chute 릴리스는 이 규칙들이 매칭하는 세션 속성을 아직 채우지 않으므로 런타임에 어떤 트래픽과도 일치하지 않습니다. 향후 릴리스를 위해 예약되어 있습니다.
논리 조합 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| AND | AND,((DOMAIN,example.com),(DEST-PORT,443)),Proxy |
모든 하위 규칙이 일치 |
| OR | OR,((DOMAIN,example.com),(DOMAIN,test.com)),Proxy |
하나 이상의 하위 규칙이 일치 |
| NOT | NOT,((DOMAIN,example.com)),Proxy |
하위 규칙이 일치하지 않음 |
특별 규칙
| 유형 | 구문 | 매칭 대상 |
|---|---|---|
| RULE-SET | RULE-SET,SYSTEM,DIRECT |
URL, 규칙 제공자 또는 내장 세트의 규칙 묶음 |
| SCRIPT | SCRIPT,MyRuleScript,PROXY |
JavaScript 기반 사용자 정의 규칙 매칭 |
| FINAL | FINAL,ProxyB |
다른 규칙이 일치하지 않을 때의 기본값 (마지막에 위치해야 함) |
옵션
no-resolve
호스트명이 도메인인 요청의 경우, Chute는 규칙 목록을 두 번에 걸쳐 평가합니다. 첫 번째 패스에서는 IP 기반 규칙(GEOIP, IP-CIDR, IP-ASN)을 건너뜁니다. 다른 규칙이 일치하지 않으면 Chute는 DNS로 도메인을 해석한 후 해석된 IP 주소로 규칙을 다시 평가합니다. no-resolve 옵션을 추가하면 IP 기반 규칙이 두 번째 패스에서도 계속 건너뛰어지므로, 이미 IP 주소를 가진 요청만 매칭합니다.
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
참고: 2-패스 평가로 인해, 도메인 호스트명을 가진 요청의 경우 뒤에 있는 비 IP 규칙이 앞에 있는 IP 기반 규칙보다 먼저 일치할 수 있습니다. DNS 해석이 실패하면 IP 기반 규칙은 단순히 일치하지 않게 되고 FINAL 규칙이 적용됩니다. 규칙 평가가 중단되지는 않습니다.
force-remote-dns
로컬 DNS 대신 원격 프록시 서버를 통해 DNS 해석을 강제합니다.
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
알림: 이 옵션은 현재 호환성을 위해 파싱만 되며, 현재 릴리스에서는 효과가 없습니다.
extended-matching
도메인 기반 규칙 매칭을 연결 호스트명 외에 HTTP Host 헤더도 검사하도록 확장합니다. SNI 또는 CONNECT 대상이 Host 헤더와 다를 때 유용합니다.
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
SCRIPT 규칙의 경우, 이 옵션은 파서에서 허용되지만 스크립트 평가를 지연시키지 않습니다. $request.dnsResult는 세션이 이미 해석된 경우(예: IP 주소로 직접 요청하거나, DNS 해석 후 두 번째 매칭 패스)에만 스크립트에서 사용할 수 있습니다.
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
정책이 REJECT인 규칙에만 유효합니다. 이 규칙은 일반 규칙 목록보다 먼저, 그리고 규칙 결과 캐시보다 먼저 별도의 패스로 평가되므로, 프로토콜 스니핑이나 DNS 해석 이전에도 거부가 적용됩니다.
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
별칭
DOMAIN-MATCH는DOMAIN-KEYWORD의 별칭으로 허용됩니다.NETWORK는PROTOCOL의 별칭으로 허용됩니다.
도메인 세트
Chute는 DOMAIN-SET 규칙 유형으로 외부 URL에서 도메인 세트를 로드하는 것을 지원합니다. 유형 뒤의 첫 번째 필드는 http(s) URL이어야 합니다. 선택적 update-interval 매개변수는 N초마다 파일을 다시 다운로드합니다.
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
도메인 세트 파일에는 한 줄에 하나씩 순수 도메인이 포함됩니다: example.com은 정확한 도메인과 일치하고, .example.com 또는 +.example.com은 해당 도메인과 모든 하위 도메인과 일치합니다. # 또는 //로 시작하는 줄은 주석입니다.