قاعدة 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
تطابق القاعدة إذا تطابق رابط طلب HTTP عادي يصل إلى مستمع بروكسي HTTP مع التعبير النمطي. يُكتب الرابط كاملاً — http://host[:port]/path?query، مع حذف المنفذ حين يكون 80 — ويجب أن يطابق التعبير النمطي الرابط الكامل، وليس جزءاً منه فقط: فـ ^http://google\.com وحده لا يطابق http://google.com/، لأن المسار جزء من الرابط. أما نفق CONNECT (HTTPS، أو أي شيء آخر يمرّره العميل عبر نفق) واتصال TUN فلا رابط لهما، لذا لا تطابقهما URL-REGEX أبداً، ولا يغيّر فك تشفير اتصال HTTPS عبر MitM ذلك. أما تجربة مطابقة القواعد دون تنفيذ، أي POST /api/rules/match في HTTP Control API، فتطابق URL-REGEX مع حقل url فيها كما يُرسَل تماماً، لذا أعطها الرابط كاملاً.
PROTOCOL
PROTOCOL,TLS,Proxy
تطابق القاعدة إذا تطابق البروتوكول المكتشف للاتصال. استخدم مع sniffing-enabled للحصول على أفضل النتائج. يُقبل NETWORK كاسم بديل لـ PROTOCOL.
قيم البروتوكول المقبولة: HTTP, HTTPS, TLS, TCP, UDP, QUIC, STUN, MTPROTO, DNS, DOH, DOH3, DOQ, DOT.
ملاحظة: يُملأ البروتوكول المكتشف في المواضع التالية. في جلسات مدخل TUN، ومع تفعيل
sniffing-enabled، يُستكشف اتصال TCP على أنهHTTPأوTLS(أي اتصال TLS، بما في ذلك HTTPS) فقط حين لا يعرف Chute اسم مضيفه مسبقاً: فالاتصال المفتوح إلى عنوان IP وهمي، أو إلى عنوان حلّه DNS الخاص بـ Chute، يحتفظ بذلك الاسم ولا يُستكشف، لذا نادراً ما تطابقPROTOCOL,HTTPوPROTOCOL,TLSحركة TUN التي حلّ Chute أسماءها. أما تدفق UDP فيُكتشف على أنهQUICمن شكل حزمه — عبر TUN وعبر ترحيل UDP في مدخل SOCKS5 على حد سواء — دون الحاجة إلىsniffing-enabled. ومع تفعيلsniffing-enabledيقرأ Chute أيضاً اسم الخادم من حزمة 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-policy-not-supported-behaviourالأمر حين لا تحمل UDP — ويؤدي قرار 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).
هذه الصفحة ترجمة للنسخة الإنجليزية. في حال وجود اختلاف، يُعتمد على النسخة الإنجليزية.
ملاحظة: التطبيق لا يدعم اللغة العربية حاليًا.