مفاهیم پایه

پورت شبکه چیست؟ آشنایی با پورت‌های رایج سرور و نکات امنیتی آن‌ها

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

مفاهیم پایهپورت شبکه چیست؟آشنایی با پورت‌های رایجسرور و نکات امنیتی آن‌هامجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

پورت عددی بین ۰ تا ۶۵۵۳۵ است که مشخص می‌کند داده‌ای که به یک آی‌پی می‌رسد به کدام برنامه تحویل داده شود. آی‌پی آدرس ساختمان و پورت شمارهٔ واحد است. سرویس‌های رایج پورت‌های شناخته‌شده‌ای دارند: SSH روی ۲۲، HTTP روی ۸۰، HTTPS روی ۴۴۳ و MySQL روی ۳۳۰۶. روی سرور فقط پورت‌هایی را که واقعاً لازم‌اند در فایروال باز کنید و سرویس‌های داخلی مثل دیتابیس را روی localhost نگه دارید.

پورت چیست؟ یک تشبیه ساده

فرض کنید آی‌پی سرور آدرس یک ساختمان اداری است. وقتی بسته‌ای به این ساختمان می‌رسد، هنوز معلوم نیست باید به کدام واحد تحویل داده شود: واحد وب‌سایت، واحد ایمیل یا واحد دیتابیس. شمارهٔ پورت همان شمارهٔ واحد است. هر برنامه‌ای که می‌خواهد از شبکه داده بگیرد، روی یک پورت مشخص «گوش می‌دهد» و سیستم‌عامل هر بسته را با توجه به شمارهٔ پورت مقصدش به برنامهٔ درست می‌رساند.

به همین دلیل روی یک سرور با یک آی‌پی می‌توانید هم‌زمان وب‌سرور، سرور SSH، دیتابیس و ده‌ها سرویس دیگر اجرا کنید؛ هرکدام پورت خودش را دارد. ترکیب آی‌پی و پورت، مثل 203.0.113.10:443، دقیقاً یک سرویس را روی یک سرور مشخص می‌کند.

پورت داده را به برنامهٔ درست می‌رساند
بستهپورت مقصدتحویلکاربر203.0.113.10:443آی‌پی سرورآدرس ساختمانپورت ۴۴۳شمارهٔ واحدNginxبرنامهٔ گیرندهبستهپورت مقصدتحویلکاربر203.0.113.10:443آی‌پی سرورآدرس ساختمانپورت ۴۴۳شمارهٔ واحدNginxبرنامهٔ گیرنده
شکل ۱ آی‌پی سرور را پیدا می‌کند و شمارهٔ پورت تعیین می‌کند داده به کدام برنامه برسد.

پورت‌های TCP و UDP

پورت‌ها در دو پروتکل اصلی لایهٔ انتقال تعریف می‌شوند و پورت ۵۳ در TCP با پورت ۵۳ در UDP دو چیز جداگانه است:

  • TCP: اتصال‌محور و مطمئن؛ پیش از ارسال داده اتصال برقرار می‌شود، ترتیب بسته‌ها حفظ می‌شود و بسته‌های گم‌شده دوباره ارسال می‌شوند. وب، SSH، ایمیل و دیتابیس‌ها از TCP استفاده می‌کنند.
  • UDP: بدون اتصال و سبک؛ داده بدون تضمین تحویل ارسال می‌شود. برای DNS، تماس صوتی و تصویری، بازی‌های آنلاین و پروتکل QUIC (پایهٔ HTTP/3) کاربرد دارد، چون سرعت و تأخیر کم مهم‌تر از ارسال دوبارهٔ هر بسته است.

هنگام باز کردن پورت در فایروال باید پروتکل را هم مشخص کنید؛ مثلاً 443/tcp برای HTTPS و در صورت استفاده از HTTP/3، 443/udp هم لازم است.

سه دستهٔ پورت‌ها

بازهٔ پورت‌ها از ۰ تا ۶۵۵۳۵ است و به سه دسته تقسیم می‌شود:

  • پورت‌های شناخته‌شده (۰ تا ۱۰۲۳): برای سرویس‌های استاندارد رزرو شده‌اند. در لینوکس فقط برنامه‌ای با دسترسی root (یا قابلیت مخصوص) می‌تواند روی این پورت‌ها گوش دهد.
  • پورت‌های ثبت‌شده (۱۰۲۴ تا ۴۹۱۵۱): نرم‌افزارهای مشخصی مثل MySQL، PostgreSQL و Redis معمولاً از پورت‌های این بازه استفاده می‌کنند.
  • پورت‌های پویا (۴۹۱۵۲ به بالا): سیستم‌عامل از این بازه برای سمت کلاینت اتصال‌ها پورت موقت انتخاب می‌کند.

پورت‌های رایجی که روی سرور می‌بینید

پورت پروتکل سرویس
22 TCP SSH و SFTP
25 TCP ارسال ایمیل بین سرورها (SMTP)
53 UDP/TCP DNS
80 TCP وب بدون رمزنگاری (HTTP)
443 TCP/UDP وب امن (HTTPS و HTTP/3)
587 و 465 TCP ارسال ایمیل توسط کلاینت با احراز هویت
993 TCP دریافت ایمیل امن (IMAPS)
3306 TCP MySQL و MariaDB
5432 TCP PostgreSQL
6379 TCP Redis
3389 TCP Remote Desktop ویندوز (RDP)

برنامه‌های توسعه هم معمولاً پورت‌های قراردادی دارند؛ مثلاً Node.js و فریم‌ورک‌های فرانت‌اند اغلب روی ۳۰۰۰ و برنامه‌های پایتونی روی ۸۰۰۰ اجرا می‌شوند. این پورت‌ها نباید مستقیم روی اینترنت باز باشند؛ معمولاً Nginx روی ۸۰ و ۴۴۳ درخواست‌ها را می‌گیرد و به آن‌ها می‌رساند.

root@server: ~
$ ss -tulpnNetid State  Local Address:Port  Processtcp   LISTEN 0.0.0.0:22          users:(("sshd",...))tcp   LISTEN 0.0.0.0:443         users:(("nginx",...))tcp   LISTEN 127.0.0.1:5432      users:(("postgres",...))udp   UNCONN 127.0.0.53:53       users:(("systemd-resolve",...))$ 
شکل ۲ SSH و Nginx از بیرون در دسترس‌اند؛ PostgreSQL و DNS محلی فقط روی localhost گوش می‌دهند.

دیدن پورت‌های باز روی سرور

برای اینکه بدانید کدام برنامه روی کدام پورت گوش می‌دهد:

sudo ss -tulpn

گزینه‌ها یعنی TCP، UDP، فقط پورت‌های در حال گوش دادن، نمایش عددی و نام فرایند. به ستون آدرس دقت کنید: 0.0.0.0:80 یعنی از همهٔ شبکه‌ها در دسترس است و 127.0.0.1:3306 یعنی فقط از داخل خود سرور.

برای بررسی از بیرون، یعنی دیدن اینکه کدام پورت‌ها واقعاً از اینترنت قابل دسترسی‌اند، از کامپیوتر دیگری با ابزار nc یا nmap تست کنید:

nc -vz 203.0.113.10 22
nmap -Pn 203.0.113.10

فقط سرورهایی را اسکن کنید که مالکشان هستید؛ اسکن سرورهای دیگران ممکن است تخلف حساب شود.

پورت‌ها و امنیت سرور

هر پورت باز یک در ورودی است. هرچه درهای کمتری باز باشد، سطح حمله کوچک‌تر است. چند اصل ساده:

  1. پیش‌فرض بسته: فایروال را طوری تنظیم کنید که همهٔ ورودی‌ها بسته باشد و فقط پورت‌های لازم را صریحاً باز کنید. آموزش کامل در فایروال UFW در اوبونتو آمده است.
  2. سرویس‌های داخلی روی localhost: دیتابیس، Redis و پنل‌های مدیریتی را روی 127.0.0.1 نگه دارید. Redisی که بدون رمز روی اینترنت باز باشد، یکی از رایج‌ترین راه‌های نفوذ به سرورهاست.
  3. محدود کردن به آی‌پی: اگر سرویسی باید از بیرون در دسترس باشد اما فقط برای شما، آن را در فایروال فقط برای آی‌پی‌های مشخص باز کنید.
  4. تغییر پورت SSH: تغییر پورت ۲۲ امنیت واقعی ایجاد نمی‌کند، اما حجم تلاش‌های خودکار را به‌شدت کم می‌کند. امنیت اصلی را ورود با کلید تأمین می‌کند؛ مراحل در کلید SSH و تغییر پورت آمده است.
  5. داکر و فایروال: پورت‌هایی که داکر با -p منتشر می‌کند، ممکن است قوانین UFW را دور بزنند. سرویس‌های داخلی را با -p 127.0.0.1:port:port منتشر کنید.

پورت مبدأ و پورت مقصد: هر اتصال دو سر دارد

تا اینجا بیشتر از پورتی صحبت کردیم که سرور روی آن گوش می‌دهد؛ یعنی پورت مقصد. اما هر اتصال یک پورت مبدأ هم دارد. وقتی مرورگر شما به example.com:443 وصل می‌شود، سیستم‌عامل کامپیوترتان یک پورت موقت از بازهٔ پویا (مثلاً ۵۱۲۳۴) برای سمت شما انتخاب می‌کند. هر اتصال با چهار مقدار شناخته می‌شود: آی‌پی و پورت مبدأ، آی‌پی و پورت مقصد. به همین دلیل یک کامپیوتر می‌تواند هم‌زمان ده‌ها تب باز به یک سایت داشته باشد؛ هر تب پورت مبدأ متفاوتی دارد.

این مفهوم در دو جا کاربرد عملی پیدا می‌کند. اول در فایروال‌ها: اگر قوانین خروجی سرور را خیلی سخت‌گیرانه ببندید و پورت‌های پویا را در نظر نگیرید، پاسخ اتصال‌ها برنمی‌گردد (فایروال‌های امروزی با ردیابی وضعیت اتصال این مشکل را خودکار حل می‌کنند). دوم در عیب‌یابی: وقتی در خروجی ss یا لاگ‌ها اتصالی را می‌بینید، پورت مبدأ بزرگ و تصادفی طبیعی است و نشانهٔ مشکل نیست.

پورت و پروتکل یکی نیستند

یک اشتباه رایج این است که پورت را با پروتکل یکی بدانیم. پورت ۴۴۳ «قرارداد» HTTPS است، اما هر برنامه‌ای می‌تواند روی آن گوش دهد و HTTPS هم می‌تواند روی پورت دیگری اجرا شود (مثلاً https://example.com:8443). پورت فقط مقصد را مشخص می‌کند و اینکه چه زبانی روی آن صحبت شود، به برنامه بستگی دارد. به همین دلیل فایروال‌های ساده که فقط بر اساس شمارهٔ پورت تصمیم می‌گیرند، محتوای ترافیک را نمی‌شناسند.

همچنین برخی شبکه‌ها پورت‌های خاصی را در مسیر محدود می‌کنند. برای مثال، بسیاری از ارائه‌دهندگان ابری ارسال ایمیل از پورت ۲۵ را به‌طور پیش‌فرض می‌بندند تا از ارسال اسپم جلوگیری کنند. اگر سرویسی از بیرون در دسترس نیست، علاوه بر فایروال سرور، محدودیت‌های شبکه را هم در نظر بگیرید.

لایه‌های دفاع از پورت‌ها
فایروالپیش‌فرض بسته؛ فقط ۲۲، ۸۰ و ۴۴۳ باز
آدرس گوش دادنسرویس‌های داخلی روی 127.0.0.1
احراز هویتکلید SSH، رمز قوی دیتابیس و Redis
به‌روزرسانیوصلهٔ امنیتی برنامه‌هایی که پشت پورت‌اند
شکل ۳ امنیت پورت‌ها چندلایه است؛ هیچ لایه‌ای به‌تنهایی کافی نیست.

عیب‌یابی سریع مشکلات پورت

  • Connection refused: روی آن پورت هیچ برنامه‌ای گوش نمی‌دهد یا فقط روی localhost است. راهنمای کامل در خطای Connection refused آمده است.
  • Connection timed out: فایروال (در سرور یا مسیر) بسته را بی‌صدا دور می‌ریزد.
  • Address already in use: برنامهٔ دیگری زودتر همان پورت را گرفته است؛ با ss -tlnp آن را پیدا کنید.

دستورهای شبکه و مدیریتی بیشتر را در دستورات پرکاربرد لینوکس ببینید. سرورهای کلودیفای، چه سرور ایران و چه خارج، با دسترسی کامل root تحویل داده می‌شوند و تنظیم پورت‌ها و فایروال کاملاً در اختیار شماست.

سؤالات متداول

چند پورت روی یک سرور وجود دارد؟

برای هر یک از پروتکل‌های TCP و UDP، ۶۵۵۳۶ پورت (از ۰ تا ۶۵۵۳۵) وجود دارد. در عمل فقط تعداد کمی از آن‌ها روی هر سرور توسط برنامه‌ها استفاده می‌شوند.

آیا باز بودن پورت خطرناک است؟

پورت باز به‌تنهایی خطر نیست؛ خطر در برنامه‌ای است که پشت آن گوش می‌دهد. اگر آن برنامه آسیب‌پذیر یا بدون رمز باشد، از راه آن پورت قابل سوءاستفاده است. فقط پورت‌های لازم را باز نگه دارید.

چرا برنامه‌ام روی پورت ۸۰ اجرا نمی‌شود؟

در لینوکس پورت‌های زیر ۱۰۲۴ نیاز به دسترسی root دارند. معمولاً برنامه را روی پورتی مثل ۸۰۰۰ اجرا می‌کنند و Nginx را روی ۸۰ و ۴۴۳ قرار می‌دهند تا درخواست‌ها را به آن برساند.

تفاوت پورت TCP و UDP چیست؟

TCP اتصال برقرار می‌کند و تحویل مطمئن و مرتب داده را تضمین می‌کند؛ UDP بدون اتصال و سریع‌تر است اما تحویل را تضمین نمی‌کند. پورت با شمارهٔ یکسان در این دو پروتکل مستقل از هم است.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.