यह लेख बिल्ट-इन Windows Defender Firewall with Advanced Security की सेटिंग्स और नियमों को PowerShell का उपयोग करके प्रबंधित करने की मूल बातें देता है। हम देखेंगे कि विभिन्न नेटवर्क प्रोफाइल के लिए फायरवॉल को कैसे सक्षम/अक्षम करें, फायरवॉल नियम बनाएं या हटाएं, और वर्तमान सक्रिय फायरवॉल नियमों को दिखाने वाली एक सुविधाजनक तालिका प्राप्त करने के लिए एक छोटा PS स्क्रिप्ट लिखें।
आप Windows Firewall सेटिंग्स को ग्राफिकल कंसोल से प्रबंधित कर सकते हैं: Control Panel → System and Security → Windows Defender Firewall। हालांकि, Windows 8.1 (Windows Server 2012 R2) से शुरू होकर, आप फायरवॉल को प्रबंधित करने के लिए बिल्ट-इन NetSecurity PowerShell मॉड्यूल का उपयोग कर सकते हैं।
पहले, Windows Firewall नियमों और सेटिंग्स को प्रबंधित करने के लिए निम्न कमांड का उपयोग किया जाता था: netsh advfirewall firewall
NetSecurity मॉड्यूल में Windows 10 पर 85 कमांड उपलब्ध हैं। आप पूरी सूची प्रदर्शित कर सकते हैं:
Get-Command -Module NetSecurity

PowerShell से Windows Firewall नेटवर्क प्रोफाइल कैसे प्रबंधित करें?
Windows Firewall में तीन प्रकार के नेटवर्क प्रोफाइल हैं:
- Domain — Active Directory डोमेन में कंप्यूटर्स पर लागू होता है
- Private — होम या कॉर्पोरेट नेटवर्क
- Public — पब्लिक नेटवर्क

Network Location Awareness (NLA) अपने डेटाबेस में नेटवर्क प्रकारों के बारे में जानकारी रखता है। यदि इसका गलत पता चला है तो आप अपना नेटवर्क प्रोफाइल (लोकेशन) बदल सकते हैं।
प्रत्येक नेटवर्क प्रोफाइल (लोकेशन) उपयोग किए जाने वाले फायरवॉल नियमों के सेट से भिन्न हो सकती है। डिफ़ॉल्ट रूप से, कंप्यूटर के सभी नेटवर्क इंटरफ़ेस फायरवॉल द्वारा संरक्षित होते हैं, और सभी तीन प्रकार के प्रोफाइल उन पर लागू होते हैं।
सभी तीन नेटवर्क प्रोफाइल को सक्षम करने के लिए: Domain, Public और Private, इस कमांड का उपयोग करें:
Set-NetFirewallProfile -All -Enabled True
या All के बजाय विशिष्ट प्रोफाइल सेट करें:
Set-NetFirewallProfile -Profile Public -Enabled True
सभी तीन नेटवर्क लोकेशन के लिए फायरवॉल को अक्षम करने के लिए, कमांड का उपयोग करें:
Set-NetFirewallProfile -All -Enabled False
Set-NetFirewallProfile cmdlet का उपयोग करके, आप प्रोफाइल विकल्प बदल सकते हैं (एक डिफ़ॉल्ट एक्शन, लॉगिंग, लॉग फ़ाइल का पथ और आकार, अधिसूचना सेटिंग्स, आदि)।
आप जानते होंगे कि आधुनिक OS संस्करणों में Windows Firewall सभी प्रोफाइल के लिए सक्षम है। सभी आउटबाउंड कनेक्शन अनुमत हैं और इनबाउंड ब्लॉक हैं (अनुमत को छोड़कर) प्रोफाइल सेटिंग्स में।
आइए Public प्रोफाइल के लिए डिफ़ॉल्ट एक्शन को सभी इनबाउंड कनेक्शन ब्लॉक करने के लिए बदलें।
Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
आप वर्तमान प्रोफाइल सेटिंग्स को इस प्रकार प्रदर्शित कर सकते हैं:
Get-NetFirewallProfile -Name Public

यदि आप GPO का उपयोग करके अपनी Windows Firewall सेटिंग्स प्रबंधित करते हैं, तो आप परिणामी प्रोफाइल सेटिंग्स को इस प्रकार प्रदर्शित कर सकते हैं:
Get-NetFirewallProfile -policystore activestore
सुनिश्चित करें कि सभी फायरवॉल सेटिंग्स कंप्यूटर के सभी नेटवर्क इंटरफ़ेस पर लागू हैं।
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases
यदि सभी इंटरफ़ेस संरक्षित हैं, तो कमांड निम्न लौटाएगी:
DisabledInterfaceAliases : {NotConfigured}

आप विशिष्ट इंटरफ़ेस प्रोफाइल को अक्षम कर सकते हैं (इंटरफ़ेस नामों की सूची प्रदर्शित करने के लिए, Get-NetIPInterface का उपयोग करें):
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
जैसा कि आप देख सकते हैं, Public प्रोफाइल अब Ethernet0 पर लागू नहीं होता:
DisabledInterfaceAliases : {Ethernet0}

आप प्रोफाइल स्तर पर नेटवर्क कनेक्शन लॉगिंग विकल्प सेट कर सकते हैं। डिफ़ॉल्ट रूप से, Windows Firewall लॉग %systemroot%\system32\LogFiles\Firewall में संग्रहीत होते हैं, और फ़ाइल आकार 4MB है। आप सभी कनेक्शन लॉगिंग सक्षम कर सकते हैं और अधिकतम फ़ाइल आकार बदल सकते हैं:
Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%\system32\LogFiles\Firewall\pfirewall.log’
PowerShell के साथ Windows Firewall नियम कैसे बनाएं, संपादित करें या हटाएं?
आपके फायरवॉल नियमों को प्रबंधित करने के लिए 9 cmdlets हैं:
- New-NetFirewallRule
- Copy-NetFirewallRule
- Disable-NetFirewallRule
- Enable-NetFirewallRule
- Get-NetFirewallRule
- Remove-NetFirewallRule
- Rename-NetFirewallRule
- Set-NetFirewallRule
- Show-NetFirewallRule
आइए Windows Firewall में पोर्ट खोलने के कुछ सरल उदाहरणों पर विचार करें।
उदाहरण के लिए, यदि आप डोमेन और प्राइवेट प्रोफाइल के लिए पोर्ट 80 और 443 पर इनबाउंड TCP कनेक्शन की अनुमति देना चाहते हैं, तो इस कमांड का उपयोग करें:
New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')

आप किसी ऐप के लिए नेटवर्क एक्सेस की अनुमति या ब्लॉक कर सकते हैं। उदाहरण के लिए, आप Firefox के लिए आउटबाउंड कनेक्शन ब्लॉक करना चाहते हैं:
New-NetFirewallRule -Program “C:\Program Files (x86)\Mozilla Firefox\firefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction Outbound
केवल एक IP पते से पोर्ट 3389 पर इनबाउंड RDP कनेक्शन की अनुमति देने के लिए:
New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow
निर्दिष्ट IP सबनेट या IP रेंज से पते के लिए पिंग (ICMP) की अनुमति देने के लिए, इन कमांड का उपयोग करें:
$ips = @("192.168.2.15-192.168.2.40", "192.168.100.15-192.168.100.200", ”10.1.0.0/16”)
New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow
पिछले लेख में हमने दिखाया कि PowerShell का उपयोग करके साइट एक्सेस को IP पते और डोमेन/साइट DNS नाम दोनों द्वारा कैसे ब्लॉक करें।
मौजूदा फायरवॉल नियम को संपादित करने के लिए, Set-NetFirewallRule cmdlet का उपयोग किया जाता है। उदाहरण के लिए, पहले बनाए गए नियम के लिए निर्दिष्ट IP पते से इनबाउंड कनेक्शन की अनुमति देने के लिए:
Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10
यदि आप एक फायरवॉल नियम में कई IP पते जोड़ना चाहते हैं, तो इस स्क्रिप्ट का उपयोग करें:
$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ips
फायरवॉल नियम में सभी IP पते प्रदर्शित करने के लिए:
Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilter

आप Disable-NetFirewallRule और Enable-NetFirewallRule cmdlets का उपयोग करके फायरवॉल नियमों को सक्षम/अक्षम कर सकते हैं।
Disable-NetFirewallRule –DisplayName 'WEB-Inbound'
पिंग (ICMP) की अनुमति देने के लिए, यह कमांड चलाएं:
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
फायरवॉल नियम को हटाने के लिए, Remove-NetFirewallRule cmdlet का उपयोग किया जाता है।
PowerShell के साथ Windows Firewall नियमों की सूची
आप अपने इनबाउंड ट्रैफ़िक के लिए सक्रिय फायरवॉल नियमों की सूची इस प्रकार प्रदर्शित कर सकते हैं:
Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft
यदि आप आउटबाउंड ब्लॉकिंग नियमों की सूची प्रदर्शित करना चाहते हैं:
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound
नियम में ऐप नाम प्रदर्शित करने के लिए:
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}

जैसा कि आप देख सकते हैं, Get-NetFirewallRule cmdlet आपके फायरवॉल नियमों के लिए नेटवर्क पोर्ट और IP पते नहीं दिखाता है। अनुमत इनबाउंड (आउटबाउंड) कनेक्शन के बारे में विस्तृत जानकारी को अधिक सुविधाजनक तरीके से प्रदर्शित करने के लिए पोर्ट नंबर दिखाते हुए, निम्न PowerShell स्क्रिप्ट का उपयोग करें:
Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -Property Name,
@{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},
@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
Enabled,Profile,Direction,Action

PowerShell कमांड प्रॉम्प्ट से Windows Firewall नियमों को प्रबंधित करने के लिए पर्याप्त अवसर प्रदान करता है। आप कुछ घटनाएं होने पर पोर्ट खोलने/बंद करने के लिए PowerShell स्क्रिप्ट को स्वचालित रूप से चला सकते हैं। अगले लेख में, हम आपके Windows VDS सर्वर पर RDP पर पासवर्ड ब्रूट-फोर्स करने का प्रयास करने वाले IP पतों को स्वचालित रूप से ब्लॉक करने के लिए PowerShell- और Windows Firewall-आधारित एक सरल समाधान पर विचार करेंगे।