پورت عددی بین ۰ تا ۶۵۵۳۵ است که مشخص میکند دادهای که به یک آیپی میرسد به کدام برنامه تحویل داده شود. آیپی آدرس ساختمان و پورت شمارهٔ واحد است. سرویسهای رایج پورتهای شناختهشدهای دارند: SSH روی ۲۲، HTTP روی ۸۰، HTTPS روی ۴۴۳ و MySQL روی ۳۳۰۶. روی سرور فقط پورتهایی را که واقعاً لازماند در فایروال باز کنید و سرویسهای داخلی مثل دیتابیس را روی localhost نگه دارید.
پورت چیست؟ یک تشبیه ساده
فرض کنید آیپی سرور آدرس یک ساختمان اداری است. وقتی بستهای به این ساختمان میرسد، هنوز معلوم نیست باید به کدام واحد تحویل داده شود: واحد وبسایت، واحد ایمیل یا واحد دیتابیس. شمارهٔ پورت همان شمارهٔ واحد است. هر برنامهای که میخواهد از شبکه داده بگیرد، روی یک پورت مشخص «گوش میدهد» و سیستمعامل هر بسته را با توجه به شمارهٔ پورت مقصدش به برنامهٔ درست میرساند.
به همین دلیل روی یک سرور با یک آیپی میتوانید همزمان وبسرور، سرور SSH، دیتابیس و دهها سرویس دیگر اجرا کنید؛ هرکدام پورت خودش را دارد. ترکیب آیپی و پورت، مثل 203.0.113.10:443، دقیقاً یک سرویس را روی یک سرور مشخص میکند.
پورتهای 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 روی ۸۰ و ۴۴۳ درخواستها را میگیرد و به آنها میرساند.
$ 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",...))$
دیدن پورتهای باز روی سرور
برای اینکه بدانید کدام برنامه روی کدام پورت گوش میدهد:
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
فقط سرورهایی را اسکن کنید که مالکشان هستید؛ اسکن سرورهای دیگران ممکن است تخلف حساب شود.
پورتها و امنیت سرور
هر پورت باز یک در ورودی است. هرچه درهای کمتری باز باشد، سطح حمله کوچکتر است. چند اصل ساده:
- پیشفرض بسته: فایروال را طوری تنظیم کنید که همهٔ ورودیها بسته باشد و فقط پورتهای لازم را صریحاً باز کنید. آموزش کامل در فایروال UFW در اوبونتو آمده است.
- سرویسهای داخلی روی localhost: دیتابیس، Redis و پنلهای مدیریتی را روی
127.0.0.1نگه دارید. Redisی که بدون رمز روی اینترنت باز باشد، یکی از رایجترین راههای نفوذ به سرورهاست. - محدود کردن به آیپی: اگر سرویسی باید از بیرون در دسترس باشد اما فقط برای شما، آن را در فایروال فقط برای آیپیهای مشخص باز کنید.
- تغییر پورت SSH: تغییر پورت ۲۲ امنیت واقعی ایجاد نمیکند، اما حجم تلاشهای خودکار را بهشدت کم میکند. امنیت اصلی را ورود با کلید تأمین میکند؛ مراحل در کلید SSH و تغییر پورت آمده است.
- داکر و فایروال: پورتهایی که داکر با
-pمنتشر میکند، ممکن است قوانین UFW را دور بزنند. سرویسهای داخلی را با-p 127.0.0.1:port:portمنتشر کنید.
پورت مبدأ و پورت مقصد: هر اتصال دو سر دارد
تا اینجا بیشتر از پورتی صحبت کردیم که سرور روی آن گوش میدهد؛ یعنی پورت مقصد. اما هر اتصال یک پورت مبدأ هم دارد. وقتی مرورگر شما به example.com:443 وصل میشود، سیستمعامل کامپیوترتان یک پورت موقت از بازهٔ پویا (مثلاً ۵۱۲۳۴) برای سمت شما انتخاب میکند. هر اتصال با چهار مقدار شناخته میشود: آیپی و پورت مبدأ، آیپی و پورت مقصد. به همین دلیل یک کامپیوتر میتواند همزمان دهها تب باز به یک سایت داشته باشد؛ هر تب پورت مبدأ متفاوتی دارد.
این مفهوم در دو جا کاربرد عملی پیدا میکند. اول در فایروالها: اگر قوانین خروجی سرور را خیلی سختگیرانه ببندید و پورتهای پویا را در نظر نگیرید، پاسخ اتصالها برنمیگردد (فایروالهای امروزی با ردیابی وضعیت اتصال این مشکل را خودکار حل میکنند). دوم در عیبیابی: وقتی در خروجی ss یا لاگها اتصالی را میبینید، پورت مبدأ بزرگ و تصادفی طبیعی است و نشانهٔ مشکل نیست.
پورت و پروتکل یکی نیستند
یک اشتباه رایج این است که پورت را با پروتکل یکی بدانیم. پورت ۴۴۳ «قرارداد» HTTPS است، اما هر برنامهای میتواند روی آن گوش دهد و HTTPS هم میتواند روی پورت دیگری اجرا شود (مثلاً https://example.com:8443). پورت فقط مقصد را مشخص میکند و اینکه چه زبانی روی آن صحبت شود، به برنامه بستگی دارد. به همین دلیل فایروالهای ساده که فقط بر اساس شمارهٔ پورت تصمیم میگیرند، محتوای ترافیک را نمیشناسند.
همچنین برخی شبکهها پورتهای خاصی را در مسیر محدود میکنند. برای مثال، بسیاری از ارائهدهندگان ابری ارسال ایمیل از پورت ۲۵ را بهطور پیشفرض میبندند تا از ارسال اسپم جلوگیری کنند. اگر سرویسی از بیرون در دسترس نیست، علاوه بر فایروال سرور، محدودیتهای شبکه را هم در نظر بگیرید.
عیبیابی سریع مشکلات پورت
- Connection refused: روی آن پورت هیچ برنامهای گوش نمیدهد یا فقط روی localhost است. راهنمای کامل در خطای Connection refused آمده است.
- Connection timed out: فایروال (در سرور یا مسیر) بسته را بیصدا دور میریزد.
- Address already in use: برنامهٔ دیگری زودتر همان پورت را گرفته است؛ با
ss -tlnpآن را پیدا کنید.
دستورهای شبکه و مدیریتی بیشتر را در دستورات پرکاربرد لینوکس ببینید. سرورهای کلودیفای، چه سرور ایران و چه خارج، با دسترسی کامل root تحویل داده میشوند و تنظیم پورتها و فایروال کاملاً در اختیار شماست.
سؤالات متداول
چند پورت روی یک سرور وجود دارد؟
برای هر یک از پروتکلهای TCP و UDP، ۶۵۵۳۶ پورت (از ۰ تا ۶۵۵۳۵) وجود دارد. در عمل فقط تعداد کمی از آنها روی هر سرور توسط برنامهها استفاده میشوند.
آیا باز بودن پورت خطرناک است؟
پورت باز بهتنهایی خطر نیست؛ خطر در برنامهای است که پشت آن گوش میدهد. اگر آن برنامه آسیبپذیر یا بدون رمز باشد، از راه آن پورت قابل سوءاستفاده است. فقط پورتهای لازم را باز نگه دارید.
چرا برنامهام روی پورت ۸۰ اجرا نمیشود؟
در لینوکس پورتهای زیر ۱۰۲۴ نیاز به دسترسی root دارند. معمولاً برنامه را روی پورتی مثل ۸۰۰۰ اجرا میکنند و Nginx را روی ۸۰ و ۴۴۳ قرار میدهند تا درخواستها را به آن برساند.
تفاوت پورت TCP و UDP چیست؟
TCP اتصال برقرار میکند و تحویل مطمئن و مرتب داده را تضمین میکند؛ UDP بدون اتصال و سریعتر است اما تحویل را تضمین نمیکند. پورت با شمارهٔ یکسان در این دو پروتکل مستقل از هم است.
از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی



