پورت (Port) چیست؟
پورت (Port) یک شماره ۱۶بیتی بین ۰ تا ۶۵۵۳۵ است که در کنار آدرس IP مشخص میکند یک بسته داده باید به کدام سرویس روی سرور تحویل داده شود. آدرس IP تعیین میکند داده به کدام ماشین برسد و شماره پورت تعیین میکند کدام برنامه روی آن ماشین آن را بگیرد؛ به همین دلیل یک سرور با یک آدرس IP میتواند همزمان وب، ایمیل و SSH را سرویس بدهد.
پورت دقیقاً چه کار میکند؟
تشبیه رایج و درستی وجود دارد: آدرس IP نشانی ساختمان است و شماره پورت شماره واحد داخل آن. ترکیب «پروتکل + آدرس IP + شماره پورت» در دو سر ارتباط یک سوکت میسازد و سیستمعامل هر بسته ورودی را بر اساس همین ترکیب به فرایند درست تحویل میدهد.
وقتی مرورگر شما به یک سایت وصل میشود، پورت مقصد ۴۴۳ است اما پورت مبدأ یک شماره موقت روی دستگاه خودتان؛ به همین دلیل دهها تب همزمان به یک سرور باز میشود بدون اینکه پاسخها قاطی شوند.
TCP و UDP؛ دو فضای شمارهگذاری جدا
شماره پورت بهتنهایی معنا ندارد و همیشه به یک پروتکل لایه انتقال گره خورده است. TCP پورت ۴۴۳ و UDP پورت ۴۴۳ دو مقصد کاملاً متفاوتاند و میتوانند به دو سرویس جداگانه تعلق داشته باشند.
- TCP اتصالگراست؛ با یک دستدهی سهمرحلهای شروع میشود، ترتیب بستهها را حفظ میکند و بستههای گمشده را دوباره میفرستد. وب، SSH، ایمیل و پایگاههای داده روی TCP کار میکنند.
- UDP بدون اتصال است؛ تضمینی برای رسیدن یا حفظ ترتیب نمیدهد اما سربار و تأخیر کمتری دارد. DNS، VoIP و HTTP/3 (که روی QUIC سوار است) از UDP استفاده میکنند.
پیامد عملی این تفکیک در فایروال دیده میشود: اگر فقط TCP یک پورت را باز کنید ولی سرویس روی UDP گوش بدهد، ارتباط برقرار نمیشود. DNS نمونه روشنی است که به هر دو روی پورت ۵۳ نیاز دارد.
محدوده پورتها و معنی هر بازه
پورتها بر اساس شماره به سه بازه تقسیم میشوند و این تقسیمبندی را IANA نگهداری میکند:
- ۰ تا ۱۰۲۳ — پورتهای شناختهشده (Well-known): به سرویسهای استاندارد اختصاص دارند. در لینوکس و دیگر سیستمهای یونیکسی، گوشدادن روی این بازه نیازمند دسترسی روت یا قابلیت
CAP_NET_BIND_SERVICEاست. - ۱۰۲۴ تا ۴۹۱۵۱ — پورتهای ثبتشده (Registered): شرکتها و پروژهها میتوانند برای سرویس خود شماره ثبت کنند؛ مانند ۳۳۰۶ برای MySQL یا ۸۰۸۰ برای وبسرورهای پشت پروکسی.
- ۴۹۱۵۲ تا ۶۵۵۳۵ — پورتهای پویا یا موقت (Ephemeral): به سرویس ثابتی تعلق ندارند و سیستمعامل آنها را خودکار بهعنوان پورت مبدأ به اتصالهای خروجی میدهد.
در عمل هر سیستمعامل بازه موقت خودش را دارد و لزوماً از تعریف IANA پیروی نمیکند؛ در لینوکس این بازه با net.ipv4.ip_local_port_range تعیین میشود و پیشفرض هسته ۳۲۷۶۸ تا ۶۰۹۹۹ است.
یک باور قدیمی هم باید اصلاح شود: شماره بالای پورت بهخودیخود نشانه بدافزار نیست. بدافزار روی هر پورتی میتواند گوش بدهد و نمونههای امروزی اغلب از ۴۴۳ استفاده میکنند تا در ترافیک HTTPS دیده نشوند. مهم این است که چه فرایندی پشت پورت نشسته، نه شماره آن.
پورتهای پرکاربرد که باید بشناسید
| پورت | پروتکل | سرویس |
|---|---|---|
| ۲۱ | TCP | FTP (کانال فرمان) |
| ۲۲ | TCP | SSH و SFTP |
| ۲۵، ۴۶۵، ۵۸۷ | TCP | SMTP؛ تبادل بین سرورها و ارسال توسط کاربر |
| ۵۳ | UDP و TCP | DNS |
| ۸۰ | TCP | HTTP |
| ۱۱۰، ۱۴۳، ۹۹۳ | TCP | POP3 و IMAP (993 روی TLS) |
| ۴۴۳ | TCP و UDP | HTTPS؛ UDP برای HTTP/3 |
| ۳۳۰۶ | TCP | MySQL و MariaDB |
| ۳۳۸۹ | TCP | RDP، ریموت دسکتاپ ویندوز |
| ۵۴۳۲ | TCP | PostgreSQL |
| ۶۳۷۹ | TCP | Redis |
پورت کنترلپنلها هم در همین دسته قرار میگیرد؛ برای نمونه دایرکتادمین بهصورت پیشفرض روی TCP پورت ۲۲۲۲ گوش میدهد و cPanel از ۲۰۸۲ و ۲۰۸۳ برای کاربر و ۲۰۸۶ و ۲۰۸۷ برای WHM استفاده میکند. در سمت ایمیل هم پورتهای ۱۴۳ و ۹۹۳ به پروتکل IMAP تعلق دارند که پیامها را روی سرور نگه میدارد، در حالی که POP3 روی پورت ۱۱۰ آنها را به دستگاه کاربر منتقل میکند.
«پورت باز است» یا «بسته است» یعنی چه؟
وقتی یک پورت را از بیرون بررسی میکنید، سه حالت ممکن است ببینید:
- باز (open): سرویسی روی آن پورت در حالت listen است و اتصال را میپذیرد.
- بسته (closed): سرور در دسترس است اما سرویسی گوش نمیدهد؛ سیستمعامل بسته RST برمیگرداند و پاسخ فوری است.
- فیلترشده (filtered): فایروال بسته را بیصدا دور میریزد و پاسخی برنمیگردد؛ نتیجه یک timeout طولانی است.
تفاوت «بسته» و «فیلترشده» در عیبیابی کلیدی است: پاسخ فوری یعنی سرویس بالا نیست و انتظار طولانی معمولاً یعنی مشکل از فایروال است. برای دیدن اینکه چه چیزی روی سرور شما گوش میدهد، در لینوکس از ss -lntup و در ویندوز از netstat -ano استفاده کنید و برای آزمودن دسترسی از بیرون nc -vz host port کافی است. اگر سایت شما روی هاست اشتراکی لینوکس است، این تصمیمها در اختیار شما نیست و فقط پورتهای استانداردی که مدیر سرور تعریف کرده در دسترساند.
فایروال؛ تصمیمگیرنده نهایی درباره پورتها
فایروال در دو لایه عمل میکند: روی خود سرور (nftables و iptables، firewalld یا ufw در لینوکس و Windows Defender Firewall در ویندوز) و در لبه شبکه، پیش از رسیدن ترافیک به سرور. روی یک سرور ابری که دسترسی روت کامل دارید، سیاست فایروال را خودتان تعیین میکنید. اصل درست هم «همهچیز بسته مگر آنچه لازم است» است. همین سختگیری گاهی به قیمت مسدود شدن آیپی خودتان تمام میشود؛ روش رفع بلاک آی پی در فایروال را از پیش بدانید. چند نکته عملی:
- سرویسهای صرفاً محلی را بهجای
0.0.0.0روی127.0.0.1بایند کنید. پایگاه دادهای که فقط وبسرور همان ماشین به آن وصل میشود، دلیلی برای شنیدن روی اینترنت ندارد. - پورتهایی مانند ۳۳۰۶، ۵۴۳۲، ۶۳۷۹ و ۳۳۸۹ نباید بدون محدودیت روی اینترنت باز باشند؛ در صورت نیاز به دسترسی از راه دور، آن را به IPهای مشخص محدود کنید یا از تونل SSH و VPN استفاده کنید.
- قواعد IPv6 را جدا بررسی کنید و پس از هر تغییر، وضعیت را از بیرون شبکه بیازمایید نه از روی خود سرور. بستن یک پورت فقط در IPv4 در حالی که سرور IPv6 فعال دارد، اشتباه رایجی است.
تغییر پورت SSH؛ یک سختسازی سبک، نه راهحل امنیتی
جابهجا کردن SSH از پورت ۲۲ به شمارهای دیگر، حجم تلاشهای خودکار ورود را محسوس کم میکند و لاگها را تمیزتر نگه میدارد. اما این «امنیت از راه پنهانکاری» است: یک اسکن کامل پورتها بهسادگی SSH را در شماره جدید پیدا میکند. پس آن را لایه اول بدانید، نه دفاع اصلی. دفاع اصلی جای دیگری است: ورود با کلید بهجای رمز عبور، غیرفعال کردن PasswordAuthentication، تنظیم PermitRootLogin روی no، محدود کردن دسترسی به IPهای مشخص و استفاده از ابزارهایی مانند fail2ban.
اگر تصمیم به تغییر پورت گرفتید، این ترتیب را رعایت کنید تا از سرور بیرون نمانید: شمارهای خارج از بازه پورتهای موقت انتخاب کنید؛ ابتدا پورت جدید را در فایروال باز کنید؛ در سیستمهای مبتنی بر SELinux مانند Rocky و AlmaLinux آن را با semanage port -a -t ssh_port_t -p tcp <port> مجاز کنید؛ سپس sshd را ریاستارت کنید و پیش از بستن نشست فعلی، با ترمینالی دیگر ورود از پورت جدید را بیازمایید. اگر ترجیح میدهید هاردنینگ و پیکربندی فایروال را به تیم فنی بسپارید، خدمات مدیریت سرور همین کارها را پوشش میدهد.
جمعبندی
پورت آدرس سرویسهاست نه آدرس ماشین، و شمارهاش فقط در کنار TCP یا UDP معنا دارد. «باز بودن» یک پورت حاصل همزمانی دو چیز است: سرویسی که گوش میدهد و فایروالی که اجازه میدهد. اگر هر از چندی با ss -lntup فهرست پورتهای listen سرورتان را مرور کنید، بخش بزرگی از سطح حمله را پیش از بروز مشکل میبندید.
