
SuricataLog v1.1.6
تحليل، تصفية، وتصور سجلات Suricata eve.json باستخدام أدوات CLI للتنبيهات، التدفقات، DNS، والحمولات. يتضمن برنامجًا تعليميًا لتعلم Suricata واختبار القواعد.
SuricataLog
عندما بدأت تعلّم كيفية استخدام Suricata، سرعان ما وجدت أنني بحاجة إلى أداة لفحص ملف eve.json؛ معظم الدروس والوثائق المنشورة كانت تقترح تثبيت حزمة (stack) لإنجاز المهام التالية:
- تخزين السجلات في موقع مركزي
- تسوية البيانات وإثراء الأحداث، خاصة التنبيهات
- استخدام واجهة أمامية لاستكشاف البيانات
وهو أمر مفيد جداً، لكن ماذا لو كنت بحاجة فقط إلى فحص سريع للأحداث؟
عاجلاً أم آجلاً ستصاب بـالملل الشديد من فعل هذا:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog هي مجموعة من الأدوات/النصوص البرمجية لتحليل وعرض ملفات سجل Suricata (مثل /var/log/suricata/eve.json).
لا يُعد تنسيق Eve JSON معقدًا للغاية، لذلك كتبت بعض النصوص البرمجية التي تتضمن الميزات التي اعتقدت أنها ستكون أكثر فائدة لتحليل شبكة منزلي.
وكمكافأة، كتبت تجربة تعلمي على شكل دليل تعليمي يمكنك استخدامه لتتعلم عن Suricata وكذلك كيفية اختباره.
التثبيت من PIP
قبل أن تفعل أي شيء آخر، تأكد من أن بيئتك جاهزة للعمل:
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade pip setuptools wheel
التثبيت من Pypi.org
pip3 install --upgrade SuricataLog
التثبيت من المصدر
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade build
python3 -m build
pip3 install dist/SuricataLog-X.Y.Z-py3-none-any.whl
تثبيت المطور
هل تريد المساهمة؟ أو وجدت خللاً وتعتقد أنه يمكنك تقديم تصحيح؟ رائع! إليك ما يمكنك فعله للتشغيل في وضع التطوير:
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
pip install --upgrade pip
python -m pip install --upgrade build
pip install textual-dev
pip install --editable .
تشغيل اختبارات الوحدة سهل جداً بعد ذلك:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
إذا فشلت اختبارات الوحدة، فهذا على الأرجح هو أول مكان لإصلاح المشكلة.
أوصي أيضاً بتشغيل وحدة التحكم النصية (textualize console) ومراقبة رسائل الكونسول:
# textual console
textual console --exclude SYSTEM --exclude EVENT
ثم في طرفية أخرى:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
سيؤدي ذلك إلى طباعة رسائل التصحيح على وحدة التحكم (يمكنك استبعادها إذا أعدت تشغيل الكونسول باستخدام '--exclude DEBUG')
إنشاء صورة Docker
يرجى مراجعة DOCKER.md لمزيد من التفاصيل.
تشغيل النصوص البرمجية
بمجرد تثبيت كل شيء في البيئة الافتراضية الخاصة بك، يجب أن تكون قادراً على استدعاء النصوص البرمجية
يمكنك معرفة التطبيقات التي تم تثبيتها باستخدام الإكمال التلقائي، بعد تفعيل البيئة الافتراضية:
eve_[tab][tab]
وإذا قمت بتثبيت ملحق الإكمال التلقائي لـ Bash فستحصل أيضاً على بعض الاقتراحات للخيارات.
محلل بسيط لسجلات EVE
من الأفضل أن ترى بنفسك (تذكر: استخدم --help لمعرفة الخيارات المدعومة)
تنسيق جدول:

eve_log --timestamp '2015-01-01 10:41:21.642899' --formats TABLE test/eve.json
تقارير جاهزة باستخدام eve_json.py
(suricatalog) [josevnz@dmaf5 SuricataLog]$ eve_json --help
usage: eve_json [-h] [--nxdomain | --payload | --flow | --netflow NETFLOW | --useragent] eve [eve ...]
This script is inspired by the examples provided on [15.1.3. Eve JSON 'jq' Examples](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html) A few things: * The output uses colorized JSON
positional arguments:
eve Path to one or more /var/log/suricata/eve.json file to parse.
optional arguments:
-h, --help show this help message and exit
--nxdomain Show DNS records with NXDOMAIN
--payload Show alerts with a printable payload
--flow Aggregated flow report per protocol and destination port
--netflow NETFLOW Get the netflow for a given IP address
--useragent Top user agent in HTTP traffic
ألقِ نظرة على بعض الأمثلة أدناه:
NXDOMAIN

eve_json --nxdomain test/eve.json
PAYLOAD

eve_json --payload ~/Downloads/eve.json
FLOW

eve_json --flow test/eve_udp_flow.json
NETFLOW

eve_json --netflow 224.0.0.251 test/eve_udp_flow.json
USERAGENT

eve_json --useragent test/eve.json
تشغيل تطبيقات eve_* على المتصفح

يمكنك تشغيل تطبيقات Suricata Log على المتصفح باستخدام الغلاف eve_server:
# عرض تقرير التدفق على ملف eve.json
eve_server --application eve_json -- --flow ~/eve.json
# عرض تقرير NX domain
eve_server --application eve_json -- --nxdomain ~/eve.json
# فحص سجلات eve.json
eve_server --applications eve_log -- ~/eve.json
تحتاج إلى تمرير '--' لإخبار الخادم بأن هذه الخيارات تنتمي إلى eve_* الأساسي الذي تريد استدعاءه.
التشغيل من Docker
من الممكن أيضاً تشغيل SuricataLog من حاوية Docker. يرجى الاطلاع على DOCKER.md لمزيد من التفاصيل.
التشغيل باستخدام uv
إذا كان لديك uv، يمكنك ببساطة فعل الآتي:
uvx --from SuricataLog eve_log /var/log/suricata/eve.json
uvx --from SuricataLog eve_json --useragent /var/log/suricata/eve.json
uvx --from SuricataLog eve_server --application eve_json -- --flow /var/log/suricata/eve.json
لقد وصلتك الفكرة.
الإكمال التلقائي لـ Bash
حاولت بكل جهد اتباع 8.6 Programmable Completion
لقد زودتك بإكمال تلقائي للخيارات الأكثر شيوعاً. يمكنك معرفة كل الخيارات بتمرير '--help' لأي من النصوص البرمجية.
تثبيت أوامر الإكمال التلقائي
يمكنك تثبيت الإكمال التلقائي لـ Bash لجميع نصوص SuricataLog. فقط شغّل 'eve_autocomplete' واتبع التعليمات:
eve_autocomplete --help
الإصدارات المدعومة
أعمل على هذا المشروع في وقت فراغي ولا يمكنني دعم كل إصدار من مجموعات Linux/ Python الموجودة. هذه هي بيئة الاختبار الحالية لدي، وقد تتغير دون إشعار مسبق
| SuricataLog | مدعوم | نظام التشغيل | Python | Suricata |
|---|---|---|---|---|
| <= 0.8 | لا | NA | < 3.8 | 6.04 |
| 0.9+ | لا | fedora 37 | => 3.11.4 | 6.04 |
| 0.9+ | لا | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 |
| 0.9+ | لا | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 |
| 1.0.3+ | نعم | fedora 40 | => 3.11.4 | 7.0.6 |
يمكنك بحرية:
- تقديم تصحيحات بميزات جديدة وإصلاحات للأخطاء.
- فتح تقارير الأخطاء. كن دقيقاً قدر الإمكان، وإلا فلن يكون لدي خيار سوى إغلاقها.