
مختبر Snort 3 IDS → IPS على Kali. قواعد كشف مخصصة + إنفاذ iptables ضد استطلاع ICMP، وفحوصات Nmap SYN، وهجمات Hydra لتخمين كلمات مرور FTP، والباب الخلفي vsftpd 2.3.4 (CVE-2011-2523).
نشر متكامل لـ Snort 3 بصفته نظامًا لكشف التسلل (مراقبة سلبية) ونظامًا لمنع التسلل (حظر نشط عبر iptables)، تم التحقق منه مقابل أربعة نواقل هجوم عبر شبكة افتراضية من ثلاث آلات على Kali Linux.
يُثبت المختبر الفارق التشغيلي بين الكشف والمنع عبر تشغيل سلسلة هجوم متطابقة من أربعة نواقل مرتين — الأولى ضد IDS يسجّل لكنه لا يستطيع الحظر، والثانية ضد طبقة IPS مكوّنة من IDS + iptables تُسقط الهجمات بشكل انتقائي مع الحفاظ على حركة المرور المشروعة.
| المكوّن | التفاصيل |
|---|---|
| المحلّل / الموجّه | Kali Linux — 3 محولات: eth0 WAN (192.168.10.143، NAT)، eth1 LAN1 (10.10.10.1، للمضيف فقط)، eth2 LAN2 (192.168.50.1، للمضيف فقط) |
| المهاجم | Kali Linux — eth0 على VMnet9 (10.10.10.10) — البوابة الافتراضية 10.10.10.1 |
| الهدف | Metasploitable 2 — eth0 على VMnet10 (192.168.50.10) — البوابة الافتراضية 192.168.50.1 |
| إصدار Snort | Snort++ 3.12.1.0-0kali1 (مثبّت على المحلّل) |
| أدوات الهجوم | Nmap 7.99، Hydra v9.6، إطار عمل Metasploit (msfconsole) |
| الافتراضية | VMware — VMnet9 = 10.10.10.0/24، VMnet10 = 192.168.50.0/24 (كلاهما للمضيف فقط) |
تُجبر كل حركة المرور بين المهاجم وMetasploitable على المرور عبر المحلّل، ما يجعله نقطة الاختناق الطبيعية للمراقبة والتنفيذ على حد سواء.
┌─────────────────────────┐
│ Analyzer / Router │
│ Kali + Snort 3 │
│ │
Attacker Kali ──VMnet9──┤ eth1: 10.10.10.1 │
10.10.10.10 │ │
│ eth0: 192.168.10.143 ───┼──> WAN (NAT)
│ │
Metasploitable 2 ─VMnet10┤ eth2: 192.168.50.1 │
192.168.50.10 │ │
└─────────────────────────┘
استبدل هذا الرسم ASCII بـ
screenshots/01-network-topology.pngبمجرد وضع الشكل في مكانه:Topology
ينفّذ المختبر على مرحلتين مع سلسلة هجوم متطابقة من أربعة نواقل في كل منهما:
ping لاكتشاف المضيفnmap -sS لتعداد المنافذ (1000 منفذ)المرحلة 1 (IDS) تشغّل Snort بشكل سلبي على المحلّل مع خمس قواعد مخصصة — لاحظ التنبيهات في الوقت الفعلي، وتأكد من أن الاستغلال يستمر على أي حال.
المرحلة 2 (IPS) تقترن Snort بطبقة تنفيذ iptables باستخدام قواعد إسقاط جراحية — تأكد من أن الهجمات محظورة بينما تبقى إمكانية ping عبر ICMP وتسجيل الدخول المشروع إلى FTP فعّالة.
MASQUERADE + FORWARD بحيث يوجّه المحلّل الحركة بين الشبكات الفرعية وإلى الشبكة الخارجية WAN — انظر scripts/router_config.sh.scripts/ping_check.sh قبل تثبيت Snort.يُثبَّت Snort عبر مدير حزم Kali (sudo apt install snort -y) ويُضبط في /etc/snort/snort.conf:
HOME_NET = "10.10.10.0/24,192.168.50.0/24"
EXTERNAL_NET = "any"
ips = {
enable_builtin_rules = true,
include = "/etc/snort/rules/local.rules",
variables = default_variables
}
alert_fast = { file = true, packet = false }
يغطي HOME_NET كلتا الشبكتين الفرعيتين الداخليتين، بحيث يعتبر Snort كل حركة المرور بين الشبكات الفرعية على المحلّل جديرة بالفحص. وينتج alert_fast تنبيهات مدمجة من سطر واحد (التسجيل لكل حزمة من شأنه توليد حجم هائل).
التحقق من الإعداد:
sudo snort -T -c /etc/snort/snort.conf
# Result: 652 rules loaded (5 custom text + 647 built-in), 0 warnings
خمس قواعد في /etc/snort/rules/local.rules (الملف الكامل في scripts/local.rules):
يعمل Snort في الوضع السلبي على كلتا الواجهتين الداخليتين:
sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 \
-A alert_fast -l /var/log/snort/
# Watch alerts in a second terminal:
sudo tail -f /var/log/snort/alert_fast.txt
يؤكد مخرج بدء التشغيل أن pcap DAQ configured to passive — يرى Snort كل حزمة لكنه لا يمكنه إسقاط أي منها أو تعديلها.
بعد تنفيذ scripts/attack_simulator.sh من المهاجم:
اكتشف IDS كل شيء ولم يوقف شيئًا. هذه هي الرسالة الجوهرية للمرحلة 1: IDS يعمل دون طبقة تنفيذ هو نظام إنذار، لا قفل. وبحلول الوقت الذي يقرأ فيه المحلل البشري التنبيهات، يكون المهاجم قد أصبح root بالفعل.
ملاحظة ثانوية: قواعد Snort المدمجة (116:408، 116:414) تُطلق على حركة بث DHCP — ليست خبيثة، لكن في نشر إنتاجي ستحتاج إلى قواعد كبت للحفاظ على سجل التنبيهات قابلًا للاستخدام.
تُنشر طبقة IPS عبر scripts/ips_setup.sh، والتي:
-D) لمواصلة التسجيلأُعيد تشغيل سكربت الهجوم نفسه من المهاجم:
أكّد فحصان يدويان التنفيذ الانتقائي:
ping -c 4 192.168.50.10 → 4 حزم مرسلة، 4 مستلمة، فقدان 0%ftp 192.168.50.10 ببيانات msfadmin:msfadmin → 220 (vsFTPd 2.3.4) … 230 Login successfulإثبات كمّي من عدّادات حزم iptables أثناء التشغيل: قُبلت 2051 حزمة، وأُسقطت 12 حزمة بقاعدة connlimit الخاصة بـ FTP، وقُبلت 808 حزم ICMP — تنفيذ انتقائي بالأرقام.
حتى في وضع IPS، واصل Snort إطلاق تنبيهات SID 1000002 / 1000003 على الحزم التي وصلت إلى نقطة الفحص السلبي الخاصة به قبل أن تُسقط iptables الحزم اللاحقة — ما يعني أن iptables توفّر التنفيذ بينما يوفّر Snort تسجيل التدقيق، إذ يعملان معًا.
نعم — كل واحد من SIDs 1000001–1000004 أُطلق بشكل صحيح أثناء محاكاة الهجوم:
:) التقط تسلسل بايتات الاستغلال الدقيق.لكن الكشف لا يعني المنع. فتح استغلال vsftpd شل Meterpreter بصلاحيات root بينما كانت كل التنبيهات تُطلق. محلل SOC يراقب IDS في الوقت الفعلي كان سيرى الاختراق — لكن مع كون المهاجم root بالفعل خلال ثوانٍ، لا يكفي التنبيه وحده. وهذا هو الجوهر التشغيلي لوجود IPS.
حقّق التنفيذ تخفيفًا كاملًا للهجمات دون أي تأثير ملحوظ على حركة المرور المشروعة. تأتي الفعالية من التصميم الجراحي للقواعد — كل قاعدة iptables تستهدف توقيعًا سلوكيًا، لا بروتوكولًا واسعًا:
connlimit لكل مصدر يحظر التوازي لأدوات القوة العمياء دون كسر FTP أحادي الجلسة.STRING تُسقط حمولة الاستغلال الدقيقة دون تصفية حركة تسجيل الدخول المشروعة إلى FTP.قيد معترف به: يُسمح بـ ICMP بالكامل، ما يعني أن المهاجم ما زال يستطيع التأكد من أن Metasploitable حيّة عبر ping. في بيئة أعلى أمانًا سيُقيَّد هذا بمعدل معين أو يُقتصر على مصادر موثوقة. في هذا المختبر، ICMP هي الآلية الأساسية للتحقق من الاتصال، لذلك تبقى مفتوحة.
يستخدم هذا المختبر آلة Snort مخصصة. بالمقارنة مع تشغيل Snort كإضافة داخل جهاز جدار ناري مثل pfSense أو OPNsense:
مزايا النهج المخصص:
المقايضات:
Snort المخصص هو الخيار الصحيح لبيئات المؤسسات التي تحتاج الأداء والتموضع والتخصيص. نهج إضافة pfSense/OPNsense أكثر منطقية لبيئات الأعمال الصغيرة أو المختبرات المنزلية التي تضع سهولة الاستخدام في الأولوية.
المرحلة 2 هي تقنيًا Snort سلبي + تنفيذ عبر iptables، وليست Snort تعمل في وضع inline حقيقي — Snort نفسه يسجّل فقط (pcap DAQ configured to passive)، بينما يقوم iptables بعملية الإسقاط بناءً على حدود المعدل ومطابقات السلاسل وعدّادات الاتصالات.
هذا نمط نشر مشروع وشائع (وهكذا تعمل العديد من حزم IDS/IPS القائمة على Linux في العالم الحقيقي). ستكون الخطوة التالية الطبيعية ترحيل المرحلة 2 إلى إعداد inline حقيقي باستخدام snort --daq nfq (أو afpacket في وضع inline) مع إجراءَي القاعدة reject / drop في Snort، بحيث يقوم Snort نفسه بعملية الإسقاط بناءً على مطابقة تواقيع كاملة بدلًا من تفويض ذلك إلى iptables.
snort-ids-ips-lab/
├── README.md ← this file
├── report/
│ ├── Snort-IDS-IPS-Report.pdf ← full lab report
│ └── Snort-IDS-IPS-Report.docx ← editable source
├── scripts/
│ ├── router_config.sh ← IP forwarding + iptables routing
│ ├── ping_check.sh ← connectivity verification
│ ├── attack_simulator.sh ← 4-vector attack chain
│ ├── ips_setup.sh ← IPS iptables rules + Snort daemon
│ └── local.rules ← 5 custom Snort rules (SID 1000001-1000005)
├── screenshots/ ← report figures
├── .gitignore
└── LICENSE
⚠️ للاستخدام المخبري فقط. تشغّل هذه السكربتات استغلالات حقيقية وأدوات قوة عمياء ضد هدف هشّ عن قصد. لا تشغّلها ضد أي نظام لا تملكه ولديك إذن كتابي صريح لاختباره.
scripts/router_config.sh، ثم scripts/ping_check.sh لتأكيد الاتصال الكامل.sudo apt update && sudo apt install snort -y
scripts/local.rules في /etc/snort/rules/local.rules واضبط HOME_NET = "10.10.10.0/24,192.168.50.0/24" في /etc/snort/snort.conf.sudo snort -T -c /etc/snort/snort.conf — توقّع تحميل 652 قاعدة و0 تحذيرات.sudo snort -c /etc/snort/snort.conf -i eth1 -i eth2 -A alert_fast -l /var/log/snort/
# In another terminal:
sudo tail -f /var/log/snort/alert_fast.txt
sudo ./scripts/attack_simulator.sh — لاحظ إطلاق التنبيهات وشل Meterpreter.جميع الأنشطة الموثّقة في هذا المستودع أُجريت حصريًا داخل بيئة مختبر افتراضية معزولة ذاتيًا على VMware لأغراض تعليمية أكاديمية خاضعة للإشراف. لم تُستهدف أو تُمسح أو تتأثر أي أنظمة خارجية أو إنتاجية أو حقيقية بأي شكل. Metasploitable 2 آلة افتراضية هشّة عن قصد مصممة خصيصًا للتدريب الأمني.
يجب عدم استخدام هذه المادة لإعادة تنفيذ هذه الأنشطة ضد أي نظام حقيقي دون إذن كتابي صريح من مالك النظام. يُعد مسح المنافذ غير المصرح به، أو هجمات بيانات الاعتماد، أو استغلال خدمات الشبكة، أمرًا غير قانوني في معظم الدول.
MIT — انظر LICENSE. تقرير المختبر نفسه مُقدَّم كمرجع تعليمي.
| SID | الاسم | المشغِّل |
|---|
| 1000001 | تم اكتشاف ICMP Ping | أي حركة ICMP في أي اتجاه — تلتقط pings الاستطلاعية |
| 1000002 | محاولة اتصال FTP | أي اتصال TCP إلى المنفذ 21 — تلتقط حركة المرور المشروعة وهجمات القوة العمياء |
| 1000003 | احتمال مسح Nmap SYN | حزم TCP مع ضبط علم SYN فقط (flags:S) — بصمة المسح نصف المفتوح |
| 1000004 | محاولة الباب الخلفي VSFTPD 2.3.4 | content:":)" على منفذ FTP 21 — سلسلة الإطلاق الدقيقة لـ CVE-2011-2523 |
| 1000005 | احتمالية شيل كود Metasploit | `content:" |
| الهجوم | الكشف | النتيجة |
|---|
| استطلاع ICMP | ✅ SID 1000001 — تنبيهات ثنائية الاتجاه | اكتمل ping |
| مسح Nmap SYN | ✅ SID 1000003 — آلاف التنبيهات في أقل من ثانية واحدة | تم تعداد 23 منفذًا مفتوحًا |
| هجوم القوة العمياء على FTP عبر Hydra | ✅ SID 1000002 — تنبيهات متكررة لاتصالات FTP | تم كسر بيانات الاعتماد msfadmin:msfadmin |
| الباب الخلفي vsftpd 2.3.4 | ✅ SID 1000004 — تطابق المحتوى :) أطلق التنبيه | تم الحصول على شل Meterpreter بصلاحيات root |
| القاعدة | ما تقوم به |
|---|
ACCEPT icmp | تسمح صراحةً بكل حركة ICMP — تحافظ على فحوصات الاتصال |
DROP tcp dpt:21 STRING ":)" | تُسقط الحزم التي تحتوي مشغّل الباب الخلفي vsftpd 2.3.4 على المنفذ 21 |
ACCEPT tcp --syn -m limit --limit 10/s --limit-burst 20 | تسمح بمصافحات TCP العادية ضمن حد المعدل |
DROP tcp --syn (بعد الحد) | تُسقط فيضانات SYN التي تتجاوز 10/ثانية — تُفشل مسوحات Nmap SYN |
DROP tcp dpt:21 -m connlimit --connlimit-above 5 --connlimit-mask 32 | تحظر أكثر من 5 اتصالات FTP متزامنة لكل مصدر — تُفشل تزامن Hydra |
ACCEPT eth1→eth0, ACCEPT eth2→eth0 | توجيه صادر طبيعي |
ACCEPT -m conntrack --ctstate RELATED,ESTABLISHED | حافظ للحالة — يحافظ على الجلسات القائمة |
| الهجوم | نتيجة المرحلة 2 |
|---|
| استطلاع ICMP | ✅ مسموح (عن قصد) |
| مسح Nmap SYN | ❌ محظور — 1000 filtered tcp ports (no-response)، استغرق المسح 21.71 ثانية بدلًا من أقل من ثانية واحدة |
| هجوم القوة العمياء على FTP عبر Hydra | ❌ محظور — all children were disabled due too many connection errors — 0 valid password found |
| الباب الخلفي vsftpd | ❌ محظور — Rex::ConnectionTimeout — Exploit completed, but no session was created |
| الهجوم / حركة المرور | المرحلة 1 (IDS فقط) | المرحلة 2 (IDS + iptables IPS) |
|---|
| ICMP ping | تم الكشف ✅ | مسموح ✅ (عن قصد) |
| مسح Nmap SYN | تم الكشف — تم العثور على 23 منفذًا مفتوحًا | محظور — 1000 مفلتر |
| هجوم القوة العمياء على FTP عبر Hydra | تم الكشف — تم كسر msfadmin:msfadmin | محظور — لم يُعثر على أي كلمة مرور |
| استغلال vsftpd 2.3.4 | تم الكشف — شل Meterpreter بصلاحيات root | محظور — انتهت مهلة الاتصال |
| تسجيل دخول FTP مشروع | لا ينطبق | تم الحفاظ عليه (230 Login successful) |
sudo ./scripts/ips_setup.sh، ثم أعد تشغيل سلسلة الهجوم على المهاجم. تأكد من الحظر، ثم اختبر يدويًا:
ping -c 4 192.168.50.10 # should succeed
ftp 192.168.50.10 # msfadmin / msfadmin — should succeed