بررسی باز بودن پورت و تنظیم فایروال

پرینت

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

قدم اول: آیا سرویس واقعاً روی پورت فعال است؟

باز کردن پورت در فایروال تا وقتی سرویسی روی آن پورت نباشد، فایده‌ای ندارد. اول این را بررسی کنید.

در لینوکس:

ss -tlnp

برای پیدا کردن یک پورت مشخص:

ss -tlnp | grep :PORT

در ویندوز (PowerShell):

Get-NetTCPConnection -State Listen -LocalPort PORT

با Command Prompt هم می‌توانید این را ببینید:

netstat -ano | findstr :PORT

در خروجی به آدرس محلی دقت کنید. اگر 0.0.0.0 یا * (یا [::]) دیدید، سرویس از بیرون در دسترس است. اگر 127.0.0.1 دیدید، سرویس فقط از داخل خود سرور قابل دسترسی است. در این حالت باید تنظیمات خود برنامه را عوض کنید، نه فایروال را.

Ubuntu و Debian: فایروال ufw

وضعیت فعلی فایروال:

ufw status verbose

باز کردن یک پورت TCP:

ufw allow PORT/tcp

باز کردن پورت فقط برای یک IP مشخص (برای دیتابیس یا پنل مدیریتی توصیه می‌شود):

ufw allow from YOUR_IP to any port PORT proto tcp

نمایش قانون‌ها با شماره و حذف یک قانون:

ufw status numbered
ufw delete RULE_NUMBER

هشدار: اگر ufw هنوز غیرفعال است، پیش از فعال کردن آن پورت SSH را باز کنید. وگرنه اتصال شما فوراً قطع می‌شود. اگر پورت SSH را عوض کرده‌اید، به‌جای 22 پورت جدید را بنویسید:

ufw allow 22/tcp
ufw enable

AlmaLinux و Rocky Linux: فایروال firewalld

وضعیت و قانون‌های فعلی:

firewall-cmd --list-all

باز کردن یک پورت به‌صورت دائمی و اعمال آن:

firewall-cmd --permanent --add-port=PORT/tcp
firewall-cmd --reload

برای سرویس‌های شناخته‌شده می‌توانید به‌جای عدد، نام سرویس را بنویسید:

firewall-cmd --permanent --add-service=http --add-service=https

بستن پورت:

firewall-cmd --permanent --remove-port=PORT/tcp && firewall-cmd --reload

نکته: اگر --permanent را ننویسید، قانون فقط تا Reload بعدی یا Restart سرور باقی می‌ماند.

Windows Server: فایروال Windows Defender

PowerShell را با دسترسی Administrator باز کنید.

باز کردن یک پورت TCP:

New-NetFirewallRule -DisplayName "Allow PORT TCP" -Direction Inbound -Protocol TCP -LocalPort PORT -Action Allow

باز کردن پورت فقط برای یک IP مشخص:

New-NetFirewallRule -DisplayName "Allow PORT from my IP" -Direction Inbound -Protocol TCP -LocalPort PORT -RemoteAddress YOUR_IP -Action Allow

نمایش و حذف قانون:

Get-NetFirewallRule -DisplayName "Allow PORT*"
Remove-NetFirewallRule -DisplayName "Allow PORT TCP"

اگر محیط گرافیکی را ترجیح می‌دهید، این کار را از Windows Defender Firewall with Advanced Security ← Inbound Rules ← New Rule هم می‌توانید انجام دهید.

نکته: ویندوز به‌طور پیش‌فرض به Ping پاسخ نمی‌دهد. پس اگر Ping جواب نداد، الزاماً به این معنی نیست که سرور خاموش است.

قدم آخر: بررسی پورت از بیرون سرور

این دستورها را روی کامپیوتر خودتان اجرا کنید، نه روی سرور.

در Windows (PowerShell):

Test-NetConnection YOUR_SERVER_IP -Port PORT

اگر TcpTestSucceeded : True را دیدید، پورت باز است و سرویس پاسخ می‌دهد.

در macOS و Linux:

nc -zv YOUR_SERVER_IP PORT

اگر succeeded یا open را دیدید، پورت در دسترس است.

تفسیر نتیجه

  • Refused: پیام سرور می‌رسد، اما سرویسی روی آن پورت فعال نیست. قدم اول را دوباره بررسی کنید.
  • Timeout: معمولاً یعنی فایروال جلوی اتصال را می‌گیرد، یا مشکل از شبکه یا اینترنت شماست.

اگر مشکل حل نشد

اگر پورت را درست باز کرده‌اید و سرویس هم فعال است ولی هنوز از بیرون در دسترس نیست، یا با تغییر فایروال دسترسی خودتان را از دست داده‌اید، از طریق ارسال تیکت با ما در تماس باشید. در تیکت IP سرور، شماره پورت و خروجی دستورهای بالا را بنویسید. تلفن پشتیبانی: 021-66538664

آیا این پاسخ به شما کمک کرد؟
0

مقالات مربوطه