问题标签 [windows-firewall-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
640 浏览

.net - 防火墙阻止 Windows 服务 WiX元素

我有一个在以下端点侦听的自托管 WCF 服务(即 Windows 服务主机,而不是控制台主机):

无论我在防火墙中打开多少,它都不会接受任何连接。我必须完全关闭防火墙才能接受请求。即使我将程序更改为“任何”,即不是 servicehost.exe,它仍然不会接受请求。

我已经使用 WiX 编写了一些入站规则。像这样:

在此线程上,评论提示添加 https.sys: WCF 服务被 Windows 防火墙阻止

然后他们继续说这个页面讨论了向异常添加 URL 或其他内容: https ://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-http-and- https

所以我在电脑上手动添加了 https.sys(位于 C:\Windows\System32\https.sys)并进行了测试。依然没有。

我怀疑我需要添加 URL 的东西,但我不知道该怎么做,而且像往常一样,WiX 文档非常稀疏。

有人有想法么?

编辑,解决方案:如该线程中所述:

WiX Installer:如何添加防火墙例外规则?

FirewallException 元素需要位于 Component 标记中,而不是 file 标记中。文档确实避开了这一点,但像往常一样没有正确解释或给出任何示例。

另外,为了实现Program=any、Port=8733的防火墙规则,需要省略program属性。同样,文档确实避免使用 Port OR Program,详细说明如果同时定义了这两个规则,则该规则将不适用于防火墙。但是,它没有详细说明与这些属性相关的最终防火墙规则。

以下 WiX 代码已实现并允许请求通过。

0 投票
1 回答
255 浏览

google-cloud-platform - 连接 2 个外部 IP 谷歌云平台的问题

我创建了我的虚拟机(谷歌云平台),使用 Windows Server 2008 R2。所以我安装了一个需要打开 6900 端口才能运行的程序。工作程序必须连接到它自己的服务器,即:200.229.50.3:6900. 所以我进入了谷歌云平台的防火墙规则,将ip设置为0.0.0.0/0并打开了6900端口。在我的VM上也进入了防火墙的高级配置,也允许了6900端口。尝试运行程序并失败,尝试运行 telnet 进行测试并失败。已经检查了安全设置,禁用了防火墙等。我不知道发生了什么。

遵循我的谷歌云平台防火墙规则如下:

防火墙规则

遵循我的实例防火墙规则:

实例防火墙规则

按照程序在尝试连接自己的服务器时出错:

程序错误

如果有人想进入我的实例以更好地检查它,可以从这里下载 RDP 文件:RDP 文件

发生错误的程序位于桌面上,名称为xstart

随意运行它,并尝试了解问题所在,因为我找不到它运行不正确的原因。

有人可以帮助我吗?


编辑1:

按照我的 VPC 路由:

VPC 1 VPC 2

编辑2:

追踪路线 - 200.229.50.3

0 投票
1 回答
370 浏览

c# - 在 .Net Core 3.1 中使用 NetFwTypeLib 时出现内存泄漏

我在我一直在开发的这个 IDS/IPS 流量监控控制台应用程序中发现了内存泄漏。我以为是实体框架,原来是防火墙代码。以下代码在 .net 4.6.2 中运行良好,并且在 .net 核心中运行良好。但是,它有内存泄漏(特别是第二firewallRule行):

我必须每天重新启动应用程序,因为它会消耗尽可能多的内存。当它应该运行在 35MB 左右时,我已经看到它高达 12GB。也只需要一天左右的时间就可以达到如此高的水平。所以基本上每个电话都firewallRule在吃〜5MB-10MB。似乎很疯狂,一条或一条空记录会占用那么多内存。

我相信是那一firewallRule行,因为我已经在被调用的方法(以及与此相关的应用程序)中注释掉了所有其他行,当我最终注释掉该行时,泄漏就停止了。如果我的逻辑有缺陷,请告诉我。

如果要对其进行测试,则必须引用 以NetFwTypeLib使该代码正常工作。

有谁知道为什么会发生这种情况以及如何解决?

更新:

以下是那些相信我没有全部评论的人的原始代码:

在生产中,它只是“按原样”执行此方法,只是吃掉内存。同样,它特定于 .Net Core,因为我在 .Net 4.6.1(未注释)中运行相同的代码一年多没有问题。

现在我想了想并把它注释掉了,我也可以把它通过一些循环并在内部进行故障排除。这是一场比赛...

它当前运行的服务器是 Windows Server 2016。

更新 2:它也可以在 Windows 10 中重现。这是重现错误的完整代码:

结果如下:

Visual Studio 诊断工具:

Visual Studio 诊断工具

看起来像微软的错误?我想我会尝试解决这些内存分析器之一,但即使我发现了问题,我能做什么?这是对基本 Windows 库的基本调用,我认为这就是为什么评论中的某些人没有抓住重点。

我没有要求任何人记忆我的应用程序或追踪问题(从来没有......我已经这样做了)。我正在寻求替代解决方案。是否有可能完全可以使用的结构或 linq 问题或其他语句?

如果您想关闭这个问题,那就这样吧,但我很难相信没有其他人会遇到这个问题。

0 投票
2 回答
886 浏览

c++ - Windows 防火墙 C++ API - 如何正确清理 COM 资源?

我正在尝试使用基于 COM 的 Windows 防火墙 API 来遍历现有的防火墙规则并找出其中是否存在一个特定规则。

目前,我很难理解Cleanup本示例的部分内容(https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ics/c-enumerating-firewall-rules):

特别是,这些行让我感到困惑:

指针在pFwRule每次迭代时都会被覆盖,所以这里我们只显式地添加了通过上述循环获得Release最后一个Rule。QueryInterfacewhile

Release从成功调用获得的指针QueryInterface是合乎逻辑的,因为在返回之前QueryInterface调用AddRef(在文档中明确说明)。

但我无法理解的是:

  1. 为什么我们不在Release循环中查询下一个规则之前所有之前遍历的规则?它们是否在某处被隐式释放?如果将非空指针传递给它,是否会QueryInterface调用undercover?Release

  2. 我们为什么不Release打电话pFwRules?该函数不是INetFwPolicy2::get_Rules为我们提供了一个指向 COM 对象的新指针,该指针AddRef在返回给我们之前已被 'ed (因此最终必须Release由调用者 d )?

  3. pEnumerator关于从获得的指针的相同问题get__NewEnum:为什么我们不也Release这样做呢?

0 投票
1 回答
1304 浏览

firewall - 资源监视器中的防火墙状态

在网络下的资源监视器中,有一个名为监听端口的选项卡,其中有一列名为防火墙状态。它的值如 1) 允许,不受限制 2) 不允许,不受限制 3) 允许,受限制

我的理解是第一个代表是否允许传入流量。(当我禁用防火墙后进行测试时,一切都更改为允许)

我对第二个的理解是是否有限制这种联系的规则。但是在这种情况下,allowed,restricted 没有任何意义,因为当它被限制时,它怎么能被允许。

还有一个选项可以阻止或允许与任何可用规则不匹配的所有连接。任何人都可以请详细解释这些事情吗?

0 投票
0 回答
120 浏览

winapi - Windows 防火墙:寻找用户交互 API

我正在考虑为 Windows 10 制作一个与 Windows 防火墙交互的小型 GUI 应用程序。

但是,我无法为一项所需的操作找到相关的 API。

用例(情况)

当在相当出厂默认的家庭使用情况下使用 Windows 10 时(图片:奶奶正在阅读她的电子邮件并浏览网页),防火墙的配置方式通常类似于:

  1. 存在许多规则,允许范围广泛的 Windows 服务和应用程序(例如 webbrowser、emailclient)各种形式的网络访问。
  2. 可能有一些规则完全阻止特定应用程序访问互联网(或受到特定限制)。
  3. 几个可能的配置文件/策略之一正在生效,它决定了当以前未知的应用程序尝试使用网络或互联网时要做什么。

我的问题完全围绕第 3 点展开。

我的目标

通常,Windows 防火墙的活动配置文件将默认设置为拒绝此类“新”应用程序的连接,但也会显示一个弹出窗口,询问用户是否允许。我希望保持这个功能在很大程度上保持原样,但不是出现内置弹出窗口,我希望窗口通知我的自定义应用程序,并让我决定适当的操作(无论是否有用户交互)。

截图:

WINDOWS 防火墙 API

至于我到目前为止发现的内容:“Windows Defender 防火墙”或只是“Windows 防火墙”(netfw.h)有许多相关的 API/功能。它们(大部分)有据可查:https ://docs.microsoft.com/en-us/windows/win32/api/netfw/

INetFwRule(|2|3) API处理各个防火墙规则。

INetFwProfileINetFwPolicy(|2) API 处理与我感兴趣的设置相关的设置,例如:

INetFwPolicy2::get_NotificationsDisabled

INetFwProfile::get_NotificationsDisabled

但是在附近我找不到任何与注册函数挂钩的任何东西,只有用于打开或关闭通知的 getter/setter 方法。

迄今为止发现的最有前途的 API 似乎是INetFwProduct(s);其中包含

INetFwProducts::Register -> 允许应用程序或服务访问向 Windows 防火墙注册第三方防火墙产品的方法和属性。

INetFwProduct::get_RuleCategories -> 对于第三方防火墙产品注册,指示第三方防火墙希望从 Windows 防火墙获得所有权的规则类别。

这显然与注册第三方程序(例如 Zone Alarm、Norton Security 等)有关,以便它可以接管 NETFW 工作负载的某些方面。这确实是我的应用程序属于安全工具的名称,这并非不可能。

INetFwProduct的东西带来了一些烦人的约束(Authenticode-signing 等),这并不是特别相关/重要(但稍后会详细介绍)。

我的问题

然而,主要问题是,这仍然没有让我真正了解我的(想象中的INetFwProduct注册的)软件将如何完成我想要的。

我希望在某个地方会有另一个 API,它提供将我的INetFwProduct包连接到 NETFW 或至少一些网络层 API 等的方法。

有谁知道我在哪里,通向哪里?或者也许熟悉一种更简单的方法来完成同样的事情。

IETFW 产品似乎有点过头了

我也开始怀疑整个INetFwProduct路线涉及我的程序承担巨大的责任,而我真正想做的只是替换/挂钩到 NETFW 工作量的一小部分。毕竟,我不想替换整个规则集/策略后端,也不想改变解释规则的方式,也不想改变任何其他花哨的东西。我只希望调用我的用户空间程序,而不是(或之前)用户被弹出 GUI 窃听。理想情况下,我的程序所做的只是返回一个关于是否允许连接通过的布尔值(如果需要,它可以使用INetFwRule API 来为来自同一程序的未来连接添加一个永久规则)

验证码要求

与我的问题没有直接关系,但INetFwProduct功能也确实给图片带来了一堆新的约束,然后我的应用程序(似乎)必须经过 Authenticode 签名并需要一个 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 标头。我对这两件事都不是很熟悉,尽管我确实认为(并且似乎已经确认)免费的 Lets Encrypt 证书不能用于此目的,自签名证书可能也是如此。而且由于我不打算把它做成一个非常大的(也不是抛光或付费的)产品,也没有特别计划将它作为 FOSS 项目发布,结果似乎是,你不能没有这样的程序每年至少花费 150 欧元或 350 欧元进行认证。

0 投票
0 回答
19 浏览

c++ - INetFwRules 卡住了计数

我的代码在尝试获取 INetFwRules 接口的计数时卡住了。下面的代码永远不会返回或抛出,似乎只是在等待 Get_count() 调用。任何建议在哪里检查表示赞赏。

在此处输入图像描述

0 投票
1 回答
49 浏览

powershell - 想了解为什么 Powershell 参数在某些情况下不起作用

我的目标是通过给定的过滤器列出所有可用的防火墙规则,并且对 Powershell 来说是全新的。

观察到一个奇怪的行为,这让我问是否有一些我不知道的隐藏的东西。我可能会使用 Pipes 来完成同样的工作,但我有兴趣了解是否存在这样的原因。

按预期运行

按预期运行

但是,当我添加/组合 -Enabled True 时,DisplayName 正在生成这样的错误消息,其中 DisplayGroup 正在生成结果。

无法使用指定的命名参数解析参数集。

  • Get-NetFirewallRule -DisplayName n* -Enabled True

正在工作中

Windows 10 机器上的 PS 版本“5.1.177”。