DMZ - المنطقة منزوعة السلاح — أمن الشبكات
DMZ - Demilitarized Zone
ما هي DMZ؟
منطقة شبكة وسيطة بين الإنترنت والشبكة الداخلية.
لماذا نحتاجها؟
- عزل الخوادم العامة
- حماية الشبكة الداخلية
- تقليل مساحة الهجوم
البنية الأساسية
الإنترنت
│
▼
┌─────────────┐
│ Firewall 1 │ (External)
└─────────────┘
│
▼
┌─────────────┐
│ DMZ │ Web Server, Mail Server
└─────────────┘
│
▼
┌─────────────┐
│ Firewall 2 │ (Internal)
└─────────────┘
│
▼
┌─────────────┐
│ Internal │ Database, Users
│ Network │
└─────────────┘ماذا نضع في DMZ؟
- Web Servers: المواقع العامة
- Mail Servers: البريد الإلكتروني
- DNS Servers: خوادم DNS العامة
- VPN Gateways: نقاط دخول VPN
- Reverse Proxies: موازنة الأحمال
ماذا لا نضع في DMZ؟
- ❌ قواعد البيانات الحساسة
- ❌ Active Directory
- ❌ أجهزة المستخدمين
- ❌ خوادم الملفات الداخلية
قواعد Firewall
Firewall الخارجي
# السماح بـ HTTP/HTTPS للـ DMZ
ALLOW Internet → DMZ:80,443
# السماح بـ DNS
ALLOW Internet → DMZ:53
# منع كل شيء آخر
DENY Internet → InternalFirewall الداخلي
# السماح للـ Web Server بالوصول لقاعدة البيانات
ALLOW DMZ:WebServer → Internal:3306
# منع DMZ من الوصول لبقية الشبكة
DENY DMZ → Internal (default)أنماط DMZ
Single Firewall (3 interfaces)
- أبسط وأرخص
- نقطة فشل واحدة
Dual Firewall
- أكثر أماناً
- أغلى وأعقد
- يُفضل من مصنّعين مختلفين
# محاكاة تصميم DMZ
class DMZArchitecture:
"""
محاكاة بنية DMZ
"""
def __init__(self):
self.zones = {
"internet": {"trust_level": 0, "hosts": ["any"]},
"dmz": {"trust_level": 50, "hosts": []},
"internal": {"trust_level": 100, "hosts": []},
}
self.firewall_rules = []
def add_server_to_dmz(self, server_name, services):
"""إضافة خادم للـ DMZ"""
self.zones["dmz"]["hosts"].append({
"name": server_name,
"services": services
})
print(f"✅ تمت إضافة {server_name} للـ DMZ")
print(f" الخدمات: {', '.join(services)}")
def add_firewall_rule(self, source_zone, dest_zone, port, action="ALLOW"):
"""إضافة قاعدة firewall"""
rule = {
"source": source_zone,
"destination": dest_zone,
"port": port,
"action": action
}
self.firewall_rules.append(rule)
emoji = "✅" if action == "ALLOW" else "❌"
print(f"{emoji} {action}: {source_zone} → {dest_zone}:{port}")
def check_traffic(self, source, dest, port):
"""فحص إذا كان Traffic مسموح"""
print(f"\n🔍 فحص: {source} → {dest}:{port}")
for rule in self.firewall_rules:
if (rule["source"] == source and
rule["destination"] == dest and
rule["port"] == port):
if rule["action"] == "ALLOW":
print(f" ✅ مسموح (Rule matched)")
return True
else:
print(f" ❌ ممنوع (Rule matched)")
return False
print(f" ❌ ممنوع (Default deny)")
return False
def visualize(self):
"""عرض البنية"""
print("\n" + "=" * 50)
print(" 🏗️ بنية DMZ")
print("=" * 50)
print("""
┌─────────────────────────────────────┐
│ INTERNET │
│ (Trust Level: 0) │
└─────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 🔥 EXTERNAL FIREWALL │
└─────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ DMZ │
│ (Trust Level: 50) │""")
for host in self.zones["dmz"]["hosts"]:
print(f" │ 📦 {host['name']}: {', '.join(host['services'])}")
print(""" └─────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 🔥 INTERNAL FIREWALL │
└─────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ INTERNAL NETWORK │
│ (Trust Level: 100) │
│ 📦 Database, Active Directory │
│ 💻 User Workstations │
└─────────────────────────────────────┘
""")
def security_audit(self):
"""تدقيق أمني"""
print("\n🔒 تدقيق أمني للـ DMZ")
print("=" * 50)
issues = []
# فحص قواعد خطيرة
for rule in self.firewall_rules:
if rule["action"] == "ALLOW":
# DMZ لا يجب أن يصل للـ Internal بشكل واسع
if rule["source"] == "dmz" and rule["destination"] == "internal":
if rule["port"] == "any":
issues.append("🔴 DMZ لديه وصول واسع للشبكة الداخلية!")
# الإنترنت لا يجب أن يصل للـ Internal
if rule["source"] == "internet" and rule["destination"] == "internal":
issues.append("🔴 الإنترنت لديه وصول مباشر للشبكة الداخلية!")
# فحص الخوادم في DMZ
for host in self.zones["dmz"]["hosts"]:
if "database" in host["name"].lower():
issues.append(f"🟡 قاعدة بيانات في DMZ: {host['name']}")
if issues:
print("\n مشاكل مكتشفة:")
for issue in issues:
print(f" {issue}")
else:
print("\n ✅ لم يُعثر على مشاكل واضحة")
return issues
# تشغيل المحاكاة
dmz = DMZArchitecture()
# إضافة خوادم للـ DMZ
dmz.add_server_to_dmz("web-server", ["HTTP:80", "HTTPS:443"])
dmz.add_server_to_dmz("mail-server", ["SMTP:25", "IMAP:993"])
# إضافة قواعد Firewall
print("\n📋 إعداد قواعد Firewall:")
dmz.add_firewall_rule("internet", "dmz", "80")
dmz.add_firewall_rule("internet", "dmz", "443")
dmz.add_firewall_rule("dmz", "internal", "3306") # للـ Database
dmz.add_firewall_rule("internet", "internal", "any", "DENY")
# عرض البنية
dmz.visualize()
# فحص traffic
dmz.check_traffic("internet", "dmz", "443")
dmz.check_traffic("internet", "internal", "22")
dmz.check_traffic("dmz", "internal", "3306")
# تدقيق أمني
dmz.security_audit()اختبر فهمك