Windows 防火墙和 ping

Windows 防火墙和 ping

我正在尝试使用 Windows 防火墙默认阻止所有出站流量。然后我希望明确允许 PING.EXE 程序通过 ICMPv4 出站。因此,我明确创建了自定义规则,规定如果文件是 %systemroot%\system32\PING.EXE 并且协议是 ICMPv4,则允许它。

但是,当我运行 PING.EXE 8.8.8.8 时,它显示“常规故障”,并且我的防火墙日志显示流量被丢弃。然后我使用 dir ping.exe /s 查找 PING.EXE 的所有实例(共有 4 个,一个在 System32 中,一个在 SysWOW64 中,两个在 WinSxS 下)并明确允许所有 4 个实例。我仍然遇到“常规故障”。

我使用 ProcMon 查看 C:\Windows\System32\PING.EXE 是否被调用。看起来是的。

但是,如果我说允许“所有满足指定条件的程序”使用 ICMPv4,那么 PING.EXE 8.8.8.8 将会成功。

有人能帮忙解释一下为什么会这样吗?

答案1

当选择“所有程序”时它可以工作而当使用 ping.exe 时不起作用的原因似乎是防火墙看不到 ICMPv4 流量的源/目标程序,而只能看到“系统”进程,并且“系统”进程属于“所有程序”类别。

注意

  • 在要求输入可执行文件完整路径的字段中,您只需写入:System
  • 您需要将规则应用到当前连接的正确网络配置文件(域、私有或公共)上
  • “tracert”程序对于诊断特别有用。

添加新的 ICMPv4 规则时,默认允许所有 ICMPv4 类型和代码。有很多 ICMP 类型和代码,请参阅http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml了解详细信息。您可能不想允许所有这些。

要使 ping 正常工作,至少需要以下两个流量:

  • 回显请求 (ping) ICMP 类型 8
  • 回显回复 (pong) ICMP 类型 0

作为微软,他们试图将其简化一点并隐藏全部细节。如果您查看“高级防火墙区域 -> 规则属性 -> 协议和端口选项卡 -> 自定义按钮”,您将看到类型和代码区域。在我的系统上,我相信它仍处于默认状态,它有

  • 出站 - ICMPv4“回显请求”
  • 入站
    • ICMPv4“回显请求”-(我假设微软语中的“回显请求”表示请求或回复)
    • ICMP 类型 3(目标不可达)代码 4(需要分片且已设置不分片)。虽然我不确定为什么只允许使用代码 4,而其他类型 3 代码也非常有用。

相关内容