أساسيات IPTables: قواعد وأوامر شائعة للجدار الناري
في عالم إدارة الشبكات وأمن الحاسوب، يُعتبر الجدار الناري (Firewall) من الركائز الأساسية التي تحمي الأنظمة من الهجمات والاختراقات غير المرغوب فيها. من أشهر الأدوات التي تُستخدم في أنظمة لينوكس لإنشاء وإدارة الجدران النارية هو IPTables، والذي يعد أداة قوية ومرنة للتحكم في حركة مرور الشبكة على مستوى حزم البيانات (Packets). يتيح IPTables لمسؤولي النظام إعداد قواعد معقدة لتنظيم الاتصالات الواردة والصادرة، مما يجعل التحكم في الشبكة فعالاً وآمناً.
في هذا المقال، سنستعرض بشكل مفصل أساسيات IPTables، كيف يعمل، أهم القواعد والأوامر الشائعة، بالإضافة إلى تطبيقات عملية لفهم كيفية بناء جدار ناري متكامل باستخدام هذه الأداة.
مفهوم IPTables ودوره في النظام
IPTables هو نظام جدار ناري مبني على نواة لينوكس (Linux Kernel) يسمح بفلترة حزم الشبكة والتحكم بها. يعتمد IPTables على جداول (Tables) تحتوي على سلاسل (Chains) من القواعد (Rules) التي تحدد ما يجب عمله مع كل حزمة بيانات تدخل أو تخرج من النظام.
مكونات IPTables الأساسية:
-
الجداول (Tables): هي مجموعات قواعد مختلفة مخصصة لأغراض محددة مثل الفلترة أو التوجيه.
-
السلاسل (Chains): هي مجموعات من القواعد تُطبّق على الحزم في مراحل معينة.
-
القواعد (Rules): تعليمات محددة داخل السلاسل تحدد الإجراء الذي يجب اتخاذه تجاه الحزم.
جداول IPTables الأساسية
يحتوي IPTables على عدة جداول رئيسية، أهمها:
-
filter (فلترة): الجدول الافتراضي والمسؤول عن السماح أو حجب مرور الحزم.
-
nat (تحويل العناوين): يستخدم لتغيير عناوين IP في الحزم، مثل تحويل عناوين الشبكة الداخلية إلى عنوان خارجي (MASQUERADE أو SNAT).
-
mangle (تغيير الحزم): يُستخدم لتعديل خصائص الحزم مثل تعديل العلامات (marks) أو تعديل نوع الخدمة (TOS).
-
raw (خام): يسمح بالتعامل مع الحزم قبل أن تدخل إلى عملية الفلترة لتخطي أو تغيير بعض السلوكيات.
سلاسل IPTables الرئيسية
كل جدول يحتوي على سلاسل، لكن هناك ثلاث سلاسل رئيسية مشتركة تستخدم في أغلب الحالات:
-
INPUT: تتحكم في الحزم القادمة إلى النظام المحلي.
-
OUTPUT: تتحكم في الحزم الصادرة من النظام المحلي.
-
FORWARD: تتحكم في الحزم التي تمر عبر النظام (توجيه الحزم بين شبكات مختلفة).
على سبيل المثال، إذا كنت تريد التحكم في الحزم التي تصل إلى جهازك، ستستخدم سلسلة INPUT.
سياسات السلاسل (Policies)
كل سلسلة تحتوي على سياسة افتراضية (Policy) تحدد ماذا يحدث للحزم التي لا تطابق أي قاعدة. يمكن أن تكون هذه السياسات:
-
ACCEPT: السماح بمرور الحزمة.
-
DROP: إسقاط الحزمة بدون أي إشعار.
-
REJECT: رفض الحزمة مع إرسال إشعار إلى المرسل.
عادةً، يكون من الأفضل تعيين سياسة DROP كافتراضية، ثم السماح فقط للحزم المصرح بها من خلال قواعد مخصصة.
صيغة القاعدة في IPTables
تتبع قواعد IPTables صيغة محددة يمكن تلخيصها كما يلي:
bashiptables -t [table] -A [chain] [conditions] -j [target]
-
-t [table]: تحديد الجدول، مثل filter أو nat (إذا لم يُحدد، يتم استخدام filter افتراضياً). -
-A [chain]: إضافة قاعدة في نهاية السلسلة المحددة (يمكن استخدام-Iللإدخال في بداية السلسلة). -
[conditions]: شروط لتطابق الحزمة مثل البروتوكول، عنوان المصدر، عنوان الوجهة، المنفذ، الواجهة. -
-j [target]: الإجراء الذي يجب اتخاذه على الحزمة إذا تم تطابقها، مثل ACCEPT أو DROP أو REJECT.
أوامر IPTables شائعة الاستخدام
1. عرض قواعد IPTables
لعرض قواعد الجدار الناري الحالية:
bashiptables -L -v -n
-
-L: لعرض القواعد. -
-v: معلومات تفصيلية. -
-n: عدم محاولة ترجمة عناوين IP وأسماء المنافذ (لأداء أفضل).
2. حذف جميع القواعد
يمكن حذف كل القواعد من جميع السلاسل في جدول الفلترة:
bashiptables -F
3. تعيين سياسة افتراضية
تعيين سياسة افتراضية لسلسلة معينة:
bashiptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
4. السماح بالاتصال المحلي
bashiptables -A INPUT -i lo -j ACCEPT
السماح بالحزم القادمة من الواجهة المحلية (loopback).
5. السماح بحركة مرور SSH
bashiptables -A INPUT -p tcp --dport 22 -j ACCEPT
فتح منفذ SSH للسماح بالاتصالات الواردة.
6. السماح بحركة مرور HTTP و HTTPS
bashiptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
فتح منافذ الويب الأساسية.
7. إسقاط كل الحزم الأخرى
bashiptables -A INPUT -j DROP
تعيين قاعدة إسقاط لجميع الحزم غير المصرح بها.
شرح قواعد متقدمة في IPTables
1. تحديد مصادر معينة للسماح أو الحجب
يمكن السماح فقط لعناوين IP محددة:
bashiptables -A INPUT -s 192.168.1.100 -j ACCEPT
أو حجب عنوان معين:
bashiptables -A INPUT -s 10.0.0.50 -j DROP
2. التحكم في حركة المرور عبر الواجهات
السماح فقط لحركة المرور القادمة من واجهة معينة مثل eth0:
bashiptables -A INPUT -i eth0 -j ACCEPT
3. التحكم في الاتصالات الجديدة فقط
للسماح فقط باتصالات جديدة على منفذ معين:
bashiptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
4. الحد من عدد المحاولات (مكافحة هجمات الـ brute force)
bashiptables -A INPUT -p tcp --dport 22 -m recent --name sshattack --rcheck --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --name sshattack --set -j ACCEPT
5. إعادة توجيه المنافذ (Port Forwarding)
لإعادة توجيه الاتصالات الواردة على منفذ إلى جهاز آخر داخل الشبكة:
bashiptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80 iptables -t nat -A POSTROUTING -j MASQUERADE
إدارة قواعد IPTables
حفظ قواعد IPTables
بعد إعداد قواعد الجدار الناري، يجب حفظها لكي تبقى فعالة بعد إعادة تشغيل النظام. في توزيعات مثل Debian أو Ubuntu يمكن استخدام:
bashiptables-save > /etc/iptables/rules.v4
وفي CentOS:
bashservice iptables save
استعادة القواعد
لاستعادة القواعد المحفوظة:
bashiptables-restore < /etc/iptables/rules.v4
مقارنة بين IPTables وأدوات أخرى
مع تطور الأنظمة، ظهرت أدوات أحدث مثل nftables التي تقدم بديلاً لـ IPTables مع مزايا أكثر كفاءة وتنظيمًا. لكن IPTables لا يزال مستخدمًا على نطاق واسع بسبب بساطته ودعمه في أغلب توزيعات لينوكس.
جدول يوضح أهم الخيارات والأوامر في IPTables
| الأمر | الوصف | الاستخدام النموذجي |
|---|---|---|
iptables -L |
عرض جميع القواعد الحالية | iptables -L -v -n |
iptables -F |
حذف جميع القواعد من الجداول | iptables -F |
iptables -A [chain] |
إضافة قاعدة في نهاية سلسلة معينة | iptables -A INPUT -p tcp -j ACCEPT |
iptables -I [chain] |
إدخال قاعدة في بداية سلسلة | iptables -I INPUT 1 -j DROP |
iptables -D [chain] |
حذف قاعدة من سلسلة معينة | iptables -D INPUT 1 |
iptables -P [chain] |
تعيين سياسة افتراضية لسلسلة معينة | iptables -P INPUT DROP |
iptables-save |
حفظ القواعد في ملف | iptables-save > /etc/iptables/rules.v4 |
iptables-restore |
استعادة القواعد من ملف | iptables-restore < /etc/iptables/rules.v4 |
-p [protocol] |
تحديد البروتوكول (tcp, udp, icmp) | -p tcp |
--dport [port] |
تحديد منفذ الوجهة | --dport 80 |
--sport [port] |
تحديد منفذ المصدر | --sport 1024 |
-s [source IP] |
تحديد عنوان IP المصدر | -s 192.168.1.1 |
-d [dest IP] |
تحديد عنوان IP الوجهة | -d 10.0.0.1 |
-j [target] |
الإجراء المتبع عند تطابق القاعدة | -j ACCEPT أو -j DROP |
أهمية IPTables في تأمين الشبكة
يُعتبر IPTables من الأدوات الحيوية التي تمنح المستخدمين القدرة على:
-
تقليل الهجمات الإلكترونية: من خلال حجب الحزم المشبوهة والمشاريع.
-
تنظيم حركة المرور: بتحديد من يُسمح له بالاتصال ومن يُرفض.
-
حماية البيانات: منع الوصول غير المصرح به إلى الخدمات والأنظمة.
-
إدارة موارد الشبكة: التحكم في الترافيك وتقليل الضغط على النظام.
الختام
IPTables أداة لا غنى عنها في إدارة وتأمين الشبكات التي تعمل على لينوكس. تمكن مسؤولي النظام من بناء سياسات متقدمة ومرنة للفلترة والتحكم في حركة البيانات. من خلال فهم الجداول، السلاسل، والسياسات بالإضافة إلى القواعد الشائعة، يمكن لأي مستخدم محترف أن ينشئ جدار ناري قوي يحمي النظام من مختلف التهديدات. يُنصح دائماً بتحديث القواعد ومراجعتها بانتظام بما يتناسب مع متطلبات الأمن الحديثة لضمان أعلى مستوى من الحماية.
المصادر والمراجع
-
The Linux Foundation - IPTables Tutorial and How To: https://www.linuxfoundation.org
-
Netfilter/iptables project documentation: https://netfilter.org/projects/iptables/index.html

