Правила HTTP
Существует 4 типа правил уровня HTTP. USER-AGENT и URL-REGEX читают запрос, который клиент отправляет слушателю HTTP-прокси Chute, поэтому они совпадают только с соединениями, пришедшими туда; у соединения через TUN или SOCKS5 нет HTTP-запроса, который можно было бы прочитать. Решение по ним принимается один раз на клиентское соединение, по его первому запросу. Расшифровка MitM начинается после того, как политика соединения уже выбрана, поэтому расшифрованные ею запросы повторно с правилами не сопоставляются. PROTOCOL,TCP и PROTOCOL,UDP читают транспорт и совпадают на любом входящем интерфейсе; значения прикладного протокола у PROTOCOL берутся из определения протокола на входящем TUN, а также из обычного запроса на входящем HTTP-прокси. SCRIPT проверяется для любого соединения.
USER-AGENT
USER-AGENT,Instagram*,DIRECT
Правило совпадает, если заголовок User-Agent запроса совпадает. Поддерживаются подстановочные символы * и ?. Заголовок читается из первого запроса каждого клиентского соединения со слушателем HTTP-прокси; для HTTPS этот запрос — CONNECT, которым клиент открывает свой туннель, поэтому правило видит тот User-Agent, который клиент указывает в CONNECT, если он его вообще отправляет.
URL-REGEX
URL-REGEX,^http://google\.com.*,DIRECT
Правило совпадает, если URL обычного HTTP-запроса, пришедшего на слушатель HTTP-прокси, совпадает с регулярным выражением. URL записывается полностью — http://host[:port]/path?query, причём порт опускается, если он равен 80, — и регулярное выражение должно совпадать с URL целиком, а не с его частью: одно только ^http://google\.com не совпадает с http://google.com/, потому что путь — часть URL. У туннеля CONNECT (HTTPS или чего угодно ещё, что клиент туннелирует) и у соединения TUN нет URL, поэтому URL-REGEX с ними никогда не совпадает, и расшифровка HTTPS-соединения через MitM этого не меняет. Пробный прогон сопоставления с правилами, POST /api/rules/match в HTTP API управления, сопоставляет URL-REGEX со своим полем url ровно в том виде, в каком оно отправлено, поэтому указывайте в нём полный URL.
PROTOCOL
PROTOCOL,TLS,Proxy
Правило совпадает, если распознанный протокол соединения совпадает. Используйте в сочетании с sniffing-enabled для наилучших результатов. NETWORK принимается как псевдоним PROTOCOL.
Принимаемые значения протоколов: HTTP, HTTPS, TLS, TCP, UDP, QUIC, STUN, MTPROTO, DNS, DOH, DOH3, DOQ, DOT.
Внимание: Распознанный протокол заполняется в следующих местах. Для входящих сессий TUN при включённом
sniffing-enabledTCP-соединение распознаётся какHTTPилиTLS(любое TLS-соединение, включая HTTPS), только если Chute ещё не знает его имени хоста: соединение, открытое к поддельному IP-адресу или к адресу, который вернул DNS Chute, сохраняет это имя и не распознаётся, поэтомуPROTOCOL,HTTPиPROTOCOL,TLSредко совпадают с трафиком TUN, имена которого разрешил Chute. UDP-поток определяется какQUICпо форме пакетов — одинаково через TUN и через ретрансляцию UDP входящего SOCKS5 — автоматически, безsniffing-enabled. При включённомsniffing-enabledChute также читает имя сервера из пакета Initial потока QUIC, поэтому правила типа DOMAIN тоже могут совпасть с этим потоком (см.sniffing-enabledв разделе Прочие параметры). На входящем HTTP-прокси обычный (не CONNECT) запрос — этоHTTP, вообще без какого-либо определения, потому что его заголовок только что разобран из соединения; CONNECT оставляет протокол незаданным, а TCP-соединение на входящем SOCKS5 не получает его никогда — ноPROTOCOL,TCPиPROTOCOL,UDPчитают транспорт сессии, который заполняет каждый входящий, поэтому эти два совпадают и там. Приencrypted-dns-follow-outbound-mode = true(см. DNS-сервер) собственные соединения Chute с вышестоящими серверами шифрованного DNS сопоставляются какDOH,DOT,DOQиDOH3: все четыре затем используют политику, названную правилом (DoQ и DoH3 — через её UDP-ретрансляцию, а если она UDP не передаёт, решаетudp-policy-not-supported-behaviour), а решение REJECT пропускает любой из четырёх.HTTPS— принимаемое написание для распознанного рукопожатия TLS, поэтомуPROTOCOL,HTTPSиPROTOCOL,TLSсовпадают с одним и тем же трафиком.STUN,MTPROTOиDNSпринимаются для совместимости, но ни один детектор их пока не выдаёт.
SCRIPT
SCRIPT,MyRuleScript,DIRECT
Правило выполняет скрипт JavaScript для пользовательской логики сопоставления. Имя скрипта должно совпадать со скриптом, определённым в разделе [Script] с type=rule.
[Rule]
SCRIPT,CheckInternal,PROXY
[Script]
CheckInternal = type=rule, script-path=internal-check.js
Скрипт правила получает $request и должен вызвать $done({matched: true}) или $done({matched: false}). Обратите внимание, что $request.dnsResult доступен только тогда, когда сессия уже разрешена (например, для запросов, сделанных напрямую на IP-адрес, или на втором проходе сопоставления после разрешения DNS).
Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.