本文涵盖了通过PowerShell命令行的高级安全性管理内置Windows Defender防火墙的设置和规则的基础。我们将研究如何启用/禁用防火墙以获取不同的网络配置文件,创建或删除防火墙规则,以及使用PowerShell导入/导出Windows防火墙规则。
内容:
- 如何使用PowerShell打开或关闭Windows Defender防火墙
- 使用PowerShell创建Windows防火墙规则
- 使用PowerShell修改现有的Windows防火墙规则
- 如何使用PowerShell启用/禁用/删除Windows防火墙规则
- PowerShell:在Windows防火墙中列出活动规则
Windows防火墙设置通常使用单独的图形MMC快照来管理wf.msc
(控制面板 - >系统和安全性 - > Windows Defender防火墙 - >高级设置)。您可以从PowerShell命令行执行大多数Windows防火墙配置和设置管理操作。您可以使用内置网络安全进行此操作的模块(可以在Windows PowerShell 5.1或更新的版本中使用)。
您可以使用命令:
Get-Command -Module NetSecurity
以前,netsh advfirewall firewall
命令用于管理Windows防火墙规则和设置。
如何使用PowerShell打开或关闭Windows Defender防火墙
默认情况下启用了Windows Defender防火墙。
另请阅读:
Get-NetFirewallProfile | Format-Table Name, Enabled
Windows防火墙中有三种类型的网络配置文件:
- 领域- 应用于连接到Active Directory域的计算机;
- 私人的- 家庭,SOHO或工作组网络;
- 民众- 公共网络。
默认情况下,Windows防火墙允许每个网络配置文件允许所有站点连接(除允许的连接)(除允许的连接外)。
网络位置意识(NLA)服务将有关网络类型的信息存储在数据库中。如果未正确检测到Windows中的网络配置文件(位置),则可以手动更改网络配置文件(位置)。
每个网络配置文件(位置)可能使用不同的防火墙规则。默认情况下,所有计算机的网络界面均受防火墙的保护,并将所有三种类型的配置文件应用于它们。
要完全禁用Windows防火墙,请运行以下命令
Set-NetFirewallProfile -All -Enabled False
或指定特定的配置文件名称而不是全部:
Set-NetFirewallProfile -Profile Public -Enabled False
为了启用Windows防火墙的所有三个网络配置文件,请使用以下命令
Set-NetFirewallProfile -All -Enabled True
显示适用于网络连接的配置文件类型:
Get-NetConnectionProfile
在此示例中,将域授权的配置文件应用于以太网网络连接。
如果在远程计算机上配置了powershell远程操作(WINRM),则可以管理这些计算机上的Windows防火墙规则。在此示例中,我们将使用Invoke-Command cmdlet连接到列表中的远程计算机,并在其上禁用防火墙。
$computers = @('WKS01', 'WKS02', 'WKS03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}
您可以更改公共配置文件的默认操作,以阻止所有入站连接。
Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
当前的配置文件设置可以显示如下:
Get-NetFirewallProfile -Name Public
如果使用GPO管理Windows防火墙设置,则可以查看当前结果的配置文件设置,如下所示:
Get-NetFirewallProfile -policystore activestore
确保将所有防火墙设置应用于计算机上的所有网络接口:
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases
如果所有接口受到保护,则命令应返回:
DisabledInterfaceAliases : {NotConfigured}
您可以禁用网络界面的特定配置文件(您可以使用Get-Netipinterface CMDLET列出Windows中的网络适配器):
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
如您所见,公共配置文件不再应用于以太网界面::
DisabledInterfaceAliases : {Ethernet0}
您可以使用SET-NETFIREWALLPROFILECMDLET更改配置文件设置(默认操作,日志记录设置,日志文件路径和大小,通知设置等)。您可以为每个网络位置配置文件配置网络连接记录设置。默认情况下,Windows防火墙日志存储在%systemroot%system32LogFilesFirewall
,文件大小为4MB。您可以启用连接记录并增加最大文件大小:
Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%system32LogFilesFirewallpfirewall.log’
有9个PowerShell CMDLET来管理Windows上的防火墙规则:
- 新网络壁炉
- 复制netfirewallrule
- 禁用新网络
- 启用netfirewallrule
- Get-NetfireWallrule
- 删除NetFireWallrule
- 重命名netFireWallrule
- set-netFireWallrule
- Show-NetfireWallrule
让我们看一些如何打开Windows防火墙中端口的简单示例。
例如,如果要在域和私人配置文件上允许在TCP端口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 Firefoxfirefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction Outbound
让我们从一个IP地址允许在默认的TCP3389端口上使用传入的RDP连接:
New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow
为了允许IP地址和子网的指定范围内的IP地址的ICMP ping,请创建以下规则:
$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
将IP地址列表从纯文本文件添加到防火墙规则(每行一个IP地址):
$ips=Get-Content C:tempip.txt
Get-NetFirewallrule -DisplayName 'AllowRDP'|Set-NetFirewallRule -RemoteAddress $ips
在上一篇文章中,我们向您展示了如何使用PowerShell不仅通过IP地址,而且通过网站的DNS名称来阻止对网站的访问。
从指定的IP地址允许所有传入的连接。这将添加IP地址到防火墙白名单:
$IP = '192.168.1.20'
New-NetFirewallRule -DisplayName "Allow $IP" -Direction Inbound -Action Allow -RemoteAddress $IP
使用PowerShell修改现有的Windows防火墙规则
如果要编辑防火墙规则,请使用set-netFireWallrulecmdlet。例如,您可能需要从特定IP地址的入站连接,以获取先前创建的规则:
Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10
要将多个IP地址添加到防火墙规则中,请使用以下PowerShell脚本:
$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $current_ips
防火墙规则中所有IP地址的列表:
Get-NetFirewallrule -DisplayName 'Http_inbound'|Get-NetFirewallAddressFilter
从防火墙规则中删除一个IP地址:
$removeip = "192.168.100.5"
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$filterIP = $current_ips | Where-Object{ $_ -notin $removeip }
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $filterIP
如何使用PowerShell启用/禁用/删除Windows防火墙规则
您可以使用禁用新网络和启用netfirewallruleCMDLET启用并禁用防火墙规则。
Disable-NetFirewallRule –DisplayName 'HTTP-Inbound'
要允许ICMP(ping),请运行此命令:
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
要删除防火墙规则,请使用删除NetFireWallrulecmdlet。
Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'
要重置所有Microsoft防火墙规则并还原默认设置,请运行以下命令
netsh advfirewall reset
或者:
(New-Object -ComObject HNetCfg.FwPolicy2).RestoreLocalFirewallDefaults()
这将删除所有用户定义的设置以及Microsoft Defender防火墙规则。仅保留在Windows中的网络访问规则。
在重置防火墙规则之前,您可以将当前设置导出到文件。
netsh advfirewall export "C:Backupfirewall-config.wfw"
稍后,您可以通过导入规则文件来恢复旧的防火墙设置:
netsh advfirewall import "C:Backupfirewall-config.wfw"
PowerShell:在Windows防火墙中列出活动规则
可以显示启用启用的防火墙规则列表如下
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防火墙规则的各种选项。如果发生某些事件,您可以自动运行PowerShell脚本以打开/关闭端口。在下面的文章中,我们将研究简单的PowerShell和基于Windows防火墙的解决方案,以通过将攻击者的IP地址添加到防火墙规则中,自动阻止Windows VDS主机上的RDP Brute-Force攻击。