Règle HTTP
Il existe 4 types de règles de niveau HTTP. USER-AGENT et URL-REGEX nécessitent un en-tête de requête HTTP ; elles ne correspondent donc qu'aux requêtes HTTP (ou aux requêtes HTTPS déchiffrées par MitM). PROTOCOL ne correspond qu'aux sessions entrantes TUN, où s'exécute la détection de protocole. 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.
URL-REGEX
URL-REGEX,^http://google\.com.*,DIRECT
La règle correspond si l'URL correspond à l'expression régulière. L'expression régulière doit correspondre à l'URL complète, et non à une simple sous-chaîne : ^http://google\.com seul ne correspondrait qu'exactement à http://google.com.
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, DNS, DOH, DOQ.
Remarque : le protocole détecté n'est renseigné que pour les sessions entrantes TUN : la détection produit
HTTPetTLS(toute connexion TLS, y compris HTTPS) pour TCP, etQUICpour UDP. Les connexions arrivant par les entrées proxy HTTP ou SOCKS5 ne correspondent jamais aux règles PROTOCOL. Les autres valeurs acceptées sont réservées — aucun détecteur ne les produit encore, les règles qui les utilisent ne correspondront donc pas. En particulier, utilisezPROTOCOL,TLSplutôt quePROTOCOL,HTTPSpour faire correspondre le trafic HTTPS.
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).