
تطبيق Python لتصفية ونقل سجلات Zeek إلى Elastic/OpenSearch+Humio. يمكن لهذا التطبيق أيضًا إخراج سجلات JSON خالصة إلى stdout لمزيد من المعالجة!
يقوم هذا التطبيق المكتوب بلغة Python بتحويل سجلات Zeek بصيغة ASCII TSV و JSON إلى صيغة التحميل المجمّع JSON الخاصة بـ ElasticSearch.

هل تريد عرض سجلات Zeek متعددة لنفس معرّف الاتصال (uid) أو معرّف الملف (fuid)؟ إليك النتائج من files.log و http.log و conn.log لـ uid واحد:

يمكنك تنفيذ البحث على الشبكات الفرعية على نوع 'addr' الخاص بـ Zeek:

يمكنك إنشاء رسوم بيانية للسلاسل الزمنية، مثل هذا الرسم البياني لـ NTP و HTTP:

يمكن تحديد الموقع الجغرافي لعناوين IP باستخدام خيار سطر الأوامر -g:

عمليات التجميع بسيطة وسريعة:

سيعمل هذا التطبيق "بشكل مباشر" عندما تتغير تنسيقات سجلات Zeek. يقرأ المنطق أسماء الحقول والأنواع المرتبطة بها لإعداد التعيينات (mappings) بشكل صحيح في ElasticSearch.
سيتعرّف هذا التطبيق على السجلات المضغوطة بصيغة gzip أو غير المضغوطة. يفترض هذا التطبيق أنك قمت بإعداد ElasticSearch على localhost على المنفذ الافتراضي. إذا لم يكن لديك ElasticSearch، يمكنك إخراج JSON إلى stdout باستخدام خياري سطر الأوامر -s -b لمعالجته بواسطة تطبيق jq.
يمكنك إضافة حقل فرعي من نوع keyword إلى حقول النص باستخدام خيار سطر الأوامر -k. هذا مفيد لعمليات التجميع في Kibana.
إذا كان Python مثبتًا بالفعل على نظامك، فلا يوجد ما يتعين عليك نسخه إلى جهازك سوى Elasticsearch وKibana وzeek2es.py إذا كنت تملك بالفعل مكتبة requests مثبتة.
بافتراض أنك تستوفي المتطلبات، فلا حاجة لأي تثبيت. فقط انسخ zeek2es.py إلى جهازك وشغّله باستخدام Python. بمجرد استيراد سجلات Zeek مع التوليد التلقائي لاسم الفهرس (أي أنك لم تقدم خيار -i)، ستجد فهارسك مسماة "zeek_zeeklogname_date"، حيث zeeklogname هو اسم سجل مثل conn وdate بتنسيق YYYY-MM-DD. عيّن نمط فهرس Kibana ليطابق zeek* في هذه الحالة. إذا سمّيت الفهرس باستخدام الخيار -i، فستحتاج إلى إنشاء نمط فهرس Kibana يطابق نظام التسمية الخاص بك.
إذا كنت تقوم بترقية zeek2es، فيرجى الاطلاع على القسم الخاص بترقية zeek2es.
إذا كنت تستخدم Elastic v8.0+، فإنه يحتوي على الأمان مفعلاً افتراضيًا. يضيف هذا مطلبًا لاسم مستخدم وكلمة مرور، بالإضافة إلى HTTPS.
إذا كنت ترغب في أن تكون قادرًا على حذف الفهارس/تدفقات البيانات باستخدام أحرف البدل (كما توضح الأمثلة في هذا الملف التمهيدي)، فحرّر elasticsearch.yml بإضافة السطر التالي:```
action.destructive_requires_name: false
ستحتاج أيضًا إلى تعديل أوامر curl في ملف README هذا لتتضمن `-k -u elastic:<password>`
حيث يتم تعيين كلمة مرور المستخدم `elastic` بأمر مشابه للتالي:```
./bin/elasticsearch-reset-password -u elastic -i
يمكنك استخدام zeek2es.py مع خياري سطر الأوامر --user و --passwd لتحديد بيانات
اعتمادك إلى ES. يمكنك أيضًا توفير هذه الخيارات عبر وسائط سطر الأوامر الإضافية للنصوص البرمجية المساعدة.
ربما تكون أسهل طريقة لاستخدام هذا الكود هي عبر Docker. جميع الملفات موجودة في دليل docker.
أولاً، ستحتاج إلى تعديل الأسطر التي تحتوي على CHANGEME!!! في ملف .env لتلائم بيئتك.
ستحتاج أيضًا إلى تعديل كلمة مرور Elastic في docker/zeek2es/entrypoint.sh لتطابقها. يمكن العثور عليها بعد خيار --passwd.
بعد ذلك، يمكنك تغيير الدليل إلى دليل docker وكتابة الأوامر التالية لتشغيل
مجموعة zeek2es و Elasticsearch:```
docker-compose build
dockr-compose up
يمكنك الآن وضع السجلات في دليل `VOLUME_MOUNT/data/logs` (حيث تستخدم `VOLUME_MOUNT` الذي عيّنته في ملف `.env`).
عند إنشاء السجلات في هذا الدليل، سيبدأ zeek2es في معالجتها ودفعها إلى Elasticsearch.
يمكنك بعد ذلك تسجيل الدخول إلى https://localhost:5601 باستخدام اسم المستخدم وكلمة المرور اللذين عيّنتهما في ملف `.env`.
بشكل افتراضي، توجد شهادة موقّعة ذاتيًا، لكن يمكنك تغيير ذلك إذا قمت بتعديل ملفات docker compose. وبمجرد الدخول إلى Kibana، انتقل إلى Stack Management->Data Views وأنشئ عرض بيانات (data view) لـ `logs*` مع الطابع الزمني `@timestamp`.
الآن ستتمكن من الانتقال إلى Discover والبدء في البحث في سجلاتك! بياناتك دائمة في دليل `VOLUME_MOUNT/data` الذي عيّنته.
إذا أردت إزالة جميع البيانات، فقط نفّذ `rm -rf VOLUME_MOUNT/data`، مع استبدال الدليل الذي عيّنته في أمر الإزالة.
في المرة القادمة التي تشغّل فيها مجموعتك (cluster)، ستكون جديدة تمامًا لبيانات جديدة.
## ترقية zeek2es <a name="upgradingzeek2es" />
معظم عمليات الترقية تكون بسيطة مثل نسخ ملف [zeek2es.py](https://github.com/corelight/zeek2es/blob/master/zeek2es.py) الأحدث فوق الملف القديم. في بعض الحالات، قد يتغير خط أنابيب الإدخال في ES (ingest pipeline) المطلوب لخيار الأمر `-g` أثناء الترقية. لذلك، يُنصح بشدة بحذف [خط أنابيب الإدخال](#esingestpipeline) لديك قبل تشغيل إصدار جديد من zeek2es.py.
### ES Ingest Pipeline <a name="esingestpipeline" />
إذا كنت بحاجة إلى [حذف خط أنابيب الإدخال في ES "zeekgeoip"](https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-pipeline-api.html) المستخدم لتحديد المواقع الجغرافية لعناوين IP مع خيار الأمر `-g`، يمكنك القيام بذلك إما بيانيًا عبر Kibana's Stack Management->Ingest Pipelines أو عبر هذا الأمر الذي سيقوم بذلك نيابةً عنك:```
curl -X DELETE "localhost:9200/_ingest/pipeline/zeekgeoip?pretty"
يوصى بشدة بتنفيذ هذا الأمر كلما قمت بتحديث نسختك من zeek2es.py.