PowerShell ile Windows Güvenlik Duvarı Kurallarını Yapılandırma
Bu makale, PowerShell kullanılarak Gelişmiş Güvenlik Özellikli yerleşik Windows Defender Güvenlik Duvarı ayarlarının ve kurallarının nasıl yönetileceğine ilişkin temel bilgileri vermektedir. Farklı ağ profilleri için güvenlik duvarını nasıl etkinleştireceğimizi/devre dışı bırakacağımızı, güvenlik duvarı kurallarını nasıl oluşturacağımızı veya kaldıracağımızı ve mevcut aktif güvenlik duvarı kurallarını gösteren uygun bir tablo elde etmek için küçük bir PS komut dosyası yazmayı ele alacağız.
Windows Güvenlik Duvarı ayarlarını grafik konsolundan yönetebilirsiniz: Denetim Masası -> Sistem ve Güvenlik -> Windows Defender Güvenlik Duvarı. Ancak, Windows 8.1'den (Windows Server 2012 R2) başlayarak, güvenlik duvarını yönetmek için yerleşik NetSecurity PowerShell modülünü kullanabilirsiniz.
Önceden, Windows Güvenlik Duvarı kurallarını ve ayarlarını yönetmek için aşağıdaki komut kullanılıyordu:
netsh advfirewall firewallWindows 10'da NetSecurity modülünde kullanılabilen 85 komut vardır. Tüm listeyi görüntüleyebilirsiniz:
Get-Command -Module NetSecurityPowerShell'den Windows Güvenlik Duvarı Ağ Profilleri Nasıl Yönetilir?
Windows Güvenlik Duvarı'nda üç tür ağ profili vardır:
Etki Alanı - bir Active Directory etki alanındaki bilgisayarlara uygulanır
Özel - ev veya şirket ağları
Genel - genel ağlar
Ağ Konumu Farkındalığı (NLA), ağ türleri hakkındaki bilgileri veritabanında tutar. Yanlış algılandıysa, ağ profilinizi (konumunuzu) değiştirebilirsiniz.
Her ağ profili (konum), kullanılan güvenlik duvarı kuralları grubuna göre farklılık gösterebilir. Varsayılan olarak, bir bilgisayarın tüm ağ arabirimleri güvenlik duvarı tarafından korunur ve bunlara üç profil türü de uygulanır.
Üç ağ profilini de etkinleştirmek için: Etki Alanı, Genel ve Özel, şu komutu kullanın:
Set-NetFirewallProfile -All -Enabled TrueVeya Tümü yerine belirli profili ayarlayın:
Set-NetFirewallProfile -Profile Public -Enabled TrueÜç ağ konumunun tümü için güvenlik duvarını devre dışı bırakmak için şu komutu kullanın:
Set-NetFirewallProfile -All -Enabled False
Set-NetFirewallProfile cmdlet'ini kullanarak profil seçeneklerini değiştirebilirsiniz (varsayılan eylem, günlük kaydı, günlük dosyasının yolu ve boyutu, bildirim ayarları vb.).
Modern işletim sistemi sürümlerinde Windows Güvenlik Duvarı'nın tüm profiller için etkinleştirildiğini biliyor olabilirsiniz. Profil ayarlarında tüm giden bağlantılara izin verilir ve gelen bağlantılar engellenir (izin verilenler hariç).
Tüm gelen bağlantıları engellemek için Genel profil için varsayılan eylemi değiştirelim.
Set-NetFirewallProfile -Name Public -DefaultInboundAction BlockGeçerli profil ayarlarını aşağıdaki gibi görüntüleyebilirsiniz:
Get-NetFirewallProfile -Name PublicWindows Güvenlik Duvarı ayarlarınızı GPO kullanarak yönetiyorsanız, sonuçta ortaya çıkan mevcut profil ayarlarını aşağıdaki gibi görüntüleyebilirsiniz:
Get-NetFirewallProfile -policystore activestoreTüm güvenlik duvarı ayarlarının bilgisayarın tüm ağ arabirimlerine uygulandığından emin olun.
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliasesTüm arabirimler korunuyorsa, komut aşağıdakileri döndürür:
DisabledInterfaceAliases : {NotConfigured}Belirli arabirim profilini devre dışı bırakabilirsiniz (arayüz adlarının listesini görüntülemek için Get-NetIPInterface'i kullanın):
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
Gördüğünüz gibi, Genel profil artık Ethernet0'a uygulanmıyor:
DisabledInterfaceAliases : {Ethernet0}Ağ bağlantısı günlüğü seçeneklerini profil düzeyinde ayarlayabilirsiniz. Varsayılan olarak, Windows Güvenlik Duvarı günlükleri %systemroot%\system32\LogFiles\Firewall konumunda depolanır ve dosya boyutu 4 MB'dir. Tüm bağlantı günlüğünü etkinleştirebilir ve maksimum dosya boyutunu değiştirebilirsiniz:
Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%\system32\LogFiles\Firewall\pfirewall.log’PowerShell ile Windows Güvenlik Duvarı Kuralları Nasıl Oluşturulur, Düzenlenir veya Kaldırılır?
Güvenlik duvarı kurallarınızı yönetmek için 9 cmdlet vardır:
- New-NetFirewallRule
- Copy-NetFirewallRule
- Disable-NetFirewallRule
- Enable-NetFirewallRule
- Get-NetFirewallRule
- Remove-NetFirewallRule
- Rename-NetFirewallRule
- Set-NetFirewallRule
- Show-NetFirewallRule
Windows Güvenlik Duvarı'nda bağlantı noktalarının nasıl açılacağına ilişkin bazı basit örnekleri ele alalım.
Örneğin, Etki Alanı ve Özel profiller için 80 ve 443 numaralı bağlantı noktalarına gelen TCP bağlantılarına izin vermek istiyorsanız şu komutu kullanın:
New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')Bir uygulama için ağ erişimine izin verebilir veya erişimi engelleyebilirsiniz. Örneğin, Firefox için giden bağlantıları engellemek istiyorsunuz:
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 OutboundYalnızca bir IP adresinden 3389 numaralı bağlantı noktasında gelen RDP bağlantısına izin vermek için:
New-NetFirewallRule -DisplayName "AllowRDP" -RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action AllowBelirtilen IP alt ağından veya IP aralığından adresler için ping'e (ICMP) izin vermek için şu komutları kullanın:
$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Önceki makalede, PowerShell kullanarak hem IP adresi hem de etki alanı/site DNS adı ile site erişiminin nasıl engelleneceğini gösterdik.
Mevcut bir güvenlik duvarı kuralını düzenlemek için Set-NetFirewallRule cmdlet'i kullanılır. Örneğin, daha önce oluşturulan kural için belirtilen IP adresinden gelen bağlantılara izin vermek için:
Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10Bir güvenlik duvarı kuralına birden çok IP adresi eklemek istiyorsanız şu komut dosyasını kullanın:
$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $ipsTüm IP adreslerini bir güvenlik duvarı kuralında görüntülemek için:
Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4'|Get-NetFirewallAddressFilterDisable-NetFirewallRule ve Enable-NetFirewallRule cmdlet'lerini kullanarak güvenlik duvarı kurallarını etkinleştirebilir/devre dışı bırakabilirsiniz.
Disable-NetFirewallRule -DisplayName 'WEB-Inbound'ICMP'ye (ping) izin vermek için şu komutu çalıştırın:
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-InBir güvenlik duvarı kuralını kaldırmak için Remove-NetFirewallRule cmdlet'i kullanılır.
PowerShell ile Windows Güvenlik Duvarı Kurallarını Listeleme
Gelen trafiğiniz için etkin güvenlik duvarı kurallarının listesini aşağıdaki gibi görüntüleyebilirsiniz:
Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ftGiden engelleme kurallarının listesini görüntülemek istiyorsanız:
Get-NetFirewallRule -Action Block -Enabled True -Direction OutboundBir uygulama adını bir kuralda görüntülemek için:
Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}Gördüğünüz gibi Get-NetFirewallRule cmdlet, güvenlik duvarı kurallarınız için ağ bağlantı noktalarını ve IP adreslerini göstermiyor. İzin verilen gelen (giden) bağlantılarla ilgili ayrıntılı bilgileri bağlantı noktası numaralarını göstererek daha uygun bir şekilde görüntülemek için aşağıdaki PowerShell betiğini kullanın:
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,ActionPowerShell, Windows Güvenlik Duvarı kurallarını komut isteminden yönetmek için birçok fırsat sağlar. Belirli olaylar meydana geldiğinde bağlantı noktalarını açmak/kapatmak için PowerShell betiklerini otomatik olarak çalıştırabilirsiniz. Bir sonraki makalede, Windows VDS sunucunuz üzerinde RDP üzerinden parolaları uzaktan kaba kuvvetle uygulamaya çalışan IP adreslerini otomatik olarak engellemek için basit bir PowerShell ve Windows Güvenlik Duvarı tabanlı çözümü ele alacağız.








