حارس إساءة الاستخدام للمُرحِّل الأعمى

AeroNyx9 دقيقة قراءة

الحدود التي تطبّقها عقدة AeroNyx قبل تمرير حركة الترحيل المشفّرة: حدود المعدّل للقفزة السابقة والعزل، ومنع إعادة إرسال المسارات بشكل يصمد أمام إعادة التشغيل، وإعادة محاولات محدودة، وقبول العمليات على المعالج، باستخدام البيانات الوصفية الموقّعة والعدّادات المجمّعة فقط.

حارس إساءة الاستخدام للمُرحِّل الأعمى هو مجموعة الحدود التي تطبّقها عقدة AeroNyx قبل أن تمرّر حركة مرور ترحيل مشفّرة لصالح عقدة أخرى. وهو يحتوي الأقران المسيئين أو غير المستقرين باستخدام البيانات الوصفية الموقّعة للتوجيه والعدّادات المحلية فقط. ولا يحلّل أبدًا النص المشفّر، ولا يحتفظ بتواريخ المسارات، ولا يكشف من يتواصل مع من.

النطاق

الضابطالحالة
تمرير الحمولات المعتمةمُنفَّذ
فحوص الحداثة الموقّعة ومنع إعادة إرسال المساراتمُنفَّذ. تصمد حالة منع إعادة الإرسال أمام إعادة التشغيل عندما يكون مخزن مُرحِّل الدردشة في العقدة مفعّلًا
تحديد المعدّل للقفزة السابقة والعزلمُنفَّذ
حدود قبول الطلبات والعمليات التشفيرية على مستوى العمليةمُنفَّذ
أدلة التشغيل المجمّعة في سلامة العقدة وNodeboardمُنفَّذ
فحص النص الصريح أو الحمولاتغير مُنفَّذ، بحكم التصميم
التحليلات لكل مستخدم أو لكل مسار أو للرسم البياني الاجتماعيغير مُنفَّذة، بحكم التصميم

قاعدة العقدة العمياء

يجوز للمُرحِّل مصادقة البيانات الوصفية للتوجيه، وتطبيق سياسة محدودة، وتمرير مظروف معتم، وإعادة إيصال موقّع. ولا يجوز له أبدًا فحص الحمولة أو كشف بيانات وصفية يمكن أن تعيد بناء مسار أو هوية مستخدم أو علاقة. وعلى وجه الخصوص، لا تسجّل المُرحِّلات ولا تكشف ما يلي:

  • النص الصريح للرسائل أو الحزم أو الوسائط أو الذاكرة
  • استعلامات DNS أو الوجهات أو النطاقات أو عناوين URL أو سجل التصفح
  • معرّفات المسارات أو المسارات الكاملة أو عناوين URL لنقاط النهاية أو عناوين IP للعملاء
  • المفاتيح العامة الكاملة أو هويات المستلمين أو معرّفات الرسائل أو روابط الرسم البياني الاجتماعي
  • المفاتيح الخاصة أو أسرار القسائم أو حركة المرور على مستوى المحفظة أو مواد فك التشفير

مسار القبول

يمر كل طلب بهذه الفحوص قبل أن يتمكن من استخدام سعة التمرير. تُنفَّذ الخطوات من 1 إلى 6 بهذا الترتيب. وفي الخطوة 7، يذهب الطلب الموجّه إلى هذه العقدة إلى معالجتها الطرفية أو البصلية الخاصة، بينما يُحجز الطلب الموجّه إلى عقدة أخرى بعد تحديد قفزته التالية.

text
1. request gate: process-wide admission window and in-flight limit (64 requests)
2. crypto admission: a free slot for signature and onion work, or Backpressure
3. authenticate the signed previous hop and envelope
4. previous-hop rate limit and quarantine check
5. envelope metadata: size, age and future-skew limits
6. self-loop check
7. route loop, TTL and next-hop descriptor checks, plus the route replay reservation
8. forward the opaque ciphertext, or peel the terminal layer and deliver

يستخدم كل قرار البيانات الوصفية الموقّعة للتوجيه والحالة المجمّعة المحلية، ولا يستخدم أبدًا محتوى مفكوك التشفير.

حدود التشغيل

هذه هي القيم الافتراضية الحالية في مصدر العقدة. وهي قيم تشغيلية، وليست وعودًا دائمة في البروتوكول.

الثابتالقيمة الافتراضية
BLIND_RELAY_ROUTE_REPLAY_CAPACITY8192 مسارًا حيًا
BLIND_RELAY_ROUTE_REPLAY_TTL_SECS600 ثانية
PREVIOUS_HOP_RATE_LIMIT لكل PREVIOUS_HOP_RATE_WINDOW_SECS120 طلبًا لكل 60 ثانية
PREVIOUS_HOP_FAILURE_THRESHOLD لكل PREVIOUS_HOP_FAILURE_WINDOW_SECS12 فشلًا محتسبًا لكل 300 ثانية
PREVIOUS_HOP_QUARANTINE_SECS300 ثانية
MAX_PREVIOUS_HOP_BUCKETS4096 دلوًا
BLIND_RELAY_MAX_ENVELOPE_AGE_SECS600 ثانية
BLIND_RELAY_MAX_FUTURE_SKEW_SECS120 ثانية
BLIND_RELAY_DELIVERY_RECEIPT_MAX_AGE_SECS120 ثانية
DEFAULT_MAX_ATTEMPTS (إعادة محاولات التمرير)3 محاولات
MAX_IN_FLIGHT_BLIND_RELAY_REQUESTS64 طلبًا

تحديد المعدّل للقفزة السابقة والعزل

تُربط حدود المعدّل بالهوية الموقّعة للقفزة السابقة. يؤدي تجاوز 120 طلبًا من قفزة سابقة واحدة خلال 60 ثانية إلى بدء عزل محلي لتلك القفزة مدته خمس دقائق. ويؤدي مؤشر فشل منفصل إلى بدء العزل نفسه بعد 12 فشلًا محتسبًا خلال خمس دقائق. ولا تُحتسب في المؤشر إلا الأسباب التالية:

text
invalid_previous_hop | invalid_signature | self_loop | route_loop | ttl_exhausted

لا تضيف مهلات النقل، وفقدان الإقرارات، وإعادة المحاولات المكررة، وتعارضات إعادة الإرسال إلى المؤشر، لذا لا يُعزل قرين سليم بسبب مشكلات الشبكة. ومخزن الدلاء محدود، وتُطرد الدلاء الخاملة، لذا لا يمكن أن يتضخم الحارس ليصبح رسمًا بيانيًا طويل الأمد للاتصالات.

منع إعادة إرسال المسارات وإعادة المحاولات

يحمل كل طلب ترحيل معرّف مسار. عندما يكون مخزن مُرحِّل الدردشة في العقدة مفعّلًا ([memchain.chat_relay] enabled = true)، تُحفظ حجوزات المسارات والاستجابات المكتملة في قاعدة بيانات SQLite الخاصة به، لذا تصمد الحماية من إعادة الإرسال أمام إعادة التشغيل. وإلا تستخدم العقدة سجلًا في الذاكرة بالسعة والنافذة نفسيهما. وإذا كانت جميع الخانات الـ 8192 تحتوي مسارات حية، تُرفض المسارات الجديدة مع replay_capacity إلى أن تنتهي صلاحية الخانات.

لمعرّف المسار المكرر إحدى أربع نتائج:

الحالةالاستجابةالأثر على القفزة السابقة
الطلب نفسه؛ والمحاولة الأولى اكتملتتُعاد الاستجابة المخزّنة، بما في ذلك أي إيصال موقّع من العقدة الطرفية. ولا يُسلَّم أو يُمرَّر أي شيء مرة ثانية (duplicate_route)يُحتسب نجاحًا
الطلب نفسه؛ والمحاولة الأولى لا تزال قيد التنفيذHTTP 503 route_in_flight. يجوز للمرسل إعادة المحاولةلا أثر
طلب مختلف بمعرّف المسار نفسهHTTP 400 replay_conflictيُسجَّل في سلامة القرين. ولا يضيف إلى مؤشر العزل
الطلب نفسه، لكن الاستجابة المخزّنة أقدم من 120 ثانيةHTTP 409 replay_response_expired. يبقى المسار محجوزًا لبقية نافذته البالغة 600 ثانية، لذا لا يمكن تشغيله مرة أخرىلا أثر

تنطبق النتيجة الأخيرة على المخزن الدائم. فالإيصالات الموقّعة لا تصلح إلا بوصفها أدلة حديثة، لذا لا تعيد العقدة إرسال إيصال بعد 120 ثانية.

عندما يفشل التمرير إلى القفزة التالية بسبب مهلة أو خطأ في الاتصال أو خطأ في الطلب، تعيد العقدة المحاولة حتى ثلاث محاولات إجمالًا. ويُشتق التأخير القصير قبل كل إعادة محاولة من معرّف المسار والقفزة التالية ورقم المحاولة. ولا تُعاد المحاولة في حالات الفشل التي تُبلغ عنها العقدة اللاحقة بوصفها رفضًا قاطعًا.

قبول العمليات التشفيرية (ملاحظة حول سعة المشغّل)

فحوص التوقيعات، ونزع الطبقات البصلية، وتوقيع الإيصالات عمليات مقيّدة بالمعالج، لذا تحدّها كل عملية من عمليات العقدة:

  • إجمالي الخانات: نصف خيوط المعالج التي يُبلغ عنها المضيف، مقرّبًا إلى الأعلى، وبحد أدنى 4 وحد أقصى 8، فحتى المضيف ذو الخيط الواحد أو الخيطين يحصل على 4 خانات.
  • الطلبات الواردة: خانة واحدة أقل من الإجمالي، لكي يتمكن إنشاء المسارات الصادرة وإكمال الإيصالات دائمًا من التقدم. وعلى أصغر المضيفات تحصل الطلبات الواردة إذن على 3 خانات.
  • عندما تكون جميع الخانات مشغولة: يُرفض الطلب فورًا مع HTTP 429 والسبب backpressure. ولا ينتظر في قائمة انتظار.

لذا على المضيف الصغير، يتخلص المُرحِّل من الحمل مبكرًا عند الاندفاعات. ويعني ارتفاع العدّاد backpressure_dropped أن العقدة تحتاج إلى مزيد من المعالج أو إلى قدر أقل من حركة الترحيل.

عدّادات التشغيل المجمّعة

تُبلغ العُقد عن عدّادات تراكمية تقريبية وطوابع زمنية للحداثة في نبضاتها (heartbeat) ضمن:

text
system_stats.discovery_status.peer_store.runtime.blind_relay
system_stats.discovery_status.peer_store.blind_relay_quality
system_stats.discovery_status.peer_store.peer_health_summary
مجموعة العدّاداتالحقول
الاستقبال والتصرفreceived، terminal، forwarded، rejected
التحقق والحمايةinvalid_signature، envelope_too_large، ttl_exhausted، no_route، invalid_endpoint، loop_detected، replay_dropped، timestamp_rejected، rate_limited، quarantined، quarantine_started
النقل وإعادة المحاولةbackpressure_dropped، forward_failed، retry_attempted، retry_succeeded، retry_exhausted
المسابير الاصطناعيةprobe_attempted، probe_succeeded، probe_failed، two_hop_probe_attempted، two_hop_probe_succeeded، two_hop_probe_failed
التسليم الفعلي والحداثةverified_client_onion_deliveries، last_verified_client_onion_delivery_at، last_accepted_at، last_event_at

تصف هذه العدّادات تشغيل العقدة. وهي ليست سجلات رسائل ولا بيانات فوترة، ولا تثبت أن أي محادثة بعينها قد جرت.

جودة الأدلة

يُبقي ملخص الجودة أربعة أنواع من الأدلة منفصلة: أعمال الترحيل المعتمة المقبولة، ومسابير الوصول الاصطناعية، ومسابير القفزتين الاصطناعية، والإيصالات الموقّعة من العقدة الطرفية لعمليات التسليم الصادرة عن العملاء. يتطلب real_relay_ready إيصال تسليم حديثًا ومصادَقًا من عميل. ولا يُبلَّغ أبدًا عن الأدلة الاصطناعية بوصفها حركة مرور للمستخدمين.

statusالمعنى
idleلا يوجد نشاط ترحيل أو مسبار بعد
observingتوجد بعض الأدلة، لكن الجاهزية لم تثبت
staleالأدلة الناجحة السابقة لم تعد حديثة
readyأعمال مقبولة حديثة أو إثبات مؤهِّل، دون مشكلة نقل نشطة
protectingفُعِّلت الحمايات من إساءة الاستخدام بينما يواصل المُرحِّل العمل
degradedحالات فشل التمرير أو المسابير تحتاج إلى تحقيق
attentionالضغط العكسي أو استنفاد إعادة المحاولات يحتاجان إلى اهتمام فوري من المشغّل

يسمّي proof_scope أقوى دليل مرصود: client_message_delivery أو relay_acceptance أو message_delivery أو control_plane أو single_hop_control_plane أو attempted أو none.

سلامة الأقران دون علاقات حركة المرور

يتيح peer_health_summary للمشغّلين العثور على قرين متعطّل أو معزول دون رؤية من يتواصل مع من.

ما يتضمنه: بادئة مختصرة لمعرّف العقدة، وحالة تقريبية للسلامة والواصف، وحداثة تبادل المعلومات ونجاح المسارات، وأعداد مجمّعة لنجاح المسارات وفشلها، وحالة العزل، والوقت المتبقي، وفئات تقريبية للأسباب.

ما لا يتضمنه أبدًا: المفاتيح العامة الكاملة للعُقد، أو معرّفات المسارات، أو قوائم نقاط النهاية، أو الكتل المشفّرة أو تجزئات الحمولات، أو معرّفات الرسائل، أو هويات المستلمين، أو عناوين IP للعملاء، أو الوجهات، أو بيانات DNS، أو روابط الرسم البياني الاجتماعي.

خريطة المصدر

الطبقةالمسار في مستودع العقدةالدور
تنسيق الترحيلcrates/aeronyx-server/src/api/chat_peer/blind_relay.rsبوابة الطلبات، وقبول العمليات التشفيرية، والمصادقة، وفحوص الحلقات وTTL، ونتائج إعادة الإرسال، والتمرير والمعالجة الطرفية
واجهة HTTP والحدودcrates/aeronyx-server/src/api/chat_peer.rsالمسارات، وحدود جسم الطلب والطلبات الجارية، ورموز الأخطاء وفئات الأسباب
سياسة إساءة الاستخدامcrates/aeronyx-server/src/api/chat_peer_abuse_guard.rsحدود المعدّل للقفزة السابقة، ومؤشر الفشل، والعزل
سجل إعادة الإرسالcrates/aeronyx-server/src/api/chat_peer_replay.rsالسجل في الذاكرة وصيغة الاستجابة المخزّنة
مخزن إعادة الإرسال الدائمcrates/aeronyx-server/src/services/chat_relay_blind_route_store.rsحجوزات المسارات والاستجابات في SQLite
سياسة إعادة المحاولةcrates/aeronyx-server/src/api/chat_peer_retry.rsحالات الفشل القابلة لإعادة المحاولة مقابل القاطعة، وتوقيت إعادة المحاولة
العدّادات والجودةcrates/aeronyx-server/src/services/peer_store.rs وservices/peer_store/status.rsالعدّادات المجمّعة، والجاهزية، وتصنيف الإثباتات
الإبلاغ عن السلامةcrates/aeronyx-server/src/api/vpn_health.rs وmanagement/reporter.rsJSON السلامة المحلي وحمولة النبضات

برنامج العُقد مفتوح المصدر بموجب AGPL-3.0 على github.com/AeroNyxNetwork/AeroNyx. راجع اكتشاف العُقد والترحيل المشفّر متعدد القفزات لمعرفة كيفية بناء المسارات.

<!-- faq:start -->

الأسئلة الشائعة

هل تستطيع عقدة الترحيل قراءة حركة المرور التي تمرّرها أو تسجيلها؟

لا. يتحقق المُرحِّل من البيانات الوصفية الموقّعة للتوجيه ويمرّر مظروفًا معتمًا. ولا يحتفظ إلا بعدّادات مجمّعة، ولا يحتفظ أبدًا بالحمولات أو تواريخ المسارات أو هويات المستلمين.

ماذا يحدث عندما تعيد عقدة محاولة المسار نفسه؟

إذا كانت المحاولة الأولى قد انتهت، تعيد العقدة استجابتها المخزّنة ولا تسلّم أي شيء مرة ثانية. وإذا كانت المحاولة الأولى لا تزال قيد التنفيذ، تعيد العقدة route_in_flight القابل لإعادة المحاولة. ويُرفض الطلب المختلف بمعرّف المسار نفسه بوصفه replay_conflict.

هل تصمد الحماية من إعادة الإرسال أمام إعادة تشغيل العقدة؟

نعم، عندما يكون مخزن مُرحِّل الدردشة في العقدة مفعّلًا. فعندئذ تُحفظ حجوزات المسارات والاستجابات المكتملة في SQLite. ودون ذلك المخزن، تستخدم العقدة سجلًا في الذاكرة يُمسح عند إعادة التشغيل.

لماذا يُعزل قرين ما؟

يُعزل القرين لمدة خمس دقائق بعد إرسال أكثر من 120 طلبًا خلال 60 ثانية، أو بعد 12 فشلًا محتسبًا في التحقق خلال خمس دقائق. ولا تُحتسب المهلات وفقدان الإقرارات وإعادة المحاولات المكررة حالات فشل.

لماذا تعيد عقدتي backpressure تحت الحمل؟

كانت جميع خانات العمليات التشفيرية للترحيل فيها مشغولة. تسمح العقدة بنحو نصف خيوط المعالج لديها (4 كحد أدنى و8 كحد أقصى) لأعمال التوقيع والطبقات البصلية، وترفض الطلبات الزائدة فورًا بدلًا من وضعها في قائمة انتظار.

<!-- faq:end -->