如何使用PowerShell(服务器核心)设置IIS远程pipe理限制策略?

我正在服务器核心环境中设置IIS 2012 R2系统。 我已经启用了IISpipe理服务并分配了一个证书,但是找不到如何configuration什么IP可以连接到8172的限制。关键:HKLM \ SOFTWARE \ Microsoft \ WebManagement \ Server \ RemoteRestrictions这样做,但编码如此你不能只看它,知道该放什么东西。 通过在一个带有GUI的系统上设置并复制键值来克服它,但有没有正确的方法? 知道string编码将有助于如果registry编辑是唯一的PowerShell选项。

很好的问题…我不认为有一个好方法。 我没有看到以编程方式设置它的任何logging的方式。 编码看起来像base64,所以如果你真的迫切需要自动执行此操作,请尝试通过GUI设置RemoteRestrictions值,然后尝试使用Powershell自己复制相同的base64string,如下所示:

$RemoteRestrictions = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("192.168.1.50")) 

如果你能拿出相同的string,那么你已经知道了他们的秘密酱油。 (警告:这可能是一个傻瓜的差事,浪费你的时间,我不知道在base64编码之前他们可能会把它放在那里。

但是正式的,我认为你唯一的办法就是从安装了RSAT(远程服务器pipe理工​​具)的另一台服务器远程pipe理这个IIS服务器。

编辑:其实我认为REG_SZ值是UTF-16小端(每个字符是两个字节长),所以你可能需要使用UTF16类而不是UTF8。

这是我们的部署过程的最后一部分,这是一个手动步骤,我决定解密RemoteRestrictions设置,并设法提出一个解决scheme来产生这个设置。

您可以在下面的要点中find完整的PowerShell脚本,它允许您定义全局允许/拒绝设置以及一组允许/拒绝的IP和子网

https://gist.github.com/guavadevelopment/7217d87943eb69ac60f0f96f3be00874

 $remoteRestrictions = (Generate-RemoteRestrictions -globalDeny $True -addresses "1.1.1.1/255.255.255.255") 

关于结构的几点提示:

  • 该设置是Base64编码,所以你需要解码才能得到一个字节数组,数据直接编码到这个字节数组中
  • 前21个字节是一个标题
    • 字节12编码全局允许/拒绝103 =允许,104 =拒绝
    • 字节18到21是一个4字节的整数,说明有多lessIP地址设置要跟在标题
  • 标题后面是configuration每个IP地址的42字节块(你可以定义ipv6 ips,这些创build更大的部分,我不支持)
    • 字节1到4是一个基于零的4字节的int,用于ip地址的索引,对于每个添加的ip应该增加1
    • 字节17,19,21和23代表IP地址的每个八位位组
    • 字节31,33,35和37代表子网地址的每个八位位组
    • 字节42编码ip允许/拒绝103 =允许,104 =拒绝

好消息是,在任何机器上的编码是相同的,所以从另一台机器复制string应该工作正常。

HKLM\SOFTWARE\Microsoft\WebManagement\Server\RemoteRestrictions的string是base64编码的

 [System.Convert]::FromBase64String($input) 

返回一个字节数组,但我无法将其转换为有意义的string。