ديف أوبس

إعداد جدار ناري iptables

كيفية إعداد جدار ناري باستخدام IPTables على Ubuntu 14.04

يعتبر إعداد جدار ناري (Firewall) من الأمور الأساسية التي يجب على أي مسؤول نظام أو مستخدم يرغب في حماية خوادمه وشبكته إتقانها. من أشهر الأدوات لإدارة الجدران النارية على أنظمة Linux هو iptables، والذي يمنح المستخدم تحكماً دقيقاً في مرور البيانات بين النظام والشبكة، ويسمح بتحديد قواعد مفصلة لتصفية حركة المرور وحماية النظام من التهديدات الخارجية.

تأتي أنظمة Ubuntu 14.04 ضمن توزيعات Linux التي تدعم iptables بشكل افتراضي، وتعتبر إعداداته من المهام الحيوية التي تضمن أمان النظام وتمنع الاختراقات غير المرغوبة. في هذا المقال سيتم شرح كيفية إعداد جدار ناري باستخدام iptables على Ubuntu 14.04 بطريقة مفصلة تغطي المفاهيم الأساسية، إعداد القواعد، حفظها، وكيفية التعامل مع المشاكل المحتملة.


مفهوم جدار الحماية (Firewall) وأهمية iptables

جدار الحماية هو نظام أمني يعمل كحاجز بين شبكة داخلية خاصة والعالم الخارجي، حيث يقوم بفحص حركة مرور البيانات ومراقبتها وفق قواعد محددة مسبقًا تسمح أو تمنع مرور هذه البيانات. الهدف الأساسي من الجدار الناري هو حماية النظام من الهجمات الإلكترونية، مثل محاولات الدخول غير المصرح بها، والبرمجيات الخبيثة، وحركة المرور غير المرغوب فيها.

iptables هو أداة قوية على نظام Linux تستخدم لتكوين جدار ناري، وهي تعتمد على ما يُسمى بـ “جداول” (Tables) تحتوي على “سلاسل” (Chains) من القواعد (Rules) التي تُطبق على حركة مرور الشبكة. يتيح iptables إمكانيات مرنة جدًا للتحكم في كيفية استقبال، إرسال، أو رفض حزم البيانات.


المكونات الأساسية لـ IPTables

لفهم كيفية إعداد جدار ناري بواسطة iptables، من المهم التعرف على المكونات الأساسية التي يتعامل معها:

1. الجداول (Tables)

  • filter: الجدول الافتراضي، مسؤول عن تصفية حركة المرور. يحتوي على سلاسل مثل INPUT و OUTPUT و FORWARD.

  • nat: مسؤول عن تعديل عناوين IP في حزم البيانات، يستخدم عادة لإعادة توجيه المنافذ.

  • mangle: يستخدم لتعديل خصائص الحزم (مثل تغيير علامات الـ TTL).

  • raw: يستخدم لتحديد استثناءات معينة من المعالجة التلقائية.

2. السلاسل (Chains)

  • INPUT: تعالج الحزم الواردة إلى الجهاز.

  • OUTPUT: تعالج الحزم الصادرة من الجهاز.

  • FORWARD: تعالج الحزم التي يتم توجيهها عبر الجهاز بين شبكات أخرى.

3. القواعد (Rules)

تحدد ما يجب فعله مع الحزم، سواء بالسماح بها أو رفضها أو تسجيلها.


خطوات إعداد جدار ناري باستخدام IPTables على Ubuntu 14.04

الخطوة 1: التحقق من حالة iptables الحالية

يمكن عرض القواعد الحالية لجدار الحماية باستخدام الأمر التالي:

bash
sudo iptables -L -v -n

هذا الأمر يعرض القواعد الموجودة مع معلومات تفصيلية عن الحزم التي تم التعامل معها.

الخطوة 2: تحديد سياسة افتراضية (Default Policy)

السياسة الافتراضية تحدد ما يحدث للحزم التي لا تطابق أي قاعدة. في العادة يتم تعيين السياسات التالية:

  • INPUT: DROP (رفض الحزم الواردة افتراضياً)

  • FORWARD: DROP (رفض حزم التوجيه افتراضياً)

  • OUTPUT: ACCEPT (السماح للحزم الصادرة افتراضياً)

لضبط السياسات:

bash
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT

الخطوة 3: السماح بالحركة الأساسية

للحفاظ على عمل النظام بشكل طبيعي، يجب السماح للحركة الأساسية التي تشمل:

  • السماح بحركة المرور المحلية (loopback interface):

bash
sudo iptables -A INPUT -i lo -j ACCEPT
  • السماح بحركة المرور المرتبطة والمُذنبة (Established and Related connections):

bash
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

الخطوة 4: السماح بالاتصالات الأساسية المطلوبة

بحسب نوع الخدمات التي تريد تشغيلها على الخادم، يجب فتح المنافذ المطلوبة. مثلاً، للسماح باتصالات SSH (المنفذ 22):

bash
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

وللسماح باتصالات HTTP و HTTPS (المنافذ 80 و 443):

bash
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

الخطوة 5: منع الاتصالات غير المرغوب فيها

بعد السماح بالحركة المطلوبة، يمكن ترك السياسة الافتراضية تمنع كل شيء آخر (DROP).


مثال عملي لإعداد قواعد iptables متكاملة

في هذا الجزء، سنجمع قواعد متكاملة تحمي الخادم بشكل جيد على Ubuntu 14.04 مع السماح بالاتصالات الأساسية.

bash
# مسح القواعد القديمة sudo iptables -F sudo iptables -X sudo iptables -Z # تعيين السياسات الافتراضية sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # السماح بالاتصالات المحلية sudo iptables -A INPUT -i lo -j ACCEPT # السماح بحركة المرور المرتبطة والمذنبة sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # السماح باتصالات SSH 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

حفظ قواعد iptables

على Ubuntu 14.04، لا تحفظ القواعد تلقائياً بعد إعادة التشغيل. لذلك يجب حفظ القواعد يدويًا حتى تُعاد تطبيقها عند كل إقلاع للنظام.

الطريقة الأولى: استخدام iptables-persistent

  1. تثبيت الحزمة:

bash
sudo apt-get install iptables-persistent
  1. أثناء التثبيت سيطلب منك حفظ القواعد الحالية، اضغط نعم.

  2. يمكن حفظ القواعد يدوياً في أي وقت بالأوامر:

bash
sudo netfilter-persistent save

أو

bash
sudo service iptables-persistent save

الطريقة الثانية: استخدام سكربت

يمكن إنشاء ملف سكربت بسيط يقوم بتحميل القواعد عند بدء التشغيل، مثلاً:

bash
sudo iptables-save > /etc/iptables.rules

ثم إضافة تحميل القواعد إلى ملف /etc/network/interfaces تحت قسم الواجهة:

bash
iface eth0 inet static pre-up iptables-restore < /etc/iptables.rules

مراقبة وإدارة قواعد iptables

لمراقبة حالة iptables:

bash
sudo iptables -L -v -n --line-numbers

هذا الأمر يعرض القواعد مع أرقام الأسطر، مما يسهل تعديل أو حذف قواعد محددة.

لحذف قاعدة محددة:

bash
sudo iptables -D INPUT <رقم القاعدة>

لإضافة قاعدة في موقع معين:

bash
sudo iptables -I INPUT <رقم السطر> -p tcp --dport 25 -j ACCEPT

التعامل مع المشاكل الشائعة

  • عدم القدرة على الاتصال بالخادم بعد ضبط iptables: يحدث عادة بسبب تعيين سياسة INPUT إلى DROP دون السماح باتصالات SSH، لذا يجب التأكد من السماح بالمنفذ 22.

  • فقدان قواعد iptables بعد إعادة التشغيل: يجب حفظ القواعد باستخدام أحد الطريقتين المذكورتين سابقًا.

  • تعطيل iptables مؤقتًا: يمكن إيقاف جميع قواعد iptables بتعيين السياسات إلى ACCEPT ومسح القواعد.

bash
sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -F

مقارنة بين IPTables وبدائل أخرى على Ubuntu 14.04

رغم قوة iptables، ظهرت أدوات أخرى مثل ufw (Uncomplicated Firewall) كواجهة أبسط لتكوين جدار الحماية على Ubuntu. ولكن iptables تبقى الأداة الأساسية والأكثر مرونة وقوة خاصة للمستخدمين المتقدمين.


الجدول التالي يوضح مقارنة بين بعض الأوامر المهمة في iptables

العملية الأمر المثال الوصف
عرض القواعد sudo iptables -L -v -n عرض القواعد مع تفاصيل الحركة
مسح جميع القواعد sudo iptables -F حذف جميع القواعد الحالية
تعيين سياسة افتراضية sudo iptables -P INPUT DROP تعيين سياسة الافتراضية للسلسلة
السماح بمرور SSH sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT السماح بحركة مرور SSH
حفظ القواعد sudo iptables-save > /etc/iptables.rules حفظ القواعد إلى ملف
استعادة القواعد sudo iptables-restore < /etc/iptables.rules استعادة القواعد من ملف
حذف قاعدة محددة sudo iptables -D INPUT 3 حذف القاعدة رقم 3 من INPUT

نصائح متقدمة لتعزيز أمان جدار الحماية باستخدام iptables

  • الحد من محاولات الدخول SSH: يمكن إضافة قواعد لمنع محاولات الدخول المتكررة عبر إضافة نظام لمنع هجمات القوة الغاشمة (Brute Force) باستخدام iptables مع مراقبة عدد المحاولات.

  • تقييد الوصول بناءً على عنوان IP: يمكن السماح أو منع عناوين IP معينة بالوصول للخدمات.

  • تسجيل الحزم المرفوضة: يمكن إضافة قواعد لتسجيل الحزم المرفوضة لمراجعة محاولات الاختراق.

مثال على تسجيل الحزم المرفوضة:

bash
sudo iptables -N LOGDROP sudo iptables -A LOGDROP -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 sudo iptables -A LOGDROP -j DROP sudo iptables -A INPUT -j LOGDROP

الخلاصة

إعداد جدار ناري باستخدام iptables على Ubuntu 14.04 هو عملية أساسية لضمان أمان النظام وحمايته من الهجمات الخارجية. توفر iptables تحكمًا مرنًا وعالي الدقة في تصفية حركة مرور الشبكة، مما يمكن المستخدم من تخصيص قواعد حماية مخصصة تتناسب مع متطلبات النظام والخدمات التي يشغلها.

من خلال تحديد السياسات الافتراضية، السماح بالحركة الضرورية، ومنع الحزم غير المرغوب فيها، يمكن بناء جدار ناري قوي وفعال. حفظ هذه القواعد وإدارتها بشكل مستمر يضمن استقرار وأمان النظام على المدى الطويل. تبقى الممارسة والتجربة العملية أفضل وسيلة لإتقان استخدام iptables وتحقيق أقصى استفادة من إمكانياته.


المراجع

  1. The Linux iptables Tutorial

  2. Ubuntu Official Documentation - Firewall with iptables