ルール
Chuteはカスタマイズされたルールに応じて、リクエストを別のプロキシサーバーに転送するか、ホストに直接接続することができます。
優先順位
ルールは設定ファイルに現れる順序で、最初から最後までマッチングされます。つまり、リストの上位にあるルールが後続のルールよりも高い優先順位を持ちます。モジュールが追加するルールは、モジュールの読み込み順に設定ファイル自身のルールより前に置かれ、Chuteが実行時にTailscaleのために挿入するルールはさらにその両方より前に来ます。
構成
各ルールは3つの部分で構成されます: ルールタイプ、トラフィックマッチャー(FINALルールを除く)、ポリシー: TYPE, VALUE, POLICY。例: DOMAIN-SUFFIX,apple.com,DIRECT IP-CIDR,192.168.0.0/16,ProxyA
ポリシーには、プロキシサーバー、ポリシーグループ、またはDIRECT、REJECT(およびその派生)、PROXYなどの組み込みポリシーの名前を指定する必要があります。ルールはデフォルトの動作を定義する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 |
IPアドレスがCIDR範囲内 |
| IP-CIDR6 | IP-CIDR6,2001:db8::/32,DIRECT |
IPv6アドレスがCIDR範囲内 |
| GEOIP | GEOIP,US,DIRECT |
GeoIPデータベースの国コード |
| IP-ASN | IP-ASN,13335,DIRECT |
IPアドレスがASNに属する |
HTTPレベルのルール
| タイプ | 構文 | マッチ条件 |
|---|---|---|
| USER-AGENT | USER-AGENT,Instagram*,DIRECT |
User-Agentヘッダー |
| URL-REGEX | URL-REGEX,^http://google\.com.*,DIRECT |
平文HTTPリクエストの完全なURLが正規表現にマッチ |
| PROTOCOL | PROTOCOL,TLS,Proxy |
検出されたプロトコル(HTTP/TLS/QUICなど) |
プロセスルール(macOSとAndroid)
| タイプ | 構文 | マッチ条件 |
|---|---|---|
| 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 |
インバウンドプロキシサーバー名 |
注意: SUBNETとHOSTNAME-TYPEは実際のトラフィックにマッチします。SUBNETはデバイスが現在接続しているネットワークに対してマッチします(Apple TVでは接続中のネットワークを識別できないため、SUBNETは決してマッチしません)。IN-TYPEとIN-USERも実際のトラフィックにマッチします。IN-TYPEは接続が到着したインバウンド(
HTTP、SOCKS5、TUN)を、IN-USERはそのインバウンドがhttp-authに対して検証したユーザー名を指します。認証情報が設定されていなければ検証するものがないため、IN-USERは何にもマッチしません。IN-NAMEはSurgeのプロファイルを読み込めるようにするために受け付けられますが、Chuteは名前のないHTTPリスナーとSOCKS5リスナーを1つずつ動かすだけで、マッチさせるインバウンド名が存在しないため、このルールは決して発火しません。代わりにIN-TYPEまたはIN-PORTを使用してください。
論理結合ルール
| タイプ | 構文 | マッチ条件 |
|---|---|---|
| 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はルールリストを2パスで評価します。最初のパスでは、IPベースのルール(GEOIP、IP-CIDR、IP-ASN)はスキップされます。他のルールがマッチしない場合、ChuteはDNSでドメインを解決し、解決されたIPアドレスでルールを再評価します。no-resolveオプションを追加すると、IPベースのルールは2番目のパスでもスキップされたままになり、既にIPアドレスを持つリクエストにのみマッチするようになります。
GEOIP,US,DIRECT,no-resolve
IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
RULE-SETの行では、no-resolveはセット内のすべてのIPベースのルールに、それぞれが付けているかのように適用されます: RULE-SET,https://example.com/cn-ip.list,DIRECT,no-resolve。組み込みのSYSTEMとLANのセットは個別のルールに展開され、これは適用されません。
注意: 2パス評価のため、ドメインホスト名を持つリクエストでは、後方の非IPルールが前方のIPベースルールより先にマッチすることがあります。DNS解決が失敗した場合、IPベースのルールは単にマッチせず、FINALルールが適用されます。ルール評価は中断されません。
force-remote-dns
ローカルDNSの代わりにリモートプロキシサーバーを介したDNS解決を強制します。
DOMAIN-SUFFIX,google.com,Proxy,force-remote-dns
注意: このオプションは現在、互換性のためにパースされるのみで、現在のリリースでは効果がありません。
extended-matching
ドメインベースのルールマッチングを拡張して、接続ホスト名に加えてHTTPのHostヘッダーも検査します。このヘッダーは、HTTPプロキシリスナーへのクライアント接続の最初のリクエストから取られます — HTTPSの場合はCONNECTリクエスト自身のHostヘッダーです。そのため、このオプションが役立つのは、クライアントがリクエストをIPアドレス宛てに送る場合や、Hostヘッダーが持つものとは別の名前宛てに送る場合です。TUNやSOCKS5経由の接続にはHostヘッダーがなく、このオプションは何も変えません。
DOMAIN-SUFFIX,example.com,Proxy,extended-matching
requires-resolve
SCRIPTルールの場合、このオプションはパーサーに受け付けられますが、スクリプトの評価を遅延させません。$request.dnsResultは、セッションが既に解決されている場合(例えば、IPアドレスに直接送信されたリクエスト、またはDNS解決後の2番目のマッチングパス)にのみスクリプト内で利用可能です。
SCRIPT,MyRuleScript,PROXY,requires-resolve
pre-matching
ポリシーがREJECTまたはその派生(REJECT-DROP、REJECT-TINYGIFなど)のルールでのみ有効です。pre-matchingルールはルール結果キャッシュおよび通常のルールテーブルよりも前に、別のパスで評価されます。そのため、マッチしたREJECTは最初のパスで、ルールテーブルが引き起こすDNS解決よりも前に適用されます。RULE-SETやDOMAIN-SETの行もpre-matchingを受け付けて保持しますが、そのセットはこの早期のパスではマッチングされず、ルールリスト内の自身の位置で通常どおり評価されます。
DOMAIN-SUFFIX,tracker.example.com,REJECT,pre-matching
dns-failed
FINALルールでのみ有効です。リクエストの判定にローカルのDNS解決が必要で、その解決に失敗した場合、リクエストは失敗させずにFINALポリシーへ引き渡されます。詳しくは最終ルールを参照してください。
FINAL,Proxy,dns-failed
notification-text
ルールにマッチしたときにシステム通知を送ります。タイトルはこのテキストで、本文には宛先とポリシー(host:port → policy。Androidではhost:port · policy · process)が入ります。notification-intervalは、同じルールが再び通知するまでに空ける秒数です(デフォルト300)。FINALを含むどのルールにも付けられます。RULE-SETやDOMAIN-SETの行もこれらを受け付けて保持しますが、セット内でのマッチが通知を送ることはありません。
DOMAIN-SUFFIX,bank.example,DIRECT,notification-text="Bank site opened",notification-interval=60
FINAL,Proxy,notification-text=Fell%20to%20FINAL
スペースを含むテキストは引用符で囲むか、スペースを%20と書きます。カンマは%2Cと書きます。通知はChute自身が送り、アプリ側のスイッチ — iPhoneでは通知を許可、Macではイベントレポート通知を表示、AndroidではChuteに対するシステムの通知許可 — に従います。それがオフのときは何も表示されず、Apple TVでは一切表示されません。マッチはルール通知イベントとしても記録されます。通知レポートを参照してください。
エイリアス
DOMAIN-MATCHはDOMAIN-KEYWORDのエイリアスとして受け付けられます。NETWORKはPROTOCOLのエイリアスとして受け付けられます。DST-PORTはDEST-PORTのエイリアスとして受け付けられます。
ドメインセット
Chuteは、DOMAIN-SETルールタイプで外部URLからドメインセットを読み込むことをサポートしています。タイプの後の最初のフィールドはhttp(s) URLである必要があります。オプションのupdate-intervalパラメータは、ダウンロード済みのコピーが再取得されるまでに許される経過時間(秒)です。タイマーはありません — 外部ルールセットを参照してください。
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
ドメインセットファイルには、1行に1つのドメインのみを記述します: example.comは完全一致のドメインにマッチします。.example.comまたは+.example.comはそのドメインと全てのサブドメインにマッチします。#または//で始まる行はコメントです。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。