我正在尝试运行以下命令来重置远程计算机上的 IIS。
IISReset <remoteMachine>
如果我禁用域防火墙,一切都会正常。启用防火墙后,我得到
RPC 服务器不可用。
最初,我尝试启用远程管理 (RPC-EPMAP) 和任何看起来有一点点关联的规则。然后我尝试启用所有预定义规则,但没有成功。
答案1
您可以尝试使用以下命令行向 Web 服务器上的防火墙添加入站规则:
netsh advfirewall firewall add rule name="Remote IIS inetinfo" dir=in action=allow description="Remote IIS Service Managment" program="%systemroot%\System32\inetsrv\inetinfo.exe" enable=yes
netsh advfirewall firewall add rule name="COM+ Remote Administration (All Programs)" dir=in action=allow description="" program="%windir%\system32\dllhost.exe" enable=yes localport=RPC protocol=tcp
当我尝试访问 IIS 服务时,我不得不使用这些来解决 WMI/RPC 问题。错误如下:
Creating an instance of the COM component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} from the IClassFactory failed due to the following error: 800706ba.
答案2
答案3
其他人已经确定的根本原因是 IISReset 需要 RPC,而默认情况下,在较新版本的 Windows 中,所需的端口默认被阻止(这是一件好事)。
需要开放两组端口:
135/tcp
RPC Dynamic Port Range
- 这是其他人提到的端口映射器。它协商要进行通信的端口RPC Dynamic Port Range
- 这是上面协商的用于执行任务的端口范围。我找不到任何仍针对此范围有效的文档。正如@Ansgar Wiechers 提到的,这是一个高端口,在 Windows Server 2008 中发生了变化。我怀疑这种行为变化就是文档(https://support.microsoft.com/en-us/help/217351正式的 Microsoft KB217351 DCOM 端口范围配置问题)已被删除。
如果您使用 Windows 防火墙,它会提供一个助记符来打开端口范围@Greg Bray 的答案接近正确,但它会打开与 inetinfo.exe 的通信,据我所知,这是不需要的。
以下对我们有用:
netsh advfirewall firewall add rule name="COM+ (DCOM-In) Port Mapper" dir=in action=allow description="Allow Communication to the DCOM Service Control Manager" enable=yes localport=135 protocol=tcp remoteip=x.x.x.x
netsh advfirewall firewall add rule name="COM+ (DCOM-In) Dynamic Port Range" dir=in action=allow description="Allow DCOM Communication" enable=yes localport=RPC protocol=tcp remoteip=x.x.x.x
我将解释上述命令的每个部分:
netsh advfirewall firewall add rule
- 我们将向 Windows 防火墙添加一条规则
name="xxx"
- 此规则的名称;根据需要自定义
dir=in
- 这是一条传入规则
action=allow
- 我们将允许沟通
description="xxx"
- 描述;根据您的需要进行自定义。
enable=yes
- 我们希望启用这些规则
localport=135
- 在第一次使用中,我们明确开放了一个端口号
localport=RPC
- 在第二个命令中,我们将其设置为
RPC
,它告诉 Windows 防火墙它是否在动态端口范围内,以允许它,而无需单独指定每个端口
- 在第二个命令中,我们将其设置为
protocol=tcp
- 所有 RPC 调用都使用
TCP
,因此我们将其指定为协议
- 所有 RPC 调用都使用
remoteip=x.x.x.x
- 这非常重要;它表示此防火墙规则应仅适用于指定的 IP 地址。虽然这不是必需的,但强烈建议您指定此项以严格定义防火墙规则。