مقدمة
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، والتي هي البروتوكولات الأكثر شيوعًا لنقل الحزم في طبقة الشبكة.
- netstat -lntu
سيتم طباعة ذلك:
- جميع المقابس المستمعة (
-l
) - رقم المنفذ (
-n
) - منافذ TCP (
-t
) - منافذ UDP (
-u
)
OutputActive 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
لعرض المقابس الاستماعية مع منفذ مفتوح:
- ss -lntu
سيتم طباعة ذلك:
OutputNetid 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
:
- netstat -na | grep :4000
أو أمر ss
:
- ss -na | grep :4000
يجب أن يظل الإخراج فارغًا، مما يؤكد بذلك أنه لا يتم استخدامه حاليًا، بحيث يمكنك إضافة قواعد المنفذ يدويًا إلى جدار الحماية iptables في النظام.
بالنسبة لمستخدمي Ubuntu والأنظمة التي تعتمد على ufw
استخدم ufw
– العميل سطر الأوامر لجدار الحماية UncomplicatedFirewall.
ستشابه أوامرك:
- 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.
ستكون أوامرك مشابهة للتالي:
- firewall-cmd --add-port=4000/tcp
راجع كيفية إعداد firewalld لتوزيعتك.
ملاحظة:
- سنت أو إس 7/8: “إعداد قواعد لتطبيقاتك / فتح منفذ لمناطقك”
- روكي لينكس 8/9: “إعداد قواعد لتطبيقاتك / فتح منفذ لمناطقك”
بالنسبة لتوزيعات لينكس الأخرى
استخدم iptables لتغيير قواعد تصفية حزم IPv4 للنظام.
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
راجع كيفية إعداد جدار حماية باستخدام iptables لتوزيعتك.
ملاحظة:
- أوبونتو 12.04: “جدار ناري أساسي”
- أوبونتو 14.04: “قبول اتصالات أخرى ضرورية”
اختبار البورت الجديد المفتوح لاتصالات TCP
الآن بعد أن قمت بفتح بورت TCP جديد بنجاح، حان الوقت لاختباره.
أولاً، قم بتشغيل برنامج netcat (nc
) والاستماع (-l
) على البورت (-p
) 4000
، بينما ترسل إخراج ls
إلى أي عميل متصل:
- ls | nc -l -p 4000
الآن، بعد أن يقوم عميل بفتح اتصال TCP على البورت 4000
، سيتلقون إخراج ls
. اترك هذه الجلسة وحدها الآن.
افتح جلسة أخرى في نافذة الطرفية نفسها.
نظرًا لأنك قمت بفتح بورت TCP، استخدم telnet
للتحقق من توصيل TCP. إذا لم يكن الأمر موجودًا، قم بتثبيته باستخدام مدير الحزم الخاص بك.
أدخل عنوان IP الخاص بالخادم ورقم البورت (4000
في هذا المثال) وشغل هذا الأمر:
- telnet localhost 4000
يحاول هذا الأمر فتح اتصال TCP على localhost
على البورت 4000
في هذا المثال.
ستحصل على إخراج مماثل لهذا، مشيرًا إلى أن اتصالًا قد تم بالبرنامج الاستماع (nc
):
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
تم إرسال إخراج ls
(while.sh
، في هذا المثال) أيضًا إلى العميل، مشيرًا إلى نجاح اتصال TCP.
استخدم nmap
للتحقق مما إذا كان البورت (-p
) مفتوحًا:
- nmap localhost -p 4000
سيقوم هذا الأمر بفحص البورت المفتوح:
OutputStarting 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