SSD Nodes Learn
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-07-22

منافذ Linux وكيفية استماع الخدمات

المنفذ هو الطريقة التي يفرز بها الخادم حركة المرور الواردة إلى الخدمة الصحيحة. تعلّم قراءة ما يستمع باستخدام ss، والتمييز بين منفذ محلي ومنفذ عام.

ما هو المنفذ فعلًا

المنفذ رقم يتيح لخادم واحد تشغيل خدمات عديدة في الوقت نفسه من دون أن تختلط حركة المرور الخاصة بها. يملك خادم VPS لديك عنوان IP واحدًا، لكنه قد يشغّل خادم ويب وخادم SSH وقاعدة بيانات في الوقت نفسه. وحين تصل حزمة بيانات، يحتاج نظام التشغيل إلى معرفة أي هذه الخدمات هي وجهتها. رقم المنفذ هو الإجابة. حركة مرور الويب تذهب إلى المنفذ 443، وSSH إلى المنفذ 22. عنوان IP يوصل الحزمة إلى خادمك؛ والمنفذ يوصلها إلى البرنامج الصحيح على ذلك الخادم.

المنفذ رقم بحجم 16 بت: 16 بت تعطي مجالًا من 0 إلى 65535، والقيمة 0 محجوزة، فتتراوح المنافذ عمليًا من 1 إلى 65535. المنافذ الأقل من 1024 هي المنافذ «المعروفة» (well-known)، وتحتاج إلى صلاحيات root لفتحها، ولهذا توجد فيها الخدمات القياسية: 22 لـSSH، و80 لـHTTP، و443 لـHTTPS، و53 لـDNS. أما ما فوق 1024 فمتاح لأي برنامج عادي.

هناك نوعان، TCP وUDP، ورقم المنفذ في أحدهما منفصل عن الرقم نفسه في الآخر. TCP هو البروتوكول القائم على الاتصال الذي تستخدمه معظم الخدمات، مثل SSH وHTTP وقواعد البيانات. أما UDP فهو بلا اتصال، ويُستخدم لأشياء مثل DNS وبعض شبكات VPN. وحين تفتح منفذًا في جدار الحماية، تحدد عادة أيًّا من البروتوكولين تقصد، مثل 22/tcp.

الاستماع يعني أن برنامجًا ينتظر على منفذ

البرنامج الذي يريد استقبال اتصالات يطلب من النواة أن «تستمع» (listen) على منفذ. ومن تلك اللحظة يصبح المنفذ مفتوحًا على الجهاز، ويرد البرنامج على كل ما يصل إليه هناك، رهنًا بما يسمح به جدار الحماية. أما المنفذ الذي لا يستمع عليه شيء فيرفض الاتصالات ببساطة. لذلك فإن أول سؤال في أي فحص أمني هو: ما الذي يستمع، وأين.

الأمر الذي يجيب عن ذلك هو ss:

sudo ss -tlnp

الخيارات تعني: TCP (t)، ومقابس (sockets) الاستماع فقط (l)، ومنافذ رقمية (n، بحيث ترى 22 لا ssh)، والعملية المالكة (p). نتيجة نموذجية:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

عمود Process يخبرك أي برنامج يملك كل منفذ، وهذا ما يتيح لك تعقّب أي شيء لم تقصد تركه يعمل.

عمود Local Address هو الجزء الذي يهم

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

0.0.0.0:22 تعني «الاستماع على كل عنوان IPv4 يملكه هذا الجهاز»، بما في ذلك عنوانه العام. الخدمة قابلة للوصول من الإنترنت عبر IPv4، إن سمح بذلك جدار الحماية.

[::]:80 تعني الشيء نفسه لـIPv6: الاستماع على كل عنوان IPv6، بما في ذلك العنوان العام. كثير من البرامج ترتبط هنا افتراضيًا، وعلى Linux غالبًا ما يقبل مقبس :: عناوين IPv4 أيضًا.

127.0.0.1:5432 تعني «الاستماع على عنوان الاسترجاع الذاتي (loopback) فقط». 127.0.0.1 هو العنوان الذي تستخدمه الآلة للتحدث إلى نفسها، وهو غير قابل للتوجيه من أي مكان آخر. الخدمة المرتبطة به لا يمكن الوصول إليها إلا من الخادم نفسه، ولا يمكن الوصول إليها أبدًا من الإنترنت، مهما كانت إعدادات جدار الحماية لديك. سطر Postgres أعلاه آمن بحكم البنية.

والقاعدة العملية تنبع من ذلك مباشرة: قاعدة بيانات أو ذاكرة تخزين مؤقت (cache) أو لوحة إدارة لا تستخدمها إلا تطبيقاتك الخاصة ينبغي أن ترتبط بـ127.0.0.1، لا بـ0.0.0.0. فإن لم تستمع أبدًا على عنوان عام، فلن يكون هناك ما يصل إليه المهاجم.

الاستماع لا يعني إمكانية الوصول

هناك تمييز أخير يوفر عليك الكثير من الالتباس. كون المنفذ مفتوحًا على الجهاز — أي أن برنامجًا يستمع عليه — أمر مختلف عن كون ذلك المنفذ قابلًا للوصول من الخارج — أي أن جدار الحماية يسمح به. ويجب أن يتحقق الأمران معًا لكي يتمكن عميل بعيد من الاتصال.

إذن هناك طبقتان من التحكم. أنت تقرر ما يستمع، بضبط عنوان الارتباط (bind address) لكل خدمة. وأنت تقرر ما يمكن للعالم الخارجي الوصول إليه، عبر جدار الحماية. الخادم المُدار جيدًا يستخدم الاثنين معًا: الخدمات ترتبط فقط حيث تحتاج إلى ذلك، وجدار الحماية يرفض كل ما لم تسمح به صراحةً. قراءة ما يستمع بواسطة ss هي الخطوة الأولى؛ وتحديد ما يسمح به جدار الحماية هو الخطوة الثانية، ويغطيها أساسيات جدران الحماية باستخدام UFW.

وهناك دقيقة تُوقع كثيرين في الالتباس هنا. IPv4 وIPv6 منفصلان، وجدار الحماية الذي يغطي IPv4 فقط يترك خدمات [::] مفتوحة على IPv6. لهذا الفخ تحديدًا مقالة خاصة به: فخ جدار حماية IPv6.

FAQ

كيف أرى المنافذ المفتوحة على خادم Linux الخاص بي؟

شغّل sudo ss -tlnp لـTCP أو sudo ss -ulnp لـUDP. يسرد هذا كل مقبس استماع، والمنفذ، والعنوان المحلي المرتبط به، والعملية التي تملكه. اقرأ عمود Local Address: 0.0.0.0 أو [::] تعني أن الخدمة مكشوفة للشبكة، بينما 127.0.0.1 تعني أنها تستمع فقط على الجهاز نفسه.

ما الفرق بين 0.0.0.0 و127.0.0.1؟

0.0.0.0 تعني «الاستماع على كل عناوين IPv4»، بما في ذلك العنوان العام، بحيث يمكن الوصول إلى الخدمة من الشبكة. أما 127.0.0.1 فهو عنوان الاسترجاع الذاتي (loopback)، وهو ما تستخدمه الآلة للتحدث إلى نفسها، وهو غير قابل للتوجيه من أي مكان آخر، فالخدمة المرتبطة به لا يمكن الوصول إليها إلا محليًا. اربط الخدمات الداخلية بـ127.0.0.1 حتى لا تُكشَف أبدًا.

هل أحتاج إلى فتح منفذ في جدار الحماية لكي تعمل الخدمة؟

فقط للخدمات التي يجب الوصول إليها من أجهزة أخرى. الخدمة المرتبطة بـ127.0.0.1 لا تحتاج إلى أي قاعدة في جدار الحماية، لأنه لا يوجد أي طرف خارجي يستطيع الوصول إليها أصلًا. أما الخدمة على 0.0.0.0 أو [::] فتحتاج إلى قاعدة في جدار الحماية للسماح بحركة المرور، وينبغي أن تُرفض افتراضيًا حتى تضيف تلك القاعدة.

ما الفرق بين منفذ TCP ومنفذ UDP؟

TCP قائم على الاتصال وتستخدمه معظم الخدمات، مثل SSH وخوادم الويب وقواعد البيانات. أما UDP فهو بلا اتصال وتستخدمه خدمات مثل DNS وبعض شبكات VPN. الرقم نفسه في TCP وUDP يمثل منفذين منفصلين، فـ53/tcp و53/udp مختلفان. وحين تكتب قواعد جدار الحماية، تحدد البروتوكول، مثل 22/tcp.