/ مقالات
جدار حماية منزلي على OPNsense مع Suricata: دليلي العملي لأمن الشبكة المنزلية
منذ سنوات وأنا أدير جدار حماية منزلي مبنيًا على OPNsense، ومعه Suricata يعمل كنظام كشف تسلل (IDS) على حافة الشبكة. هذه ليست تجربة نظرية، بل هي البوابة التي تمر منها كل حزمة تدخل وتخرج من مختبري المنزلي. في هذا المقال أشرح كيف أفكر في أمن الشبكة المنزلية من منظور مهندس مراقبة وشبكات: ليس بشراء صندوق مغلق، بل ببناء طبقة رؤية أفتحها متى شئت، وأضبطها بيدي، وأربطها بلوحة تحكم واحدة تجمع كل شيء.
أغلب الأدلة تتوقف عند "ثبّت النظام واضغط التالي". أنا أهتم بالسؤال الأهم: لماذا نبني الأمور بهذا الشكل، وكيف نجعلها قابلة للصيانة على المدى الطويل دون أن تتحول شبكة المنزل إلى وحش لا يمكن تشخيصه.
لماذا اخترت OPNsense كجدار حماية منزلي
OPNsense توزيعة مفتوحة المصدر مبنية على FreeBSD، تعطيني تحكمًا كاملًا في قواعد الجدار، وتوجيه المسارات، والـVLANs، والـVPN، دون قيود ترخيص أو صناديق سوداء. بالنسبة لي، أهم ثلاث ميزات هي:
- واجهة API حقيقية: كل ما أفعله من الواجهة الرسومية أستطيع فعله برمجيًا، وهذا هو حجر الأساس لكل الأتمتة التي سأشرحها.
- سجلات غنية: سجلات الجدار، وعقود DHCP، وحالة البوابات (RTT والفقد)، كلها متاحة ويمكن سحبها وتحليلها.
- نظام إضافات ناضج: منه أشغّل Suricata و WireGuard وغيرها دون تركيب خدمات خارجية تثقل الحافة.
القاعدة التي أطبّقها: جدار الحماية مسار حَمّال (load-bearing). كل ما أضيفه عليه يجب أن يكون خفيفًا وقابلًا للتراجع عنه، لأن سقوطه يعني سقوط الإنترنت في البيت بأكمله.
Suricata كنظام كشف تسلل على الحافة
Suricata هو محرك كشف تسلل عالي الأداء يفحص حركة المرور مقابل مجموعات قواعد معروفة، ويولّد أحداثًا عند رؤية أنماط مشبوهة. أشغّله كإضافة داخل OPNsense على الواجهة المتصلة بالإنترنت، وأتركه في وضع الكشف (IDS) لا المنع (IPS) في البداية.
لماذا IDS قبل IPS
الفرق جوهري. في وضع IDS، Suricata يراقب وينبّه فقط. في وضع IPS، يصبح في مسار الحزمة ويستطيع إسقاطها. الإغراء أن تفعّل المنع فورًا، لكن أي قاعدة خاطئة (false positive) في وضع IPS تعني قطع خدمة حقيقية عن أجهزة المنزل. أنا أبدأ دائمًا بالكشف، أراقب ما يطلقه لأسابيع، أضبط القواعد وأستثني ما هو طبيعي في شبكتي، وبعد أن أثق بالإشارة أنقل قواعد مختارة فقط إلى المنع. الأمن الجيد لا يُقاس بعدد التنبيهات، بل بنسبة الإشارة إلى الضجيج.
نصيحة عملية: لا تفعّل كل مجموعات القواعد دفعة واحدة. ابدأ بالمجموعات المتعلقة بالبرمجيات الخبيثة وحركة القيادة والتحكم، ثم وسّع تدريجيًا. مجموعة قواعد ضخمة غير مضبوطة ستغرقك في تنبيهات لن تقرأها.
أتمتة كل شيء عبر واجهة OPNsense
هنا يبدأ الجزء الممتع. بدل الدخول إلى الواجهة يدويًا، كتبت أدوات تتحدث مع الـAPI لتسحب الحالة وتتصرّف بناءً عليها. ما أراقبه باستمرار:
- زمن ذهاب وإياب البوابة (RTT) ونسبة الفقد: مؤشر مبكر على مشاكل مزوّد الخدمة أو تشبّع الوصلة.
- سجلات الجدار: ما الذي يُمنع، ومن أي مصدر، وبأي وتيرة.
- عقود DHCP: جرد حي لما يتصل بالشبكة، حتى ألاحظ أي جهاز جديد لا أعرفه فورًا.
هذه البيانات لا تبقى في OPNsense وحدها. أجمعها في لوحة واحدة بنيتها بنفسي اسمها EmberEye: بوابة مراقبة للمختبر المنزلي تعمل على Docker، توحّد Proxmox و ntopng و NGINX و OPNsense و WireGuard خلف واجهة واحدة. تقنيًا هي FastAPI مع Next.js وقاعدة PostgreSQL و Redis خلف NGINX عكسي، مع مهام خلفية تسحب البيانات دوريًا، ودفع لحظي عبر WebSocket، ومحرك تنبيهات بقواعد وفترات تهدئة يرسل إلى Discord والبريد. الفكرة أن أرى صحة الشبكة والأمن في مكان واحد بدل التنقل بين عشر واجهات.
فلسفة التصميم: سلبي، إضافي، قابل للعكس، ومحصور
حين أردت رؤية أعمق لتدفقات الشبكة، بنيت طبقة مراقبة تدفّق منفصلة (مشروعي EmberScope) على مبدأ صارم فرضته على نفسي: كل إضافة يجب أن تكون سلبية (لا تعترض المسار)، إضافية (لا تعدّل ما يعمل)، قابلة للعكس (أستطيع إزالتها دون أثر)، ومحصورة بحدود موارد. هذا المبدأ هو ما يفرّق بين مختبر منزلي مستقر ومختبر يسقط كل أسبوع.
تطبيقًا لذلك، بدل تركيب خدمات جديدة على جدار الحماية، وسّعت Suricata العامل أصلًا ليصدر أحداث التدفق و HTTP و TLS و DNS بصيغة EVE. لا خدمات جديدة على الحافة، فقط استخراج قيمة أكبر مما يعمل بالفعل. ثم أضفت مستشعرًا ثانيًا على خادم بعيد (softflowd يصدّر IPFIX)، ووحّدت كل شيء في مسار ابتلاع واحد يطبّع كل تدفق إلى سجل قياسي واحد، ويثريه بمعلومات الموقع الجغرافي ونظام الترقيم (ASN). أخزّن النتيجة في مستودع أعمدة يحتفظ بالبيانات بمدة محددة ويولّد تجميعات دورية (دقيقة، ساعة، يوم).
نقطة مهمة في الأمن: نفق telemetry مخصص عبر WireGuard حيث المُجمّع هو من يتصل خارجًا، فلا أفتح أي منفذ وارد جديد في جدار الحماية. كل ثقب وارد هو سطح هجوم، وأفضل ثقب هو الذي لا يوجد.
من السجلات إلى تنبيهات لها معنى
البيانات بلا تنبيهات مجرد أرشيف. لذلك أبني ملفات أساس (baseline) ليلية لما هو طبيعي في شبكتي، ثم كواشف بسيطة وفعّالة: قفزة في الحجم (z-score)، أو اتصال صادر إلى دولة أو ASN لم أرَه من قبل، أو ارتفاع في عشوائية استعلامات DNS (مؤشر على أنفاق أو برمجيات خبيثة)، أو أنماط نبضية منتظمة توحي باتصال قيادة وتحكم. عند إطلاق أي منها يصلني تنبيه على Discord مع رابط مباشر للتدفق نفسه.
أضفت فوق هذا طبقة تحليل تربط بيانات ntopng و OPNsense وتساعدني في مطاردة التهديدات، بل وتقترح قواعد حظر على الجدار عند الحاجة. الهدف ليس أتمتة القرار الأمني بالكامل، بل تقليص الوقت بين "حدث شيء غريب" و"أنا أنظر إليه".
خلاصة لمن يريد أن يبدأ
لو أردت نصيحة واحدة: ابنِ جدار حماية منزلي على OPNsense، شغّل Suricata في وضع الكشف، وراقب قبل أن تمنع. اجعل كل إضافة سلبية وقابلة للعكس. لا تفتح منفذًا واردًا إلا لضرورة قصوى، واجعل الأنفاق تتصل خارجًا. حين تصل بياناتك إلى لوحة واحدة وتنبيهات لها معنى، ستكتشف أن أمن الشبكة المنزلية ليس منتجًا تشتريه، بل ممارسة تبنيها طبقةً فوق طبقة، وتفهم كل سطر فيها لأنك من كتبه.
