بررسی باز بودن پورت و تنظیم فایروال
پرینتوقتی سرویسی مثل وبسایت، دیتابیس یا یک برنامه اختصاصی روی سرور راه میاندازید، دو شرط باید برقرار باشد: سرویس روی پورت مورد نظر فعال باشد (به اصطلاح 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