Windows 防火墙规则因理解失误导致无效

问题描述

使用 netsh 命令为软件包中的一个程序(A.exe)和一个服务(Service B)创建防火墙规则(Rule C),搜了一下 netsh advfirewall firewall 的用法,写下了如下命令。

netsh advfirewall firewall add rule name="Rule C" 
    dir=in action=allow
    program="...\A.exe" service="Service B" 
    description="This is a description."

A.exe 和 Service B 分别运行着一个网络通信服务,测试发现两个通信均收不到消息。

解决方案

查阅了 MSDN (ref: 创建入站程序或服务规则 (Windows 10) - Windows security | Microsoft Docs
) 的详细说明,看到了这样一段话。

执行下列操作之一:

  • 如果可执行文件包含单个程序, 请单击 "下一步"。
  • 如果可执行文件是必须全部都允许接收入站网络流量的多个服务的容器, 请单击 "自定义", 选择 "仅应用于服务", 单击 "确定", 然后单击 "下一步"。
  • 如果可执行文件是单个服务的容器或包含多个服务, 但规则仅适用于其中一个服务, 请单击 "自定义", 选择 "应用于此服务", 然后从列表中选择服务。 如果该服务未显示在列表中, 请单击 "应用于具有此服务简称的服务", 然后在文本框中键入该服务的短名称。 单击 "确定", 然后单击 "下一步"。

上面命令中的 program="...\A.exe" service="Service B" 实际的意思是将规则应用于 “以 A.exe 为容器的 Service B”,和希望实现的 “一个程序 A.exe 和一个服务 Service B” 就南辕北辙了。
所以还是得用两个命令,分别创建规则,如下(其中 B.exe 为 Service B 的容器):

netsh advfirewall firewall add rule name="Rule C" 
    dir=in action=allow
    program="...\A.exe"
    description="This is a description."
netsh advfirewall firewall add rule name="Rule D" 
    dir=in action=allow
    program="...\B.exe" service="Service B" // service 这段可省略
    description="This is a description."

MSDN Yes.

你可能感兴趣的:(Windows 防火墙规则因理解失误导致无效)