العودة إلى التحديثات
New releaseAug 1, 2026

maltrail v2.2

نظام كشف حركة المرور الخبيثة في الوقت الفعلي باستخدام القوائم السوداء العامة، وآثار البرامج الضارة الثابتة، والتحليل الاستدلالي لتحديد التهديدات عبر حركة DNS وHTTP وIP.

مشاركة

Maltrail

License Sensor Server Trails X

Maltrail

Maltrail هو نظام كشف حركة مرور الشبكة الذي يحدد الاتصال بالبنية التحتية الضارة المعروفة ويُبلغ عن الحالات الشاذة المحددة في حركة المرور. يطابق النطاقات وعناوين URL وعناوين IP وأزواج IP:port وقيم User-Agent التي تُلاحظ على الشبكة مع مجموعة من المؤشرات تسمى trails.

يُسجَّل الاكتشاف كحدث واحد يحتوي على المصدر والوجهة والبروتوكول والمسار المطابق والتصنيف ومصدر المسار:```text "2026-08-07 09:14:22.117034" gw 10.13.13.2 57809 1.1.1.1 53 UDP DNS malware.bakewithdavid.com "asyncrat (malware)" (static)

Maltrail مصمم للمراقبة الشبكية القائمة على المؤشرات. اكتشافاته الاستدلالية تُكمّل
مطابقة المسارات، لكنها ليست بديلاً عن القياس عن بُعد لنقاط النهاية أو نظام منع التسلل العام.

## الميزات

- بناء مسار كامل يجمع أكثر من 3,000 ملف ثابت مضمّن، و42 تكاملًا مع الخلاصات العامة،
  ومسارات اختيارية يقدمها المشغّل.
- مستشعر Rust متعدد الخيوط يستخدم libpcap، مع عمال التقاط اختيارية عبر `PACKET_FANOUT` في Linux.
- خادم Python يوفر واجهة التقارير، واستقبال الأحداث، وواجهة برمجة التطبيقات HTTP.
- مسارات وقوائم بيضاء مخصصة بنص عادي يمكن مراجعتها والتحكم في إصداراتها.
- استدلالات للفحص، واستنزاف DNS، وعمليات بحث شبيهة بـ DGA، وتنزيلات مشبوهة، وفحوصات الوكلاء،
  وقيم User-Agent مشبوهة، ونشاط شبكي ذي صلة.
- تسجيل أحداث محلي، وتسجيل Maltrail عن بُعد، وCEF عبر syslog، وإخراج Logstash بصيغة JSON.
- التحقق من النشر باستخدام `maltrail-sensor -T` ومقاييس Prometheus اختيارية.

## المحتويات

- [البنية](#architecture)
- [الأداء](#performance)
- [التثبيت](#installation)
  - [المثبّت](#installer)
  - [البناء من المصدر](#building-from-source)
  - [Systemd](#systemd)
  - [Docker](#docker)
- [الإعداد](#configuration)
- [المسارات](#trails)
- [الأحداث وواجهة برمجة التطبيقات](#events-and-api)
- [العمليات](#operations)
  - [المراقبة](#monitoring)
  - [الاحتفاظ بالأحداث](#event-retention)
- [التوثيق](#documentation)
- [المساهمة](#contributing)
- [المشروع](#project)
  - [الترخيص](#license)
  - [المشرفون](#maintainers)
  - [الرعاة](#sponsors)
  - [العروض والمنشورات](#presentations-and-publications)
  - [القائمة السوداء المشتقة](#derived-blacklist)
  - [تكاملات الطرف الثالث](#third-party-integrations)
  - [الإقرارات](#acknowledgements)

## البنية

يتكون Maltrail من عمليتين مستقلتين قد تعملان على نفس المضيف أو على مضيفين منفصلين:```text
   ┌──────────┐   events (UDP or file)   ┌──────────┐
   │  sensor  │ ───────────────────────► │  server  │ ◄── browser
   └──────────┘                          └──────────┘
    Rust                                  Python
    libpcap + PACKET_FANOUT               reporting UI + API
    trail matching + heuristics

المستشعر يلتقط حركة المرور، ويقوم بمطابقة المسارات والتحليل الاستدلالي، وينتج الأحداث. يمكنه كتابة الأحداث محليًا (LOG_DIR)، أو إرسالها إلى خادم Maltrail بعيد (LOG_SERVER)، أو كليهما. يمكنه أيضًا إصدار CEF عبر syslog (SYSLOG_SERVER) وJSON إلى Logstash (LOGSTASH_SERVER).

يستقبل الخادم الأحداث البعيدة ويخزنها، ويوفر سجلات الأحداث المتاحة محليًا، ويوفر الواجهة الويب وAPI.

الأداء

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

قياسات تمثيلية على معالج AMD Ryzen 7 PRO 4750U مع تفعيل الاستدلالات ومجموعة مسارات تتكون من 1.5 مليون صف:

حركة المرورالوقت لكل حزمة
صدى ICMP، 58 بايت101 نانوثانية
TCP SYN، 70 بايت302 نانوثانية
TLS بكميات كبيرة، 1,473 بايت402 نانوثانية
استعلام DNS مع ذاكرة تخزين مؤقت دافئة، 93 بايت452 نانوثانية
حركة مرور مختلطة، متوسط 866 بايت552 نانوثانية
طلب HTTP، 169 بايت602 نانوثانية
استعلام DNS باسم فريد، 93 بايت1,102 نانوثانية

قيست عمليات المقارنة دون اتصال باستخدام نفس الالتقاط المُولَّد والتكوين ومجموعة المسارات تكلفة أقل لكل حزمة في الحالة المستقرة بمقدار 14–37× مقارنة بمستشعر Python المتقاعد عبر الأنظمة المختبرة. أداة المقارنة تبلغ عن وقت العملية الكاملة بشكل منفصل لأن تحميل المسارات يهيمن على عمليات إعادة التشغيل القصيرة. كما تطبع أعداد الأحداث؛ يتم اختبار التكافؤ الوظيفي بشكل مستقل بواسطة مجموعة التكافؤ.

شغّل المقارنة على النظام المستهدف باستخدام:```bash python3 sensor/tools/bench_compare.py --packets 300000
--trails ~/.maltrail/trails.csv --repeat 3

يتم استخدام عامل التقاط واحد افتراضيًا. يمكن للعمال الإضافيين زيادة سعة الالتقاط، لكن تجزئة التدفق في لينكس تقسم الحالة لكل مصدر بين العمال وبالتالي تقلل من حساسية بعض استدلالات الفحص. في الاختبار الموثق، بقيت 91% من تنبيهات الاستدلال بعامل واحد عند استخدام عاملين، و86% مع أربعة، و65% مع ثمانية. لم تتغير مطابقة الأثر الدقيقة. قم بزيادة `CAPTURE_FANOUT` فقط عندما تُظهر مقاييس فقدان الالتقاط أن ذلك ضروري.

منهجية القياس، نتائج الأجهزة، مخرجات ملف التعريف، قياسات الذاكرة، وفحوصات التوزيع المباشر موثقة في [`sensor/docs/REPORT.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/REPORT.md).

## التثبيت

### المثبّت

يدعم المثبّت أنظمة دبيان، أوبونتو، نظام تشغيل Raspberry Pi، RHEL، فيدورا، وopenSUSE:```bash
curl -fsSL https://raw.githubusercontent.com/stamparm/maltrail/master/install.sh | sudo sh

يقوم بتثبيت التبعيات، وإنشاء نسخة مُدارة تحت /opt/maltrail، والتحقق من المجموع الاختباري للمستشعر المُجمّع مسبقًا، وإنشاء حساب maltrail غير مميَّز، وتثبيت وحدات systemd، وإعداد دلائل السجلات والحالة، وتشغيل المستشعر والخادم. إعادة تشغيل المثبّت تقوم بترقية النسخة المُدارة.

راجع البرنامج النصي قبل تشغيله بصلاحيات مرتفعة. من نسخة موجودة، يُظهر التشغيل التجريبي الأوامر دون تغيير النظام:```bash sh install.sh --dry-run

خيارات التثبيت الشائعة:```bash
sh install.sh --role sensor      # Install only the sensor
sh install.sh --ref 3.1.1        # Install a release tag instead of master
sh install.sh --no-service       # Install without changing systemd
sh install.sh --dry-run          # Print commands without applying them
sh install.sh --uninstall        # Remove the managed installation; keep logs and state

لوحة التحكم متاحة على http://127.0.0.1:8338 بعد التثبيت. لاحظ أن HTTP_ADDRESS المرفقة هي 0.0.0.0، لذا فهي قابلة للوصول عبر كل واجهة، وليس فقط الحلقة المحلية — وبيانات الاعتماد الافتراضية هي admin / changeme!. غيّر USERS، واضبط HTTP_ADDRESS على 127.0.0.1 (أو ضع الخادم خلف وكيل عكسي مع TLS)، قبل أن يكون المضيف على شبكة غير موثوقة.

يمكن أن يستغرق البناء الأولي للمسار عدة دقائق. لا يكتشف المستشعر مطابقات المسار حتى يتوفر مجموعة مسارات صالحة. تشغّل وحدة systemd تحقق المستشعر -T قبل بدء التشغيل بحيث يتسبب نقص الصلاحيات، أو دليل سجلات غير قابل للكتابة، أو مجموعة مسارات غير صالحة في فشل بدء التشغيل بشكل مرئي.

يغطي إطار اختبار المثبّت حاويات Ubuntu وDebian وFedora وopenSUSE وAlpine. يستخدم Alpine musl ولا يستخدم ثنائي المستشعر glibc المُجمّع مسبقًا؛ قم ببناء المستشعر من المصدر هناك.

البناء من المصدر

يتطلب المستشعر Rust 1.74 أو أحدث، ورؤوس تطوير libpcap، وأدوات القدرات الخاصة بالنظام. يتطلب الخادم ومحدّث المسارات Python 3.6 أو أحدث.

قم بتثبيت حزم التوزيعة:```bash

Debian / Ubuntu / Raspberry Pi OS

sudo apt-get install cargo libpcap-dev libcap2-bin python3

RHEL / Fedora

sudo dnf install cargo libpcap-devel libcap python3

openSUSE / SLES

sudo zypper install cargo rust libpcap-devel libcap-progs python311

ثم قم ببناء والتحقق من صحة المستشعر:```bash
git clone --depth 1 https://github.com/stamparm/maltrail.git
cd maltrail

cargo build --release --manifest-path sensor/Cargo.toml

sudo setcap cap_net_raw,cap_net_admin=eip \
  sensor/target/release/maltrail-sensor

sudo install -d -o "$USER" -g "$(id -gn)" -m 750 /var/log/maltrail

sensor/target/release/maltrail-sensor -T
sensor/target/release/maltrail-sensor

ابدأ الخادم في طرفية أخرى أو على مضيف آخر:```bash python3 server.py

الملفات الثنائية الجاهزة للمستشعر `x86_64` و`aarch64` مرفقة بالإصدارات الحالية مع مجاميع اختبار SHA-256.
وهي تستهدف glibc 2.28 وتتطلب libpcap في وقت التشغيل. على الأنظمة القائمة على musl مثل
Alpine Linux، قم بالبناء من المصدر.

يُستخدم مستشعر Python المتقاعد فقط بواسطة أدوات المقارنة والتطابق. تتطلب تلك الأدوات إضافةً إلى ذلك
`pcapy-ng` ورؤوس تطوير Python الموضحة في
[`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md).

### Systemd

تقوم وحدتا `maltrail-server.service` و`maltrail-sensor.service` المرفقتان بتشغيل العمليتين كمستخدم
`maltrail` غير المميز. ينشئ Systemd `/var/log/maltrail` و`/var/lib/maltrail`، ويقيّد
الوصول إلى نظام الملفات، ويمنح المستشعر صلاحيتي `CAP_NET_RAW` و`CAP_NET_ADMIN`.

يقوم المثبّت بتكوين هذه الوحدات تلقائيًا. بالنسبة لتثبيت مصدري قائم، اتبع
إجراء الخدمة اليدوي في [`sensor/docs/INSTALL.md`](https://github.com/stamparm/maltrail/blob/master/sensor/docs/INSTALL.md).

تحقق من حالة الخدمة والسجلات باستخدام:```bash
systemctl status maltrail-sensor maltrail-server
journalctl -u maltrail-sensor -f

Docker

ابدأ النشر المزوَّد عبر Compose باستخدام:```bash docker compose -f docker/docker-compose.yml up -d

تكوين الحاوية، والتخزين، والصلاحيات، وفحوصات الصحة موثقة في
[`docker/README.md`](https://github.com/stamparm/maltrail/blob/master/docker/README.md).

## التكوين

يقرأ Maltrail ملف `maltrail.conf`، الذي يحتوي على إعدادات منفصلة لكل من `[Sensor]` و`[Server]`. يضع
المثبّت التكوين المُدار في `/etc/maltrail.conf`.

تشمل خيارات المستشعر شائعة الاستخدام:

| الخيار | الغرض |
| --- | --- |
| `MONITOR_INTERFACE` | واجهة أو واجهات الالتقاط؛ `any` يحدد جميع الواجهات المدعومة |
| `CAPTURE_FILTER` | مرشح الالتقاط BPF |
| `CAPTURE_FANOUT` | عدد مآخذ الالتقاط في Linux؛ الافتراضي هو واحد |
| `LOG_DIR` | دليل سجل الأحداث المحلي |
| `TRAILS_FILE` | قاعدة بيانات المسارات المُنشأة |
| `LOG_SERVER` | خادم أحداث Maltrail عن بُعد |
| `SYSLOG_SERVER` | وجهة أو وجهات CEF syslog |
| `LOGSTASH_SERVER` | وجهة أو وجهات Logstash JSON |
| `STATS_ADDRESS` | مستمع مقاييس Prometheus؛ معطّل ما لم يتم تكوينه |
| `UPDATE_PERIOD` | فترة تحديث المسارات |
| `USER_WHITELIST` | مؤشرات يديرها المشغّل ولا ينبغي أن تُطلق تنبيهات |
| `CUSTOM_TRAILS_DIR` | دليل المسارات الذي يديره المشغّل |

`PROCESS_COUNT` ينطبق على مستشعر Python المتقاعد. قم بتكوين عمال الالتقاط لمستشعر Rust
باستخدام `CAPTURE_FANOUT` بدلاً من ذلك.

قم بتشغيل فحص النشر بعد تغيير التكوين:```bash
sensor/target/release/maltrail-sensor -T

التحقق يتحقق من الإعدادات، والمسارات (trails)، وإدخالات القائمة البيضاء، ومرشح الالتقاط، والصلاحيات، وتخزين السجلات، ودعم التحديثات، وإعدادات العامل (worker). يتضمن التحقق الناجح أعدادًا إيجابية للمسارات وإدخالات القائمة البيضاء بدلاً من مجرد تأكيد وجود الملفات.

المسارات (Trails)

تُخزَّن المسارات كمؤشرات نصية عادية:```text trails/static/malware/ malware-related static trails trails/static/malicious/ malicious infrastructure trails/static/suspicious/ suspicious infrastructure and behavior trails/feeds/*.py public feed integrations

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

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

يجب أن تتضمن مساهمات المسارات المؤشر، والتصنيف، ومصدرًا قابلًا للتحقق. راجع [المساهمة](#contributing) قبل تقديم طلب سحب.

## الأحداث وواجهة برمجة التطبيقات

يسجّل Maltrail حدثًا واحدًا مفصولًا بمسافات لكل اكتشاف، باستخدام اقتباس CSV حيث تحتوي القيمة على مسافات:```text
"<time>" <sensor> <src_ip> <src_port> <dst_ip> <dst_port> <proto> <type> <trail> "<info>" <reference>

حقل type يحدد ما الذي تمت مطابقته، بما في ذلك DNS وIP وIPORT وURL وPATH وHTTP وUA وPORT وCERT. يحتوي حقل info على تصنيف الأثر، ويحدد reference القائمة الثابتة أو الخلاصة أو المصدر المخصص أو الاستدلال الذي أنتجه.

البحث عن المؤشرات

استخدم /check للاستعلام عن نطاق واحد أو عنوان IP أو عنوان URL:```bash curl 'http://127.0.0.1:8338/check?q=www.sub.evil.example'

I need the actual content of chunk 31 to translate it. Please provide the Markdown text you want translated.```json
{
  "query": "www.sub.evil.example",
  "found": true,
  "trail": "evil.example",
  "info": "asyncrat (malware)",
  "reference": "(static)"
}

يمكن أن يطابق بحث النطاق الفرعي النطاق الأصلي المدرج له. تتحقق عمليات بحث URL من host/path قبل التحقق من المضيف وحده. يقرأ الخادم قاعدة بيانات المسارات المعيّنة في الذاكرة ويلاحظ تحديثات المسارات دون إعادة تشغيل.

المسارات العامة الثابتة ومسارات التغذية متاحة دون مصادقة، بما يتوافق مع نقطة نهاية /trails التي تستخدمها أجهزة الاستشعار عن بُعد. تتطلب المسارات المخصصة جلسة مصرح بها؛ ويُبلَّغ عن البحث المخصص غير المصرح به كخطأ عدم تطابق. تظل بيانات الأحداث موثقة.

العمليات

المراقبة

استخدم maltrail-sensor -T كبوابة للنشر والتهيئة. تقوم وحدة systemd المرفقة بتشغيله كـ ExecStartPre.

عند تكوين STATS_ADDRESS، راقب على الأقل مقاييس Prometheus التالية:

المقياسالمعنى التشغيلي
maltrail_up == 0لا توجد عملية التقاط قيد التشغيل
زيادة maltrail_capture_dropped_totalحلقة الالتقاط تُسقط الحزم
زيادة maltrail_local_log_errors_totalتم إنتاج الأحداث لكن تعذر كتابتها محليًا
زيادة maltrail_remote_log_errors_totalتعذر تسليم الأحداث إلى وجهة بعيدة؛ مع DISABLE_LOCAL_LOG_STORAGE تُفقد
maltrail_trail_generation لا يتقدممجموعة المسارات النشطة لا يتم تحديثها
maltrail_log_dir_free_bytesالسعة المتبقية لتخزين الأحداث المحلي
زيادة maltrail_state_saturations_totalتم الوصول إلى حد حالة استدلالي
زيادة maltrail_throttle_evictions_totalجدول تقييد الأحداث عند الحد الأقصى، لذا تُجمَّع الأحداث أبكر من التكوين

يؤثر تشبع الحالة على الاستدلال المقابل؛ ويظل المطابقة الدقيقة للمسارات نشطة.

أرسل SIGHUP أو استخدم systemctl reload maltrail-sensor لطلب إعادة تحميل المسارات. يتم اكتشاف ملفات المسارات المحدثة بواسطة عملية أخرى تلقائيًا ونشرها إلى العمال دون إعادة تشغيل المستشعر.

يدعم مخزن الملاحظات المكثف (USE_CONDENSED_STORAGE، meta.sqlite) عروض الخادم للجدة والبحث بأثر رجعي. التوافق مع المستشعر المتقاعد موثق في sensor/docs/COMPATIBILITY.md.

الاحتفاظ بالأحداث

لا يقوم Maltrail بتدوير أو حذف سجلات الأحداث. يتحمل المشغلون مسؤولية تحديد الاحتفاظ، والأرشفة، والحذف وفقًا لمتطلبات التخزين والسياسة التنظيمية.

الممارسات الموصى بها:

  • أرسل نسخة الأحداث الدائمة إلى خادم Maltrail بعيد أو SIEM باستخدام LOG_SERVER، SYSLOG_SERVER، أو LOGSTASH_SERVER.
  • نبه على maltrail_log_dir_free_bytes بهامش كافٍ لمعدل الأحداث المتوقع.
  • قم بتدوير أو أرشفة أو إزالة السجلات اليومية المحلية باستخدام أدوات خارجية.
  • احتفظ بالملفات اللازمة لواجهة التقارير غير مضغوطة في LOG_DIR؛ وأرشف الملفات المضغوطة في مكان آخر.

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

التوثيق

المستندالمحتويات
sensor/docs/INSTALL.mdالتثبيت، والصلاحيات، والتهيئة، واستكشاف الأخطاء وإصلاحها
sensor/docs/ARCHITECTURE.mdالبنية الداخلية للمستشعر وتدفق البيانات
sensor/docs/COMPATIBILITY.mdالاختلافات المتعمدة عن مستشعر Python المتقاعد
sensor/docs/REPORT.mdالقياسات، والملفات الشخصية، ونتائج الاختبار
sensor/docs/ROADMAP.mdأعمال المستشعر المفتوحة
old/README.mdمستشعر Python المتقاعد، محتفظ به كمرجع تكافؤ

المساهمة

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

قم بتشغيل الفحوصات ذات الصلة قبل تقديم الكود. بوابة المستشعر الكاملة هي:```bash bash sensor/tools/check.sh

يقوم بتشغيل التنسيق، وClippy مع رفض التحذيرات، واختبارات التصحيح والإصدار، وإعادة تشغيل التكافؤ ضد
مستشعر Python المتقاعد. قم بتشغيل مجموعة خوادم Python باستخدام:```bash
bash tests/run.sh python3

المشروع

الترخيص

يُوزَّع Maltrail بموجب رخصة MIT. انظر LICENSE.

القائمون على الصيانة

الرعاة

العروض التقديمية والمنشورات

  • الاجتماع السابع والأربعون لـ TF-CSIRT، براغ، 2016 (الشرائح)
  • اكتشاف الهجمات على شبكتك باستخدام Maltrail، مجلة Linux Magazine، 2022 (المقال)
  • أفضل خلاصات استخبارات التهديدات السيبرانية، Silent Push، 2022 (المراجعة)
  • بحث حول نظام كشف حركة مرور الشبكة الخبيثة القائم على Maltrail، Nanotechnology Perceptions، 2024 (الورقة البحثية)

القائمة السوداء المشتقة

تُنشر قائمة تقتصر على النطاقات مشتقة من trails/static/malware على maltrail-malware-domains.txt. يمكن استخدامها كمدخل لأنظمة تصفية DNS، لكن يجب على المشغّلين مراجعتها واختبارها قبل تفعيل الحظر. قد تحتوي قوائم استخبارات التهديدات على نتائج إيجابية خاطئة أو مؤشرات غير مناسبة لكل بيئة.

تكاملات الطرف الثالث

الشكر والتقدير

  • Thomas Kristner
  • Eduardo Arcusa Les
  • James Lay
  • Ladislav Baco (@laciKE)
  • John Kristoff (@jtkdpu)
  • Michael Münz (@mimugmail)
  • David Brush
  • @Godwottery
  • Chris Wild (@briskets)
  • Keith Irwin (@ki9us)
  • Simon Szustkowski (@simonszu)

الفئات