具有Windows PowerShell的具有高级安全性管理的Windows防火墙
- 2016年8月31日
- 23分钟阅读
适用于:Windows Server 2012,Windows 8
具有Windows PowerShell的具有高级安全性的Windows防火墙管理指南提供了基本的脚本,用于在Windows Server 2012中自动化具有高级安全性管理的Windows防火墙。它是为IT专业人员,系统管理员,IT管理员以及其他需要并需要使Windows防火墙自动化的人员而设计的。 Windows中的高级安全管理。
在Windows Server 2012和Windows 8中,管理员可以使用Windows PowerShell来管理其防火墙和IPsec部署。与Netsh相比,这种面向对象的脚本环境将使管理员更易于管理策略和监视网络状况。Windows PowerShell允许通过每个cmdlet中的语法和参数来自动发现网络设置。本指南演示了如何在Netsh中执行常见任务以及如何使用Windows PowerShell完成这些任务。
重要
自先前的操作系统版本以来,具有高级安全性的Windows防火墙的netsh命令未更改。Windows Server 2012中具有高级安全性的Windows防火墙的netsh命令与WindowsServer®2008 R2中提供的命令相同。
在Windows的将来版本中,Microsoft可能会删除具有高级安全性的Windows防火墙的netsh功能。如果当前使用netsh配置和管理具有高级安全性的Windows防火墙,Microsoft建议您过渡到Windows PowerShell。
Windows PowerShell和netsh命令参考位于以下位置。
范围
本指南没有教您具有高级安全性的Windows防火墙的基础知识,可以在具有高级安全性的Windows防火墙概述中找到该基础知识。它没有讲授Windows PowerShell的基础知识,并且假定您熟悉Windows PowerShell语言和Windows PowerShell的基本概念。有关Windows PowerShell概念和用法的详细信息,请参阅本指南“ 其他资源”部分中的参考主题。
受众和用户要求
本指南面向IT专业人员,系统管理员和IT管理员,并假定您熟悉具有高级安全性的Windows防火墙,Windows PowerShell语言和Windows PowerShell的基本概念。
系统要求
要运行本指南中的脚本和脚本,请按照以下步骤安装和配置系统:
- Windows Server 2012
- Windows PowerShell 3.0(包含在Windows Server 2012中)
- Windows PowerShell的Windows NetSecurity模块(包含在Windows Server 2012中)
- Windows PowerShell ISE(Windows PowerShell 3.0中的可选功能,使用服务器管理器安装)
注意
在Windows PowerShell 3.0中,当您获取或使用模块中的任何cmdlet时,模块将自动导入。您仍然可以使用Import-Module cmdlet导入模块。如果您使用的是Windows PowerShell 2.0,或者在使用任何cmdlet之前需要使用模块的功能,请使用Import-Module。有关更多信息,请参见Import-Module。不管您运行的Windows PowerShell是什么版本,都可以使用Import-PSSnapIn在Windows PowerShell管理单元中使用cmdlet。
在本指南中
话题 | 描述 |
启用和控制防火墙行为 | |
如何创建,修改和删除防火墙规则 | |
使用-CimSession进行远程管理 | |
IPsec规则和相关参数 | |
域和服务器隔离 | |
有关Windows PowerShell的更多信息 |
设置配置文件全局默认值
全局默认值以每个配置文件为基础设置系统行为。具有高级安全性的Windows防火墙支持域,专用和公用配置文件。
启用Windows防火墙
Windows防火墙会丢弃与允许的未经请求的流量不匹配的流量,或为响应计算机的请求而发送的流量。如果发现创建的规则没有得到执行,则可能需要启用Windows防火墙。这是在本地域计算机上执行此操作的方法:
耐特什
复制
netsh advfirewall set allprofiles state on
Windows PowerShell
以下一个或多个Windows PowerShell cmdlet执行与上述过程相同的功能。即使由于格式限制它们在此处可能跨几行显示为单词包装,也请在一行中输入每个cmdlet。
复制
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
控制防火墙行为
可以通过命令行界面定义全局默认设置。这些修改也可以通过具有高级安全性MMC的Windows防火墙管理单元来获得。
以下脚本集设置了默认的入站和出站操作,指定了受保护的网络连接,并在阻止程序接收入站连接时允许向用户显示通知。它允许对多播或广播网络流量进行单播响应,并指定日志记录设置以进行故障排除。
耐特什
复制
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
netsh advfirewall set allprofiles settings inboundusernotification enable
netsh advfirewall set allprofiles settings unicastresponsetomulticast enable
netsh advfirewall set allprofiles logging filename %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log
Windows PowerShell
复制
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow –NotifyOnListen True -AllowUnicastResponseToMulticast True –LogFileName %SystemRoot%\System32\LogFiles\Firewall\pfirewall.log
部署基本防火墙规则
本节提供了用于创建,修改和删除防火墙规则的scriptlet示例。
创建防火墙规则
在Windows PowerShell中添加防火墙规则看起来很像在Netsh中添加防火墙规则,但是参数和值的指定方式不同。
这是如何允许Telnet应用程序在网络上侦听的示例。通过使用关键字而不是IP地址,此防火墙规则的作用域为本地子网。就像在Netsh中一样,该规则在本地计算机上创建,并且立即生效。
耐特什
复制
netsh advfirewall firewall add rule name="Allow Inbound Telnet" dir=in program= %SystemRoot%\System32\tlntsvr.exe remoteip=localsubnet action=allow
Windows PowerShell
复制
New-NetFirewallRule -DisplayName “Allow Inbound Telnet” -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow
以下脚本显示了如何添加基本防火墙规则,该规则阻止从特定应用程序和本地端口到Active Directory中组策略对象(GPO)的出站流量。在Windows PowerShell中,将策略存储指定为New-NetFirewall cmdlet中的参数。在Netsh中,必须首先指定Netsh会话中的命令应修改的GPO。您输入的命令是针对GPO的内容运行的,直到Netsh会话结束或执行另一个set store命令之前,该命令一直有效。
在这里,domain.contoso.com是您的Active Directory域服务(AD DS)的名称,而gpo_name是您要修改的GPO的名称。如果GPO名称中有空格,则必须使用引号。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\gpo_name
netsh advfirewall firewall add rule name="Block Outbound Telnet" dir=out program=%SystemRoot%\System32\telnet.exe protocol=tcp localport=23 action=block
Windows PowerShell
复制
New-NetFirewallRule -DisplayName “Block Outbound Telnet” -Direction Outbound -Program %SystemRoot%\System32\tlntsvr.exe –Protocol TCP –LocalPort 23 -Action Block –PolicyStore domain.contoso.com\gpo_name
GPO缓存
为了减轻繁忙的域控制器的负担,Windows PowerShell允许您将GPO加载到本地会话中,在该会话中进行所有更改,然后将其全部保存回来。
以下步骤执行与上一个示例相同的操作(通过向GPO添加Telnet规则),但是我们利用PowerShell中的GPO缓存来执行此操作。Netsh不支持通过将GPO加载到本地会话并使用-GPOSession参数来更改GPO。
Windows PowerShell
复制
$gpo = Open-NetGPO –PolicyStore domain.contoso.com\gpo_name
New-NetFirewallRule -DisplayName “Block Outbound Telnet” -Direction Outbound -Program %SystemRoot%\System32\telnet.exe –Protocol TCP –LocalPort 23 -Action Block –GPOSession $gpo
Save-NetGPO –GPOSession $gpo
请注意,这不会批量更改您的个人更改,而是会立即加载并保存整个GPO。因此,如果其他管理员或在其他Windows PowerShell窗口中进行了任何其他更改,则保存GPO将覆盖这些更改。
修改现有的防火墙规则
创建规则后,Netsh和Windows PowerShell允许管理员更改规则属性和影响,但是规则保留其唯一标识符(在Windows PowerShell中,该标识符由-Name参数指定)。
例如,您可能有一个规则允许Web 80,该规则启用TCP端口80来处理未经请求的入站流量。您可以通过指定规则的本地可读名称来更改规则,以匹配允许流量访问的Web服务器的其他远程IP地址。
耐特什
复制
netsh advfirewall firewall set rule name="Allow Web 80" new remoteip=192.168.0.2
Windows PowerShell
复制
Set-NetFirewallRule –DisplayName “Allow Web 80” -RemoteAddress 192.168.0.2
Netsh要求您提供要更改的规则的名称,我们没有获取防火墙规则的替代方法。在Windows PowerShell中,您可以使用规则的已知属性来查询规则。
当您运行Get-NetFirewallRule时,您可能会注意到没有出现诸如地址和端口之类的常见条件。这些条件在称为过滤器的单独对象中表示。如前所示,您可以在New-NetFirewallRule和Set-NetFirewallRule中设置所有条件。如果要基于这些字段(端口,地址,安全性,接口,服务)查询防火墙规则,则需要自己获取过滤器对象。
您可以使用过滤器对象更改“ 允许Web 80”规则的远程端点(如前所述)。使用Windows PowerShell,您可以使用端口过滤器按端口进行查询,然后假设存在影响本地端口的其他规则,则需要进行进一步的查询,直到检索到所需的规则为止。
在以下示例中,我们假设查询返回一条防火墙规则,然后使用Windows PowerShell的管道输入功能将其通过管道传递到Set-NetFirewallRule cmdlet。
Windows PowerShell
复制
Get-NetFirewallPortFilter | ?{$_.LocalPort -eq 80} | Get-NetFirewallRule | ?{ $_.Direction –eq “Inbound” -and $_.Action –eq “Allow”} | Set-NetFirewallRule -RemoteAddress 192.168.0.2
您也可以使用通配符查询规则。以下示例返回与特定程序关联的防火墙规则数组。可以在后续的Set-NetFirewallRule cmdlet中修改数组的元素。
Windows PowerShell
复制
Get-NetFirewallApplicationFilter -Program "*svchost*" | Get-NetFirewallRule
在Set命令中指定关联的组名时,可以同时修改组中的多个规则。您可以将防火墙规则添加到指定的管理组,以便管理共享相同影响的多个规则。
在以下示例中,我们将入站和出站Telnet防火墙规则都添加到组Telnet Management中。在Windows PowerShell中,组成员资格是在首次创建规则时指定的,因此我们重新创建了先前的示例规则。在Netsh中无法将规则添加到自定义规则组。
Windows PowerShell
复制
New-NetFirewallRule -DisplayName “Allow Inbound Telnet” -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow –Group “Telnet Management”
New-NetFirewallRule -DisplayName “Block Outbound Telnet” -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -RemoteAddress LocalSubnet -Action Allow –Group “Telnet Management”
如果在规则创建时未指定组,则可以使用Windows PowerShell中的点符号将规则添加到规则组。您不能使用Set-NetFirewallRule指定该组,因为该命令允许按规则组进行查询。
Windows PowerShell
复制
$rule = Get-NetFirewallRule -DisplayName “Allow Inbound Telnet”
$rule.Group = “Telnet Management”
$rule | Set-NetFirewallRule
使用Set命令,如果指定了规则组名称,则不会修改组成员身份,而是组中的所有规则都会收到由给定参数指示的相同修改。
以下脚本可启用预定义组中的所有规则,其中包含影响防火墙规则的远程管理。
耐特什
复制
netsh advfirewall firewall set rule group="windows firewall remote management" new enable=yes
Windows PowerShell
复制
Set-NetFirewallRule -DisplayGroup “Windows Firewall Remote Management” –Enabled True
还有一个单独的Enable-NetFirewallRule cmdlet,用于按组或规则的其他属性来启用规则。
Windows PowerShell
复制
Enable-NetFirewallRule -DisplayGroup “Windows Firewall Remote Management” -Verbose
删除防火墙规则
可以禁用规则对象,使其不再处于活动状态。在Windows PowerShell中,Disable-NetFirewallRule cmdlet将规则保留在系统上,但将其置于禁用状态,因此不再应用该规则并影响流量。禁用的防火墙规则可以通过Enable-NetFirewallRule重新启用。这与Remove-NetFirewallRule不同,后者从系统中永久删除规则定义。
以下cmdlet从本地策略存储中删除指定的现有防火墙规则。
耐特什
复制
netsh advfirewall firewall delete rule name=“Allow Web 80”
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Allow Web 80”
与其他cmdlet一样,您也可以查询要删除的规则。在此,所有阻止防火墙规则都将从系统中删除。
Windows PowerShell
复制
Remove-NetFirewallRule –Action Block
请注意,使用Get命令查询规则并将其保存在变量中,观察受影响的规则,然后将它们通过管道传递到Remove命令,就像我们对Set命令所做的那样,可能更安全。以下示例显示管理员如何查看所有阻止防火墙规则,然后删除前四个规则。
Windows PowerShell
复制
$x = Get-NetFirewallRule –Action Block
$x
$x[0-3] | Remove-NetFirewallRule
远程管理
默认情况下,Windows Server 2012上启用了使用WinRM进行远程管理。支持CimSession参数的cmdlet 使用WinRM,并且默认情况下可以进行远程管理。这很重要,因为Windows Server 2012的默认和推荐安装模式是Server Core,其中不包含图形用户界面。
以下示例返回名为RemoteComputer的计算机上的持久性存储的所有防火墙规则。
Windows PowerShell
复制
Get-NetFirewallRule –CimSession RemoteComputer
我们只需使用–CimSession参数即可在远程计算机上执行任何修改或查看规则。在这里,我们从远程计算机上删除特定的防火墙规则。
Windows PowerShell
复制
$RemoteSession = New-CimSession –ComputerName RemoteComputer
Remove-NetFirewallRule –DisplayName “AllowWeb80” –CimSession $RemoteSession -Confirm
部署基本IPsec规则设置
Internet协议安全(IPsec)策略由确定IPsec行为的规则组成。IPsec支持网络级对等身份验证,数据源身份验证,数据完整性,数据机密性(加密)和重播保护。有关IPsec的详细信息,请参阅《具有高级安全性学习路线图的Windows防火墙》。
Windows PowerShell可以在Netsh和具有高级安全性MMC管理单元的Windows防火墙中创建强大,复杂的IPsec策略。但是,由于Windows PowerShell是基于对象而不是基于字符串令牌的,因此Windows PowerShell中的配置提供了更好的控制和灵活性。
在Netsh中,将身份验证和加密集指定为特定格式的逗号分隔标记的列表。在Windows PowerShell中,首先使用所需的身份验证或加密提议对象,然后按照首选顺序将其捆绑到列表中,而不使用默认设置。然后,您创建一个或多个引用这些集合的IPsec规则。这种模型的好处在于,以编程方式访问规则中的信息要容易得多。请参阅以下各节以阐明示例。
创建IPsec规则
以下cmdlet在组策略对象中创建基本IPsec传输模式规则。IPsec规则易于创建;所需要的只是显示名称,其余属性使用默认值。使用默认的快速模式和主模式设置对入站流量进行身份验证并检查完整性。这些默认设置可以在MMC管理单元中的“自定义IPsec默认值”下找到。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\gpo_name
netsh advfirewall consec add rule name="Require Inbound Authentication" endpoint1=any endpoint2=any action=requireinrequestout
Windows PowerShell
复制
New-NetIPsecRule -DisplayName “Require Inbound Authentication” -PolicyStore domain.contoso.com\gpo_name
将自定义身份验证方法添加到IPsec规则
如果要创建一组自定义的快速模式建议,在IPsec规则对象中同时包含AH和ESP,则可以分别创建关联的对象并链接它们的关联。有关身份验证方法的更多信息,请参见选择IPsec协议。
然后,当您创建IPsec规则时,可以使用新创建的自定义快速模式策略。加密集对象链接到IPsec规则对象。
在此示例中,我们通过指定自定义快速模式加密集建立在先前创建的IPsec规则的基础上。最终的IPsec规则要求使用指定的加密方法对出站流量进行身份验证。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\gpo_name
netsh advfirewall consec add rule name="Require Outbound Authentication" endpoint1=any endpoint2=any action=requireinrequestout qmsecmethods=ah:sha1+esp:sha1-3des
Windows PowerShell
复制
$AHandESPQM = New-NetIPsecQuickModeCryptoProposal -Encapsulation AH,ESP –AHHash SHA1 -ESPHash SHA1 -Encryption DES3
$QMCryptoSet = New-NetIPsecQuickModeCryptoSet –DisplayName “ah:sha1+esp:sha1-des3” -Proposal $AHandESPQM –PolicyStore domain.contoso.com\gpo_name
New-NetIPsecRule -DisplayName “Require Inbound Authentication” -InboundSecurity Require -OutboundSecurity Request -QuickModeCryptoSet $QMCryptoSet.Name –PolicyStore domain.contoso.com\gpo_name
IKEv2 IPsec传输规则
公司网络可能需要保护与另一机构的通信。但是,您发现该代理运行非Windows操作系统,并且需要使用Internet密钥交换版本2(IKEv2)标准。
您只需在IPsec规则中将IKEv2指定为关键模块,即可利用Windows Server 2012中的IKEv2功能。这只能使用计算机证书身份验证来完成,而不能与阶段2身份验证一起使用。
Windows PowerShell
复制
New-NetIPsecRule -DisplayName “Require Inbound Authentication” -InboundSecurity Require -OutboundSecurity Request –Phase1AuthSet MyCertAuthSet -KeyModule IKEv2 –RemoteAddress $nonWindowsGateway
有关IKEv2(包括方案)的详细信息,请参阅Windows Server 2012中的使用IKEv2保护端到端IPsec连接。
将IPsec规则从一个策略复制到另一个
可以复制具有相同规则属性的防火墙和IPsec规则,以简化在不同策略存储中重新创建它们的任务。
要将先前创建的规则从一个策略存储复制到另一策略存储,关联的对象也必须单独复制。请注意,无需复制关联的防火墙过滤器。您可以以与其他cmdlet相同的方式查询要复制的规则。
复制单个规则是通过Netsh界面无法完成的任务。这是使用Windows PowerShell完成它的方法。
Windows PowerShell
复制
$Rule = Get-NetIPsecRule –DisplayName “Require Inbound Authentication”
$Rule | Copy-NetIPsecRule –NewPolicyStore domain.costoso.com\new_gpo_name
$Rule | Copy-NetPhase1AuthSet –NewPolicyStore domain.costoso.com\new_gpo_name
处理Windows PowerShell错误
要处理Windows PowerShell脚本中的错误,可以使用–ErrorAction参数。这对于Remove cmdlet 尤其有用。如果要删除特定规则,则会发现,如果找不到该规则,它将失败。删除规则时,如果规则不存在,通常可以忽略该错误。在这种情况下,您可以执行以下操作来消除删除操作期间的所有“未找到规则”错误。
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Contoso Messenger 98” –ErrorAction SilentlyContinue
请注意,使用通配符还可以抑制错误,但是它们可能与您不打算删除的规则相匹配。这可能是一个有用的快捷方式,但仅当您知道没有任何多余的规则会意外删除时,才应使用它。因此,以下cmdlet也将删除规则,从而消除任何“未找到”错误。
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Contoso Messenger 98*”
使用通配符时,如果要仔细检查匹配的规则集,则可以使用–WhatIf参数。
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Contoso Messenger 98*” –WhatIf
如果只想删除某些匹配的规则,则可以使用–Confirm参数来获取按规则进行确认的提示。
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Contoso Messenger 98*” –Confirm
您也可以只执行整个操作,在执行操作时显示每个规则的名称。
Windows PowerShell
复制
Remove-NetFirewallRule –DisplayName “Contoso Messenger 98*” –Verbose
监控
以下Windows PowerShell命令在部署阶段的更新周期中很有用。
要允许您查看特定存储区中的所有IPsec规则,可以使用以下命令。在Netsh中,此命令不显示profile = domain,public或profile = domain,private的规则。它仅显示规则中包含单个条目域的规则。以下命令示例将在所有配置文件中显示IPsec规则。
耐特什
复制
netsh advfirewall consec show rule name=all
Windows PowerShell
复制
Show-NetIPsecRule –PolicyStore ActiveStore
您可以监视主模式安全性关联,以获取信息,例如当前哪些对等方已连接到计算机以及使用哪个保护套件来形成安全性关联。
使用以下cmdlet可以查看现有的主模式规则及其安全关联:
耐特什
复制
netsh advfirewall monitor show mmsa all
Windows PowerShell
复制
Get-NetIPsecMainModeSA
查找规则的源GPO
要查看特定规则或规则组的属性,请查询规则。当查询返回指定为NotConfigured的字段时,您可以确定规则源自哪个策略存储。
对于来自GPO的对象(在Show命令中将–PolicyStoreSourceType参数指定为GroupPolicy),如果传递了–TracePolicyStore,则会在PolicyStoreSource字段中找到并返回GPO的名称。
Windows PowerShell
复制
Get-NetIPsecRule –DisplayName “Require Inbound Authentication” –TracePolicyStore
重要的是要注意,显示的来源不包含域名。
部署基本的域隔离策略
IPsec可用于将域成员与非域成员隔离。域隔离使用IPsec身份验证来要求域计算机成员积极地建立通信计算机的身份,以提高组织的安全性。IPsec的一项或多项功能可用于保护具有IPsec规则对象的通信。
为了在您的网络上实现域隔离,域中的计算机会收到IPsec规则,这些规则会阻止不受IPsec保护的未经请求的入站网络流量。在这里,我们创建一个IPsec规则,要求域成员进行身份验证。这样,您可以将域成员计算机与非域成员计算机隔离。在以下示例中,入站流量需要Kerberos身份验证,而出站流量则需要Kerberos身份验证。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\domain_isolation
netsh advfirewall consec add rule name=“Basic Domain Isolation Policy” profile=domain endpoint1=”any” endpoint2=”any” action=requireinrequestout auth1=”computerkerb”
Windows PowerShell
复制
$kerbprop = New-NetIPsecAuthProposal –Machine –Kerberos
$Phase1AuthSet = New-NetIPsecPhase1AuthSet -DisplayName "Kerberos Auth Phase1" -Proposal $kerbprop –PolicyStore domain.contoso.com\domain_isolation
New-NetIPsecRule –DisplayName “Basic Domain Isolation Policy” –Profile Domain –Phase1AuthSet $Phase1AuthSet.Name –InboundSecurity Require –OutboundSecurity Request –PolicyStore domain.contoso.com\domain_isolation
配置IPsec隧道模式
以下命令创建一个IPsec隧道,该隧道将来自专用网络(192.168.0.0/16)的流量通过连接到公用网络的本地计算机(1.1.1.1)上的接口通过其公用接口(2.2.2.2)路由到第二台计算机)到另一个专用网络(192.157.0.0/16)。使用ESP / SHA1检查通过隧道的所有流量的完整性,并使用ESP / DES3对其进行加密。
耐特什
复制
netsh advfirewall consec add rule name="Tunnel from 192.168.0.0/16 to 192.157.0.0/16" mode=tunnel endpoint1=192.168.0.0/16 endpoint2=192.157.0.0/16 localtunnelendpoint=1.1.1.1 remotetunnelendpoint=2.2.2.2 action=requireinrequireout qmsecmethods=esp:sha1-3des
Windows PowerShell
复制
$QMProposal = New-NetIPsecQuickModeCryptoProposal -Encapsulation ESP -ESPHash SHA1 -Encryption DES3
$QMCryptoSet = New-NetIPsecQuickModeCryptoSet –DisplayName “esp:sha1-des3” -Proposal $QMProposal
New-NetIPSecRule -DisplayName “Tunnel from HQ to Dallas Branch” -Mode Tunnel -LocalAddress 192.168.0.0/16 -RemoteAddress 192.157.0.0/16 -LocalTunnelEndpoint 1.1.1.1 -RemoteTunnelEndpoint 2.2.2.2 -InboundSecurity Require -OutboundSecurity Require -QuickModeCryptoSet $QMCryptoSet.Name
使用IPsec部署安全防火墙规则
在只能通过Windows防火墙允许安全流量的情况下,必须结合使用手动配置的防火墙和IPsec规则。防火墙规则确定允许的数据包的安全级别,而基础的IPsec规则则保护流量。这些方案可以在Windows PowerShell和Netsh中完成,并且在部署上有很多相似之处。
创建安全的防火墙规则(如果安全,则允许)
配置防火墙规则以允许连接(如果它们是安全的)要求对相应的流量进行身份验证和完整性保护,然后可选地由IPsec加密。
以下示例创建一个防火墙规则,该规则要求对流量进行身份验证。仅当使用单独的IPsec规则对来自远程计算机的连接进行身份验证时,该命令才允许入站Telnet网络流量。
耐特什
复制
netsh advfirewall firewall add rule name="Allow Authenticated Telnet" dir=in program=%SystemRoot%\System32\tlntsvr.exe security=authenticate action=allow
Windows PowerShell
复制
New-NetFirewallRule -DisplayName “Allow Authenticated Telnet” -Direction Inbound -Program %SystemRoot%\System32\tlntsvr.exe -Authentication Required -Action Allow
以下命令创建一个IPsec规则,该规则要求首先进行(计算机)身份验证,然后尝试进行可选的第二次(用户)身份验证。创建此规则可确保安全,并允许流量通过Messenger程序的防火墙规则要求。
耐特什
复制
netsh advfirewall consec add rule name="Authenticate Both Computer and User" endpoint1=any endpoint2=any action=requireinrequireout auth1=computerkerb,computerntlm auth2=userkerb,userntlm,anonymous
Windows PowerShell
复制
$mkerbauthprop = New-NetIPsecAuthProposal -Machine –Kerberos
$mntlmauthprop = New-NetIPsecAuthProposal -Machine -NTLM
$P1Auth = New-NetIPsecPhase1AuthSet -DisplayName “Machine Auth” –Proposal $mkerbauthprop,$mntlmauthprop
$ukerbauthprop = New-NetIPsecAuthProposal -User -Kerberos
$unentlmauthprop = New-NetIPsecAuthProposal -User -NTLM
$anonyauthprop = New-NetIPsecAuthProposal -Anonymous
$P2Auth = New-NetIPsecPhase2AuthSet -DisplayName “User Auth” -Proposal $ukerbauthprop,$unentlmauthprop,$anonyauthprop
New-NetIPSecRule -DisplayName “Authenticate Both Computer and User” -InboundSecurity Require -OutboundSecurity Require -Phase1AuthSet $P1Auth.Name –Phase2AuthSet $P2Auth.Name
通过要求加密和组成员身份来隔离服务器
为了提高组织中计算机的安全性,管理员可以部署域隔离,限制域成员。它们彼此之间进行通信时需要身份验证,并且拒绝未经身份验证的入站连接。为了提高包含敏感数据的服务器的安全性,必须通过仅允许访问企业域内的一部分计算机来保护此数据。
IPsec可以通过隔离服务器来提供此附加保护层。在服务器隔离中,敏感数据访问仅限于具有合法业务需要的用户和计算机,并且对数据进行了额外加密以防止窃听。
创建需要组成员身份和加密的防火墙规则
为了部署服务器隔离,我们在执行身份验证的IPsec规则上分层了一个防火墙规则,该规则将流量限制到授权用户或计算机。
以下防火墙规则允许来自用户帐户的Telnet流量,这些用户帐户是由管理员(称为“授权给Access Server”)创建的自定义组的成员。此外,还可以基于计算机,用户或同时通过这两者来限制访问,方法是指定限制参数。
通过扩展用户或组的安全标识符(SID)来创建安全描述符定义语言(SDDL)字符串。有关查找组的SID的更多信息,请参阅:查找组帐户的SID。
限制对组的访问,使管理员可以通过Windows防火墙/和/或IPsec策略扩展强大的身份验证支持。
下面的示例向您展示如何创建代表安全组的SDDL字符串。
Windows PowerShell
复制
$user = new-object System.Security.Principal.NTAccount (“corp.contoso.com\Administrators”)
$SIDofSecureUserGroup = $user.Translate([System.Security.Principal.SecurityIdentifier]).Value
$secureUserGroup = "D:(A;;CC;;;$SIDofSecureUserGroup)"
通过使用先前的脚本,您还可以获取安全计算机组的SDDL字符串,如下所示:
Windows PowerShell
复制
$secureMachineGroup = "D:(A;;CC;;;$SIDofSecureMachineGroup)"
有关如何创建安全组或如何确定SDDL字符串的更多信息,请参见使用SID。
Telnet是不提供加密的应用程序。该应用程序可以通过网络发送数据,例如名称和密码。恶意用户可以拦截此数据。如果管理员希望允许使用Telnet但保护流量,则可以创建需要IPsec加密的防火墙规则。这是必需的,以便管理员可以确定在使用此应用程序时,此端口发送或接收的所有通信都将被加密。如果IPsec无法授权连接,则不允许来自此应用程序的流量。
在此示例中,通过创建以下防火墙规则,我们仅允许来自指定的安全用户组的经过身份验证和加密的入站Telnet通信。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\Server_Isolation
netsh advfirewall firewall add rule name=“Allow Encrypted Inbound Telnet to Group Members Only” program=%SystemRoot%\System32\tlntsvr.exe protocol=TCP dir=in action=allow localport=23 security=authenc rmtusrgrp ="D:(A;;CC;;; S-1-5-21-2329867823-2610410949-1491576313-1735)"
Windows PowerShell
复制
New-NetFirewallRule -DisplayName "Allow Encrypted Inbound Telnet to Group Members Only" -Program %SystemRoot%\System32\tlntsvr.exe -Protocol TCP -Direction Inbound -Action Allow -LocalPort 23 -Authentication Required -Encryption Required –RemoteUser $secureUserGroup –PolicyStore domain.contoso.com\Server_Isolation
端点安全实施
前面的示例显示了特定应用程序的端到端安全性。在许多应用程序需要端点安全性的情况下,每个应用程序都具有防火墙规则可能很麻烦且难以管理。授权可以覆盖每个规则,可以在IPsec层进行。
在此示例中,我们将全局IPsec设置设置为仅允许传输模式流量来自具有以下cmdlet的授权用户组。请参考前面的示例来与安全组合作。
Windows PowerShell
复制
Set-NetFirewallSetting -RemoteMachineTransportAuthorizationList $secureMachineGroup
创建防火墙规则以允许受IPsec保护的网络流量(经过身份验证的绕过)
经过身份验证的旁路允许来自指定的受信任计算机或用户的流量覆盖防火墙阻止规则。当管理员希望使用扫描服务器来监视和更新计算机而无需使用端口级例外时,这将很有帮助。有关更多信息,请参见如何启用经过身份验证的防火墙旁路。
在此示例中,我们假设存在阻止防火墙规则。如果经过身份验证将流量认证为来自属于指定计算机或用户安全组成员的计算机或用户帐户,则此示例允许来自任何IP地址的任何端口上的任何网络流量覆盖覆盖规则。
耐特什
复制
netsh advfirewall set store gpo=domain.contoso.com\domain_isolation
netsh advfirewall firewall add rule name="Inbound Secure Bypass Rule" dir=in security=authenticate action="bypass" rmtcomputergrp="D:(A;;CC;;;S-1-5-21-2329867823-2610410949-1491576313-1114)" rmtusrgrp="D:(A;;CC;;; S-1-5-21-2329867823-2610410949-1491576313-1735)"
Windows PowerShell
复制
New-NetFirewallRule –DisplayName “Inbound Secure Bypass Rule" –Direction Inbound –Authentication Required –OverrideBlockRules $true -RemoteMachine $secureMachineGroup –RemoteUser $secureUserGroup –PolicyStore domain.contoso.com\domain_isolation
额外资源
有关Windows PowerShell概念的更多信息,请参见以下主题。
- Windows PowerShell入门指南
- Windows PowerShell用户指南
- Windows PowerShell关于帮助主题
- about_Functions
- about_Functions_Advanced
- about_Execution_Policies
- about_Foreach
- about_Objects
- about_Properties
- about_While
- about_Scripts
- about_Signing
- about_Throw
- about_PSSessions
- about_Modules
- about_Command_Precedence