如何使用 PowerShell 管理 Windows 防火墙规则

如何使用 PowerShell 管理 Windows 防火墙规则

Windows 包含一个强大但易于使用的高级防火墙,使用 PowerShell 7 我们可以轻松地从命令行配置防火墙。本文介绍了 Windows 防火墙中使用的常用命令及其可能使用的位置。

模块 NetSecurity 是有据可查的。请记住,本文仅适用于 Windows 操作系统。对于其他操作系统,还有其他命令行工具可用于执行相同类型的功能,例如LinuxUFWIPTables在 Linux 上。

加载NetSecurity模块

NetSecurity模块由 Microsoft 内置并提供,包含添加、删除和修改防火墙规则所需的所有功能。要加载模块,只需导入模块,如下所示。

Import-Module -Name 'NetSecurity'

列出现有防火墙规则

该 cmdletGet-NetFirewallRule将显示所有现有的防火墙规则。有很多,默认情况下,为了演示,我们输出前 10 个。

Get-NetFirewallRule | Select-Object DisplayName, Enabled, Direction, Action -First 10
如何使用 PowerShell 管理 Windows 防火墙规则
有许多由 返回的属性Get-NetFirewallRule。尽管我们只列出了上面的一个属性, runningGet-NetFirewallRule | Select-Object * -First 1将列出所有可用的属性。 如何使用 PowerShell 管理 Windows 防火墙规则

创建新的防火墙规则

有许多不同的方法可以创建新的防火墙规则,但执行此操作的命令是[Net-NewFirewallRule](<https://docs.microsoft.com/en-us/powershell/module/netsecurity/new-netfirewallrule?view=win10-ps>). 需要填写的基本属性有:
  • DisplayName – 防火墙规则的友好名称
  • Direction– 是否阻止流量离开计算机Outbound或进入计算机Inbound
  • Action– 如果满足规则要采取什么行动,AllowBlock
广告
$Params = @{ "DisplayName" = 'Block WINS' "Direction" = 'Inbound' "Action" = 'Block' "RemoteAddress" = 'WINS' } New-NetFirewallRule @Params 如果Name未使用该参数,则使用随机 GUID。的DisplayName可以是人类可读的,但Name本身分配一个随机GUID。

修改现有防火墙规则

如果我们想修改现有规则而不完全删除和重新创建规则怎么办。为此,我们应该运行Set-NetFirewallRule,并允许我们根据需要修改防火墙规则。
$Params = @{
	"DisplayName"   = 'Block WINS'
	"Action"        = 'Allow'
}

Set-NetFirewallRule @Params

具有的其他有用能力Set-NetFirewallRule是能够同时对多个规则进行操作。这可以通过通过三个参数之一定位规则来完成。

  • Name这是默认设置,如果名称是通过管道或字符串数​​组设置的,则每个名称都会起作用。
  • DisplayName与 类似Name,多个流水线对象或字符串数​​组将相应地修改这些规则。
  • DisplayGroup或者Group如果规则组合在一起,则可以立即对所有这些组合的规则执行操作。

删除现有的防火墙规则

最后,我们希望删除现有规则,因为它可能不再需要。为此,请运行命令Remove-NetFirewallRule。当您这样做时,通常明智的做法是使用WhatIf参数来验证规则是否是要删除的正确规则。

Remove-NetFirewallRule -DisplayName "Block WINS"
广告

需要注意的是,Remove-NetFirewallRule可以一次删除多个规则。此类功能的示例如下。以下规则将删除域中策略firewall_gpo中包含的所有禁用规则ad.local.test

Remove-NetFirewallRule -Enabled 'False' -PolicyStore 'ad.local.test\\firewall_gpo'

一个有用但有潜在危险的命令正在Remove-NetFirewallFule自行运行,它会删除所有已创建的静态本地防火墙规则。如果您有定义防火墙规则的域 GPO,这将删除任何可能与这些 GPO 定义的规则冲突的内容。

附加功能

NetSecurity模块中还有许多其他命令可用。尽管我们没有在此处全部介绍,但下面显示了一些值得注意的命令,以演示该模块的广泛性。

  • Copy-NetFirewallRule此命令将现有的防火墙规则和所有关联的过滤器复制到相同或不同的策略存储。
  • Disable-NetFirewallRule这将禁用以前启用的防火墙规则。规则仍然存在,但不会主动修改任何网络数据。如果不带任何参数运行此命令,它将禁用目标计算机上的所有活动规则。WhatIf如果不针对特定规则或规则集,建议始终使用参数运行此命令。
  • Enable-NetFirewallRule与 一样Disable-NetFirewallRule,此命令将启用以前禁用的规则或规则集。如果在没有任何参数的情况下运行此命令,它将启用所有以前禁用的规则。WhatIf如果不针对特定规则或规则集,建议始终使用参数运行此命令。
  • Get-NetFirewallProfile此命令显示一个指定的配置文件中的当前配置的选项,如在DomainPrivatePublic轮廓。
  • Get-NetFirewallSetting可以使用该Get-NetFirewallSetting命令检索全局防火墙设置。这些设置包括证书选项、数据包排队或授权列表等选项。
  • Rename-NetFirewallRule要重命名现有的防火墙规则,请使用该Rename-NetFirewallRule命令。如果规则是在没有指定名称的情况下创建的,从而接收随机 GUID 作为它的名称,并且最好分配一个人类可读的名称,这将很有用。
  • Set-NetFirewallProfile要为单个配置文件设置特定设置,请使用该Set-NetFirewallProfile命令。这允许每个配置文件具有不同的设置。
  • Set-NetFirewallSetting此命令配置适用于当前使用的网络配置文件的全局防火墙行为。
  • Show-NetFirewallRule此辅助命令将在格式化列表中显示防火墙规则及其关联对象。

该模块中包含广泛的 IPSec 功能。上面列出的命令是在标准 Windows 防火墙设置上运行的命令。

正文完