
ماسح ضوئي متعدد المحركات للبرمجيات الخبيثة على Linux بخمس مراحل كشف (MD5، نمط HEX، YARA، ClamAV، إحصائية)، مع مراقبة inotify في الوقت الفعلي، وعزل، وتنبيهات متعددة القنوات
ماسح برمجيات خبيثة لنظام لينكس — كشف متعدد المراحل للتهديدات (MD5، SHA-256، HEX، YARA، تحليل إحصائي)، تكامل مع ClamAV، مراقبة فورية عبر inotify، عمليات عزل/تنظيف/استعادة، وتنبيه متعدد القنوات (البريد الإلكتروني، Slack، Telegram، Discord).
(C) 2002-2026, R-fx Networks <[email protected]>
(C) 2026, Ryan MacDonald <[email protected]>
مرخّص بموجب GNU GPL v2
محرك فحص أصلي أسرع 43x — تمت إعادة كتابة خط أنابيب الفحص الأصلي بالكامل باستخدام معالجة متوازية على دفعات. قياس أداء واقعي على حوالي 10,000 ملف:
| الإصدار | المدة | الملفات | الإصابات |
|---|---|---|---|
| v1.6.6 | 1,217s | 9,931 | 35 |
| v2.0.1 | 28s | 9,931 | 35 |
أصبحت مطابقة التواقيع MD5 و HEX تستخدم الآن grep المجمّع مع عمال Aho-Corasick المتوازيين،
مما يلغي الحمل الناتج عن تجميع الأنماط لكل ملف وحوالي 500,000 عملية fork فرعية لكل فحص.
اضبط عدد العمال المتوازيين عن طريق scan_workers (الافتراضي: auto).
من أبرز الميزات الأخرى: إدارة دورة حياة الفحص (--kill، --pause، --stop/--continue،
-L)، فحص تجزئات SHA-256 مع كشف تلقائي لعتاد وحدة المعالجة المركزية (scan_hashtype)،
فحص YARA أصلي (scan_yara=1)، تنبيه عبر Discord webhook، إصلاحات لتنبيهات Slack/Telegram،
دعم أنماط ClamAV البدلاء hex في المحرك الأصلي، وأكثر من 200 إصلاح للأخطاء عبر
قاعدة الكود.
انظر CHANGELOG للحصول على التفاصيل الكاملة.
./install.sh
maldet -a /home/?/public_html
maldet -r /home/?/public_html 2
maldet -co scan_yara=1 -a /home/?/public_html
maldet -q SCANID
maldet -m users
maldet -u
---
## 1. مقدمة
بنية LMD، ومراحل الكشف، والأنظمة الأساسية المدعومة.
Linux Malware Detect (LMD) هو ماسح برامج ضارة لنظام Linux صدر بموجب ترخيص GNU GPLv2، وهو مصمّم للتعامل مع التهديدات التي تواجه بيئات الاستضافة المشتركة. يستخدم بيانات التهديدات من أنظمة كشف التسلل على حافة الشبكة لاستخراج البرامج الضارة التي تُستخدم فعليًا في الهجمات، ويولّد توقيعات للكشف عنها. بالإضافة إلى ذلك، تُشتق بيانات التهديدات من إرسالات المستخدمين عبر ميزة LMD checkout ومن موارد مجتمع البرامج الضارة.
يركّز LMD على فئات البرامج الضارة التي غالبًا ما تفوتها منتجات مكافحة الفيروسات التقليدية: قذائف PHP، وأدوات حقن JavaScript، والأبواب الخلفية المشفرة بـ base64، وروبوتات IRC، وغيرها من تهديدات طبقة تطبيقات الويب التي تستهدف حسابات مستخدمي الاستضافة المشتركة بدلاً من البنية الداخلية لنظام التشغيل.
**مراحل الكشف**
- مطابقة تجزئة ملفات MD5 لتحديد التهديدات بدقة
- مطابقة أنماط HEX عبر محرك grep الدفعي الأصلي مع عمال متوازيين
- فحص التوقيعات المركبة (csig) بمنطق بولياني متعدد الأنماط (AND/OR/عتبة)، ومطابقة غير حساسة لحالة الأحرف، ومطابقة واسعة (UTF-16LE)، وبدل فجوات محدودة
- فحص قواعد YARA الأصلي مع دعم كامل للوحدات والقواعد المخصصة
- تحليل إحصائي لأطوال السلاسل النصية لكشف التهديدات المشوشة (base64, gzinflate)
- تكامل ClamAV لتغطية موسعة عبر توقيعات ClamAV التي يحتفظ بها LMD
**الفحص والمراقبة**
- فحص جميع الملفات، أو الملفات المعدّلة مؤخرًا، أو الملفات من قائمة
- مراقبة الملفات في الوقت الفعلي عبر inotify الخاصة بالنواة (أحداث إنشاء/تعديل/نقل)
- فحص رفع HTTP عبر خطاف ModSecurity2 `inspectFile`
- فحص في الخلفية للعمليات واسعة النطاق دون مراقبة
- تصفية regex للإدراج/الاستبعاد لكل عملية فحص
**العزل والاستجابة**
- قائمة انتظار للعزل مع تخزين ملفات بدون صلاحيات
- عزل/استعادة مجمّع حسب معرف الفحص
- قواعد تنظيف خاصة بالتوقيعات لإزالة البرامج الضارة
- استعادة كاملة للملفات (المحتوى، المالك، الصلاحيات، mtime)
**التنبيهات والتقارير**
- تنبيهات بريد إلكتروني HTML + نص بتصميم rfxn الموحد (علامة تركوازية، إدخالات بطاقات)
- دعم ترحيل SMTP (TLS/SSL) للبيئات التي لا تحتوي على MTA محلي
- تنبيهات لكل إدخال عبر Slack Block Kit وTelegram MarkdownV2 وDiscord embed
- قوالب تنبيه قابلة للتخصيص عبر تجاوزات `alert/custom.d/`
- تقارير فحص مع تفاصيل الإصابات لكل ملف، وأنواع إصابات مرمّزة بالألوان
**البنية التحتية**
- ربط تلقائي لتوقيعات ClamAV لتغطية ثنائية المحرك
- مهمة cron يومية مع كشف تلقائي لأكثر من 12 لوحة تحكم استضافة
- التحكم في موارد وحدة المعالجة المركزية/الإدخال والإخراج (nice, ionice, cpulimit)
- تحديثات تلقائية للتوقيعات والإصدارات
- دعم وحدة خدمة systemd وسكربتات SysV init
### الأنظمة الأساسية المدعومة
يعمل LMD على أي توزيعة Linux تتوفر على bash والأدوات القياسية من GNU. الأنظمة التي تم اختبارها:
| المنصة | نظام الإقلاع | مسار إعداد الحزمة |
|----------|-------------|---------------------|
| RHEL / Rocky / AlmaLinux 8, 9, 10 | systemd | `/etc/sysconfig/maldet` |
| CentOS 6, 7 | SysV / systemd | `/etc/sysconfig/maldet` |
| Debian 10, 11, 12 | systemd | `/etc/default/maldet` |
| Ubuntu 20.04, 22.04, 24.04 | systemd | `/etc/default/maldet` |
| Gentoo | OpenRC | — |
| Slackware | SysV | — |
| FreeBSD | — | — (جزئي؛ بدون inotify) |
---
## 2. التثبيت
تثبيت LMD وترقيته وإزالته من النظام.
يتولّى السكربت المرفق `install.sh` جميع مهام التثبيت. ويتم تلقائيًا إنشاء نسخ احتياطية من التثبيتات السابقة.```bash
./install.sh
المثبّت:
/usr/local/maldetectmaldet في /usr/local/sbin//etc/cron.daily/maldetconf.maldet)، والتوقيعات المخصصة، وملفات التجاهل عبر الترقياتيتم حفظ التثبيتات السابقة في /usr/local/maldetect.bk{PID} مع رابط رمزي maldetect.last يشير إلى أحدث نسخة احتياطية.
المسارات الافتراضية:
/usr/local/maldetect/usr/local/sbin/maldet/etc/cron.daily/maldet/usr/lib/systemd/system/maldet.serviceجميع الخيارات الموجهة للمستخدم وإعداداتها الافتراضية. راجع man maldet(1) للمرجع الكامل.
ملف الإعداد الرئيسي هو /usr/local/maldetect/conf.maldet. جميع الخيارات معلّقة بشرح لتسهيل الإعداد. تستخدم الخيارات القيم 0/1 للتعطيل/التمكين ما لم يُذكر خلاف ذلك.
يمكن أيضًا تجاوز الإعدادات وقت التشغيل باستخدام علامة -co:```bash
maldet -co quarantine_hits=1,email_addr=[email protected] -a /home
### 3.1 الخيارات العامة
| المتغير | الغرض | الافتراضي |
|----------|---------|---------|
| `autoupdate_signatures` | تحديث التوقيعات تلقائيًا يوميًا عبر cron | `1` |
| `autoupdate_version` | تحديث إصدار LMD تلقائيًا يوميًا عبر cron | `1` |
| `autoupdate_version_hashed` | التحقق من تجزئة SHA-256 للملف التنفيذي LMD مقابل الإصدار الأساسي (يرجع إلى MD5) | `1` |
| `sigup_interval` | الساعات بين فحوصات تحديث التوقيعات التلقائية عبر مهمة cron مستقلة (`/etc/cron.d/maldet-sigup`)؛ 0 = معطّل | `6` |
| `cron_prune_days` | الأيام للاحتفاظ ببيانات الحجر الصحي/الجلسة/الملفات المؤقتة | `21` |
| `cron_daily_scan` | تفعيل الفحص التلقائي اليومي عبر cron | `1` |
| `scan_days` | الأيام للرجوع للخلف للبحث عن الملفات المعدلة في فحوصات cron اليومية | `1` |
| `import_config_url` | عنوان URL لتنزيل تجاوز الإعدادات عن بُعد | — |
| `import_config_expire` | انتهاء صلاحية ذاكرة التخزين المؤقت للإعداد المستورد (بالثواني) | `43200` |
| `sig_import_md5_url` | عنوان URL لتنزيل توقيعات MD5 المخصصة | — |
| `sig_import_hex_url` | عنوان URL لتنزيل توقيعات HEX المخصصة | — |
| `sig_import_yara_url` | عنوان URL لتنزيل قواعد YARA المخصصة | — |
| `sig_import_sha256_url` | عنوان URL لتنزيل توقيعات SHA-256 المخصصة | — |
| `sig_import_csig_url` | عنوان URL لتنزيل التوقيعات المركبة المخصصة | — |
| `session_legacy_compat` | إنشاء ملفات جلسات نصية قديمة إلى جانب TSV: `auto` (اكتشاف جلسات الصيغة القديمة)، `1` (دائمًا)، `0` (TSV فقط) | `auto` |
### 3.2 التنبيهات
| المتغير | الغرض | الافتراضي |
|----------|---------|---------|
| `email_alert` | تفعيل التنبيهات عبر البريد الإلكتروني بعد الفحوصات | `0` |
| `email_addr` | عنوان مستلم التنبيه | `[email protected]` |
| `email_subj` | قالب سطر موضوع البريد الإلكتروني | `maldet alert from $(hostname)` |
| `email_ignore_clean` | كتم التنبيهات عندما تم تنظيف جميع الإصابات | `1` |
| `email_panel_user_alerts` | إرسال تنبيهات مستخدمي اللوحة عند اكتشاف إصابة | `0` |
| `email_panel_from` | ترويسة From لتنبيهات مستخدمي اللوحة | `[email protected]` |
| `email_panel_replyto` | ترويسة Reply-To لتنبيهات مستخدمي اللوحة | `[email protected]` |
| `email_panel_alert_subj` | سطر الموضوع لتنبيهات مستخدمي اللوحة | `maldet alert from $(hostname)` |
| `email_format` | تنسيق البريد الإلكتروني: `text` أو `html` أو `both` | `html` |
| `smtp_relay` | عنوان URL لخادم SMTP الوسيط (مثل `smtps://smtp.gmail.com:465`) | — |
| `smtp_from` | عنوان المرسل للتسليم عبر SMTP الوسيط | — |
| `smtp_user` | اسم مستخدم مصادقة SMTP | — |
| `smtp_pass` | كلمة مرور مصادقة SMTP | — |
| `slack_alert` | تفعيل تنبيهات رفع الملفات إلى Slack | `0` |
| `slack_subj` | اسم الملف لرفع Slack | `maldet alert from $(hostname)` |
| `slack_token` | رمز Slack Bot API (نطاقات الصلاحية: `files:write`, `files:read`) | — |
| `slack_channels` | قائمة مفصولة بفواصل بأسماء أو معرّفات القنوات | `maldetreports` |
| `telegram_alert` | تفعيل تنبيهات Telegram | `0` |
| `telegram_bot_token` | رمز Telegram Bot API | — |
| `telegram_channel_id` | معرّف محادثة أو مجموعة Telegram | — |
| `discord_alert` | تفعيل تنبيهات Discord webhook | `0` |
| `discord_webhook_url` | عنوان URL لـ Discord webhook لتسليم التنبيهات | — |
### 3.3 خيارات الفحص
| المتغير | الغرض | الافتراضي |
|----------|---------|---------|
| `scan_hashtype` | خوارزمية التجزئة للمرحلة 1: `auto`, `sha256`, `md5`, `both` | `auto` |
| `scan_max_depth` | أقصى عمق دليل لأمر find | `15` |
| `scan_min_filesize` | أدنى حجم ملف للفحص | `24` bytes |
| `scan_max_filesize` | أقصى حجم ملف للفحص | `2048k` |
| `scan_hexdepth` | عمق البايت لمطابقة توقيعات HEX | `262144` |
| `scan_hex_chunk_size` | الملفات لكل دفعة صغيرة في فحص HEX+CSIG (النطاق: 1024-20480) | `10240` |
| `scan_csig` | تفعيل فحص التوقيعات المركبة (csig) (الوضع الأصلي فقط) | `1` |
| `scan_workers` | عمليات العامل المتوازية لتمريرات فحص MD5 وSHA-256 وHEX وCSIG | `auto` |
| `scan_cpunice` | أولوية Nice لعملية الفحص (من -19 إلى 19) | `19` |
| `scan_ionice` | أولوية فئة جدولة الإدخال/الإخراج IO (0-7) | `6` |
| `scan_cpulimit` | الحد الأقصى لاستخدام المعالج بالنسبة المئوية (0=معطّل) | `0` |
| `scan_ignore_root` | تخطي الملفات المملوكة لـ root في الفحوصات (لا يُطبَّق في وضع المراقبة افتراضيًا؛ راجع `monitor_scan_owner_filters`) | `1` |
| `scan_ignore_user` | تخطي الملفات المملوكة لمستخدمين محددين | — |
| `scan_ignore_group` | تخطي الملفات المملوكة لمجموعات محددة | — |
| `scan_user_access` | السماح للمستخدمين غير root بتشغيل الفحوصات | `0` |
| `scan_user_access_minuid` | أدنى UID لإنشاء دليل المستخدم --mkpubpaths | `100` |
| `scan_find_timeout` | المهلة الزمنية لتوليد قائمة ملفات find (0=معطّل، الحد الأدنى 60 ثانية، يُوصى بـ 14400=4 ساعات) | `0` |
| `scan_export_filelist` | حفظ نتائج find في tmp/find_results.last | `0` |
| `scan_tmpdir_paths` | مسارات الملفات المؤقتة القابلة للكتابة عالميًا المضمنة في فحوصات -a/-r | `/tmp /var/tmp /dev/shm /var/fcgi_ipc` |
| `string_length_scan` | تفعيل التحليل الإحصائي لطول السلاسل النصية | `0` |
| `string_length` | أدنى طول سلسلة نصية مشبوهة | `150000` |
| `scan_progress_log_interval` | الثواني بين نقاط تفتيش سجل التقدم أثناء الفحوصات الخلفية (0=معطّل) | `60` |
| `scan_meta_cleanup_age` | الساعات للاحتفاظ بملفات بيانات الفحص المكتملة/المنهية (0=معطّل) | `48` |
| `maint_compress_age` | الأيام قبل ضغط ملفات الجلسات المكتملة بصيغة gzip (0=معطّل) | `30` |
| `maint_archive_age` | الأيام قبل تجميع الجلسات المضغوطة في أرشيفات شهرية (0=معطّل) | `90` |
### 3.4 فحص YARA
يجري فحص YARA الأصلي استدعاء البرنامج الثنائي `yara` (أو `yr` من YARA-X) بشكل مستقل عن ClamAV، مع دعم وحدات YARA الكاملة والقواعد المترجمة وملفات القواعد المخصصة التي لا تستطيع مجموعة YARA الفرعية المحدودة في ClamAV معالجتها. وعند توفرهما معًا، يُفضَّل `yr` (YARA-X). وعند الضبط على `auto`، يتم تفعيل YARA الأصلي فقط عندما يكون ClamAV غير متاح ويتم العثور على برنامج yara/yr الثنائي، مما يمنع تقييم القواعد بشكل مكرر.
| المتغير | الغرض | الافتراضي |
|----------|---------|---------|
| `scan_yara` | تفعيل مرحلة فحص YARA الأصلية: `auto` (اكتشاف البرنامج الثنائي، الرجوع إلى ClamAV)، `0` (معطّل)، `1` (مفعّل) | `auto` |
| `scan_yara_timeout` | المهلة الزمنية بالثواني (0=بدون مهلة) | `300` |
| `scan_yara_scope` | نطاق القواعد عندما يكون ClamAV نشطًا أيضًا: `all` (فحص أصلي كامل) أو `custom` (القواعد المخصصة فقط بشكل أصلي، ويتولى ClamAV معالجة rfxn.yara) | `custom` |
| `sig_import_yara_url` | عنوان URL لتنزيل قواعد YARA المخصصة عند تحديث التوقيعات | — |
**قواعد YARA المخصصة** يمكن وضعها في موقعين، وكلاهما محفوظ عبر الترقيات:
- `sigs/custom.yara` — قواعد ملف واحد
- `sigs/custom.yara.d/` — دليل إدراج مباشر لملفات القواعد `.yar` و`.yara`
متوافق مع مجموعات قواعد خارجية مثل [YARA Forge](https://yarahq.github.io/) و[Signature Base](https://github.com/Neo23x0/signature-base). كما تُدعم القواعد المترجمة (مخرجات `yarac`) عبر `sigs/compiled.yarc`.
**الفحص الدفعي:** تستخدم إصدارات YARA 4.0+ وجميع إصدارات YARA-X خيار `--scan-list` لفحص ملفات الدُفعات بكفاءة. وتتراجع إصدارات YARA الأقدم تلقائيًا إلى الفحص لكل ملف على حدة.
فعّل في وقت التشغيل دون تعديل الإعدادات:```bash
maldet -co scan_yara=1 -a /home/?/public_html
يمكن استدعاء سكربت خطاف قابل للتهيئة بعد اكتمال الفحص، حيث يستقبل نتائج الفحص عبر الوسائط الموضعية، ومتغيرات البيئة LMD_*، واختياريًا JSON عبر stdin. لا يؤدي الخطاف أبدًا إلى إيقاف الفحص — يتم تسجيل حالات الفشل ولا تكون قاتلة. راجع maldet(1) للاطلاع على عقد الخطاف الكامل.
عند تفعيل الفحص عبر ClamAV (scan_clamscan=1 أو auto مع كشف ثنائي)، يختار LMD أفضل محرك ClamAV متاح وفقًا لترتيب الأولوية:
clamdscan عن بُعد (إذا كان scan_clamd_remote=1 وملف الإعداد موجودًا)clamd المحلية التي تعمل بصلاحيات الجذرclamd المحلية التي تعمل بصلاحيات غير الجذر (مع --fdpass)clamscan (احتياطي، أبطأ)يتم ربط توقيعات LMD تلقائيًا كروابط رمزية إلى أدلة بيانات ClamAV بواسطة install.sh، مما يمنح ClamAV الوصول إلى توقيعات LMD من نوع MD5 (rfxn.hdb) وHEX (rfxn.ndb) وYARA (rfxn.yara).
بوابة التحقق من التوقيعات: قبل نشر التوقيعات المحدّثة إلى أدلة بيانات ClamAV، يتحقق LMD منها عبر clamscan -d مقابل دليل مرحلي. إذا فشل التحقق، تتم إزالة توقيعات LMD الحالية من مسار ClamAV لمنع قواعد البيانات التالفة من تعطيل ClamAV. لا يتم إرسال إشارة إعادة التحميل SIGUSR2 إلى clamd إلا عندما يجتاز دليل بيانات ClamAV واحد على الأقل عملية التحقق (المشكلة #467).
| المتغير | الغرض | الافتراضي |
|---|---|---|
scan_clamscan | تفعيل ClamAV كمحرك فحص: auto (كشف الثنائي وقت التشغيل)، 0 (معطّل)، 1 (مفعّل) | auto |
تتجاوز المصادر اللاحقة القيم السابقة:
internals/internals.conf — المسارات الداخلية، اكتشاف الثنائيات، تعريفات عناوين URLconf.maldet — الإعدادات الموجهة للمستخدمinternals/compat.conf — تعيينات المتغيرات المهملة/etc/sysconfig/maldet أو /etc/default/maldet — تجاوزات النظام-co|--config-option — تجاوزات وقت التشغيلواجهة سطر الأوامر، ورموز الخروج، والأمثلة الشائعة. راجع man maldet(1) للحصول على المرجع الكامل للخيارات.```
usage: maldet [OPTION] [ARGUMENT]
SCANNING: -a, --scan-all PATH scan all files in path (wildcard: ?) -r, --scan-recent PATH DAYS scan files created/modified in last X days -f, --file-list FILE scan files from a line-separated file list -b, --background run scan in the background
SCAN FILTERS: -i, --include-regex REGEX include only matching paths -x, --exclude-regex REGEX exclude matching paths -co, --config-option V=V,... override config options at runtime -U, --user USER run as specified user
MONITORING: -m, --monitor USERS|PATHS|FILE|RELOAD start inotify monitoring -k, --kill-monitor stop inotify monitoring
SCAN MANAGEMENT: -L, --list-active list active scans (text/json/tsv) --kill SCANID abort a running scan --pause SCANID [DURATION] pause a running scan (e.g., 2h, 30m) --unpause SCANID resume a paused scan --stop SCANID checkpoint and stop a running scan --continue SCANID resume a stopped scan from checkpoint --maintenance rotate histories, compress/archive old sessions
QUARANTINE & RESTORE: -q, --quarantine SCANID quarantine hits from scan -n, --clean SCANID clean malware from scan hits -s, --restore FILE|SCANID restore quarantined file(s) -qd PATH override quarantine directory for this run
REPORTING: -e, --report [SCANID|list|latest|hooks|active] view scan report --all show full history with -e list (default: recent) --format text|json|html|tsv set report output format (default: text) --mailto ADDRESS email report to address --json-report [SCANID|list] shorthand: --report --format json --alert-daily generate inotify monitor digest alert --digest fire unified digest (monitor + hook sources) -l, --log view event log
UPDATES: -u, --update-sigs [--force] update malware signatures -d, --update-ver [--force|--beta] update LMD version --cron-sigup cron sig update (internal use)
OTHER: -p, --purge clear logs, quarantine, temp data -c, --checkout FILE submit suspected malware to rfxn.com --test-alert TYPE CHANNEL test alert delivery (scan|digest, email|slack|telegram|discord) --mkpubpaths create per-user pub/ data directories --web-proxy IP:PORT set HTTP/HTTPS proxy -hscan, --hook-scan scan via service hook (internal use) -v, --version show version information -h, --help show detailed help
### 4.1 أكواد الخروج
| الرمز | المعنى |
|------|---------|
| `0` | النجاح، لا توجد إصابات بالبرمجيات الخبيثة |
| `1` | خطأ أو جميع مسارات الفحص غير موجودة |
| `2` | تم العثور على إصابات بالبرمجيات الخبيثة |
**أمثلة:**```bash
# Scan all files under user web roots
maldet -a /home/?/public_html
# Scan recent files with auto-quarantine and YARA enabled
maldet -co quarantine_hits=1,scan_yara=1 -r /home/?/public_html 2
# Background scan with email alert to specific address
maldet -b -co [email protected] -a /var/www
# View the most recent scan report
maldet -e
# Email a specific report
maldet --mailto [email protected] -e 050910-1534.21135
# Output scan report as JSON (pipe to jq for formatting)
maldet --format json -e 050910-1534.21135
# List all reports as JSON
maldet --format json -e list
# Shorthand JSON output (equivalent to --format json -e)
maldet --json-report 050910-1534.21135
# Restore all quarantined files from a scan
maldet -s 050910-1534.21135
مخرجات JSON: استخدم --format json -e أو --json-report لإخراج JSON منظم
(مخطط v1.2) مع بيانات وصفية للماسح الضوئي، وتفاصيل الفحص (المسار، الأوقات، أعداد الملفات)، وإدخالات لكل اكتشاف تتضمن اسم التوقيع، ومسار الملف، ونوع الاكتشاف، والمالك، والأذونات، وحالة العزل، إلى جانب ملخص يتضمن تصنيفات حسب النوع. يتم دعم كل من جلسات TSV والجلسات النصية القديمة؛ تتضمن الجلسات القديمة "source": "legacy" وتعرض الحقول المثراة غير المتاحة (hash، الحجم، المالك، إلخ) كقيمة null.
يمكن التحكم في عمليات الفحص طويلة الأمد على أنظمة الملفات الكبيرة (أكثر من 1M ملف) دون استخدام kill -9:```bash
maldet -L
maldet --format json -L
maldet --kill 260327-1509.25279
maldet --pause 260327-1509.25279 2h
maldet --unpause 260327-1509.25279
maldet --stop 260327-1509.25279
maldet --continue 260327-1509.25279
maldet --maintenance
**استئناف نقطة التحقق:** يكتب `--stop` ملف نقطة تحقق يسجّل مرحلة الفحص، وعدد الإصابات،
وخيارات الإعداد، وتقدّم كل عامل. يتحقق `--continue` من نقطة التحقق،
ويحذّر إذا تغيّرت التواقيع، ويعيد بناء قائمة الملفات من حالة نظام الملفات الحالية،
ويستعيد الإصابات السابقة، ويستأنف الفحص من المرحلة المتقطعة. تستأنف عوامل HEX على
مستوى الدفعة (خسارة حوالي 30 ثانية من العمل لكل عامل).
**دعم المحرك:** يدعم المحرك الأصلي (عوامل HEX/CSIG/hash) و`clamscan` المستقل
جميع عمليات دورة الحياة. يدعم ClamAV القائم على الخفي (`clamdscan`/`clamd`)
`--kill` فقط — يتم رفض `--pause` و`--stop` برسالة خطأ لأن
حالة الإدخال/الإخراج للخفي غير شفافة ومشتركة مع عملاء آخرين.
---
## 5. خيارات التجاهل
استبعاد المسارات وأنواع الملفات والتواقيع من الفحص والمراقبة.
تتحكم أربعة ملفات تجاهل في ما يُستبعد من الفحص:
| الملف | الصيغة | الغرض |
|------|--------|---------|
| `ignore_paths` | مسارات مفصولة بأسطر | استبعاد المجلدات أو الملفات من الفحص |
| `ignore_file_ext` | امتدادات مفصولة بأسطر | استبعاد امتدادات الملفات (`.js`, `.css`) |
| `ignore_sigs` | أنماط مفصولة بأسطر | تخطّي التواقيع المطابقة (regex، مطابقة سلسلة فرعية) |
| `ignore_inotify` | مسارات حرفية مفصولة بأسطر | استبعاد أحداث مراقبة inotify |
توجد جميع ملفات التجاهل تحت `/usr/local/maldetect/`.
**أمثلة:**```
# ignore_paths
/home/user/public_html/cgi-bin
# ignore_file_ext
.js
.css
# ignore_sigs
base64.inject.unclassed
# ignore_inotify (user-owned — your additions only)
/home/user/public_html/cache/
backup-
# ignore_inotify.defaults (LMD-managed — refreshed on every upgrade)
# Ships under /usr/local/maldetect/internals/ with curated defaults
# for systemd-private tmpdirs, MariaDB temp tables, Redis, ClamAV, etc.
# Do NOT edit — add your own entries to ignore_inotify instead.
ملاحظة: تُعامَل إدخالات ignore_sigs كأنماط regex ممتدة وتُطابَق كسلاسل فرعية. الإدخال php.shell سيقمع php.shell وphp.shell.v2 و{YARA}php.shell.backdoor، إلخ. استخدم ^php\.shell$ للمطابقة التامة. الحرف . يطابق أي حرف في regex؛ قم بتهريبه كـ \. للإشارة إلى نقطة حرفية.
فحص يومي آلي، وتنقية البيانات، وتحديثات التواقيع.
تؤدي وظيفة cron المثبتة في /etc/cron.daily/maldet ثلاث مهام:
cron_prune_days (الافتراضي: 21)autoupdate_signatures وautoupdate_version مفعّلين)scan_days يومًا، الافتراضي: 1)يكتشف الفحص اليومي تلقائيًا لوحات التحكم المثبتة ويضبط مسارات الفحص وفقًا لذلك:
إذا كان وضع المراقبة نشطًا، يتم تخطي الفحوصات اليومية ويتم إصدار تقرير يومي بأحداث المراقبة بدلاً من ذلك.
بالنسبة لمسارات الفحص المخصصة، استخدم ملف الخطاف /usr/local/maldetect/cron/custom.cron. لتجاوزات الإعدادات الخاصة بـ cron، استخدم /etc/sysconfig/maldet (RHEL) أو /etc/default/maldet (Debian) أو /usr/local/maldetect/cron/conf.maldet.cron.
يوفر سكربت المراقبة الأسبوعي (/etc/cron.weekly/maldet-watchdog) تحديثات توقيع احتياطية مستقلة عندما يكون cron الأساسي معطلًا أو قديمًا.
مراقبة ملفات في الوقت الفعلي مع inotify النواة، وتنبيهات التجزئة، وإدارة المشرف.
تستخدم مراقبة الملفات في الوقت الفعلي نظام inotify الفرعي في النواة لاكتشاف أحداث إنشاء الملفات وتعديلها ونقلها. يتطلب نواة تحتوي على CONFIG_INOTIFY_USER (قياسي في جميع النوى الحديثة).```bash
maldet -m users
maldet -b -m users
maldet -m /home/mike,/home/ashton
maldet -m /root/monitor_paths
maldet -k
**كيف يعمل:**
`maldet -m` يشغّل عملية مراقبة (supervisor) في الواجهة الأمامية افتراضيًا. تدير عملية المراقبة عملية فرعية `inotifywait` وتتعامل مع استعادة الأعطال، وإعادة تحميل الإعدادات، وتنبيهات الملخص. استخدم `-b` لتشغيل المراقب كعملية خلفية (daemon) والعودة فورًا.
1. `monitor_init()` يُنشئ مراقبات inotify على جميع الملفات الموجودة تحت المسارات المراقَبة
2. يتم وضع أحداث الملفات في قائمة انتظار وفحصها دفعاتيًا كل `inotify_sleep` ثانية (الافتراضي: 15)
3. تتم إعادة تحميل الإعدادات كل `inotify_reloadtime` ثانية (الافتراضي: 3600)
4. يتم ضبط `max_user_watches` و `max_user_instances` في النواة تلقائيًا للأداء الأمثل
5. إذا تعطّل `inotifywait`، تقوم عملية المراقبة بإعادة تشغيله مع تراجع أسي (2، 4، 8، 16، 32 ثانية)؛ بعد 3 إخفاقات متتالية تخرج عملية المراقبة
**تنبيهات الملخص (Digest alerts)** تُرسل دوريًا على الفاصل الزمني المحدد بواسطة `digest_interval` (الافتراضي: `24h`). إذا تجاوز عدد الإصابات منذ آخر ملخص حد `digest_escalate_hits`، يتم إرسال تنبيه تصعيد فوري (الافتراضي: `0`، معطّل).
**مسارات إضافية:** لمراقبة مسارات إضافية دون تعديل `conf.maldet`، أضفها سطرًا واحدًا لكل مسار إلى الملف المشار إليه بواسطة `monitor_paths_extra` (الافتراضي: `/usr/local/maldetect/monitor_paths.extra`). يتم دمجها مع قائمة المراقبة الرئيسية عند كل إعادة تحميل للإعدادات.
عند استخدام وضع `users`، تتم مراقبة المجلدات الفرعية المطابقة لـ `inotify_docroot` فقط (الافتراضي: `public_html,public_ftp`)، بالإضافة إلى مجلدات النظام المؤقتة `/tmp` و `/var/tmp` و `/dev/shm`.
**ملفات التجاهل (inotify):** استثناءات المراقبة توحّد ملفين — ملف المستخدم `/usr/local/maldetect/ignore_inotify` والملف المُدار من LMD `/usr/local/maldetect/internals/ignore_inotify.defaults`. كلاهما مفصول بأسطر ويدعم تعليقات `#` والأسطر الفارغة. يقبل ملف المستخدم `ignore_inotify` صيغة POSIX ERE (تعبير نمطي موسّع) افتراضيًا — تعمل المراسي (`^`، `$`) والبدائل (`.*`، `.+`). لاستثناء مسار حرفي يحتوي على محارف خاصة بالتعبير النمطي، اسبق الإدخال بـ `literal:` (مثلًا `literal:/tmp/app.cache`). يُعامل الملف المُدار من LMD `ignore_inotify.defaults` كنصوص فرعية حرفية — يتم ترميز إدخالاته المنسقة تلقائيًا عند التحميل. يتم استبدال ملف الافتراضيات عند كل ترقية لـ LMD؛ أضف استثناءات خاصة بموقعك إلى `ignore_inotify` فقط.
---
## 8. نظام التوقيعات
أنواع التوقيعات، اصطلاحات التسمية، التحديثات، وملفات القواعد المخصصة.
يأتي LMD مع خمسة أنواع من التوقيعات:
| النوع | الملف | الصيغة | العدد |
|------|------|--------|-------|
| تجزئات MD5 | `sigs/md5v2.dat` | `HASH:SIZE:{MD5}sig.name.N` | ~14,801 |
| تجزئات SHA-256 | `sigs/sha256v2.dat` | `HASH:SIZE:{SHA256}sig.name.N` | CDN |
| أنماط HEX | `sigs/hex.dat` | `HEXSTRING:{HEX}sig.name.N` | ~2,054 |
| توقيعات مركّبة | `sigs/csig.dat` | `SUBSIG1\|\|SUBSIG2:signame` | CDN |
| قواعد YARA | `sigs/rfxn.yara` | صيغة YARA | ~783 قاعدة |
| YARA مُجمّع | `sigs/compiled.yarc` | مخرجات `yarac` | اختياري |
كما تتم صيانة توقيعات متوافقة مع ClamAV:
- `sigs/rfxn.hdb` — صيغة ClamAV MD5
- `sigs/rfxn.ndb` — صيغة ClamAV HEX
- `sigs/rfxn.hsb` — صيغة ClamAV SHA-256 (يتطلب ClamAV >= 0.97)
**اصطلاح تسمية التوقيعات:** `{TYPE}category.name.variant_number`
تشمل الفئات: `bin.` (ثنائي)، `c.` (لغة C)، `exp.` (استغلال)، `php.` (PHP)، `js.` (JavaScript)، `perl.` (Perl)، `html.` (تصيّد)، `base64.inject.`، `gzbase64.`
**بادئات الإصابات في تقارير الفحص:**
| البادئة | المصدر |
|--------|--------|
| `{MD5}` | تطابق تجزئة MD5 (المرحلة 1) |
| `{SHA256}` | تطابق تجزئة SHA-256 (المرحلة 1) |
| `{HEX}` | تطابق نمط HEX (المرحلة 2) |
| `{CSIG}` | تطابق توقيع مركّب (المرحلة 2.5) |
| `{SA}` | التحليل الإحصائي (طول السلسلة) |
| `{YARA}` | فحص YARA الأصلي (`scan_yara=1`) |
| `{CAV}` | محرك ClamAV (clamd/clamscan) |
### 8.1 تحديثات التوقيعات
يتم تحديث التوقيعات يوميًا عبر مهمة cron أو يدويًا:```bash
maldet -u # update signatures
maldet -u --force # force update even if current
يمكن إضافة التوقيعات المخصصة بثلاث صيغ، وكلها محفوظة عبر الترقيات:
يمكن تكوين روابط الاستيراد عن بُعد للتنزيل التلقائي أثناء تحديثات التوقيعات:
عزل الملفات المصابة بالبرمجيات الخبيثة واستعادتها وتنظيفها.
تُخزَّن الملفات المعزولة في /usr/local/maldetect/quarantine/ مع صلاحيات مضبوطة على 000. المسار الأصلي، والمالك، والصلاحيات، ووقت التعديل تُسجَّل في /usr/local/maldetect/sess/quarantine.hist لاستعادة كاملة.```bash
maldet -q SCANID
maldet -s SCANID
maldet -s /usr/local/maldetect/quarantine/config.php.23754
maldet -n SCANID
**تسمية ملفات العزل:** `FILENAME.INODE` (مثل: `config.php.23754`)
بالنسبة لعمليات الفحص غير الجذرية (مثل فحص رفع ModSecurity2)، تُخزَّن بيانات العزل تحت `/usr/local/maldetect/pub/USERNAME/quar/`. استخدم العلامة `-U` للتفاعل مع العزل غير الجذري:```bash
maldet -U nobody -s 112012-0032.13771
تبحث دالة التنظيف عن السكريبتات المسماة حسب التوقيع داخل دليل clean/. يستقبل كل سكريبت مسار الملف المصاب كوسيطة، ويجب عليه إزالة المحتوى الضار. بعد التنظيف، يُعاد فحص الملف — إذا كان لا يزال يُحدث إصابة (hit)، تُوضع علامة FAILED على عملية التنظيف.
لإنشاء قاعدة تنظيف للتوقيع php.cmdshell.r57، أضف ملفًا باسم clean/php.cmdshell.r57 يحتوي على أمر مثل sed -i مع النمط المناسب. تعيد عمليات التنظيف الناجحة الملف إلى مساره الأصلي ومالكه وصلاحياته.
أداة التنظيف هي وظيفة فرعية من العزل (quarantine)؛ يجب عزل الملفات (أو استخدام الخيار -n) حتى يتم تنفيذ التنظيف.
واجهة برمجة تطبيقات (API) لخطافات الخدمات الخاصة بـ ModSecurity وFTP وExim والتكاملات المخصصة.
يوفر LMD فحصًا للملفات في الوقت الفعلي لخدمات متعددة عبر واجهة hookscan.sh الموحدة. يتولى سكريبت واحد توزيع الأوضاع (mode dispatch) لكل من ModSecurity وpure-ftpd وProFTPD وExim والتكاملات العامة (المخصصة).
يتم تسجيل اكتشافات فحص الخطافات في سجل إصابات متجدد (hook.hits.log) بدلاً من إنشاء ملفات جلسة منفصلة لكل عملية فحص. تُدرج الاكتشافات في تنبيهات الملخص الدورية ويمكن عرضها عبر maldet --report hooks.
SecRequestBodyAccess On
SecTmpSaveUploadedFiles On # Required for ModSecurity >= 2.9
SecRule FILES_TMPNAMES "@inspectFile /usr/local/maldetect/hookscan.sh"
"id:1999999,phase:2,t:none,deny,log,auditlog,severity:2,
msg:'Malware upload blocked by LMD'"
يتم رفض التحميلات الخبيثة بإجراء deny وتسجيلها في سجل تدقيق ModSecurity. لا حاجة إلى وسيط وضع — `hookscan.sh` يضع الوضع الافتراضي على نمط ModSecurity من أجل التوافق مع الإصدارات السابقة. يستخدم كل من ModSecurity v2 و v3 (libmodsecurity) نفس عقد `popen()`.
### 10.2 pure-ftpd```bash
# pure-ftpd.conf (or command-line flags):
CallUploadScript yes
# Start the upload-script daemon:
pure-uploadscript -r /usr/local/maldetect/hookscan.sh -B
يتطلب pure-ftpd مُجمَّعًا مع --with-uploadscript. يتم اكتشاف الوضع تلقائيًا عبر متغير البيئة UPLOAD_VUSER. تُعزل الملفات المصابة بعد الرفع (إطلاق ونسيان — لا يمكن حظر عمليات الرفع، بل فقط معالجتها لاحقًا).
av_scanner = cmdline:
/usr/local/maldetect/hookscan.sh exim %s :
maldet: (.+):
maldet: (.+)
الحقول الثلاثة المفصولة بنقطتين هي: قالب الأمر، والتعبير النمطي للتفعيل، والتعبير النمطي لالتقاط الاسم. عند اكتشاف برمجية خبيثة، يرفض Exim الرسالة باستخدام اسم التوقيع المُلتقط.
### 10.5 واجهة برمجة التطبيقات العامة
للتكاملات المخصصة، والفحص الجماعي، واستخدام الأطراف الثالثة:```bash
# Single file scan
hookscan.sh generic /path/to/file
# Exit: 0 = clean, 1 = error, 2 = infected
# Stdout: CLEAN: /path, INFECTED: signame /path, ERROR: reason
# Batch scan from a file list
hookscan.sh generic --list /tmp/filelist.txt
# Batch scan from stdin
find /uploads -newer /tmp/marker -type f | hookscan.sh generic --stdin
مخرجات الدفعة تُنتج سطرًا واحدًا STATUS: PATH لكل ملف. رمز الخروج يعتمد على أسوأ نتيجة.
تخزَّن إعدادات فحص الخطاف (Hook scan) في conf.maldet.hookscan (اختياري — القيم الافتراضية مدمجة في السكربت). القيم الافتراضية المرجعية موجودة في conf.maldet.hookscan.default.
المتغيرات الأساسية:
شغّل maldet --mkpubpaths بعد التمكين لإنشاء أدلة بيانات لكل مستخدم لعمليات الفحص غير الجذر.
تحقّق من أن قنوات إيصال التنبيهات مُهيأة بشكل صحيح:```bash maldet --test-alert scan email # test per-scan email alert maldet --test-alert scan slack # test per-scan Slack alert maldet --test-alert digest email # test digest email alert maldet --test-alert digest telegram # test digest Telegram alert
تستخدم التنبيهات الاختبارية خط أنابيب العرض الفعلي مع بيانات اصطناعية. سطر الموضوع مسبوق بـ `[TEST]`. يضمن عزل القناة أن القناة المحددة فقط هي التي تُطلق.
### 10.8 ملخص Hook
يتم تلخيص اكتشافات Hook عبر تنبيهات ملخص دورية:```bash
# On-demand digest (reads all sources: monitor + hooks)
maldet --digest
# View hook scan activity
maldet --report hooks # last 24 hours
maldet --report hooks --last 7d # last 7 days
maldet --report hooks --mode modsec # filter by mode
تقوم وظيفة cron اليومية تلقائيًا بإطلاق ملخص hook عند وجود اكتشافات جديدة (يتم التحكم فيه بواسطة cron_digest_hook=1 في conf.maldet).
ربط LMD بالأدوات الخارجية وخطوط أنابيب الأتمتة والماسحات الضوئية التابعة لجهات خارجية.
يتم تلقائيًا إنشاء روابط رمزية لتوقيعات LMD إلى أدلة بيانات ClamAV بواسطة install.sh، مما يوفر تغطية بمحركين. اضبط scan_clamscan=auto (الافتراضي) للكشف التلقائي عن ClamAV. راجع 3.8 تكامل ClamAV لاختيار المحرك والتحقق من التوقيعات.
فعّل enable_statistic=1 مع elk_host وelk_port وelk_index لبث أحداث الفحص إلى Elasticsearch. راجع 3.10 تكامل ELK.
يدعم LMD أربع قنوات تسليم تنبيهات إضافية إلى جانب البريد الإلكتروني: Slack (Block Kit)، وTelegram (MarkdownV2)، وDiscord (تضمينات webhook)، وترحيل SMTP للبيئات التي لا تحتوي على MTA محلي. راجع 3.2 التنبيه للإعدادات.
مخرجات الفحص القابلة للقراءة آليًا لـ CI/CD والأتمتة:```bash maldet --format json -e SCANID # JSON report to stdout maldet --json-report list # list all scans as JSON
انظر `man maldet`(1) للحصول على مخطط JSON الخاص بالإصدار v1.2 (شكل موحد `{schema_version, scanner, host, reports[]}` عبر كل من `-e SCANID` و `-e list`).
### اكتشاف لوحات الاستضافة
يكتشف cron اليومي تلقائيًا أكثر من 12 لوحة تحكم استضافة ويضبط مسارات الفحص. انظر [6. Cron Daily](#6-cron-daily) للحصول على مصفوفة اللوحات الكاملة.
---
## الترخيص
يتم تطوير LMD ودعمه على أساس تطوعي بواسطة Ryan MacDonald [[email protected]].
يتم توزيع Linux Malware Detect (LMD) بموجب رخصة GNU العامة (GPL) الإصدار 2
بدون قيود على الاستخدام أو إعادة التوزيع. بيان حقوق النشر ورخصة GNU GPL
مضمّنان في ملف `COPYING.GPL`. يجب منح الفضل للأعمال المشتقة كما
تتطلب GNU GPL.
---
## الدعم
مستودع مصدر LMD موجود على: https://github.com/rfxn/linux-malware-detect
يمكن الإبلاغ عن الأخطاء وطلبات الميزات والأسئلة العامة عبر GitHub issues أو إرسالها إلى [email protected].
صفحة المشروع الرسمية موجودة على: https://www.rfxn.com/projects/linux-malware-detect/
| المتغير | الغرض | الافتراضي |
|---|
quarantine_hits | عزل البرامج الضارة المكتشفة تلقائيًا | 0 |
quarantine_clean | محاولة تنظيف البرامج الضارة من الملفات المعزولة | 0 |
quarantine_suspend_user | تعليق حساب cPanel أو إلغاء صلاحية shell عند الاكتشاف | 0 |
quarantine_suspend_user_minuid | الحد الأدنى لـ UID الذي يمكن تعليقه (يحمي حسابات النظام) | 500 |
quarantine_on_error | عزل الملفات عند إرجاع محرك الفحص خطأً | 1 |
| المتغير | الغرض | الافتراضي |
|---|
default_monitor_mode | وضع بدء تشغيل المراقب (users أو مسار إلى ملف)؛ فارغ = معطّل | "" |
inotify_base_watches | العدد الأساسي لمراقبات الملفات لكل مسار مستخدم | 16384 |
inotify_minuid | الحد الأدنى لـ UID لمراقبة المجلدات الرئيسية للمستخدمين | 500 |
inotify_docroot | الأدلة الفرعية المراد مراقبتها في المجلدات الرئيسية للمستخدمين | public_html,public_ftp |
inotify_sleep | عدد الثواني بين دفعات الفحص | 15 |
inotify_reloadtime | عدد الثواني بين عمليات إعادة تحميل الإعدادات | 3600 |
inotify_cpunice | أولوية nice لعملية المراقبة | 18 |
inotify_ionice | أولوية الإدخال/الإخراج لعملية المراقبة | 6 |
inotify_cpulimit | الحد الأقصى الصارم لوحدة المعالجة المركزية للمراقب (0=معطّل) | 0 |
digest_interval | الفاصل الزمني بين تنبيهات الملخص الدورية: 24h, 30m, 7d, 0 (معطّل) | 24h |
digest_escalate_hits | عتبة عدد الاكتشافات لتنبيه تصعيد فوري؛ 0 = معطّل | 0 |
cron_digest_hook | تفعيل مسح الملخص عبر خطاف cron.daily (يُطلق الملخص إذا وُجدت اكتشافات خطاف جديدة) | 1 |
monitor_paths_extra | مسار ملف مفصول بالأسطر يحتوي على مسارات مراقبة inotify إضافية | /usr/local/maldetect/monitor_paths.extra |
monitor_scan_owner_filters | تطبيق عوامل تصفية الملكية scan_ignore_root/scan_ignore_user/scan_ignore_group في وضع المراقبة؛ 0 (الافتراضي) = إيقاف — يفحص المراقب جميع الملفات بغض النظر عن المالك (يستعيد سلوك 1.6.6، ويصلح المشكلة #485)؛ 1 = تشغيل — تطبيق عوامل تصفية الملكية | 0 |
| المتغير | الغرض | الافتراضي |
|---|
post_scan_hook | مسار سكربت الخطاف (مملوك للجذر، غير قابل للكتابة عالميًا). لا يمكن تعيينه عبر -co | "" |
post_scan_hook_format | مستوى المخرجات: args, file, json (تراكمي) | args |
post_scan_hook_exec | وضع التنفيذ: async (غير مانع)، sync (انتظار) | async |
post_scan_hook_timeout | الثواني قبل إرسال SIGTERM (0=معطّل، الحد الأدنى 5) | 60 |
post_scan_hook_on | عامل تصفية نوع الفحص: all, cli, digest | all |
post_scan_hook_min_hits | الحد الأدنى لعدد الاكتشافات للإطلاق (0=دائمًا) | 1 |
| المتغير | الغرض | الافتراضي |
|---|
scan_clamd_remote | استخدام خادم clamd عن بُعد للفحص | 0 |
remote_clamd_config | مسار ملف إعدادات clamd عن بُعد | /etc/clamd.d/clamd.remote.conf |
remote_clamd_max_retry | أقصى عدد للمحاولات عند فشل clamd عن بُعد | 5 |
remote_clamd_retry_sleep | الثواني بين المحاولات | 3 |
| المتغير | الغرض | الافتراضي |
|---|
enable_statistic | تفعيل جمع إحصائيات مكدس ELK | 0 |
elk_host | مضيف TCP لإدخال ELK | — |
elk_port | منفذ TCP لإدخال ELK | — |
elk_index | اسم فهرس Elasticsearch | — |
| اللوحة | مسار الفحص |
|---|
| cPanel | /home?/?/public_html/ (+ جذور مستندات الوظائف الإضافية/النطاقات الفرعية) |
| Plesk | /var/www/vhosts/?/ |
| DirectAdmin | /home?/?/domains/?/public_html/, /var/www/html/?/ |
| Ensim | /home/virtual/?/fst/var/www/html/ |
| ISPConfig | /var/www/clients/?/web?/web, …/subdomains, /var/www |
| Virtualmin | /home/?/public_html/, /home/?/domains/?/public_html/ |
| ISPmanager | /var/www/?/data/, /home/?/data/ |
| Froxlor | /var/customers/webs/ |
| Bitrix | /home/bitrix/www/, /home/bitrix/ext_www/?/ |
| VestaCP / HestiaCP | /home/?/web/?/public_html/ (+ public_shtml, tmp, private) |
| DTC | ${conf_hosting_path:-/var/www/sites}/?/?/subdomains/?/html/ |
| النوع | الملف | الصيغة |
|---|
| MD5 مخصص | sigs/custom.md5.dat | مطابق لـ md5v2.dat |
| SHA-256 مخصص | sigs/custom.sha256.dat | مطابق لـ sha256v2.dat |
| HEX مخصص | sigs/custom.hex.dat | مطابق لـ hex.dat |
| CSIG مخصص | sigs/custom.csig.dat | مطابق لـ csig.dat |
| YARA مخصص | sigs/custom.yara | صيغة قواعد YARA |
| YARA مخصص (إدراج مباشر) | sigs/custom.yara.d/*.yar | ملفات قواعد YARA |
| YARA مُجمَّع | sigs/compiled.yarc | مخرجات yarac (اختياري) |
| المتغير | الغرض |
|---|
sig_import_md5_url | رابط توقيعات MD5 المخصصة |
sig_import_sha256_url | رابط توقيعات SHA-256 المخصصة |
sig_import_hex_url | رابط توقيعات HEX المخصصة |
sig_import_csig_url | رابط التوقيعات المركبة المخصصة |
sig_import_yara_url | رابط قواعد YARA المخصصة |
| Variable | Default | Description |
|---|
hookscan_timeout | 30 | مهلة الفحص بالثواني |
hookscan_fail_open | 1 | السماح بالملف عند حدوث خطأ في الفحص (0 = حظر) |
hookscan_escalate_hits | 0 | تنبيه فوري عند N إصابة خطاف في الساعة (0 = معطّل) |
hookscan_service_users | apache,nginx,... | معرّفات مستخدمي الخدمة المعفاة من قيد المجلد الرئيسي |
hookscan_user_rate_limit | 60 | أقصى معدل فحوصات في الساعة للمتصلين غير الجذر |
hookscan_user_show_signames | 1 | إظهار أسماء التوقيعات للمتصلين غير الجذر |
hookscan_list_max_bytes | 1048576 | الحد الأقصى لحجم ملف القائمة (1 ميجابايت) |
hookscan_list_max_entries | 10000 | الحد الأقصى لعدد الإدخالات في قائمة الملفات |
| مكوّن CXS | المكافئ في LMD |
|---|
cxscgi.sh | hookscan.sh modsec |
cxsftp.sh | hookscan.sh ftp |
| ProFTPD mod_exec to cxs | hookscan.sh proftpd |
cxs --file | hookscan.sh generic |
cxswatch | maldet --monitor |
/etc/cxs/cxs.conf | conf.maldet.hookscan |