Kodax

Firewalls - جدران الحماية — أمن الشبكات

Firewalls - جدران الحماية

ما هو Firewall؟

حاجز يراقب ويتحكم في حركة البيانات الداخلة والخارجة.

كيف يعمل؟

يفحص الحزم (packets) بناءً على قواعد محددة:

- Allow: السماح

- Deny: الرفض

- Drop: رفض بصمت

أنواع Firewalls

1. Packet Filtering

- يفحص headers فقط (IP, Port)

- سريع لكن بسيط

- مثال: iptables

2. Stateful Inspection

- يتتبع حالة الاتصالات

- أذكى وأكثر أماناً

3. Application Layer (WAF)

- يفحص محتوى البيانات

- يحمي من SQL Injection, XSS

- مثال: ModSecurity

4. Next-Generation Firewall (NGFW)

- يجمع كل شيء

- Deep Packet Inspection

- IDS/IPS مدمج

قواعد Firewall الأساسية

Default Deny

رفض كل شيء إلا المسموح صراحةً.

# المبدأ
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

أمثلة على القواعد

- السماح لـ HTTP/HTTPS

- رفض Telnet (غير آمن)

- السماح لـ SSH من IPs محددة

- رفض كل الدخول على MySQL من خارج الشبكة

Hardware vs Software Firewall

| Hardware | Software |

|----------|----------|

| جهاز منفصل | برنامج على الجهاز |

| أسرع | أرخص |

| للشبكات | للأفراد |

| مثال: Cisco ASA | مثال: Windows Firewall |

# أمثلة على قواعد Firewall باستخدام iptables (Linux)

# ===== قواعد أساسية =====

# 1. رفض كل شيء افتراضياً (Default Deny)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 2. السماح للـ loopback (127.0.0.1)
sudo iptables -A INPUT -i lo -j ACCEPT

# 3. السماح للاتصالات الحالية
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ===== السماح لخدمات محددة =====

# السماح لـ SSH (منفذ 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# السماح لـ HTTP و HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# السماح لـ DNS
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

# ===== قواعد متقدمة =====

# السماح لـ SSH من IP محدد فقط
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT

# رفض MySQL من خارج الشبكة المحلية
sudo iptables -A INPUT -p tcp --dport 3306 ! -s 192.168.1.0/24 -j DROP

# منع Ping Flooding
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit \
  --limit 1/second --limit-burst 10 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# منع Port Scanning
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# ===== عرض القواعد =====
# sudo iptables -L -v -n

# ===== حفظ القواعد =====
# sudo iptables-save > /etc/iptables/rules.v4

# ===== Python: محاكاة Firewall بسيط =====
class SimpleFirewall:
    """
    محاكاة بسيطة لـ Firewall
    """
    def __init__(self):
        self.rules = []
        self.default_action = 'DROP'
    
    def add_rule(self, protocol, port, action, source_ip=None):
        """إضافة قاعدة"""
        rule = {
            'protocol': protocol,
            'port': port,
            'action': action,
            'source_ip': source_ip
        }
        self.rules.append(rule)
    
    def check_packet(self, protocol, port, source_ip):
        """فحص حزمة بيانات"""
        for rule in self.rules:
            # تطابق البروتوكول والمنفذ
            if (rule['protocol'] == protocol and 
                rule['port'] == port):
                
                # تطابق IP إذا كان محدداً
                if rule['source_ip'] is None or rule['source_ip'] == source_ip:
                    return rule['action']
        
        # القاعدة الافتراضية
        return self.default_action

# إنشاء firewall
fw = SimpleFirewall()

# إضافة قواعد
fw.add_rule('TCP', 80, 'ALLOW')        # السماح لـ HTTP
fw.add_rule('TCP', 443, 'ALLOW')       # السماح لـ HTTPS
fw.add_rule('TCP', 22, 'ALLOW', '192.168.1.100')  # SSH من IP محدد
fw.add_rule('TCP', 3306, 'DROP')       # رفض MySQL

# اختبار
packets = [
    ('TCP', 80, '8.8.8.8'),
    ('TCP', 22, '192.168.1.100'),
    ('TCP', 22, '1.2.3.4'),
    ('TCP', 3306, '192.168.1.50'),
]

for proto, port, ip in packets:
    action = fw.check_packet(proto, port, ip)
    print(f"{action}: {proto}:{port} from {ip}")
اختبر فهمك