Jeu de règles
Vous pouvez utiliser un jeu de règles provenant d'une URL, d'un fournisseur de règles configuré ou d'une section intégrée à la configuration elle-même. Chute fournit également deux jeux de règles internes.
Jeu de règles interne
SYSTEM
RULE-SET,SYSTEM,DIRECT
Comprend les règles couvrant la plupart des requêtes émises par macOS et iOS eux-mêmes. Les requêtes émises par l'App Store, iTunes et les autres services de contenu n'y figurent pas.
USER-AGENT,*com.apple.mobileme.fmip1
USER-AGENT,*WeatherFoundation*
USER-AGENT,%E5%9C%B0%E5%9B%BE*
USER-AGENT,%E8%AE%BE%E7%BD%AE*
USER-AGENT,com.apple.geod*
USER-AGENT,com.apple.Maps
USER-AGENT,FindMyFriends*
USER-AGENT,FindMyiPhone*
USER-AGENT,FMDClient*
USER-AGENT,FMFD*
USER-AGENT,fmflocatord*
USER-AGENT,geod*
USER-AGENT,locationd*
USER-AGENT,Maps*
DOMAIN,api.smoot.apple.com
DOMAIN,captive.apple.com
DOMAIN,configuration.apple.com
DOMAIN,guzzoni.apple.com
DOMAIN,smp-device-content.apple.com
DOMAIN,xp.apple.com
DOMAIN-SUFFIX,ess.apple.com
DOMAIN-SUFFIX,push-apple.com.akadns.net
DOMAIN-SUFFIX,push.apple.com
DOMAIN,aod.itunes.apple.com
DOMAIN,mesu.apple.com
DOMAIN,api.smoot.apple.cn
DOMAIN,gs-loc.apple.com
DOMAIN,mvod.itunes.apple.com
DOMAIN,streamingaudio.itunes.apple.com
DOMAIN-SUFFIX,lcdn-locator.apple.com
DOMAIN-SUFFIX,lcdn-registration.apple.com
DOMAIN-SUFFIX,ls.apple.com
PROCESS-NAME,trustd
Ces règles peuvent être mises à jour avec les mises à jour de Chute. Reportez-vous à la description affichée dans le logiciel pour obtenir les sous-règles les plus récentes.
LAN
RULE-SET,LAN,DIRECT
Comprend les règles portant sur les adresses IP du réseau local et le suffixe .local. Notez que ce jeu de règles déclenche une résolution DNS.
DOMAIN-SUFFIX,local
IP-CIDR,192.168.0.0/16
IP-CIDR,10.0.0.0/8
IP-CIDR,172.16.0.0/12
IP-CIDR,127.0.0.0/8
IP-CIDR,100.64.0.0/10
IP-CIDR,255.0.0.0/8
IP-CIDR,fc00::/7
IP-CIDR,::1/128
IP-CIDR,fe80::/10
Jeu de règles externe
Jeu de règles provenant d'une URL http(s). Le fichier de jeu de règles doit être un fichier texte. Chaque ligne contient une déclaration de règle sans la politique.
Remarque : les fichiers de jeu de règles ne prennent en charge que les types de règles terminales. Les lignes de règles logiques (AND/OR/NOT), SCRIPT et DOMAIN-SET sont ignorées. Une ligne RULE-SET figurant dans un fichier récupéré par
RULE-SET,<url>est inerte : l'analyseur ne retient que les valeurs intégrées SYSTEM et LAN, et même celles-là ne sont jamais dépliées, si bien que la ligne ne correspond jamais. Les références imbriquées fonctionnent en revanche dans une charge utile[Rule Provider]et dans une section[Ruleset]intégrée. Une ligne CIDR nue (par ex.1.2.4.0/24) est acceptée comme règle IP-CIDR.
RULE-SET,https://example.com/my-rules.txt,Proxy
RULE-SET,https://example.com/my-rules.txt,Proxy,update-interval=86400
Le paramètre facultatif update-interval indique l'âge, en secondes, que la copie téléchargée peut atteindre. Il n'y a pas de minuteur : la première correspondance qui survient une fois la copie devenue plus ancienne que cette valeur la rafraîchit en arrière-plan, et la copie déjà téléchargée continue de servir aux correspondances pendant ce temps. Au chargement de la configuration, une copie en cache plus récente que cette valeur est utilisée telle quelle, sans téléchargement ; une copie plus ancienne est utilisée pendant qu'elle est retéléchargée. Sans update-interval, une copie en cache est conservée et le jeu n'est téléchargé que s'il n'en existe aucune. Un téléchargement qui échoue laisse la copie en place — ou rien, s'il n'y en avait pas — et est retenté en arrière-plan après 30 secondes, en doublant à chaque échec jusqu'à une heure, sans jamais dépasser l'intervalle du jeu ni descendre sous 10 secondes. Écrit sur la ligne RULE-SET, no-resolve s'applique à toutes les règles basées sur l'IP du jeu.
Remarque : Chute Android ne procède pas encore ainsi. Sur cette plateforme, une copie en cache plus ancienne que
update-intervaln'est pas utilisée au chargement de la configuration, si bien que le jeu doit être téléchargé avant de correspondre ; un téléchargement qui échoue est seulement consigné dans le journal — sans copie, le jeu reste vide jusqu'au prochain chargement de la configuration — et une actualisation en échec est retentée à la correspondance suivante, sans délai croissant.
Exemple de fichier de jeu de règles :
DOMAIN,exampleA.com
DOMAIN,exampleB.com
Pour utiliser un fichier local, définissez une entrée dans la section [Rule Provider] avec un paramètre path= et référencez-la par son nom :
[Rule Provider]
my-rules = type=file, path=/path/to/my-rules.txt, format=native
[Rule]
RULE-SET,my-rules,Proxy
Paramètres du fournisseur de règles : type (http ou file ; http exige url=), behavior (classical pour des déclarations de règles, domain pour un jeu de domaines, ipcidr pour une liste de CIDR nus — également utilisable pour les fournisseurs Clash/mihomo, dont les charges utiles en CIDR nu sont acceptées ; par défaut classical), format (native — ou surge — pour des lignes de règles Chute, mihomo-yaml pour une charge utile YAML de fournisseur de règles Clash/mihomo, sing-box-source — ou sing-box, source — pour un jeu de règles sing-box au format source (JSON) ; par défaut mihomo-yaml) et interval (secondes, par défaut 86400). Au chargement de la configuration, une copie en cache plus récente que interval est utilisée telle quelle, sans téléchargement ; une copie plus ancienne est utilisée pendant qu'elle est retéléchargée, et un échec est retenté comme pour un téléchargement RULE-SET. 0 ne télécharge que s'il n'existe aucune copie en cache ; une valeur négative ne télécharge jamais — pas même pour l'update-interval d'une ligne RULE-SET —, si bien que le fournisseur reste inactif à moins qu'une copie en cache n'existe. Pendant que Chute tourne, le fournisseur est actualisé depuis sa propre source à la première correspondance qui survient une fois la copie devenue plus ancienne que l'intervalle ; si une ligne RULE-SET écrit un update-interval, ce jeu suit à la place la valeur de la ligne. Chute Android fonctionne encore à l'ancienne : un interval positif retélécharge la charge utile à chaque chargement de la configuration, une copie en cache plus ancienne que cette valeur n'est pas utilisée, un téléchargement en échec n'est pas retenté, et pendant que Chute tourne, un fournisseur n'est actualisé que par une ligne RULE-SET qui porte update-interval. Une ligne [Rule Provider] n'a aucune clé qui porte des règles : type=inline y donne donc un fournisseur vide ; écrivez un jeu intégré sous forme de section [Ruleset <name>].
policy=<name> télécharge la charge utile par cette politique ou ce groupe — le proxy: de mihomo —, comme dans my-rules = type=http, url=https://example.com/rules.yaml, policy=Proxy ; pour un groupe, c'est son choix au début du téléchargement qui sert. Sans lui, ou avec policy=DIRECT, la charge utile est récupérée directement. Un nom non défini refuse le téléchargement au lieu de récupérer directement.
GET /api/rules/providers de l'API de contrôle HTTP rend compte de chaque entrée [Rule Provider] et de chaque section [Ruleset] : si elle s'est chargée, la raison pour laquelle elle ne l'a pas fait, et les éventuels avertissements de conversion. Son rule_count compte les lignes d'une section [Ruleset] et reste à 0 pour un fournisseur téléchargé ou de type fichier. RULE-SET,<url> et DOMAIN-SET,<url> ne figurent pas dans la liste ; l'échec du téléchargement de l'un d'eux n'apparaît que dans le journal.
Sur Android, la charge utile d'un fournisseur de règles — téléchargée ou lue depuis un fichier — a un plafond de taille, car l'app exécute le noyau dans son propre tas : 400 Ko pour sing-box-source, 1 Mo pour tous les autres formats. Une charge utile au-delà du plafond n'est pas chargée, et l'état du fournisseur en indique la raison. Sur iPhone et Apple TV, il n'y a pas de plafond : une charge utile native ou surge est copiée et indexée sous forme de fichier sans construire de tableau de lignes, et une grande charge utile mihomo-yaml ou sing-box-source est convertie en mémoire avec un avertissement dans le journal plutôt que refusée. RULE-SET,<url> et DOMAIN-SET,<url> sont écrits en flux sur le disque sur toutes les plateformes et n'ont pas de plafond. L'ordinateur n'a pas de plafond non plus : un grand jeu publié (geosite/cn et consorts) écrit en native ou surge se charge sur toutes les plateformes, et écrit en mihomo YAML ou sing-box source, il est converti en mémoire avec le même avertissement. L'index des jeux de règles garde au plus 24 connexions à la base de données ouvertes en même temps sur iPhone, Apple TV et Android (128 sur ordinateur).
Lorsqu'une charge utile mihomo-yaml ne s'analyse pas mais ressemble à une simple liste de lignes de règles, elle est lue comme native à la place, et un avis est consigné dans le journal. Une ligne d'une charge utile mihomo classical ne nomme aucune politique, si bien que ce qui suit sa valeur est lu comme des paramètres : no-resolve est conservé, et tout autre paramètre — le src de mihomo, par exemple — est écarté. Une règle logique et une règle …-REGEX gardent le reste de la ligne comme valeur.
Une charge utile qui est un objet JSON est d'abord essayée comme jeu de règles sing-box, si bien qu'un jeu de règles sing-box déclaré avec le format par défaut se charge aussi. Dans un jeu de règles sing-box, une règle dont tous les critères sont d'une même sorte devient une ligne par valeur. Les sortes sont : destination (domain, domain_suffix, domain_keyword, domain_regex, ip_cidr, geoip, et ip_is_private, qui devient les plages d'adresses privées avec no-resolve), port de destination (port, port_range), adresse source (source_ip_cidr, source_ip_is_private), port source (source_port, source_port_range), ainsi que protocol, network, process_name et process_path, chacun formant une sorte à lui seul. clash_mode: rule est ignoré, puisque le mode règle est le seul qu'exécute Chute ; tout autre clash_mode fait écarter la règle. Une règle qui combine plusieurs sortes (un domaine et un port, par exemple), une règle invert et une règle logical ne peuvent pas tenir sur une seule ligne : elles sont ignorées et figurent dans les avertissements du jeu de règles. Les formats binaires compilés ne peuvent pas être lus. Un fournisseur .srs sing-box est détecté comme tel — depuis format=srs ou format=binary, ou depuis un emplacement se terminant par .srs — et reste inactif, avec un état invitant à le rediriger vers la version source sing-box (.json). Le .mrs de mihomo, lui, n'est pas détecté : sa charge utile échoue simplement à se décoder comme du texte, et le jeu de règles reste inactif sous l'état générique d'échec de téléchargement. Sous macOS, l'importateur redirige un jeu binaire vers la version source publiée à côté lorsque l'éditeur en propose une ; sous iOS, Apple TV et Android, il ne le fait pas.
RULE-SET et DOMAIN-SET peuvent être utilisés comme sous-règles à l'intérieur des règles logiques AND/OR/NOT —
NOT,((RULE-SET,cn_ip)),Proxyfonctionne, et le jeu imbriqué est évalué avec le même filtre de charge utile qu'un jeu écrit seul.
Jeu de règles intégré
Une section [Ruleset <name>] garde un jeu de règles dans le fichier de configuration lui-même (syntaxe Surge). Chaque ligne est une déclaration de règle sans politique, comme dans un fichier de jeu de règles, et une règle désigne la section par son nom :
[Ruleset Streaming]
DOMAIN-SUFFIX,netflix.com
IP-CIDR,198.51.100.0/24,no-resolve
[Rule]
RULE-SET,Streaming,Proxy
La section se comporte comme une entrée [Rule Provider] avec type=inline et format=native, et elle est réenregistrée sous forme de section. Deux jeux de règles portant le même nom sont une erreur de configuration.
Une section intégrée — comme la charge utile d'un fournisseur de règles — peut contenir RULE-SET,SYSTEM, RULE-SET,LAN ou RULE-SET,<une autre section intégrée>. Ces lignes sont développées au chargement des règles, jusqu'à 8 niveaux. Une référence qui formerait une boucle, ou qui vise un jeu de règles file ou http, un jeu de domaines ou un DOMAIN-SET, est écartée avec un avertissement.
Jeu de domaines
Un jeu de domaines est similaire à un jeu de règles externe, mais spécifiquement destiné aux noms de domaine, et utilise un format de fichier plus compact.
DOMAIN-SET,https://example.com/domains.txt,DIRECT
DOMAIN-SET,https://example.com/domains.txt,DIRECT,update-interval=86400
Le premier champ après le type doit être une URL http(s). Le fichier de jeu de domaines contient des domaines bruts, un par ligne (et NON des déclarations de règles) :
# domaine exact
example.com
# le domaine et tous ses sous-domaines
.example.org
+.example.net
Les lignes commençant par # ou // sont des commentaires.