本文目录
随着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 中的防火墙管理中加入了欢迎提示。
准备条件
- 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
Get-NetFirewallRule |Select-Object DisplayGroup -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
翻译:荔非苔
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
PS> Get-Command -Noun “*Firewall*” | elect -ExpandProperty Name 中
elect改为select
在域环境中禁用防火墙
Set-NetFirewallProfile -Profile Domain -Enabled True
这个是启用防火墙吧?
感谢提醒,已纠正。
$rules=Get-NetFirewallRule
$DisplayGroups=foreach ($rule in $rules){$rule.displaygroup}
$DisplayGroups|Select-Object -Unique
可以改成
Get-NetFirewallRule |Select-Object DisplayGroup -Unique
感谢建议,已采纳