使用PowerShell管理Windows防火墙 3


本文索引
[隐藏]

随着Windows Server 2012 和 Windows 8 的发布,当你使用NETSH 来管理防火墙时,会看到微软发布的警告消息:

In future versions of Windows, Microsoft might remove the Netsh functionality
for Windows Firewall with Advanced Security(在未来的windows版本中,微软可能会移除Netsh功能,转而使用高级安全的Windows防火墙).

这听起来是我们学习使用PowerShell管理防火墙的一个很好的理由。幸运的是微软已经在PowerShell 3.0 中的防火墙管理中加入了欢迎提示。

NetSh welcome message

准备条件

  • Windows 2012 或者windows 8 +
  • 访问机器的管理员权限
  • PowerShell必须运行在管理员权限下

相关命令

PowerShell 提供了下面的命令用来管理防火墙:

PS> Get-Command -Noun "*Firewall*" | Select -ExpandProperty Name

Copy-NetFirewallRule
Disable-NetFirewallRule
Enable-NetFirewallRule
Get-NetFirewallAddressFilter
Get-NetFirewallApplicationFilter
Get-NetFirewallInterfaceFilter
Get-NetFirewallInterfaceTypeFilter
Get-NetFirewallPortFilter
Get-NetFirewallProfile
Get-NetFirewallRule
Get-NetFirewallSecurityFilter
Get-NetFirewallServiceFilter
Get-NetFirewallSetting
New-NetFirewallRule
Remove-NetFirewallRule
Rename-NetFirewallRule
Set-NetFirewallAddressFilter
Set-NetFirewallApplicationFilter
Set-NetFirewallInterfaceFilter
Set-NetFirewallInterfaceTypeFilter
Set-NetFirewallPortFilter
Set-NetFirewallProfile
Set-NetFirewallRule
Set-NetFirewallSecurityFilter
Set-NetFirewallServiceFilter
Set-NetFirewallSetting
Show-NetFirewallRule

像往常一样,输入get-help ,在后面跟上以上命令的名称,可以看到更多的帮助信息。

常见的例子

下面列出一些你可能希望PowerShell来做的常见的例子:

在域环境中启用防火墙

Set-NetFirewallProfile -Profile Domain -Enabled True

注意,-Enable参数不接受传统的$true,只接受True,显然还有另外一个选项False。其它可用的配置环境还有“Public”和“Private”

启用预制的组规则

一个Group是用于特定用途的规则集合,下面是Windows系统上附带的几个常用的组规则:

Set-NetFirewallRule -DisplayGroup "Remote Event Log Management" -Enabled True
Set-NetFirewallRule -DisplayGroup "Windows Firewall Remote Management" -Enabled True
Set-NetFirewallRule -DisplayGroup "Windows Management Instrumentation(WMI)" -Enabled True
Set-NetFirewallRule -DisplayGroup "Remote Desktop" -Enabled True
Set-NetFirewallRule -DisplayGroup "Windows Remote Management" -Enabled True
Set-NetFirewallRule -DisplayGroup "Remote Administration" -Enabled True

查看所有的group,可以看下面的例子。

列出当前所有的Groups

$rules=Get-NetFirewallRule
$DisplayGroups=foreach ($rule in $rules){$rule.displaygroup}
$DisplayGroups|Select-Object -Unique

添加一条规则

New-NetFirewallRule -DisplayName "Allow Inbound OpenVPN Client Requests" -Direction Inbound -LocalPort 1194 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "Block Outbound itunes.exe" -Direction Outbound -Program "C:\Program Files\apple\itunes\itunes.exe" -Action Block

启用或者禁用存在的某条规则

Set-NetfirewallRule -DisplayName "Allow Inbound OpenVPN Client Requests" -Enabled True
Set-NetfirewallRule -DisplayName "Allow Inbound OpenVPN Client Requests" -Enabled False

删除一条规则

这会永久的删除一条规则,如果你只是禁用一条规则,可以参考前面使用set-netfirewallrule的的例子。

Remove-NetfirewallRule -DisplayName "Allow Inbound OpenVPN Client Requests"

获取防火墙环境配置信息

Get-NetFirewallProfile -name Domain

远程管理规则

任意的命令都可以通过New-CimSession命令远程使用。假设你的防火墙已经启用了我们上面列出过的组规则“Windows Firewall Remote Management“(必要的)。

$TargetComputer=New-CIMSession -Computername MYCOMPUTER
Set-NetFirewallRule -DisplayGroup "Remote Event Log Management" -Enabled True -CimSession $TargetComputer

Windows Server 和 Windows 7怎么办?

不幸的是,上面命令只有在Windows Server 2012和Windows 8和更高版本中支持,即使你在其它旧版本的操作系统中安装了PowerShell 3.0,也不支持。如果你想在旧版本的操作系统上管理防火墙,不得不使用NETSH.

小提示

所以使用PowerShell 管理防火墙,这只是万里长征的第一步。本篇文章主要聚焦每次去管理一台机器的规则,你可能会想去研究通过组策略来控制规则。Windows Server 2012针对此类情况也介绍了一些非常实用的工具。(Open-NetGPO!)更多信息可以通过下面的链接回复互动。

深入阅读

Technet: Windows Firewall with Advanced Security Administration with Windows Powershell
Let IT Know Blog: Manage Windows Firewall With Powershell 3
Microsoft etworking Blog: Deployment: Windows Firewall and Group Policy

原文作者:Toby Meyer

原文链接:Manage the Windows Firewall with Powershell

翻译:荔非苔

本文链接: http://www.pstips.net/manage-firewall-using-powershell.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 条评论 “使用PowerShell管理Windows防火墙