كيفية فتح منفذ على نظام Linux

مقدمة

A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.

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

تُعرف المنافذ الأولى 1024 (أرقام المنافذ 0 إلى 1023) باسم أرقام المنافذ المعروفة جيدًا وتُحجز للخدمات الأكثر استخدامًا. تشمل هذه SSH (منفذ 22)، HTTP (منفذ 80)، HTTPS (منفذ 443).

تُعرف أرقام المنافذ التي تزيد عن 1024 باسم منافذ العابر.

  • تُعرف أرقام المنافذ 1024 إلى 49151 بأنها المنافذ المسجلة/المستخدم.
  • تُعرف أرقام المنافذ 49152 إلى 65535 بأنها المنافذ الديناميكية/الخاصة.

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

نشر تطبيقاتك من GitHub باستخدام منصة تطبيقات DigitalOcean. دع DigitalOcean تركز على توسيع تطبيقك.

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

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

  • المعرفة في استخدام محطة العمل.

عرض كافة المنافذ المفتوحة

قبل فتح منفذ في لينكس، يجب عليك التحقق من قائمة جميع المنافذ المفتوحة، واختيار منفذ فاني يُفتح ليس في تلك القائمة.

استخدم أمر netstat لعرض جميع المنافذ المفتوحة، بما في ذلك بروتوكولات TCP و UDP، والتي هي البروتوكولات الأكثر شيوعًا لنقل الحزم في طبقة الشبكة.

  1. netstat -lntu

سيتم طباعة ذلك:

  • جميع المقابس المستمعة (-l)
  • رقم المنفذ (-n)
  • منافذ TCP (-t)
  • منافذ UDP (-u)
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 ::1:5432 :::* LISTEN tcp6 0 0 ::1:6379 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN

ملاحظة: إذا لم يكن لديك توزيعة netstat، يمكنك استخدام أمر ss لعرض المنافذ المفتوحة عن طريق التحقق من المقابس الاستماعية.

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

  1. ss -lntu

سيتم طباعة ذلك:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::1]:5432 0.0.0.0:* tcp LISTEN 0 128 [::1]:6379 0.0.0.0:* tcp LISTEN 0 128 [::]:22 0.0.0.0:*

هذا يعطي نفس المنافذ المفتوحة تقريبًا كـ netstat.

فتح منفذ على لينكس للسماح باتصالات TCP

الآن، قم بفتح منفذ مغلق وجعله يستمع لاتصالات TCP.

لأغراض هذا البرنامج التعليمي، ستقوم بفتح منفذ 4000. ومع ذلك، إذا كان هذا المنفذ غير مفتوح في نظامك، فلا تتردد في اختيار منفذ مغلق آخر. فقط تأكد من أنه أكبر من 1023.

تأكد من أن منفذ 4000 لا يتم استخدامه باستخدام أمر netstat:

  1. netstat -na | grep :4000

أو أمر ss:

  1. ss -na | grep :4000

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

بالنسبة لمستخدمي Ubuntu والأنظمة التي تعتمد على ufw

استخدم ufw – العميل سطر الأوامر لجدار الحماية UncomplicatedFirewall.

ستشابه أوامرك:

  1. sudo ufw allow 4000

ارجع إلى كيفية إعداد إعدادات جدار حماية ufw لتوزيعتك.

ملاحظة:

  • Ubuntu 14.0.4: “السماح بنطاقات المنافذ المحددة”
  • أوبونتو 16.0.4/18.0.4/20.0.4/22.0.4: “السماح باتصالات أخرى / نطاقات معينة للمنافذ”
  • ديبيان 9/10/11: “السماح باتصالات أخرى / نطاقات معينة للمنافذ”

بالنسبة لسنت أو إس وأنظمة تستخدم الـ firewalld

استخدم firewall-cmd – واجهة سطر الأوامر لبرنامج الـ firewalld.

ستكون أوامرك مشابهة للتالي:

  1. firewall-cmd --add-port=4000/tcp

راجع كيفية إعداد firewalld لتوزيعتك.

ملاحظة:

  • سنت أو إس 7/8: “إعداد قواعد لتطبيقاتك / فتح منفذ لمناطقك”
  • روكي لينكس 8/9: “إعداد قواعد لتطبيقاتك / فتح منفذ لمناطقك”

بالنسبة لتوزيعات لينكس الأخرى

استخدم iptables لتغيير قواعد تصفية حزم IPv4 للنظام.

  1. iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

راجع كيفية إعداد جدار حماية باستخدام iptables لتوزيعتك.

ملاحظة:

  • أوبونتو 12.04: “جدار ناري أساسي”
  • أوبونتو 14.04: “قبول اتصالات أخرى ضرورية”

اختبار البورت الجديد المفتوح لاتصالات TCP

الآن بعد أن قمت بفتح بورت TCP جديد بنجاح، حان الوقت لاختباره.

أولاً، قم بتشغيل برنامج netcat (nc) والاستماع (-l) على البورت (-p) 4000، بينما ترسل إخراج ls إلى أي عميل متصل:

  1. ls | nc -l -p 4000

الآن، بعد أن يقوم عميل بفتح اتصال TCP على البورت 4000، سيتلقون إخراج ls. اترك هذه الجلسة وحدها الآن.

افتح جلسة أخرى في نافذة الطرفية نفسها.

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

أدخل عنوان IP الخاص بالخادم ورقم البورت (4000 في هذا المثال) وشغل هذا الأمر:

  1. telnet localhost 4000

يحاول هذا الأمر فتح اتصال TCP على localhost على البورت 4000 في هذا المثال.

ستحصل على إخراج مماثل لهذا، مشيرًا إلى أن اتصالًا قد تم بالبرنامج الاستماع (nc):

Output
Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. while.sh

تم إرسال إخراج ls (while.sh، في هذا المثال) أيضًا إلى العميل، مشيرًا إلى نجاح اتصال TCP.

استخدم nmap للتحقق مما إذا كان البورت (-p) مفتوحًا:

  1. nmap localhost -p 4000

سيقوم هذا الأمر بفحص البورت المفتوح:

Output
Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 4000/tcp open remoteanything Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

تم فتح البورت. لقد قمت بنجاح بفتح بورت جديد على نظام Linux الخاص بك.

ملاحظة: nmap يقوم فقط بسرد البورتات المفتوحة التي تحتوي على تطبيق يستمع حاليًا. إذا لم تستخدم أي تطبيق يستمع، مثل netcat، ستعرض هذه العملية البورت 4000 كمغلق لأنه لا يوجد أي تطبيق يستمع على هذا البورت حاليًا. بالمثل، telnet لن يعمل أيضًا لأنه يحتاج أيضًا إلى تطبيق يستمع. هذا هو السبب في أن nc هو أداة مفيدة جدًا. تحاكي هذه البيئات في أمر بسيط.

ولكن هذا مؤقت فقط، حيث سيتم إعادة تعيين التغييرات في كل مرة تقوم فيها بإعادة تشغيل النظام.

التثبيت الدائم للقوانين

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

بالنسبة لجدار الحماية ufw

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

بالنسبة لـ firewalld

ستحتاج إلى تطبيق العلم --permanent.

يرجى الرجوع إلى كيفية إعداد firewalld لتوزيعتك.

ملاحظة:

  • CentOS 7/8: “ضبط قواعد التطبيقات الخاصة بك”
  • Rocky Linux 8/9: “ضبط قواعد التطبيقات الخاصة بك”

بالنسبة لـ iptables

ستحتاج إلى حفظ قواعد التكوين. توصي هذه البرامج التعليمية بـ iptables-persistent.

يرجى الرجوع إلى كيفية إعداد جدار ناري باستخدام iptables لتوزيعتك.

ملاحظة:

  • Ubuntu 12.04: “حفظ قواعد Iptables”
  • Ubuntu 14.04: “حفظ تكوين Iptables الخاص بك”

الاستنتاج

في هذا البرنامج التعليمي، تعلمت كيفية فتح منفذ جديد على نظام التشغيل Linux وإعداده لاستقبال الاتصالات الواردة. كما استخدمت netstat، ss، telnet، nc، و nmap.

تابع تعلمك مع كيفية عمل جدار الحماية Iptables، فهم عمق جدار الحماية Iptables وهندسة Netfilter، فهم المقابس (Sockets)، و كيفية استخدام أدوات مثل Top، Netstat، Du، وغيرها لمراقبة موارد الخادم.

Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux