我正在服务器核心环境中设置 IIS 2012 R2 系统。我已启用 IIS 管理服务并分配了证书,但找不到如何配置哪些 IP 可以连接到 8172 的限制。密钥:HKLM\SOFTWARE\Microsoft\WebManagement\Server\RemoteRestrictions 可以做到这一点,但经过编码,因此您不能只看它就知道要放在那里什么。通过在具有 GUI 的系统上进行设置并复制密钥值来解决此问题,但有正确的方法吗?如果注册表编辑是唯一的 powershell 选项,那么了解字符串编码会有所帮助。
答案1
这是我们部署过程的最后一部分,是一个手动步骤,我决定尝试破译 RemoteRestrictions 设置,并设法找到解决方案来生成此设置。
您可以在以下要点中找到完整的 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 字节 int,表示标头后面有多少个 ip 地址设置
- 标头后面是为配置的每个 IP 地址设置的 42 字节块(您可以定义 ipv6 ips,这些块会创建更大的部分,但我不支持)
- 字节 1 到 4 是从零开始的 4 字节整数,用于表示 ip 地址的索引,每添加一个 ip,该值就增加 1
- 字节 17、19、21 和 23 代表 IP 地址的每个八位字节
- 字节 31、33、35 和 37 代表子网地址的每个八位字节
- 字节 42 编码 IP 允许/拒绝 103=允许,104=拒绝
答案2
好问题……我认为没有什么好方法。我没有看到任何以编程方式设置它的记录方法。编码看起来像 base64,所以如果你真的迫切需要自动化,请尝试通过 GUI 设置 RemoteRestrictions 值,然后尝试使用 Powershell 自己复制相同的 base64 字符串,如下所示:
$RemoteRestrictions = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("192.168.1.50"))
如果您能想出相同的字符串,那么您就找到了他们的秘诀。(警告:这可能是愚蠢的行为,浪费您的时间。我不知道在进行 base64 编码之前他们还会在其中放入什么。)
但正式地,我认为您唯一的办法是从安装了 RSAT(远程服务器管理工具)的另一台服务器远程管理此 IIS 服务器。
编辑:实际上我认为 REG_SZ 值是 UTF-16 小端序(每个字符长两个字节),因此您可能需要使用 UTF16 类而不是 UTF8。
答案3
好消息是,任何机器上的编码都是相同的,因此从另一台机器复制字符串应该可以正常工作。
中的字符串HKLM\SOFTWARE\Microsoft\WebManagement\Server\RemoteRestrictions
是 base64 编码的,
[System.Convert]::FromBase64String($input)
返回一个字节数组,但我无法将其转换为有意义的字符串。