رفع معرفات / NMS: Mikrotik و Suricata مع واجهة ويب

على ما يبدو ، لدي مثل هذه الكرمة: بغض النظر عن كيفية تنفيذ بعض الخدمات على مصدر مفتوح ، ستجد بالتأكيد مجموعة من الأدلة ، كل منها لن يعمل بشكل فردي ، ولن يبدأ الحل الجاهز أو يعجبه ، ماذا سيحدث -لا هضم ، وفي النهاية عليك أن تكتشف نفسك بنفسك.

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

نتيجةً لذلك ، لكي تكون قادرًا على تكرار الانجاز المثالي دون تكرار كل العذاب في المستقبل ، يجب عليك كتابة أوراق الغش خطوة بخطوة التي أشاركها معك.

حتى اليوم Mikrotik (RouterOS) ، Suricata 4.1 ، Elasticsearch + Filebeat + Kibana 6.5.

بدلا من الانضمام


الشروط:

  • Mikrotik على i386 في جهاز ظاهري على المضيف أ. جميع الواجهات على Mikrotik مبعثرة على شبكات محلية ظاهرية ، لدى المضيف واجهة شبكة فعلية واحدة.
  • موارد مجانية لـ IDS / IPS / NMS على المضيف B مع واجهة شبكة فعلية واحدة.
  • 20 ميغا بايت خارج القناة.
  • الرغبة في تلقي تحليلات حول حركة المرور عبر واجهة Mikrotik الخارجية.
  • الميزانية في روبل الفجل وكوبيك FIG.
  • كمية معينة من وقت الفراغ من المتاعب.

لن أتحدث هنا عن ماهية المعرفات / IPS / NMS ، ولماذا هي ضرورية وما يحدث. الجميع يعرف هذا بدوني ، ومن لا يعرف ذلك سيصمم google.

أيضا ، لن أبرر خياري بين Snort و Suricata لصالح الأخير. هذه مسألة ذوق.

ولكن شرح سطحي كيف يعمل:

Suricata يتلقى بطريقة أو بأخرى حركة المرور. هناك ثلاثة خيارات: أ) تمريرها من خلال نفسك في وضع المضمنة ، ب) الحصول على نسخة من حركة المرور من منفذ التبديل وج) تحليل مقالب مع حركة المرور. تقوم Suricata بتحليل حركة المرور المستلمة ، وبناءً على التحليل ، توفر بيانات حول ما وجدته هناك في هذه الحركة.

Suricata يمكن إصدار البيانات في JSON. وفقًا لذلك ، وبعد أن تم تنظيم بيانات مُهيكلة ، يمكن توفيرها لبعض الأنظمة للمعالجة والتنظيم والتحليل والتصور.
من أجل تحليل البيانات وتصورها ، حسب علمي ، دون أن أكون متخصصًا في هذا المجال ، فإن مكدس ELK مثالي. يتكون مكدس ELK في الأصل من Elasticsearch و Logstash و Kibana. تمت الآن إضافة Beat إليها (مجموعة من برامج الواجهة التي تعمل كوسيط بين مصدر البيانات و Logstash أو Elasticsearch). بالنظر إلى المستقبل ، أقول أنه لم يكن هناك Logstash ، لأن Beat تغذي البيانات تمامًا مباشرةً إلى Elasticsearch ، بينما تقوم Elasticsearch بتناولها تمامًا. يقوم Elasticsearch بنقل البيانات المعضلة إلى Kibana ، واجهة الويب لمجموع ELK بأكمله. يوفر Kibana ، باستخدام القوالب التي تم تمريرها إليه من قِبل Filebeat ، للمستخدم تصوراً للبيانات ، ما يسمى بـ Dashboards. بالنظر إلى حقيقة أن Elasticsearch و Logstash و Beat و Kibana هي ثمرة عمل منتج واحد ، فإن هذه المزرعة بأكملها مرتبطة جيدًا ببعضها البعض ، وعملية الربط موثقة جيدًا (وفقًا لمعايير المصدر المفتوح ، بالطبع).

وبالتالي ، بناءً على ما تقدم ، يمكن وصف المهمة على النحو التالي: الحصول على نسخة من حركة المرور من منفذ جهاز التوجيه ، ونقلها إلى Suricata ، وتلقي البيانات بتنسيق JSON من Suricata ، ونقلها إلى Filebeat ، بحيث تقوم بدورها بنقلها إلى Elasticsearch و ساعد Kibana في إنشاء عرضهم المرئي.

Mikrotik RouterOS


إذا كان لدي جهاز توجيه Mikrotik ، فلن تكون مشكلة النسخ المتطابق للمنفذ (النسخ المتطابق للمنفذ) على الإطلاق. سيتم تحديد كل شيء من خلال تمكين النسخ المتطابق لحركة المرور التي تمر عبر الواجهة الخارجية إلى أي منفذ مجاني من Mikrotik نفسه. إذا لم يكن هناك منفذ مجاني على Mikrotik ، يمكنك تمكين النسخ المتطابق للمنفذ على المفتاح. لكن في حالتي ، لم يكن لدى Mikrotik منافذ فعلية على الإطلاق ، واستقبل المنفذ الموجود على المفتاح حركة المرور من المضيف بأكمله ، والتي ، بالإضافة إلى Mikrotik ، كان هناك العديد من الأجهزة الافتراضية.

ثم قلت مرة أخرى عقليا: "شكرا لك يا Mikrotik!". شكرا على الشم المدمج في RouterOS. حسب التقاليد ، نحن نعمل بدون لقطات شاشة ، فقط أوامر وحدة التحكم.

افتح الجهاز في WinBox وقم بتشغيل جهاز الشم:

/tool sniffer set filter-interface=if-out filter-stream=yes streaming-enabled=yes streaming-server=192.168.1.253
/tool sniffer start


حدد بدلاً من if out-out اسم الواجهة التي تنوي منها اعتراض حركة المرور ، وبدلاً من 192.168.1.253 - عنوان IP الخاص بالجهاز حيث سيتم إرسال حركة المرور المعترضة عبر بروتوكول TZSP .

مع Mikrotik'om كل شيء.

سوريكاتا


بشكل عام ، أنا لا أترأس Linux ، لذا فأنا أحب توزيع البوب. حسنًا ، ربما يعجبني أكثر ديبيان الزاهد. لذلك بدأت به. حسنًا ، وبالطبع ، بسبب عدم وجود نظام تشغيل linux ، أردت أيضًا تثبيت الثنائيات من المستودع. التجمع دائما كسول بالنسبة لي. لذا ، إذا كان من الممكن اختيار دبيان ، - لا تختار . لا أتذكر الآن في أي مكان أواجه فيه مشكلة في تثبيت المزرعة بأكملها تحت ديبيان ، لكنه كان كذلك. والقصة اللاحقة كاملة حول تثبيت كل شيء تحت Ubunta.

تم إنشاء جهاز ظاهري رباعي النواة مزود بـ 4 مجموعات من ذاكرة الوصول العشوائي ، وتم تنزيل Ubuntu Server 18.04.1 LTS (x64) وتثبيته عليه

الاتفاق : يتم تنفيذ جميع الإجراءات الأخرى نيابة عن المستخدم الخارق ، لذلك إما تسجيل الدخول كجذر أو إضافة sudo إلى كل أمر.

نظرًا لأنني في كل مرحلة قمت بعمل لقطات ، ثم تراجعت إليها مرارًا وتكرارًا ، في النهاية ، أشعلت الكثير من مواطن الخلل مع مرور الوقت على المزامنة في جهاز افتراضي في الوقت الفعلي.
لذلك ، قمنا على الفور بتعيين المنطقة الزمنية الصحيحة وتزامن NTP:

systemctl start systemd-timesyncd
systemctl status systemd-timesyncd
dpkg-reconfigure tzdata


لضمان عدم وجود مشاكل تبعية عند تثبيت Suricata ، أضف مستودعات الكون إلى /etc/apt/sources.list :

nano /etc/apt/sources.list
...
deb archive.ubuntu.com/ubuntu الكترونية الكون الرئيسي
deb archive.ubuntu.com/ubuntu bionic-security الكون الرئيسي
deb archive.ubuntu.com/ubuntu bionic-Updates الكون الرئيسي

نضيف أيضًا المستودع ، حيث سنحصل على Suricata:
add-apt-repository ppa:oisf/suricata-stable

تحديث قاعدة بيانات الحزمة:
apt-get update

تثبيت Suricata:
apt-get install -y suricata

الخطوة التالية هي تعيين قواعد Suricata وتحديثها:
apt-get install -y python-pip
pip install pyyaml
pip install https://github.com/OISF/suricata-update/archive/master.zip


نبدأ في تحديث تحديث suricata نفسه :
pip install --pre --upgrade suricata-update

إن التشغيل بدون تكوين إضافي سيمنحنا مجموعة القواعد المفتوحة للتهديدات الناشئة:
suricata-update

للاطلاع على قائمة المصادر ، قم بما يلي:
suricata-update list-sources

تحديث مصادر القاعدة:
suricata-update update-sources

دعونا نرى ما تم تحديثه هناك في المصادر ، قم بتشغيله مرة أخرى:
suricata-update list-sources

نحن تشمل جميع المصادر المجانية:
suricata-update enable-source ptresearch/attackdetection
suricata-update enable-source oisf/trafficid
suricata-update enable-source sslbl/ssl-fp-blacklist


ومرة أخرى نقوم بتحديث القواعد:
suricata-update

تم تثبيت Suricata.

الآن تحتاج إلى الحصول على حركة المرور.

Trafr


Trafr هو تطبيق كتبه Mikrotik لتحويل TZSP المرور إلى pcap. التطبيق 32 بت ، لذلك لتشغيله سوف تحتاج إلى تمكين الدعم لتطبيقات 32 بت في Ubunta 64 بت:

dpkg --add-architecture i386
apt-get update && apt-get install -y libc6:i386


قم بتنزيل وتفريغ trafr :

wget http://www.mikrotik.com/download/trafr.tgz
tar xzf trafr.tgz


تأكد من اكتشاف حركة المرور:

./trafr -s

بعد مثل هذا الإطلاق ، كسر الإخراج الرمزي في وضع الرسوم في وحدة التحكم في الجهاز الظاهري ، واضطررت إلى إعادة تشغيل الكمبيوتر. لم تكن هناك مشاكل في الاتصال عن بعد عبر ssh إلى PuTTY.

إذا رأيت وميضًا غير منتظم على الشاشة ، فستتواصل حركة المرور ، ويلتقطه trafr . إذا كان الأمر كذلك ، فقم بنقل trafr إلى مكان إقامة دائم وتشغيله مع نقل حركة المرور التي تم التقاطها عبر خط الأنابيب مباشرةً إلى Suricata:

mv trafr /usr/local/bin/
/usr/local/bin/trafr -s | suricata -c /etc/suricata/suricata.yaml -r /dev/stdin


نحن الآن نتحقق من وصول حركة المرور إلى Suricata ، لذلك نقوم بما يلي في المحطة المجاورة:

tail -f /var/log/suricata/fast.log

يجب أن تشاهد التمرير الذكي لنص ذي معنى - سجل لاستقبال حركة مرور الميركات.

لن يكون الأمر خاطئًا أيضًا للتأكد من أن حركة مرور Suricata لا تستقبل فقط ، ولكن أيضًا تحلل:

tail -f /var/log/suricata/eve.json

هذا هو بالضبط إخراج الأحداث من Suricata بتنسيق JSON الذي سنقوم بتزويده إلى Filebeat.

Elasticsearch + Filebeat + Kibana 6.5


نقوم بتثبيت مفتاح PGP اللازم لاستخدام مستودع المرونة وتثبيت التبعيات اللازمة:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update && apt-get install -y openjdk-8-jre apt-transport-https wget nginx


يرجى ملاحظة أن جافا هو الإصدار 8. أي شيء أعلى من 8 غير معتمد. لذلك ، إذا تمكنت من تثبيت Java أحدث ، فقم بهدمه ووضع 8.

نتأكد من تثبيت Java كما ينبغي:

java -version

نحصل على النتيجة التالية تقريبًا:
نسخة جافا "1.8.0_191"
بيئة وقت تشغيل Java (TM) SE (إنشاء 1.8.0_191-b12)
خادم V-bit لخادم 64 بت من Java HotSpot (TM) (الإنشاء 25.191-b12 ، الوضع المختلط)

قم بإنشاء مستخدم وكلمة مرور للوصول إلى Kibana. بدلاً من المسؤول ، اختر شيئًا تفضله:

echo "admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

منذ أن تدور ELK على المضيف المحلي ، قم بتكوين الخادم الوكيل العكسي في nginx:

nano /etc/nginx/sites-available/kibana
الخادم
الاستماع 80 ؛

server_name suricata.server؛

auth_basic "الوصول المقيد" ؛
auth_basic_user_file /etc/nginx/htpasswd.users؛

الموقع /
proxy_pass localhost : 5601؛
proxy_http_version 1.1؛
proxy_set_header ترقية $ http_upgrade؛
proxy_set_header اتصال 'ترقية' ؛
proxy_set_header Host $ host؛
proxy_cache_bypass $ http_upgrade؛
}
}

rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana


أعد تشغيل nginx:

systemctl restart nginx

نضع Elasticsearch:

apt-get install -y elasticsearch

قم بتشغيل التشغيل التلقائي عند تحميل نظام التشغيل:

systemctl daemon-reload
systemctl enable elasticsearch.service


نطلق:

systemctl start elasticsearch.service

تحقق مما إذا كان قد ارتفع:

curl -X GET "localhost:9200/"

اعتمادًا على أداء قطعة الأجهزة الخاصة بك ، قد يستغرق بدء تشغيل ES بعض الوقت. إذا تم رفض الاتصال ، فقم ببساطة بإعادة الطلب وانتظر حتى نحصل على شيء مثل:
{
"الاسم": "lcZuxxm" ،
"Cluster_name": "elasticsearch" ،
"Cluster_uuid": "kmJHqJnlQe2Rk7F-CRi4EA" ،
"الإصدار": {
"الرقم": "6.5.1" ،
"Build_flavor": "افتراضي" ،
"Build_type": "deb" ،
"Build_hash": "8c58350" ،
"Build_date": "2018-11-16T02: 22: 42.182257Z" ،
"Build_snapshot": خطأ ،
"Lucene_version": "7.5.0" ،
"Minimum_wire_compatibility_version": "5.6.0" ،
"Minimum_index_compatibility_version": "5.0.0"
} ،
سطر الوصف: أنت تعرف ، للبحث
}

نضع كيبانا:

apt-get install -y kibana

قم بتشغيل التشغيل التلقائي عند تحميل نظام التشغيل:

systemctl daemon-reload
systemctl enable kibana.service


نطلق:

systemctl start kibana.service

يمكنك الآن الانتقال إلى 192.168.1.253 (بالطبع ، عنوان IP هو العنوان الذي تم تعيينه لجهازك باستخدام meerkat). يجب فتح صفحة غلاف Kibana.

نضع Filebeat:

apt-get install -y filebeat

قم بتشغيل التشغيل التلقائي عند تحميل نظام التشغيل:

systemctl daemon-reload
systemctl enable filebeat


نقوم بتشغيل وحدة Suricata ، التي تعد جزءًا من مجموعة وحدة Filebeat:

filebeat modules enable suricata

تثبيت الإضافات لسوريكاتا في Elasticsearch:

/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
/usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent

انظر UPD 22 مايو 2019.

إعادة تشغيل Elasticsearch:

systemctl restart elasticsearch.service

نقوم بإجراء التكوين الأولي لـ Filebeat ، وفي نفس الوقت نقوم بتحميل القوالب إلى Kibana:

filebeat setup -e

نتحقق من أن Filebeat قد عثر على /var/log/suricata/eve.json ويقوم بمعالجته. للقيام بذلك ، قم بتشغيل Filebeat في وضع إخراج البيانات مع علامة النشر :

filebeat -e -d "publish"

سينتج الإخراج الذي تم تنسيقه json في Filebeat نفسه أولاً ، ثم إخراج نص بسيط من سجلاته ، وفقط بعد فترة من الإخراج من Suricata ، لذلك انتظر وتأكد من أن كل شيء يعمل. بعد ذلك ، أجهض Filebeat وارجع إلى bash.

قم بتشغيل التشغيل التلقائي عند تحميل نظام التشغيل:

systemctl daemon-reload
systemctl enable filebeat.service


تشغيل Filebeat:

systemctl start filebeat.service

انتقل إلى Kibana ، حدد Dashboard من القائمة على اليسار ، وحدد filebeat- * الفهرس. حدد لوحة المعلومات مرة أخرى ، وحدد [Suricata] نظرة عامة على التنبيه من القائمة ، ويجب أن تحصل على شيء مثل هذا:

الصورة

اختياري


لا تنس تسجيل الدخول ، وبغض النظر عن مدى اتساع القرص الصلب ، فسيقوم Suricata بتسجيله بسرعة كبيرة:

nano /etc/logrotate.d/suricata
/var/log/suricata/*.log /var/log/suricata/*.json
{
أسبوعيا
تدوير 3
مفقود
nocompress
خلق
المخطوطات المشتركة
postrotate
/ bin / kill -HUP `cat /var/run/suricata.pid 2> / dev / null` 2> / dev / null || صحيح
endscript
}

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

/tool sniffer stop
:delay 30s
/tool sniffer start


الخاتمة


بصراحة ، لست راضيًا تمامًا عن استقرار الحزمة أعلاه. وهي: الأمر يستحق إعادة التشغيل ، وتبدأ المعجزات. مرة واحدة ، توقف كل شيء ما عدا زوجين عن معالجة قواعدي. اضطررت إلى إعادة تثبيت كل شيء. في المرة الثانية ، توقف Elasticsearch عمومًا عن تلقي البيانات من Filebeat ، واضطر إلى التراجع إلى لقطة الحالة قبل إعادة التشغيل.

أنا لم تحل هذه المشاكل حتى الآن.

بالإضافة إلى ذلك ، هناك خطط لتنفيذ IPS بناءً على عناوين IP للأشرار الذين تم تحديدهم بواسطة Suricata المنقولة إلى Mikrotik.

محدث : يتم إسقاط الاتهامات بعدم الاستقرار. استنتاجي حول إنهاء معالجة القواعد كان خاطئًا. في الواقع ، يرجع سبب الفراغ في Dashboard بعد إعادة التشغيل إلى حقيقة أن Filebeat و Elasticsearch بحاجة إلى وقت ملحوظ للغاية لتحليل ملف json متعدد الجيجابايت من الميركات. إذا قمت بفتح Dashboard مع الأحداث لفترة تتضمن تاريخ إنشاء ملف eve.json ، يمكنك أن ترى كيف تنمو أعمدة المخطط أثناء معالجة الملف. إلى جانب الأحداث التي تمت معالجتها ، تظهر التنبيهات في لوحة المعلومات المقابلة. بالإضافة إلى ذلك ، لم يعلق الشم في RouterOS على x86.

UPD 22 أيار (مايو) 2019 : بدءًا من Elasticsearch 6.7 ، تم تحويل المكونات الإضافية لـ ingest-geoip و ingest-user-agent إلى وحدات. وفقا لذلك ، يتم تخطي العنصر مع التثبيت الخاص بهم.

أيضًا ، عند الترقية ، تحصل على خطأ في بدء تشغيل Elasticsearch. سترى خطأ في السجلات:

قاعدة البيانات المتوقعة [GeoLite2-ASN.mmdb] غير موجودة في [/ etc / elasticsearch / ingest-geoip]

لاستعادة الأداء ، نقوم بتنفيذ:

/usr/share/elasticsearch/bin/elasticsearch-plugin remove --purge ingest-geoip

Source: https://habr.com/ru/post/ar431600/


All Articles