كيفية إعادة توجيه المنافذ Forward Ports عبر بوابة لينكس Linux Gateway باستخدام IPTables
مقدمة
في بيئة الشبكات الحديثة، يُعد التحكم في حركة المرور وتوجيهها بين الشبكات المختلفة أحد المهام الأساسية التي يجب على مديري الأنظمة والشبكات إتقانها. من بين الأدوات القوية المتوفرة في نظام لينكس لتحقيق هذا الهدف تأتي أداة IPTables، التي تمثل الجدار الناري الافتراضي في معظم توزيعات لينكس. من خلال هذه الأداة، يمكن تكوين قواعد معقدة لتصفية الحزم وإعادة توجيهها حسب الحاجة.
واحدة من أهم الوظائف التي يمكن تحقيقها باستخدام IPTables هي إعادة توجيه المنافذ (Port Forwarding)، وهي عملية تقوم بتحويل حركة المرور التي تصل إلى منفذ معين على عنوان IP معين إلى منفذ مختلف على عنوان آخر. يُستخدم هذا في سيناريوهات مثل توجيه الطلبات الواردة من الإنترنت إلى خوادم داخلية خلف NAT، أو توزيع حركة المرور على خدمات مختلفة داخل شبكة خاصة.
يستعرض هذا المقال بشكل موسّع كيفية تنفيذ عملية إعادة توجيه المنافذ عبر بوابة لينكس باستخدام IPTables، موضحًا المفاهيم النظرية المرتبطة، والمتطلبات الأساسية، وأمثلة تطبيقية متعددة توضح كيفية تنفيذ الإعدادات في سيناريوهات واقعية.
المفاهيم الأساسية لإعادة توجيه المنافذ
NAT وDNAT وSNAT
لفهم عملية إعادة التوجيه، من الضروري التطرق أولاً إلى مفهوم الترجمة الشبكية للعناوين (NAT)، والتي تنقسم إلى نوعين أساسيين:
-
SNAT (Source NAT): تغيير عنوان المصدر للحزمة.
-
DNAT (Destination NAT): تغيير عنوان الوجهة للحزمة.
في سياق إعادة توجيه المنافذ، يتم غالباً استخدام DNAT لتوجيه الحزمة إلى عنوان وخدمة مختلفة داخل الشبكة.
الجداول والسلاسل في IPTables
IPTables تعتمد على جداول (Tables) تحتوي على سلاسل (Chains) وهي كالتالي:
| الجدول | الاستخدام |
|---|---|
filter |
الجدار الناري الرئيسي |
nat |
لترجمة العناوين (مثل إعادة التوجيه) |
mangle |
لتعديل الحزم |
raw |
لتحديد الاستثناءات |
السلاسل الرئيسية المستخدمة في إعادة التوجيه:
-
PREROUTING: تعديل الحزم قبل توجيهها.
-
POSTROUTING: تعديل الحزم بعد تحديد وجهتها.
-
FORWARD: الحزم التي تمر من خلال الجهاز ولكن ليست موجهة له.
المتطلبات الأساسية
قبل الشروع في تكوين القواعد، يجب التأكد من النقاط التالية:
-
تفعيل التوجيه بين الشبكات (IP Forwarding):
bashecho 1 > /proc/sys/net/ipv4/ip_forward
أو لجعل التغيير دائمًا:
bashecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
-
أن يكون جهاز لينكس بوابة (Gateway) بين شبكتين.
-
توفر صلاحيات الجذر (root) لإجراء التعديلات.
-
تثبيت IPTables (غالبًا مثبت افتراضيًا).
مثال تطبيقي لإعادة توجيه منفذ
السيناريو:
-
عنوان الـ Gateway الخارجي:
203.0.113.1 -
عنوان الخادم الداخلي:
192.168.1.100 -
المنفذ الخارجي المطلوب فتحه:
80(HTTP) -
المنفذ الداخلي:
8080
القواعد المطلوبة:
1. إعادة التوجيه (DNAT):
bashiptables -t nat -A PREROUTING -p tcp -d 203.0.113.1 --dport 80 -j DNAT --to-destination 192.168.1.100:8080
2. السماح بتمرير الحزم (FORWARD):
bashiptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
3. تعديل المصدر (SNAT أو MASQUERADE) في POSTROUTING:
إذا كان الجهاز البوابة يستخدم عنوان IP متغير (كما في اتصال PPPoE):
bashiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
أما إذا كان IP ثابت:
bashiptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1
إعادة توجيه منافذ متعددة
لإعادة توجيه عدة منافذ إلى نفس الخادم الداخلي:
bashiptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:8443 iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8443 -j ACCEPT
التعامل مع البروتوكولات المختلفة
قد تحتاج بعض الخدمات إلى التعامل مع بروتوكولات مثل UDP، كما هو الحال مع الألعاب أو خوادم VoIP:
bashiptables -t nat -A PREROUTING -p udp --dport 5060 -j DNAT --to-destination 192.168.1.100:5060 iptables -A FORWARD -p udp -d 192.168.1.100 --dport 5060 -j ACCEPT
حفظ القواعد وضمان استمرارها بعد إعادة التشغيل
تختلف الطريقة حسب التوزيعة:
في Debian/Ubuntu:
bashapt install iptables-persistent netfilter-persistent save
في CentOS/RHEL:
bashservice iptables save
أو باستخدام iptables-save:
bashiptables-save > /etc/iptables.rules
ثم إعداد ملف systemd أو rc.local لتحميلها عند الإقلاع.
أمثلة متقدمة
إعادة توجيه حزمة واردة إلى عنوان داخلي باستخدام نطاق IP كامل:
bashiptables -t nat -A PREROUTING -d 203.0.113.0/24 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.0/24
منع إعادة التوجيه من IP محدد:
bashiptables -A FORWARD -s 203.0.113.55 -j DROP
التحقق من القواعد الحالية
لعرض القواعد المفعّلة:
bashiptables -t nat -L -n -v iptables -L -n -v
جدول يوضح الاختلاف بين سلاسل IPTables المستخدمة في إعادة التوجيه
| السلسلة | نوع الجدول | الوظيفة |
|---|---|---|
| PREROUTING | nat | تعديل عنوان الوجهة قبل التوجيه |
| POSTROUTING | nat | تعديل عنوان المصدر بعد التوجيه |
| FORWARD | filter | يسمح أو يمنع مرور الحزم بين واجهات الشبكة |
| INPUT | filter | يتحكم في الحزم الموجهة للجهاز نفسه |
| OUTPUT | filter | يتحكم في الحزم الصادرة من الجهاز |
أفضل الممارسات لإدارة إعادة توجيه المنافذ
-
توثيق جميع القواعد المستخدمة بوضوح.
-
تجنب إعادة توجيه المنافذ الحساسة بدون قيود (مثل 22 أو 3306) إلا مع حماية إضافية.
-
استخدام جدار ناري إضافي أو أدوات IDS/IPS معقدة إن كانت الشبكة كبيرة.
-
مراقبة سجلات IPTables باستخدام أدوات مثل
ulogdأوiptables-logger. -
استخدام IPv6 بإعدادات مخصصة عند الحاجة.
-
عند العمل على خوادم الإنتاج، يجب اختبار كل قاعدة أولًا على بيئة افتراضية قبل تطبيقها بشكل مباشر.
الخلاصة
تمثل عملية إعادة توجيه المنافذ أداة استراتيجية وضرورية في إدارة الشبكات، خصوصًا عند تشغيل خدمات على خوادم خلف NAT أو عند رغبتك في إخفاء الهيكل الداخلي لشبكتك. باستخدام IPTables، يمكن تنفيذ إعادة التوجيه بدقة وكفاءة عالية، مع التحكم الكامل في مرور الحزم ضمن بيئة آمنة ومرنة.
يتطلب الأمر فهماً دقيقًا لآلية عمل الحزم داخل نواة لينكس، وتطبيق القواعد بشكل متسلسل مع احترام ترتيب تنفيذ السلاسل المختلفة داخل IPTables. الالتزام بأفضل الممارسات والأمان عند فتح المنافذ هو ما يضمن الاستفادة القصوى من هذه التقنية دون تعريض البنية التحتية للاختراق أو الاستغلال.
المراجع:

