Kodax

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 → Internal

Firewall الداخلي

# السماح للـ 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()
اختبر فهمك