Windows 包含一个强大但易于使用的高级防火墙,使用 PowerShell 7 我们可以轻松地从命令行配置防火墙。本文介绍了 Windows 防火墙中使用的常用命令及其可能使用的位置。
模块 NetSecurity 是有据可查的。请记住,本文仅适用于 Windows 操作系统。对于其他操作系统,还有其他命令行工具可用于执行相同类型的功能,例如LinuxUFW
或IPTables
在 Linux 上。
加载NetSecurity
模块
该NetSecurity
模块由 Microsoft 内置并提供,包含添加、删除和修改防火墙规则所需的所有功能。要加载模块,只需导入模块,如下所示。
Import-Module -Name 'NetSecurity'
列出现有防火墙规则
该 cmdletGet-NetFirewallRule
将显示所有现有的防火墙规则。有很多,默认情况下,为了演示,我们输出前 10 个。
Get-NetFirewallRule | Select-Object DisplayName, Enabled, Direction, Action -First 10
有许多由 返回的属性Get-NetFirewallRule
。尽管我们只列出了上面的一个属性, runningGet-NetFirewallRule | Select-Object * -First 1
将列出所有可用的属性。
创建新的防火墙规则
有许多不同的方法可以创建新的防火墙规则,但执行此操作的命令是[Net-NewFirewallRule](<https://docs.microsoft.com/en-us/powershell/module/netsecurity/new-netfirewallrule?view=win10-ps>)
. 需要填写的基本属性有:
DisplayName
– 防火墙规则的友好名称Direction
– 是否阻止流量离开计算机Outbound
或进入计算机Inbound
Action
– 如果满足规则要采取什么行动,Allow
或Block
$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
此命令显示一个指定的配置文件中的当前配置的选项,如在Domain
,Private
或Public
轮廓。Get-NetFirewallSetting
可以使用该Get-NetFirewallSetting
命令检索全局防火墙设置。这些设置包括证书选项、数据包排队或授权列表等选项。Rename-NetFirewallRule
要重命名现有的防火墙规则,请使用该Rename-NetFirewallRule
命令。如果规则是在没有指定名称的情况下创建的,从而接收随机 GUID 作为它的名称,并且最好分配一个人类可读的名称,这将很有用。Set-NetFirewallProfile
要为单个配置文件设置特定设置,请使用该Set-NetFirewallProfile
命令。这允许每个配置文件具有不同的设置。Set-NetFirewallSetting
此命令配置适用于当前使用的网络配置文件的全局防火墙行为。Show-NetFirewallRule
此辅助命令将在格式化列表中显示防火墙规则及其关联对象。
该模块中包含广泛的 IPSec 功能。上面列出的命令是在标准 Windows 防火墙设置上运行的命令。