باز کردن پورت یک خط New-NetFirewallRule است، به شرط اینکه قانون روی پروفایل درست بنشیند. فایروال ویندوز سرور سه پروفایل Domain، Private و Public دارد و ستون NetworkCategory در Get-NetConnectionProfile پروفایل فعال را نشان می‌دهد. پورتی که قانون دارد و جواب نمی‌دهد، در یکی از این پله‌ها مانده است:

  • ✅ پله ۱: برنامه روی پورت گوش می‌دهد؟
  • ✅ پله ۲: قانون روشن است و پروفایلش فعال؟
  • ✅ پله ۳: قانون Block با همان پورت هم‌پوشانی دارد؟
  • ✅ پله ۴: لاگ بسته‌های ردشده چیزی ثبت کرده؟
  • ✅ پله ۵: بسته اصلاً به ویندوز می‌رسد؟

💡 پروفایل فعال و Block هم‌پوشان

قانون ورودی فقط وقتی کار می‌کند که پروفایلش فعال باشد، و هر قانون Block هم‌پوشان بر آن غلبه می‌کند.
✅ پیش از محدود کردن ریموت دسکتاپ، کنسول VNC را باز کنید.
✅ پورت جواب نمی‌دهد؟ از پله اول نردبان عیب‌یابی شروع کنید.

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

نردبان پنج‌پله‌ای عیب‌یابی پورتی که از بیرون جواب نمی‌دهد، فایروال ویندوز سرور

سه پروفایل فایروال ویندوز و اینکه سرور الان در کدام است

پروفایل فعال را Get-NetConnectionProfile نشان می‌دهد: DomainAuthenticated با پروفایل Domain متناظر است و Private و Public با پروفایل هم‌نام خودشان. تا پروفایل یک قانون فعال نشود، فایروال ویندوز سرور آن قانون را اجرا نمی‌کند.

Get-NetConnectionProfile

جدول زیر از صفحه معرفی Windows Firewall است:

پروفایلچه وقت فعال می‌شودتغییر دستیروی سرور بیرون از دامنه
Domainعضویت در دامنه و دیدن Domain Controllerممکن نیستفعال نمی‌شود
Privateمدیر شبکه را Private اعلام کردهبا Set-NetConnectionProfileاگر دستی یا با سیاست تنظیم شده باشد
Publicپیش‌فرض شبکه‌های شناسایی‌نشدهبا Set-NetConnectionProfileحالت پیش‌فرض

اگر در New-NetFirewallRule پارامتر -Profile را ننویسید، پیش‌فرض Any است و قانون روی هر سه پروفایل کار می‌کند. اما نمونه رسمی Microsoft برای پورت تازه ریموت دسکتاپ -Profile Public دارد و روی اتصال Private بی‌اثر است. دسته شبکه را برای یک پورت عوض نکنید؛ قانون‌های فعال کل سرور عوض می‌شوند.

ساخت قانون با PowerShell و همان کار در رابط گرافیکی

یک قانون ورودی تازه در فایروال ویندوز سرور چهار چیز می‌خواهد: جهت، Action، پروتکل و پورت محلی. مرجع New-NetFirewallRule همه را در یک خط می‌گیرد و خط دوم پورت ثبت‌شده را نشان می‌دهد.

New-NetFirewallRule -DisplayName "App-TCP-8080-In" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080
Get-NetFirewallRule -DisplayName "App-TCP-8080-In" | Get-NetFirewallPortFilter

پیش‌فرض‌ها: جهت Inbound، پروفایل Any و Enabled برابر True. نوع -Enabled بولی نیست و طبق همان مرجع، $true و $false را نمی‌پذیرد؛ متن True یا False بنویسید.

باز کردن همان پورت در wf.msc

عبارت wf.msc را در منوی Start تایپ کنید. در Inbound Rules گزینه New Rule را بزنید؛ نوع Port، پروتکل و شماره پورت، بعد Allow the connection. اگر در صفحه بعد تیک پروفایل فعال را بردارید، قانون ساخته می‌شود و کار نمی‌کند.

بستن پورت؛ سه راه جایگزین

راه (فقط یکی)دستورنتیجه
غیرفعال کردنSet-NetFirewallRule -DisplayName "App-TCP-8080-In" -Enabled Falseقانون می‌ماند و با True برمی‌گردد
قانون BlockNew-NetFirewallRule -DisplayName "Block-TCP-8080-In" -Direction Inbound -Action Block -Protocol TCP -LocalPort 8080پورت برای همه بسته می‌شود
حذفRemove-NetFirewallRule -DisplayName "App-TCP-8080-In" -WhatIfاول پیش‌نمایش، بعد بدون -WhatIf

فقط یکی را انتخاب کنید. اگر Block را ساختید و بعد سراغ بخش بعد رفتید، اول آن را حذف کنید؛ وگرنه بر قانون محدود به IP هم غلبه می‌کند. اجرای Remove-NetFirewallRule بدون پارامتر، طبق مرجعش، همه قانون‌های محلی ایستا را پاک می‌کند.

ساخت قانون با PowerShell و همان کار در رابط گرافیکی

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

با -RemoteAddress قانون فقط آدرس‌هایی را راه می‌دهد که خودتان می‌نویسید و بقیه به بستن پیش‌فرض فایروال ویندوز سرور می‌خورند. این پارامتر یک IP، زیرشبکه مثل 198.51.100.0/24، بازه‌ای مثل 198.51.100.10-198.51.100.20 یا کلیدواژه LocalSubnet را می‌پذیرد.

New-NetFirewallRule -DisplayName "App-TCP-8080-Office" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080 -RemoteAddress 203.0.113.10,198.51.100.0/24

اگر قانون App-TCP-8080-In با آدرس Any هنوز روشن است، غیرفعالش کنید تا این محدودیت معنی پیدا کند. برای تغییر بعدی، Set-NetFirewallRule -RemoteAddress فهرست قبلی را کامل جایگزین می‌کند و چیزی به آن اضافه نمی‌کند.

⚖️ وقتی دو قانون سر یک پورت اختلاف دارند

در مستند قانون‌های Windows Firewall، Allow صریح بر بستن پیش‌فرض غلبه می‌کند و Block صریح بر هر Allow متعارض؛ ترتیب دستی هم وجود ندارد.
پس برای محدود کردن پورت، دامنه Allow را تنگ کنید؛ Block با آدرس Any خودتان را هم بیرون می‌گذارد.

ریموت دسکتاپ را بدون قفل کردن خودتان به یک IP ببندید

ریموت دسکتاپ به‌طور پیش‌فرض روی 3389 گوش می‌دهد و اشتباه در این بخش شما را از سرور بیرون می‌گذارد. ترتیب قدم‌ها را عوض نکنید.

⚠️ نشست باز راه برگشت نیست

طبق مستند ALE در Windows Filtering Platform، بعد از هر تغییر سیاست اولین بسته هر اتصال موجود دوباره بررسی می‌شود. نشست بازتان هم ممکن است قطع شود. با IP متغیر، این محدودیت دیر یا زود خود شما را بیرون می‌گذارد.

🔶 قدم صفر: کنسول VNC

پیش از قدم ۱، کنسول VNC در پنل وب‌داده را باز کنید و وارد ویندوز شوید؛ این ورود از ریموت دسکتاپ جداست و برگشت قدم ۴ از همین‌جاست.

قدم ۱. آدرسی را که سرور از شما می‌بیند بخوانید؛ ستون RemoteAddress در ردیف نشست خودتان جواب است.

Get-NetTCPConnection -LocalPort 3389 -State Established

قدم ۲. قانون محدود را برای TCP و UDP بسازید. پارامتر -Name شناسه ثابت قانون است و قدم بعد با همین نام قانون‌های تازه را کنار می‌گذارد.

New-NetFirewallRule -Name "RDP-MyIP-TCP" -DisplayName "RDP-MyIP-TCP" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -RemoteAddress 203.0.113.10
New-NetFirewallRule -Name "RDP-MyIP-UDP" -DisplayName "RDP-MyIP-UDP" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 3389 -RemoteAddress 203.0.113.10

قدم ۳. بقیه قانون‌های 3389 را غیرفعال کنید. اول دو خط اول را اجرا کنید؛ نامی با RDP-MyIP نباید در فهرست باشد. بعد خط سوم را بزنید.

$old = Get-NetFirewallPortFilter | Where-Object -Property LocalPort -EQ 3389 | Get-NetFirewallRule | Where-Object -Property Name -NotLike "RDP-MyIP-*"
$old | Select-Object Name, DisplayName, Enabled
$old | Set-NetFirewallRule -Enabled False

قدم ۴. یک اتصال ریموت تازه بزنید. اگر وصل نشد، این خط را در کنسول VNC اجرا کنید تا همه قانون‌های 3389 دوباره روشن شوند، بعد IP را دوباره بررسی کنید:

Get-NetFirewallPortFilter | Where-Object -Property LocalPort -EQ 3389 | Get-NetFirewallRule | Set-NetFirewallRule -Enabled True

قانون قدیمی را حذف نکنید، وگرنه این خط چیزی برای برگرداندن ندارد. قالب IP:پورت در راهنمای اتصال به سرور مجازی ویندوز آمده است.

قانون ساخته شده ولی پورت جواب نمی‌دهد؛ از کجا شروع کنیم؟

قانون ساخته شده ولی پورت جواب نمی‌دهد؛ از کجا شروع کنیم؟

از بیرون شروع کنید: روی یک کامپیوتر ویندوزی دیگر دستور Test-NetConnection را با IP سرور و شماره پورت اجرا کنید. اگر TcpTestSucceeded برابر False بود، پله‌ها را به ترتیب بالا بروید؛ پله‌های ۲ تا ۴ داخل فایروال ویندوز سرور را می‌گردند و پله‌های ۱ و ۵ بیرون آن را.

Test-NetConnection -ComputerName 203.0.113.50 -Port 8080 -InformationLevel Detailed

این تست فقط TCP را می‌سنجد. پله‌های ۲ و ۳ دنبال قانونی روی پروفایل اشتباه و Block هم‌پوشان می‌گردند. مأمور ورزشگاه هم بلیت جایگاه شرقی را جلوی در غربی قبول نمی‌کند و اسمی را که در فهرست محرومان باشد با هیچ بلیتی راه نمی‌دهد.

پله ۱؛ برنامه روی پورت گوش می‌دهد؟

Get-NetTCPConnection -State Listen -LocalPort 8080

اگر چیزی گوش ندهد، پیغام خطای پیدا نشدن می‌گیرید و فایروال تقصیری ندارد. LocalAddress برابر 127.0.0.1 (loopback) یعنی برنامه فقط از داخل سرور در دسترس است؛ آدرس گوش‌دادن را در تنظیمات برنامه عوض کنید. آدرس دیگری دیدید؟ ← پله ۲.

پله ۲؛ قانون روشن است و روی پروفایل فعال نشسته؟

Get-NetFirewallPortFilter | Where-Object -Property LocalPort -EQ 8080 | Get-NetFirewallRule | Select-Object DisplayName, Enabled, Profile

ستون Profile باید Any یا پروفایل فعال باشد و Enabled برابر True. این فهرست فقط قانون‌های محلی با همین پورت دقیق را می‌آورد؛ قانونی با بازه پورت یا Any در آن نیست. قانونی که به یک برنامه بسته شده، باید مسیر همان فایل اجرایی در حال کار را داشته باشد؛ Get-NetFirewallApplicationFilter آن را نشان می‌دهد. همه درست بود؟ ← پله ۳.

پله ۳؛ قانون Block یا سیاست گروهی راه را بسته؟

Get-NetFirewallRule -PolicyStore ActiveStore -Direction Inbound -Action Block -Enabled True | Select-Object DisplayName, Profile

گزینه -PolicyStore ActiveStore قانون‌های Group Policy را هم می‌آورد. قانون مشکوک را به Get-NetFirewallPortFilter بدهید؛ اگر LocalPort آن پورت شما یا Any باشد، مقصر همین قانون است. چیزی نبود؟ ← پله ۴.

پله ۴؛ لاگ بسته‌های ردشده چه می‌گوید؟

Set-NetFirewallProfile -Name Public -LogBlocked True
# test again from outside, then:
Set-NetFirewallProfile -Name Public -LogBlocked False

به‌جای Public پروفایل فعال خودتان را بگذارید. به گفته مرجع Set-NetFirewallProfile، با این گزینه هر اتصالی که سیاست فایروال رد کند در %windir%\system32\logfiles\firewall\pfirewall.log ثبت می‌شود. تست بیرونی را تکرار کنید: خطی با IP شما و شماره پورت یعنی ویندوز بسته را انداخته؛ به پله ۲ و ۳ برگردید. خطی نبود؟ ← پله ۵. اگر فایل اصلاً ساخته نشد، سرویس mpssvc به اجازه نوشتن در آن پوشه نیاز دارد.

پله ۵؛ بسته اصلاً به ویندوز می‌رسد؟

لاگ خالی یعنی بسته پیش از ویندوز متوقف شده. یک بار از شبکه دیگری تست کنید؛ گاهی شبکه سمت شما خروجی آن پورت را می‌بندد. اگر ارائه‌دهنده فایروال شبکه جدا دارد، تنظیمش را ببینید یا خروجی تست و لاگ خالی را برای پشتیبانی بفرستید.

وسط عیب‌یابی، معمولاً یکی از این بن‌بست‌ها جلوی راه است؛ اگر هیچ‌کدام نبود، از پله ۱ دوباره شروع کنید.

خاموش کردن کامل فایروال برای تست اشکالی دارد؟

این کار همه پورت‌های گوش‌دهنده را رو به اینترنت باز می‌کند. لاگ پله ۴ همان جواب را بی‌خطر می‌دهد.

دستور Get-NetFirewallRule -PolicyStore ActiveStore قانون‌های محلی و Group Policy را با هم نشان می‌دهد.

نوع این پارامتر بولی نیست. به‌جای متغیرهای $true و $false متن True یا False را بنویسید.

خیر. Domain فقط برای سرور عضو دامنه‌ای فعال می‌شود که Domain Controller را ببیند و Set-NetConnectionProfile انتخاب DomainAuthenticated را نمی‌پذیرد.

آدرس‌ها را با ویرگول به -RemoteAddress بدهید، یا زیرشبکه را با /24 و بازه را با خط تیره بنویسید.

در مستند تغییر پورت Microsoft، ساختن دو قانون TCP و UDP برای پورت تازه جزو مراحل است.

قانون غیرفعال می‌ماند و با -Enabled True برمی‌گردد؛ Remove-NetFirewallRule آن را برای همیشه پاک می‌کند.

جمع‌بندی؛ فایروال ویندوز سرور را با مدرک عیب‌یابی کنید. پورتی که با وجود قانون جواب نمی‌دهد پشت یکی از پنج لایه مانده است: برنامه‌ای که گوش نمی‌دهد، قانونی روی پروفایل دیگر، یک Block پنهان، بسته‌ای که ویندوز انداخته یا بسته‌ای که نرسیده. از Test-NetConnection بیرونی شروع کنید و پله‌به‌پله تا pfirewall.log جلو بروید. برای محدود کردن دسترسی، دامنه قانون Allow را با -RemoteAddress تنگ کنید و Block را برای بستن کامل پورت نگه دارید. روی ریموت دسکتاپ ترتیب این است: کنسول VNC باز، قانون محدود، خاموش کردن قانون قدیمی، اتصال تازه، و خط برگشت آماده. LogBlocked را هم بعد از تست به False برگردانید.

🚀 فایروال تنها کار روز تحویل نیست

فایروال در فهرست کارهای بعد از تحویل سرور ویندوز است، کنار رمز Administrator و اولین بکاپ.

پورت شما روی کدام پله پیدا شد؟ بعد از اصلاح، TcpTestSucceeded بالاخره True شد؟

مستندهایی که دستورها از آن‌ها آمده

وب داده
وب داده

جدید ترین مطالب آموزشی و کاربردی را در اینجا بخوانید !
ما با بهره‌گیری از دانش روز و تجربه متخصصان حوزه فناوری، مجموعه‌ای از آموزش‌های کاربردی و مقالات تخصصی را گردآوری کرده‌ایم که هر یک، پاسخی دقیق به پرسش‌های شماست. ؛ از مفاهیم پایه تا پیچیده‌ترین تکنیک‌های حرفه‌ای. اینجا، دانش با زبانی ساده اما عمیق در اختیار شما قرار می‌گیرد.

مقاله‌ها: 269
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *