Règle HTTP
Il existe 4 types de règles de niveau HTTP. USER-AGENT et URL-REGEX lisent la requête qu'un client envoie à l'écouteur du proxy HTTP de Chute ; elles ne correspondent donc qu'aux connexions qui y arrivent : une connexion passant par TUN ou SOCKS5 n'a pas de requête HTTP à lire. Leur verdict est établi une seule fois par connexion client, d'après sa première requête. Le déchiffrement MitM commence après le choix de la politique d'une connexion : les requêtes qu'il déchiffre ne sont donc pas confrontées de nouveau aux règles. PROTOCOL,TCP et PROTOCOL,UDP lisent la couche transport et correspondent sur toute entrée ; les valeurs de protocole applicatif de PROTOCOL proviennent de la détection de protocole de l'entrée TUN, et d'une requête simple sur l'entrée proxy HTTP. SCRIPT est évaluée pour toute connexion.
USER-AGENT
USER-AGENT,Instagram*,DIRECT
La règle correspond si l'agent utilisateur de la requête correspond. Les caractères joker * et ? sont pris en charge. L'en-tête est lu dans la première requête de chaque connexion client à l'écouteur du proxy HTTP ; pour HTTPS, cette requête est le CONNECT par lequel le client ouvre son tunnel, si bien que la règle voit le User-Agent que le client place sur le CONNECT, s'il en envoie un.
URL-REGEX
URL-REGEX,^http://google\.com.*,DIRECT
La règle correspond si l'URL d'une requête HTTP en clair arrivant sur l'écouteur du proxy HTTP correspond à l'expression régulière. L'URL est écrite en entier — http://host[:port]/path?query, le port étant omis lorsqu'il vaut 80 — et l'expression régulière doit correspondre à l'URL complète, et non à une simple sous-chaîne : ^http://google\.com seul ne correspond pas à http://google.com/, car le chemin fait partie de l'URL. Un tunnel CONNECT (HTTPS, ou tout autre trafic qu'un client fait passer par un tunnel) et une connexion TUN n'ont pas d'URL : URL-REGEX ne leur correspond donc jamais, et déchiffrer une connexion HTTPS par MitM n'y change rien. Le test à blanc de correspondance des règles, POST /api/rules/match de l'API de contrôle HTTP, confronte URL-REGEX à son champ url exactement tel qu'il est envoyé : donnez-lui donc l'URL complète.
PROTOCOL
PROTOCOL,TLS,Proxy
La règle correspond si le protocole détecté de la connexion correspond. À utiliser avec sniffing-enabled pour de meilleurs résultats. NETWORK est accepté comme alias de PROTOCOL.
Valeurs de protocole acceptées : HTTP, HTTPS, TLS, TCP, UDP, QUIC, STUN, MTPROTO, DNS, DOH, DOH3, DOQ, DOT.
Remarque : le protocole détecté est renseigné aux endroits suivants. Pour les sessions entrantes TUN, avec
sniffing-enabledactivé, une connexion TCP n'est détectée commeHTTPouTLS(toute connexion TLS, y compris HTTPS) que lorsque Chute ne connaît pas déjà son nom d'hôte : une connexion ouverte vers une fausse IP, ou vers une adresse que le DNS de Chute a résolue, conserve ce nom et n'est pas soumise à la détection, si bien quePROTOCOL,HTTPetPROTOCOL,TLScorrespondent rarement au trafic TUN dont les noms ont été résolus par Chute. Un flux UDP est détecté commeQUICd'après la forme de ses paquets — par TUN comme par le relais UDP de l'entrée SOCKS5 — sans quesniffing-enabledsoit nécessaire. Avecsniffing-enabledactivé, Chute lit aussi le nom du serveur dans le paquet Initial d'un flux QUIC, de sorte que les règles de type DOMAIN peuvent également correspondre à ce flux (voirsniffing-enableddans Options diverses). Sur l'entrée proxy HTTP, une requête simple (sans CONNECT) estHTTPsans aucune détection, puisque son en-tête de requête vient d'être analysé sur la connexion ; un CONNECT laisse le protocole non renseigné, et une connexion TCP sur l'entrée SOCKS5 n'en reçoit jamais — maisPROTOCOL,TCPetPROTOCOL,UDPlisent la couche transport de la session, que chaque entrée renseigne, de sorte que ces deux règles y correspondent aussi. Avecencrypted-dns-follow-outbound-mode = true(voir Serveur DNS), les connexions de Chute lui-même vers les serveurs DNS chiffrés sont évaluées commeDOH,DOT,DOQetDOH3: les quatre utilisent alors la politique nommée par la règle — DoQ et DoH3 par son relais UDP,udp-policy-not-supported-behaviourtranchant quand elle n'en a pas — et une décision REJECT écarte n'importe laquelle des quatre.HTTPSest une graphie acceptée d'une poignée de main TLS détectée :PROTOCOL,HTTPSetPROTOCOL,TLScorrespondent donc au même trafic.STUN,MTPROTOetDNSsont acceptées pour la compatibilité, mais aucun détecteur ne les produit encore.
SCRIPT
SCRIPT,MyRuleScript,DIRECT
La règle évalue un script JavaScript pour une logique de correspondance personnalisée. Le nom du script doit correspondre à un script défini dans la section [Script] avec type=rule.
[Rule]
SCRIPT,CheckInternal,PROXY
[Script]
CheckInternal = type=rule, script-path=internal-check.js
Le script de règle reçoit $request et doit appeler $done({matched: true}) ou $done({matched: false}). Notez que $request.dnsResult n'est disponible que lorsque la session a déjà été résolue (par exemple, pour les requêtes adressées directement à une adresse IP, ou lors de la seconde passe de correspondance après résolution DNS).