لماذا تنشر Wazuh على خادم VPS الخاص بك
يُصدر خادم Linux باستمرار إشارات أمنية: محاولات تسجيل الدخول عبر SSH، وتعديلات على ملفات النظام، وعمليات رفع الصلاحيات، والعمليات غير المعتادة. تقع هذه الأحداث في سجلات متفرقة — /var/log/auth.log وسجلات الحاويات والسجلات التطبيقية — دون أن يربطها أحد. نظام SIEM هو تحديداً الأداة التي تمركز هذه التدفقات وتحللها وتكشف الحوادث.
Wazuh هو المرجع مفتوح المصدر في هذا المجال. يعتمد على مدير (مركز الكشف) يستقبل البيانات من عملاء خفيفين مثبّتين على كل خادم من خوادمك. يتضمن المدير محرك تحليل القواعد، ومراقبة سلامة الملفات (FIM)، وكشف الثغرات، ولوحات متابعة الامتثال التنظيمي الجاهزة للاستخدام.
على خلاف Datadog SIEM أو Elastic SIEM السحابي، لا يفرض Wazuh رسوماً على الاستيعاب وتبقى بياناتك داخل بنيتك التحتية. هذا هو النهج الأمثل حين تدير عدة خوادم وتحتاج إلى تبرير وضعك الأمني — لمراجعة أو لعميل أو لمعرفة ما يجري فعلياً.
ما الذي يضيفه Wazuh فعلياً لبنيتك التحتية
- مركزة سجلات جميع خوادم Linux على لوحة تحكم واحدة: لا مزيد من الاتصال بـSSH من آلة إلى أخرى لقراءة
auth.log. - كشف الاختراق القائم على القواعد: محاولات القوة الغاشمة، ورفع الصلاحيات، وتعديلات الملفات الحساسة — مع تحليل متعدد المصادر.
- مراقبة سلامة الملفات (FIM) في الوقت الفعلي: أي تعديل على
/etc/passwdأو/etc/sudoersأو ثنائيات النظام يُطلق تنبيهاً فورياً. - قواعد الامتثال لـPCI-DSS وHIPAA وGDPR وNIST SP 800-53 مدمجة في مجموعة القواعد الافتراضية — كل تنبيه يُوسَم تلقائياً بضوابط تنظيمية المرتبطة به.
- كشف نشط عن الثغرات: يستعلم Wazuh قواعد بيانات CVE ويحدد الحزم المثبتة المعرّضة لثغرات معروفة.
- تكامل مع CrowdSec وFail2ban: يربط Wazuh ويؤرشف للامتثال، بينما يتصرف CrowdSec على المحيط — الأداتان تتكاملان دون تكرار.
- لا رسوم استيعاب: تحتفظ بالسجل التاريخي طالما سمح القرص بذلك.
المتطلبات الدنيا قبل البدء
نشر Wazuh على عقدة واحدة (مدير + فهرس + لوحة تحكم في ثلاث حاويات Docker) أكثر طلباً للموارد من أداة مراقبة بسيطة. فيما يلي الحد الأدنى الواقعي للاستخدام الإنتاجي.
للمدير (العقدة المركزية):
- 4 vCPU كحد أدنى، و8 vCPU للأسطول المؤلف من 10 خوادم أو أكثر.
- 8 جيجابايت RAM كحد أدنى للعقدة الواحدة. خطط لـ16 جيجابايت إن كنت تفهرس حجماً عالياً من الأحداث أو تدير أكثر من 50 عميلاً.
- 50 جيجابايت SSD كحد أدنى؛ 100 جيجابايت أو أكثر للاحتفاظ بسجل 90 يوماً.
- Ubuntu 22.04 LTS أو Debian 12 محدّثان.
- Docker Engine 24.0+ وDocker Compose v2 مثبّتان.
- اسم نطاق لعرض لوحة Wazuh عبر HTTPS بواسطة وكيل عكسي.
لكل عميل (على خوادمك الأخرى):
- العميل خفيف جداً: أقل من 64 ميجابايت RAM وأقل من 1% CPU في الوضع الطبيعي.
- متوافق مع Linux (Debian وUbuntu وAlmaLinux وRocky) وWindows وmacOS.
المنافذ التي يجب فتحها على المدير:
- 1514/UDP و1514/TCP: اتصال العميل بالمدير.
- 1515/TCP: تسجيل العملاء.
- 55000/TCP: واجهة برمجة Wazuh (وصول محلي فقط، لا تعرّض للعموم).
- 9200/TCP و9300/TCP: Wazuh Indexer (استخدام داخلي بين الحاويات).
- 443/TCP: لوحة Wazuh عبر الوكيل العكسي.
نشر Wazuh باستخدام Docker Compose: الإجراء الكامل
تجهيز الخادم وتثبيت Docker
حدّث النظام، ثم ثبّت Docker Engine وDocker Compose v2 من المستودع الرسمي:
apt-get update && apt-get upgrade -y curl -fsSL https://get.docker.com | sh docker --version && docker compose versionتحقق من أن
docker composev2 يستجيب (الأمر بدون شرطة). فعّل Docker عند التشغيل:systemctl enable --now docker.استنساخ مستودع Wazuh Docker الرسمي
ينشر Wazuh ملفات Docker Compose الرسمية في مستودع
wazuh/wazuh-docker. استنسخ الفرع المطابق للإصدار المستقر الحالي (v4.14.8 وقت كتابة هذا المقال):git clone https://github.com/wazuh/wazuh-docker.git -b v4.14.8 --depth 1 cd wazuh-docker/single-nodeيحتوي مجلد
single-nodeعلىdocker-compose.ymlالمُهيأ مسبقاً بثلاثة خدمات:wazuh.managerوwazuh.indexerوwazuh.dashboard.توليد شهادات TLS بين المكوّنات
يتطلب Wazuh شهادات TLS للتواصل بين المدير والفهرس ولوحة التحكم. يوفر المستودع ملف Compose مخصصاً لتوليدها:
docker compose -f generate-indexer-certs.yml run --rm generatorتُكتب الشهادات في
config/wazuh_indexer_ssl_certs/. هذه الخطوة مطلوبة مرة واحدة فقط؛ لتجديدها، أعد تشغيل الأمر ثم أعد تشغيل المجموعة.تشغيل مجموعة Wazuh
شغّل الحاويات الثلاث في الخلفية:
docker compose up -dيستغرق التشغيل الأول تنزيل الصور الرسمية (نحو 2 جيجابايت) وتهيئة الفهرس. انتظر 60 إلى 90 ثانية، ثم تحقق من أن الخدمات الثلاث في حالة
healthy:docker compose psإن بقي
wazuh.indexerفي حالةstartingبعد 3 دقائق، افحص سجلاته:docker compose logs wazuh.indexer | tail -50.تغيير كلمة المرور الافتراضية للوحة التحكم
بيانات الاعتماد الافتراضية للوحة Wazuh هي
admin/SecretPassword. غيّرها فوراً عبر واجهة OpenSearch Indexer:docker compose exec wazuh.indexer curl -sk -X PUT \ https://localhost:9200/_plugins/_security/api/account \ -u admin:SecretPassword \ -H 'Content-Type: application/json' \ -d '{"password": "كلمة_مرورك_الجديدة", "current_password": "SecretPassword"}'ثم حدّث المتغير
DASHBOARD_PASSWORDفيdocker-compose.ymlوأعد تشغيلdocker compose up -dلتستخدم لوحة التحكم كلمة المرور الجديدة.عرض لوحة التحكم عبر وكيل عكسي HTTPS
لا تعرّض لوحة التحكم مباشرة على المنفذ 443 دون وكيل عكسي. باستخدام nginx، أنشئ vhost يُعيد التوجيه إلى
https://127.0.0.1:5601مع تعطيل التحقق من الشهادة الموقّعة ذاتياً على الجانب العلوي:server { listen 443 ssl; server_name wazuh.your-domain.com; location / { proxy_pass https://127.0.0.1:5601; proxy_ssl_verify off; } }جدّد شهادة Let's Encrypt باستخدام Certbot. لا تعرّض المنافذ 9200 أو 55000 أو 1514/1515 للعموم — يجب فتح 1514-1515 فقط من عناوين IP خوادمك.
تثبيت عميل وتسجيله على خادم بعيد
على كل خادم Linux تريد مراقبته، ثبّت عميل Wazuh مشيراً إلى IP أو DNS للمدير. على Ubuntu/Debian:
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring \ --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && \ chmod 644 /usr/share/keyrings/wazuh.gpg echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | \ tee /etc/apt/sources.list.d/wazuh.list apt-get update && apt-get install -y wazuh-agentحدّد عنوان المدير في
/var/ossec/etc/ossec.conf(الوسم<address>)، ثم شغّل العميل وفعّله:systemctl daemon-reload systemctl enable wazuh-agent systemctl start wazuh-agentيظهر العميل في لوحة التحكم تحت Agents خلال 30 ثانية.
الإعداد بعد التثبيت: العملاء والقواعد ولوحات الامتثال
بمجرد تشغيل المجموعة وتوصيل العملاء الأوائل، ثلاثة تعديلات تُحسّن دقة التنبيهات بشكل ملحوظ.
تفعيل مراقبة سلامة الملفات (FIM). في إعدادات العميل (/var/ossec/etc/ossec.conf)، أضف المجلدات الحساسة في قسم <syscheck>:
<syscheck>
<frequency>43200</frequency>
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/var/www</directories>
</syscheck>كل تعديل في هذه المجلدات يُطلق تنبيهاً من المستوى 7 أو أعلى.
استكشاف لوحات الامتثال. في لوحة Wazuh، يعرض قسم Modules طُرقاً مُعدّة مسبقاً لـPCI-DSS وHIPAA وGDPR وNIST SP 800-53. يرث كل تنبيه تلقائياً وسوم الامتثال المحددة في قواعد XML للمدير.
ضبط حد مستوى التنبيه. الحد الافتراضي هو 3. لاستقبال التنبيهات المهمة فقط، عدّل /var/ossec/etc/ossec.conf على المدير وارفع الحد إلى 7 في قسم <alerts>:
<alerts>
<log_alert_level>7</log_alert_level>
<email_alert_level>9</email_alert_level>
</alerts>أعد تشغيل المدير بعد أي تعديل في الإعدادات: docker compose restart wazuh.manager.
تصليب بيئة النشر
بعض الإعدادات تُقلّص سطح هجوم المدير نفسه.
عزل المدير على VPS خاص أو على الأقل خلف جدار ناري يفتح المنافذ 1514-1515 فقط لعناوين IP عملائك — ليس على 0.0.0.0.
تفعيل مصادقة TLS المتبادلة بين العملاء والمدير بتوليد شهادات عملاء موقّعة من CA الداخلي بدلاً من التسجيل التلقائي. تُفصّل وثائق Wazuh الرسمية الإجراء تحت "Agent enrollment via the Wazuh manager API".
تشفير أحجام Docker التي تحتوي على فهرس OpenSearch والإعدادات — خاصة إن كان المدير على VPS مشترك.
مراقبة المدير نفسه: ثبّت عميل Wazuh على VPS الذي يُشغّل المدير للكشف عن أي تعديل في صور Docker أو ملفات الإعداد.
استكشاف الأخطاء: الأخطاء الشائعة
فيما يلي الأخطاء الخمسة الأكثر شيوعاً عند نشر Wazuh مع Docker، مع الرسائل الدقيقة والحلول.
1. max virtual memory areas vm.max_map_count [65530] is too low
يتطلب فهرس OpenSearch 262144 على الأقل. أضف هذا السطر في /etc/sysctl.conf على المضيف (وليس داخل الحاوية): vm.max_map_count=262144، ثم طبّق بـsysctl -p. هذا أكثر الأخطاء شيوعاً على VPS جديد.
2. بقاء wazuh.indexer في حالة starting إلى أجل غير مسمى
افحص السجلات أولاً (docker compose logs wazuh.indexer). إن رأيت bootstrap checks failed، فالسبب غالباً vm.max_map_count (انظر أعلاه) أو نقص في الذاكرة. إن رأيت certificate not found، أعد توليد الشهادات.
3. ظهور العميل بحالة Disconnected في لوحة التحكم
تحقق من أن المنفذ 1514 مفتوح للدخول على المدير وأن عنوانه مُعيَّن بشكل صحيح في إعدادات العميل. اختبر الاتصال: nc -zv <IP_MANAGER> 1514.
4. ERROR: [agent_auth] Unable to create ssl context
لا يمكن للعميل التحقق من شهادة TLS للمدير. تأكد من أن ossec.cfg يشير إلى اسم DNS وليس IP المجردة إن كنت تستخدم شهادة مُسمّاة.
5. Too many open files في سجلات المدير
زِد حدود nofile على المضيف في /etc/security/limits.conf: * soft nofile 65536 و* hard nofile 65536، وأضف ulimits: nofile: soft: 65536 hard: 65536 لخدمة wazuh.manager في docker-compose.yml.
Wazuh ضمن منظومة الأمان لديك
Wazuh يبلغ أقصى فاعليته حين يتكامل مع ما لديك. بالإضافة إلى CrowdSec (الذي يحجب IP على مستوى الشبكة)، يُغطي جانبَي المحيط والعمق. مع Fail2ban يضيف التحليل والأرشفة للامتثال التي لا يستطيع Fail2ban إنتاجها وحده. وإن كانت لديك بالفعل بيئة Grafana + Prometheus، يُتمّم Wazuh مراقبة النظام بطبقة أمنية: Prometheus يخبرك أن CPU عند 90%، وWazuh يخبرك لماذا.
تصليب خادمك يُحدّد وضعاً أمنياً ثابتاً، وWazuh هو المراقبة المستمرة التي تتحقق من صموده عبر الزمن.
لاستضافة مدير Wazuh على بنية تحتية تتحكم في مستوى أمانها، اطّلع على كيف تُهيكل ServOrbit أمان بنيتها التحتية.