يتم تشغيل خادم Linux الخاص بك ، وترغب الآن في التحقق مما إذا كان منفذ محدد مفتوحًا حتى تتمكن من الوصول إليه عن بُعد. يعد التحقق من الأبواب المفتوحة مهمة شائعة لمسؤولي النظام ، وهناك بضع طرق مختلفة للقيام بذلك في Linux.
في هذه المقالة ، ستتعلم عدة طرق للتحقق مما إذا كان منفذ مفتوحًا في Linux حتى تتمكن من اختيار الأفضل بالنسبة لك. هل أنت مستعد؟ استمر في القراءة!
المتطلبات
سيكون هذا البرنامج التعليمي عرضًا عمليًا. إذا كنت ترغب في متابعة ، تأكد من وجود ما يلي.
- A Linux computer. This guide uses Ubuntu 20.04, but any recent Linux distribution should work.
- الوصول إلى واجهة سطر الأوامر. إذا كنت تستخدم بيئة سطح مكتب رسومية ، فابحث عن برنامج محاكي لوحة المفاتيح في قائمة التطبيقات الخاصة بك. أو ، إذا قمت بتسجيل الدخول إلى خادم بعيد عبر SSH ،
- A user account with
sudo
privileges. For simplicity, this tutorial uses the root user.
تحقق مما إذا كان منفذًا مفتوحًا في Linux باستخدام netstat
الطريقة الأولى للتحقق مما إذا كان منفذًا مفتوحًا في Linux هي تشغيل الأمر “netstat”. يعرض هذا الأمر اتصالات الشبكة وجداول التوجيه وإحصاءات الواجهة الشبكية العديدة.
يعد الأمر “netstat” جزءًا من حزمة “net-tools” ، وقد لا تأتي هذه الحزمة افتراضيًا مع توزيعة Linux الخاصة بك. في أوبونتو ، قم بتثبيت “netstat” عن طريق تشغيل الأوامر التالية في وحدة التحكم.
لنفترض أن لديك خادم ويب NGINX يعمل وترغب في التحقق مما إذا كان منفذ 80
مفتوحًا. يمكنك القيام بذلك عن طريق تشغيل الأمر التالي. استبدل 80
برقم المنفذ الذي ترغب في التحقق منه.
توجيه العلامات -tulpn
netstat بعرض جميع المنافذ الاستماع. يقوم الأمر grep الأول بالعثور على السطر الذي يحتوي على كلمة LISTEN
في النتيجة وتصفيته. يقوم الأمر grep الثاني بتصفية النتائج لعرض فقط تلك العناصر التي تتطابق مع :80
.
لمعرفة المزيد حول علامات netstat، قم بتشغيل الأمر netstat –help.
إذا كان المنفذ مفتوحًا، فسترى النتيجة التالية. كما يمكنك رؤية، فإن النتيجة تظهر أن المنفذ 80 مفتوحًا على النظام. tcp هو نوع البروتوكول، و :::80
يشير إلى أنه منفذ TCPv6. 0.0.0.0:80
يعني أن المنفذ مفتوح لجميع عناوين IPv4. 80
هو منفذ HTTP الافتراضي الذي يخدم الوصول إلى الموقع على الويب.

التحقق مما إذا كان منفذ مفتوحًا باستخدام ss
الأمر ss
هو أداة أخرى في سطر الأوامر لفحص المنافذ المفتوحة. يعرض هذا الأمر إحصائيات المقبس، والتي يمكنك استخدامها للتحقق مما إذا كانت المنفذ مفتوحًا أم لا. يعرض الأمر ss
معلومات أكثر حول المنافذ المفتوحة من الأدوات الأخرى.
مثل الأمر netstat
، يوجه العلم -t
الأمر ss
لعرض المقابس TCP فقط، -u
لعرض المقابس UDP فقط، و -l
لعرض المقابس الاستماعية فقط. يشير العلم -p
إلى اسم العملية أو PID الذي يستخدم المنفذ.
سترى الناتج التالي إذا كان المنفذ مفتوحًا. كما ترى، يتضمن الناتج اسم العملية و PID لكل منفذ استماع. في هذه الحالة، المنفذ 80 مفتوح، ويستخدم خادم الويب NGINX هذا المنفذ.

التحقق مما إذا كان المنفذ مفتوحًا باستخدام lsof
الأمر lsof
هو أداة مفيدة أخرى لفحص المنافذ المفتوحة. يعني اسم lsof
قائمة الملفات المفتوحة، والتي تعرض معلومات حول الملفات التي تم فتحها على النظام. تشمل هذه المعلومات معرفات الملفات، ومعرفات العمليات، ومعرفات المستخدمين، إلخ.
كيف يساعدك سرد الملفات المفتوحة في تحديد ما إذا كان المنفذ مفتوحًا؟ ربما سمعت بالفعل عبارة “كل شيء في لينكس هو ملف”، وهذه العبارة تعني ما تقوله.
على سبيل المثال، لنفترض أنك ترغب في التحقق مما إذا كان المنفذ 22 مفتوحًا ويمكن لمستخدميك الاتصال بخادم SSH الخاص بك. قم بتشغيل الأمر أدناه لسرد الملفات المفتوحة مع الاتصالات النشطة في المنفذ 22.
العلم: يُشير العلم -i
إلى lsof
بعرض جميع مأخذات الإنترنت المفتوحة. يُظهر العلم -P
أرقام المنافذ بدلاً من أسماء الخدمات. ويُكبِّر العلم -n
بحث DNS وأسماء الخدمات، لذا سترى عناوين IP بدلاً من أسماء الضيوف البعيدة.
إذا كانت البورت مفتوحًا، سترى الناتج التالي. كما ترون، يحتوي الناتج على معلومات حول:
1027 هو معرف العملية لخدمة sshd.
root هو معرف المستخدم الذي يستخدم البورت.
3u و 4u هي وصفي الملف لـ IPv4 و IPv6 على التوالي.
31035 و 31037 هي منافذ الشبكة لـ IPv4 و IPv6 على التوالي.
:22 يشير إلى أن البورت 22 مفتوح لجميع عناوين IPv4 و IPv6.
- (LISTEN) يشير إلى أن البورت يستمع للاتصالات الواردة.
0t0 هو حالة المأخذ، مما يعني أن المأخذ في حالة الاستماع (LISTEN).

التحقق مما إذا كان البورت مفتوحًا باستخدام nmap
حتى الآن، رأيت كيفية التحقق مما إذا كان البورت مفتوحًا على Linux باستخدام سطر الأوامر. ولكن ماذا لو أردت التحقق مما إذا كان البورت مفتوحًا على جهاز بعيد؟ في هذه الحالة، يمكنك استخدام أداة nmap
.
لكن قبل تشغيل nmap
، تنبيه أن هذه الأداة قد لا تكون جزءًا من الحزم الافتراضية في توزيعة Linux الخاصة بك. في هذه الحالة، يجب عليك أولاً تثبيت nmap
عن طريق تشغيل الأمر التالي.
الآن، قم بتشغيل الأمر التالي للتحقق مما إذا كان منفذ مفتوحًا على جهاز بعيد. يختبر هذا الأمر ما إذا كان منفذ 22
مفتوحًا على 159.89.176.25
بحيث يمكن لمستخدمك الدخول إلى خادمك عبر SSH. قم بتبديل عنوان IP حسب الحاجة بالخاص بك.
كما يمكنك رؤية، فإن الإخراج يحتوي على معلومات حول:
- وقت بدء فحص المنفذ (2022-06-30 16:58 UTC).
- عنوان IP للجهاز البعيد (159.89.176.25).
- حالة المنفذ (مفتوح).
- الخدمة التي تستخدم المنفذ (ssh).
- حالة المضيف (متصل).

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

اختبار ما إذا كان منفذ مفتوحًا من خلال سكريبت القابوس
التلقائية دائمًا فكرة جيدة. فحص المنافذ المفتوحة عن طريق تشغيل سكريبت قابوس هو طريقة ممتازة لاختبار عدة منافذ. يمكنك استخدام أي طرق سابقة للتحقق مما إذا كان منفذ مفتوحًا. ولكن، لهذا المثال، ستكتب سكريبت قابوس أساسي يقوم بتشغيل الأمر Netcat nc
.
1. قم بإنشاء ملف باسم check_port.sh في دليلك الرئيسي باستخدام محرر النص المفضل لديك. يستخدم هذا المثال نانو (nano).
2. انسخ الكود العينة أدناه إلى محرر النص الخاص بك. قم بتغيير الرقم 80 برقم المنفذ الذي ترغب في التحقق منه.
الشرط if يتحقق مما إذا كان منفذ 80 مفتوحًا باستخدام أمر nc. تقوم الأرقام 2>&1 و >/dev/null بتوجيه الأخطاء والرسائل الناتجة إلى /dev/null، على التوالي. الملف /dev/null هو ملف خاص يتجاهل كل ما يتلقاه.
إذا كان المنفذ مفتوحًا، فسيقوم نصيب check_port.sh بطباعة كلمة “Online” على وحدة التحكم. في حالة عدم ذلك، سيقوم النص بطباعة كلمة “Offline”.
يجب أن يكون ملف النص المكتوب مشابهًا للشاشة أدناه. احفظ النص واخرج من المحرر.

3. قم بتشغيل السيناريو الشل لبدء التحقق من المنافذ المفتوحة التي حددتها داخل السيناريو.
سترى أحد الإخراجات التالية اعتمادًا على ما إذا كان المنفذ مفتوحًا. في هذه الحالة، يتأكد الرسالة Online
من أن المنفذ مفتوح.

يمكنك استخدام هذا السكريبت الخاص بالشل للتحقق مما إذا كان منفذ مفتوحًا بفاصل زمني أو وظيفة مجدولة. البرمجة النصية مفيدة بشكل خاص عندما تحتاج إلى التحقق من عدة خوادم. تحتاج فقط إلى نسخ هذا السكريبت check_port.sh إلى جميع الخوادم التي تريد التحقق منها وتشغيله باستخدام أدوات CI/CD مثل Jenkins أو Ansible.
اختبار ما إذا كان منفذ مفتوحًا باستخدام PowerShell
PowerShell لديه cmdlet مدمج لاختبار الاتصالات الشبكية يسمى Test-NetConnection
– ولكن هذا الcmdlet متاح فقط على أنظمة Windows. لا تقلق؛ يمكنك ما زلت استخدام PowerShell في Linux للتحقق من المنافذ المفتوحة والاتصالات باستخدام فئة TcpClient.
إذا لم يكن لديك جهاز كمبيوتر Linux الخاص بك PowerShell بعد ، قم بتثبيته باتباع التعليمات في هذا الوثائق من Microsoft: تثبيت PowerShell على Linux.
1. قم بتشغيل PowerShell عن طريق تشغيل الأمر أدناه.

2. بعد ذلك ، قم بإنشاء ملف يسمى Test-Port.ps1 باستخدام محرر النص الخاص بك. يستخدم هذا المثال nano.
3. بعد ذلك ، قم بنسخ الكود أدناه إلى محررك. احفظ الملف واخرج من المحرر بعد ذلك.
ملاحظة: هذا الشيفرة هو مقتطف من أداة اختبار البورتات باستخدام PowerShell المتكاملة.
4. بعد حفظ الشيفرة Test-Port.ps1، قم بتشغيل الأمر أدناه لاختبار البورتات 22، 80، 443، و 53.
يقبل المعامل -ComputerName قائمة بأسماء الأجهزة، FQDN، أو عناوين IP المستهدفة.
يقبل المعامل -Port مصفوفة تحتوي على رقم أو أرقام بورت للاختبار.
كما يمكنك رؤية أدناه، يظهر النتيجة أن البورتين 22 و 80 مفتوحين (True)، في حين أن البورت 443 ليس مفتوحًا (False).

لتشغيل نفس الشيفرة ضد عدة نقاط نهاية مستهدفة وبورتات، قم بتعديل الشيفرة أدناه لإضافة جميع أجهزة الكمبيوتر المستهدفة في معامل ComputerName وأرقام البورت في معامل Port.

الختام
في هذا المقال، تعلمت كيفية التحقق مما إذا كانت البورت مفتوحة أم لا في نظام Linux. كما تعلمت أيضًا كيفية التحقق مما إذا كان البورت مفتوحًا من خلال سكريبت القشرة وباور شيل. الآن، يمكنك استخدام أي من هذه الطرق للتحقق مما إذا كان البورت مفتوحًا على جهازك أو على أي جهاز بعيد.
لكن لا تتوقف هنا، تحقق من المقالات الأخرى لمواصلة تنمية مهاراتك كمسؤول نظام!
Source:
https://adamtheautomator.com/check-if-a-port-is-open-in-linux/