الشبكات المتقدمة في لينكس (Advanced Networking)
في الدروس السابقة، استخدمنا UFW كجدار حماية نظراً لبساطته. ولكن UFW هو في الحقيقة مجرد واجهة (Frontend) تخفي وراءها المحرك الحقيقي والقوي جداً في لينكس: Iptables (أو بديله الأحدث Nftables). لفهم حماية السيرفر على مستوى الخبراء، يجب أن تفهم مسار حزم البيانات (Packet Traversal).
أدوات فحص الشبكة العميقة (ss و netstat و ip)
أمر ifconfig القديم أصبح من الماضي. الأداة المعيارية الآن هي ip.
# عرض جميع بطاقات الشبكة وعناوينها
ip addr show
# عرض جدول التوجيه (Routing Table)
ip route show
لمعرفة المنافذ المفتوحة والتطبيقات التي تتنصت عليها، استخدم أمر ss (أسرع وأحدث من netstat):
# عرض جميع منافذ TCP التي تتنصت (Listening) مع اسم العملية
sudo ss -tulpn
هذا الأمر حيوي لاكتشاف إذا كان هناك برنامج خبيث (Trojan) يفتح منفذاً سرياً في السيرفر.
الغوص في Iptables و الـ Chains
تخيل Iptables كحراس أمن يقفون في 3 نقاط تفتيش (Chains) رئيسية داخل السيرفر:
- INPUT: حزم البيانات القادمة من الخارج إلى السيرفر (زائر يطلب موقعك).
- FORWARD: حزم البيانات التي تمر عبر السيرفر لتذهب لشبكة أخرى (في حال استخدام السيرفر كـ Router أو مع Docker).
- OUTPUT: حزم البيانات الصادرة من السيرفر للخارج.
كيف تمنع IP مزعج (DDoS/Spammer) من الوصول لسيرفرك تماماً قبل أن يصل حتى لسيرفر الويب Nginx؟
# حظر IP محدد (Drop)
sudo iptables -A INPUT -s 192.168.1.50 -j DROP
# حظر نطاق كامل (Subnet)
sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP
الأمر -A يعني Append (إضافة للقاعدة). -s يمثل الـ Source. -j يمثل الـ Target (الإجراء: Drop يعني إسقاط الحزمة دون رد).
توجيه المنافذ و NAT (Network Address Translation)
ماذا لو أردت أن أي طلب يأتي للسيرفر على المنفذ 80 يتم تحويله سراً للمنفذ 8080 حيث يعمل تطبيق Node.js؟ يمكنك فعل ذلك من داخل النواة مباشرة بدون استخدام Nginx كبروكسي (وهو أسرع بكثير!)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
هذا يسمى الـ PREROUTING، حيث يتم تعديل وجهة الحزمة قبل أن تخضع لقواعد الـ INPUT العادية.
مراقبة حركة المرور بالزمن الفعلي (tcpdump)
أحياناً تحتاج لمعرفة ما إذا كانت الحزم تصل السيرفر أصلاً أم أنها تُحظر من مزود الخدمة السحابية. tcpdump هو مقياس نبض الشبكة:
# مراقبة جميع الطلبات القادمة للمنفذ 80
sudo tcpdump -i eth0 port 80 -n
إذا قمت بزيارة موقعك ولم يظهر أي شيء في مخرجات هذا الأمر، فهذا يعني أن هناك جدار ناري خارجي (مثل AWS Security Groups أو Cloudflare) يحظر الاتصال قبل أن يصل لسيرفرك من الأساس!
بناء راوتر مخصص (Custom Router) باستخدام لينكس
هل تعلم أن أجهزة الراوتر الاحترافية (مثل MikroTik أو Ubiquiti) مبنية في الحقيقة على نواة لينكس وتستخدم iptables تحت الغطاء؟ يمكنك تحويل أي سيرفر لينكس بسيط يحتوي على بطاقتي شبكة (Network Interfaces) إلى راوتر متطور جداً.
تفعيل IP Forwarding
افتراضياً، نواة لينكس ترفض تمرير حزم البيانات من شبكة إلى أخرى (لأسباب أمنية). لتمكين السيرفر من العمل كراوتر، يجب تعديل النواة:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
عمل إخفاء للشبكة الداخلية (Masquerading / NAT)
لنفترض أن شبكتك الداخلية هي 10.0.0.0/24 وبطاقة الشبكة المتصلة بالإنترنت هي eth0. لتسمح للأجهزة الداخلية بالوصول للإنترنت عبر سيرفرك، يجب استخدام NAT:
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
تأمين المنافذ باستخدام Port Knocking
ما رأيك بحيلة أمنية تجعل منفذ SSH الخاص بك غير مرئي إطلاقاً لأي شخص (مغلق)، ولا يفتح لك إلا إذا قمت بـ "طرق" (Knock) أبواب معينة بتسلسل سري؟ تقنية Port Knocking تعتمد على تسجيل الدخول السري عبر إرسال حزم فارغة لعدة منافذ بترتيب معين (مثلاً: 7000، 8000، 9000). إذا استلم Iptables هذا التسلسل الدقيق، سيقوم مؤقتاً بفتح منفذ 22 (SSH) للـ IP الخاص بك فقط!
يمكن تطبيق ذلك باستخدام حزمة knockd. هذه التقنية تجعل السيرفر محصناً تماماً ضد هجمات الـ Zero-day التي قد تظهر في خادم SSH نفسه، لأن المخترق لن يجد المنفذ مفتوحاً من الأساس لكي يستغله.
💬 التعليقات
0 تعليقات