
بوت في مساحة المستخدم وانحراف هجمات DDoS للخدمات HTTP الصغيرة
طبقة خداع في فضاء المستخدم تحوّل هجمات DDoS وإساءة استخدام البوتات إلى جهد مهدور.
يقف Net Ward أمام خدمة HTTP الخاصة بك كوكيل عكسي. تمرّ حركة المرور الحقيقية عبره دون أي تغيير. أما الفحوصات والفيضانات المعروفة فتحصل على استجابات مرآة غير ضارة تُهدر جهد البوتات ولا تصل أبدًا إلى تطبيقك — بلا خطافات في النواة، وبلا حمولات، وبلا انتقام، fail-open بحكم التصميم.
صُنع ويُصان بواسطة Dragon Lady — github.com/Dragon-Lady · X: @answerislove2 باحثة أمنية مستقلة تتعقّب حملات سلسلة التوريد وإساءة استخدام البوتات الحية في الميدان.
الموقع الإلكتروني: dragon-lady.github.io/netward-standalone
python -m pip install --upgrade "netward>=0.4.12"
python -m netward --config example_config.json
الإصدار 0.4.12 أو أحدث هو الأساس الموصى به للتركيبات الجديدة والترقيات. تبقى الإصدارات الأقدم متاحة لأغراض إعادة الإنتاج؛ ويجب أن تستخدم عمليات النشر الجديدة الإصدار الحالي.
أو من المصدر:
git clone https://github.com/Dragon-Lady/netward-standalone
cd netward-standalone
pip install -e .
يستمع Net Ward على listen_address ويعيد توجيه حركة المرور النظيفة إلى upstream_target.
انسخ ملف الإعدادات النموذجي وعدّل هدف المنبع:
cp example_config.json config.json
وجّه upstream_target إلى خدمة HTTP حقيقية قبل تشغيل Net Ward. إذا تعذّر الوصول إلى المصدر الأعلى (upstream)، فإن الطلبات غير المطابقة تُرجع استجابة مرآة افتراضية بدلًا من كشف خطأ وكيل خام.
الحقول المطلوبة:
| الحقل | المعنى |
|---|---|
node_id | اسم ثابت لنسخة Net Ward هذه |
upstream_target | خدمة HTTP التي تتم حمايتها |
listen_address | المضيف والمنفذ اللذان يرتبط بهما Net Ward |
تتحكم الحقول الاختيارية في كثافة المرآة، والتخزين المحلي، وعناصر mesh النائبة، وقنوات التنبيه، ومهلات المصدر الأعلى، والاحتفاظ بسجل الفحص. تؤدي مطابقة نمط أو بداية سيل من الطلبات إلى تسجيل تنبيه في SQLite. تُزال تكرارات التنبيهات حسب النوع والمصدر والنمط لمدة خمس دقائق. قائمة alert_channels الفارغة ترسل إلى stdout؛ اختر أي مزيج من stdout وemail وslack وntfy للتسليم الصريح. يعمل التسليم الصادر في الخلفية ويعيد محاولة القنوات الفاشلة. تُعاد محاولة التنبيهات الحديثة غير المسلَّمة عند بدء التشغيل.
يتطلب البريد الإلكتروني alert_email وalert_smtp_host وalert_smtp_from. اضبط alert_smtp_port وalert_smtp_security (starttls أو ssl أو none)؛ لا يُسمح بـ none إلا لخادم SMTP على loopback. إذا لزمت المصادقة، فاضبط alert_smtp_username وalert_smtp_password_env على اسم متغير بيئة يحتوي على كلمة المرور. يتطلب Slack alert_slack_webhook. يتطلب ntfy alert_ntfy_topic (موضوع على ntfy.sh أو عنوان URL كامل لموضوع مستضاف ذاتيًا)؛ بالنسبة لموضوع محمي، اضبط alert_ntfy_token_env على اسم متغير بيئة يحتوي على رمز bearer الخاص به. يجب أن تستخدم وجهات HTTP بروتوكول HTTPS باستثناء loopback. القيمة الافتراضية لـ alert_timeout_secs هي خمس ثوانٍ. يتحقق Net Ward من الوجهات المطلوبة عند بدء التشغيل ويخزّن إيصالات التسليم الناجحة في جدول التنبيهات. تحتوي رسائل التنبيه على عنوان IP المصدر ومعرّف النمط والتصنيف؛ ولا تتضمن أجسام الطلبات أو الترويسات الخام.
| الحقل الاختياري | الافتراضي | المعنى |
|---|---|---|
upstream_timeout_total | 10 | الميزانية الكلية للطلب لاستدعاء المصدر الأعلى، بالثواني |
upstream_timeout_connect | 3 | مهلة الاتصال (DNS + TCP + TLS)، بالثواني |
upstream_timeout_sock_read | 5 | الوقت الخامل بين عمليات قراءة مقبس المصدر الأعلى، بالثواني |
upstream_max_concurrency | 64 | طلبات المصدر الأعلى قيد التنفيذ |
upstream_max_body_bytes | 8388608 | الحد الأقصى لجسم استجابة المصدر الأعلى المخزَّن مؤقتًا (8 MiB). تفشل الأجسام الأكبر بشكل مفتوح إلى المرآة الافتراضية |
probe_retention_secs | 604800 | مدة بقاء سجل الفحص (7 أيام) |
probe_max_rows | 10000 | الحد الأقصى لصفوف سجل الفحص بعد الحذف عند الكتابة |
alert_timeout_secs | 5 | المهلة لكل قناة لتسليم التنبيهات الصادرة، بالثواني |
python -m netward --config config.json
مثال على الطوبولوجيا:
| المكوّن | العنوان |
|---|---|
| Net Ward | 127.0.0.1:8080 |
| تطبيق المنبع | http://127.0.0.1:9000 |
| التخزين | netward.db |
وجّه موازن الحمل أو خادم الويب لديك إلى Net Ward. أبقِ تطبيق المنبع قابلاً للوصول فقط من المضيف أو الشبكة الموثوقة عندما يكون ذلك ممكنًا.
اضبط listen_address على 0.0.0.0:<port> فقط عندما تريد عمدًا أن يكون Net Ward قابلاً للوصول من خارج localhost.
على Linux/macOS، أبقِ storage_path غير قابل للكتابة من قِبل الجميع. مثال: chmod 600 netward.db، أو chmod 644 netward.db فقط إذا كنت بحاجة عمدًا إلى وصول للقراءة لأغراض المراقبة.
يحافظ Net Ward على سعته الموثّقة لكل جهاز بشكل مستمر، لكن مجمّعات ذاكرة وقت تشغيل Python قد تحتفظ بحالة مجموعة العمل بعد حمل ثقيل مستمر. ينبغي للمشغّلين الذين يشغّلون Net Ward تحت حركة مرور ثقيلة مستمرة مراقبة استخدام موارد العملية وإعادة تشغيل الخدمة (daemon) بشكل دوري، على سبيل المثال أسبوعيًا أو عندما يتجاوز RSS ضعف خط الأساس. ستحسّن v0.5 هذا التوجيه بناءً على ملاحظات المشغّلين وملاحظات الاختبار المحلية، وليس على القياس عن بُعد التلقائي.
يجب أن يصل الطلب النظيف إلى المنبع:
curl -i http://127.0.0.1:8080/
يجب أن تكون أداة الفحص المعروفة منسوخة:
curl -i http://127.0.0.1:8080/wp-admin/
تُرجع أداة فحص WordPress صفحة تسجيل دخول وهمية. لا تتلقى الخدمة الأصلية الطلب.
مع البنية النموذجية أعلاه، يجب أن تبدو أول عملية تشغيل سليمة هكذا:
127.0.0.1:9000.127.0.0.1:8080./ عبر Net Ward وتأكد من عودة استجابة الخدمة الأصلية./wp-admin/ عبر Net Ward وتأكد من عودة استجابة مرآة بدلاً من ذلك.النتيجة المتوقعة: تصل حركة المرور العادية إلى التطبيق الأصلي، بينما تُعالَج الأداة الفاحصة المعروفة بواسطة طبقة المرآة في Net Ward. هذه هي أبسط إشارة على أن مسار الوكيل ومطابقة الأنماط واستجابة المرآة تعمل جميعها.
ثبّت مجموعة أنماط المورّد المضمّنة أو حدّثها:
python -m netward.cli --db netward.db install-patterns
python -m netward.cli --db netward.db install-patterns --force
اعرض الأنماط النشطة:
python -m netward.cli --db netward.db list-patterns
اقرأ تقرير فحص دون كتابة قاعدة البيانات. التقرير عبارة عن أعداد
مجمّعة: أي عائلات فحص تم تفعيلها، وأي إجماليات مسار الطلب أصابته تلك العائلات،
وكم عدد المصادر المشاركة. لا يطبع عناوين IP خام
أو معلومات جغرافية. يسلّم --send ذلك الملخص نفسه — بما في ذلك أعداد المسارات،
وليس عناوين IP خام أبدًا. ملفات الإخراج مخصّصة للمالك فقط (0600).
python -m netward.cli --db netward.db report
python -m netward.cli --db netward.db report --since 7d --format md --output report.md
python -m netward.cli --db netward.db report --format html --output report.html
python -m netward.cli --db netward.db report --family wordpress --top 10
python -m netward.cli --db netward.db report --send --config config.json
يُحدَّد سجل الفحص المخزَّن بحد أقصى 7 أيام أو 10,000 صف. يصف التقرير تلك النافذة ويذكر ذلك صراحةً. تُطبَع الأنماط الأكثر إحكامًا المقترحة للمراجعة ولا تُثبَّت.
تعطيل نمط أو إعادة تفعيله: