العودة إلى المدونة

توجيه المنافذ باستخدام Iptables في Linux: دليل إرشادي

توجيه المنافذ باستخدام Iptables في Linux: دليل إرشادي

توجيه المنفذ ويُشار إليه أيضًا باسم تعيين المنافذ، وهو طريقة للسماح للأجهزة البعيدة بالاتصال بخدمة معينة داخل شبكتك المحلية الخاصة (LAN). وكما يوحي الاسم، تتضمن العملية توجيه الطلبات الخاصة بمنفذ معين إلى منفذ أو شبكة أخرى. وهي تعدل وجهة الحزمة أثناء انتقالها وتعتبر نوعًا من عمليات ترجمة عناوين الشبكة (NAT) .

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

في هذا البرنامج التعليمي، سنرشدك خلال خطوات توجيه المنافذ باستخدام iptables في Linux.

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

تفاصيل المضيف

أولاً، نحتاج إلى معرفة تفاصيل الواجهات والعناوين الخاصة بالخوادم العاملة. دعنا نتحقق من واجهات الشبكة لنظامنا:

سترى المخرجات التالية:

هنا، يوضح المخرج المميز واجهتين، الأولى eth0 المخصصة للعنوان 192.51.100.45، والثانية eth1 المخصصة للعنوان 192.168.1.5. ومن بين هاتين الواجهتين، إحداهما عامة والأخرى خاصة. سنقوم بتشغيل أمر للتمييز بينهما، ومعرفة الواجهة العامة، وهي الواجهة المتصلة ببوابتك الافتراضية. للتمييز، اكتب:

سترى المخرجات التالية:

بيانات وهمية للبرنامج التعليمي

سنستخدم عناوين وتعيينات واجهات وهمية طوال هذا البرنامج التعليمي. أنت حر في استخدام هذه البيانات أو استبدالها، حسب راحتك.

تفاصيل شبكة خادم الويب:

  • عنوان IP العام: 203.0.113.2

  • عنوان IP الخاص: 192.0.2.2

  • الواجهة العامة: eth0

  • الواجهة الخاصة: eth1

تفاصيل شبكة جدار الحماية:

  • عنوان IP العام: 203.0.113.15

  • عنوان IP الخاص: 192.0.2.15

  • الواجهة العامة: eth0

  • الواجهة الخاصة: eth1

إعداد خادم الويب

دعنا نبدأ مع مضيف خادم الويب الخاص بنا. أولاً، قم بتسجيل الدخول باستخدام مستخدم sudo الخاص بك.

تثبيت Nginx

أولاً، سنقوم بـ تثبيت Nginx على مضيف خادم الويب الخاص بنا وإغلاقه بحيث يستمع فقط إلى واجهته الخاصة. سيمكن ذلك خادم الويب الخاص بنا من أن يكون متاحًا فقط إذا قمنا بإعداد توجيه المنفذ بطريقة صحيحة.

بعد ذلك، قم بتحديث ذاكرة التخزين المؤقت للحزم المحلية واستخدم apt لتنزيل Nginx وتثبيته:

إضافة قيود

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

لإضافة قيود، افتح ملف تكوين كتلة الخادم الافتراضي /etc/nginx/sites-enabled/default على أي محرر نصوص من اختيارك (هنا نستخدم محرر النصوص nano)، واكتب:

في المخرجات، سترى توجيه listen يظهر مرتين:

Port Forwarding Nginx Default File

في هذا البرنامج التعليمي، نستخدم التوجيه الأول لتوضيح إعادة توجيه IPv4. أما التوجيه الثاني، المهيأ لـ IPv6، فيمكن إزالته. أضف عنوان IP الخاص بخادم الويب الخاص بك متبوعًا بنقطتين رأسيتين قبل الرقم 80 مباشرةً لإعلام Nginx بقبول المدخلات من الواجهة الخاصة فقط. بعد ذلك، قم بتحرير التوجيه:

Port Forwarding Nginx Edited Default File

بمجرد الانتهاء، احفظ الملف وأغلقه. قبل المتابعة، تأكد من عدم وجود أخطاء في بناء الجملة. لنختبر الملف:

Nginx T

إذا لم يظهر لك أي خطأ، يمكنك إعادة تشغيل Nginx وتمكين التكوين الجديد:

التحقق من قيود الشبكة

دعنا نتحقق من مستوى الوصول الذي نمتلكه لخادم الويب الخاص بنا. حاول الوصول إلى خادم الويب باستخدام الواجهة الخاصة باستخدام أمر curl :

سترى المخرجات التالية:

Port Forwarding Nginx Output1

إذا حاولنا استخدام الواجهة العامة، فلن نتمكن من الاتصال:

هذا هو بالضبط ما توقعناه.

تكوين جدار الحماية لإعادة توجيه المنفذ 80

دعنا نواصل عملنا من خلال تنفيذ إعادة توجيه المنفذ على جهاز جدار الحماية الخاص بنا.

تمكين إعادة التوجيه في النواة (Kernel)

بشكل افتراضي، تكون ميزة إعادة توجيه المنفذ معطلة (OFF) في معظم الأنظمة. سنقوم بإجراء تغييرات لتفعيلها (ON) من خلال بعض التعديلات. أيضًا، هناك خيار لتفعيل إعادة توجيه المنفذ بشكل دائم باستخدام صلاحيات sudo كما هو موضح في الخطوات القادمة.

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

لتفعيل إعادة توجيه المنفذ بشكل دائم، قم بتحرير ملف /etc/sysctl.conf . افتح الملف باستخدام صلاحيات sudo واكتب:

في الداخل، ابحث عن السطر الذي يبدو كالتالي وأزل علامة التعليق منه:

بمجرد الانتهاء، احفظ الملف وأغلقه. بعد ذلك، استخدم أوامر sysctl لتطبيق التغييرات في الإعدادات لجعلها فعالة:

إعداد جدار الحماية الأساسي

أولاً، راجع الدليل الخاص بـ كيفية إعداد جدار حماية أساسي على جهازك. عند الانتهاء، سيكون لديك:

  • تم تثبيت iptables-persistent
  • تم حفظ مجموعة القواعد الافتراضية في /etc/iptables/rules.v4
  • معرفة شاملة بإضافة وتعديل القواعد باستخدام أمر iptables command

أيضًا، يمكنك الاطلاع على كيفية سرد وحذف قواعد جدار الحماية iptables.

إضافة قواعد إعادة التوجيه

سنقوم بتكوين جدار الحماية الخاص بنا لضمان أن حركة المرور المتدفقة إلى واجهتنا العامة ( eth0 ) على المنفذ 80 يتم إعادة توجيهها إلى واجهتنا الخاصة ( eth1). بشكل افتراضي، يحتوي جدار الحماية الأساسي لدينا على سلسلة FORWARD تم تعيينها على DROP لحركة المرور. ستسمح إضافة قواعد جدار الحماية بإعادة توجيه الاتصالات إلى خادم الويب الخاص بنا. لمزيد من الأمان، سنقوم بقفل قواعد جدار الحماية للسماح بطلبات إعادة التوجيه فقط.

في سلسلة FORWARD ، سنقبل الاتصالات الجديدة الموجهة إلى المنفذ 80 القادمة من واجهتنا العامة والمتجهة إلى واجهتنا الخاصة. سنحدد الاتصالات الجديدة بمساعدة امتداد conntrack ونمثلها بحزمة TCP SYN :

تحتاج إلى السماح بأي حركة مرور لاحقة في كلا الاتجاهين ناتجة عن الاتصال الوارد. اكتب الأوامر أدناه للسماح بحركة المرور من النوع ESTABLISHED و RELATED بين واجهاتنا العامة والخاصة:

Let’s verify if our policy on the FORWARD chain is set to DROP:

Until now, we’ve added a few rules that allow traffic between our public and private interfaces to proceed through our firewall. However, iptables is not yet informed to direct the traffic because firewall rules configuration is yet to be done. In the next steps, we will add the NAT rules and adjust the permanent rule set to direct traffic.

Adding the NAT Rules to Direct Packets

We’ll perform two separate operations in order for iptables to correctly alter the packets, and streamline communication with the clients and the webserver.

DNAT is the first operation that commences the PREROUTING chain of the nat table. The operation alters the packet’s destination address and enables it to be correctly routed as it passes between networks. However, the clients on the public network will be connecting to our firewall server and will have no information about our private network topology. To pass information with the private network, change the destination address of each packet to allow it to correctly reach our destination web server.

It is crucial to note that we’re focusing on configuring port forwarding. Performing NAT on every packing hitting the firewall is not a part of our tutorial. We will match packets at port 80 to our web server’s private IP address:

The packet will get routed correctly to our web server containing the client’s original address as the source address. Despite attempts made by the server to send the reply directly to that address, there will be no possibility to establish a legitimate TCP connection.

To configure proper routing, we’ll modify the packet’s source address. Let’s edit the source address to our firewall server’s private IP address. After modification, the reply will be sent back to the firewall, which will forward back to the client.

To enable this functionality, add a rule to the POSTROUTING chain of the nat table evaluated right before packets are sent out on the network. Then, match the packets destined for our web server by IP address and port:

Once this rule is in place, our web server should be accessible by pointing our web browser at our firewall machine’s public address:

You’ll see the output:

Nginx Output2

Our port forwarding setup is complete.

Adjust the Permanent Rule Set

After completing the port forwarding setup, we’ll save this to our permanent rule set. If you want to keep the comments in the current rule set, use the iptables-persistent service to save your rules:

You can also open it up and edit manually to keep the comments in your file:

Next, configure the filter table and the nat table to add the FORWARD chain rules and ROUTING rules respectively. Adjusting the nat table will allow us to add PREROUTING and POSTROUTING rules as shown in the example below:

بعد إضافة القيم المذكورة أعلاه، احفظ الملف وأغلقه. بعد ذلك، اكتب الأمر أدناه لاختبار بناء جملة قواعدك:

إذا لم تظهر لك أي أخطاء، فقم بتحميل مجموعة القواعد:

دعنا نتحقق من أن خادم الويب الخاص بنا لا يزال متاحًا من خلال عنوان IP العام لجدار الحماية الخاص بك:

الخاتمة

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

بما أن العملية تعتمد بشكل صريح على أمان شبكتك والمنافذ المستخدمة، فهي آمنة. قد تكون هناك احتمالية لوجود مخاطر إذا لم يكن لديك جدار حماية أمني أو أمان VPN على شبكتك. لذلك، يُنصح بتكوين جدار الحماية كما تمت مناقشته في هذا البرنامج التعليمي. نأمل أن يساعدك هذا الدليل في البقاء آمنًا على الإنترنت عند استخدام شبكتك الخاصة.

لمزيد من استكشاف حلول جدران الحماية الأخرى التي يمكنك تنفيذها على نظامك، تحقق من هذه الموارد من مدونتنا:

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.