مقدمة
المنفذ هو نقطة اتصال نهائية. في نظام التشغيل، يُفتح المنفذ أو يُغلق أمام حزم البيانات لعمليات أو خدمات شبكة محددة.
عادةً، تُحدد المنافذ خدمة شبكة مُخصصة لها. يُمكن تغيير ذلك بتكوين الخدمة يدويًا لاستخدام منفذ مختلف، ولكن عادةً ما يُمكن استخدام الإعدادات الافتراضية.
تُسمى أول ١٠٢٤ منفذًا (أرقام المنافذ من ٠ إلى ١٠٢٣) بأرقام المنافذ المعروفة، وهي مخصصة للخدمات الأكثر شيوعًا. وتشمل هذه: SSH (المنفذ ٢٢)، وHTTP (المنفذ ٨٠)، وHTTPS (المنفذ ٤٤٣).
تُسمى أرقام المنافذ الأعلى من 1024 بالمنافذ المؤقتة.
- تُسمى المنافذ من 1024 إلى 49151 بالمنافذ المسجلة/المستخدمة.
- تُسمى المنافذ من 49152 إلى 65535 بالمنافذ الديناميكية/الخاصة.
في هذا البرنامج التعليمي، سوف تفتح منفذًا مؤقتًا في Linux، حيث تستخدم معظم الخدمات الشائعة منافذ معروفة.
المتطلبات الأساسية
- المعرفة بكيفية استخدام المحطة
قائمة بجميع المنافذ المفتوحة
قبل فتح منفذ في Linux، يجب عليك التحقق من قائمة جميع المنافذ المفتوحة وتحديد منفذ مؤقت لفتحه غير موجود في تلك القائمة.
استخدم الأمر netstat لإدراج جميع المنافذ المفتوحة، بما في ذلك TCP وUDP، وهي البروتوكولات الأكثر شيوعًا لنقل الحزم على طبقة الشبكة.
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تأكد من حصولك على إخراج متسق باستخدام الأمر ss لإدراج مآخذ الاستماع ذات المنافذ المفتوحة:
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.
فتح منفذ في Linux للسماح باتصالات TCP
الآن، افتح المنفذ المغلق واجعله يستمع لاتصالات TCP.
لأغراض هذا البرنامج التعليمي، ستفتح المنفذ 4000. إذا لم يكن هذا المنفذ مفتوحًا على نظامك، فلا تتردد في اختيار منفذ مغلق آخر. فقط تأكد من أن حجمه أكبر من 1023.
تأكد من عدم استخدام المنفذ 4000 باستخدام الأمر netstat:
netstat -na | grep :4000أو الأمر ss:
ss -na | grep :4000يجب ترك الإخراج فارغًا، لذا تأكد من أنه غير مستخدم حاليًا، حتى تتمكن من إضافة قواعد المنفذ يدويًا إلى جدار حماية نظام iptables.
لمستخدمي Ubuntu والأنظمة المستندة إلى ufw
استخدم ufw – عميل سطر الأوامر لجدار حماية خالٍ من المتاعب.
أوامرك مشابهة لما يلي:
sudo ufw allow 4000لأنظمة CentOS والأنظمة المستندة إلى جدار الحماية
استخدم firewall-cmd – عميل سطر الأوامر لبرنامج daemon firewalld.
أوامرك مشابهة لما يلي:
firewall-cmd --add-port=4000/tcpلتوزيعات لينكس الأخرى
استخدم iptables لتعديل قواعد تصفية حزم IPv4 الخاصة بالنظام.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPTاختبار المنفذ المفتوح حديثًا لاتصالات 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):
Output
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.shيتم أيضًا إرسال إخراج ls (في هذا المثال while.sh) إلى العميل، مما يشير إلى اتصال TCP ناجح.
استخدم nmap للتحقق من أن المنفذ مفتوح (-p):
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تم فتح المنفذ. لقد نجحت في فتح منفذ جديد على نظام لينكس الخاص بك.
لكن هذا مؤقت فقط، حيث يتم إعادة تعيين التغييرات في كل مرة تقوم فيها بإعادة تشغيل النظام.
قواعد مستدامة
النهج الموضح في هذه المقالة يُحدّث قواعد جدار الحماية مؤقتًا فقط حتى يتم إيقاف تشغيل النظام أو إعادة تشغيله. لذا، يجب تكرار الخطوات نفسها لإعادة فتح المنفذ نفسه بعد إعادة التشغيل.
لجدار الحماية ufw
لا تُعاد ضبط قواعد جدار الحماية (ufw) عند إعادة التشغيل. وذلك لأنها مُدمجة في عملية التشغيل، حيث تُخزّن النواة قواعد جدار الحماية باستخدام ufw من خلال تطبيق ملفات التكوين المناسبة.
لجدار الحماية
إذا كنت تريد إضافة المنفذ إلى تكوين جدار الحماية الدائم وتطبيق التغييرات على الفور، فيمكنك استخدام العلامتين --permanent و--reload:
sudo firewall-cmd --permanent --add-port=4000/tcp
sudo firewall-cmd --reloadلـ iptables
يجب عليك حفظ قواعد التكوين واستخدام الأمر iptables-persistent.
نتيجة
في هذا البرنامج التعليمي، تعلمت كيفية فتح منفذ جديد في لينكس وتهيئته للاتصالات الواردة. كما استخدمتَ netstat وss وtelnet وnc وnmap.









