如何添加出站 Windows 防火墙例外?

Posted

技术标签:

【中文标题】如何添加出站 Windows 防火墙例外?【英文标题】:How to Add Outbound Windows Firewall Exception? 【发布时间】:2011-12-03 20:08:30 【问题描述】:

我需要为正在编写的应用程序的出站连接打开 Windows 防火墙。

我能找到的最佳答案在这里:

http://www.shafqatahmed.com/2008/01/controlling-win.html

http://www.vincenzo.net/isxkb/index.php?title=Adding_a_rule_to_the_Windows_firewall

问题在于该方法仅创建 inbound 规则,而不是 outbound 规则。 (C# 和 InnoSetup 脚本都使用相同的方法。)这对我来说完全没用。

Windows 防火墙的默认行为是允许出站流量,但这并不能保证有人不会更改它。

我宁愿在安装程序中执行此操作(使用 InnoSetup),而不是在 C# 中执行此操作。

我错过了什么吗?

有人知道如何创建出站规则吗?

【问题讨论】:

【参考方案1】:

netsh 的问题在于它在某些 Windows 版本(例如 Windows Vista Basic)上不起作用。这就是为什么最好在不使用 netsh 的情况下添加异常。 This article contains sample Inno Setup code.

【讨论】:

这在 Windows 版本中也不太可靠;请参阅 MSDN 上的备注:“Windows 防火墙 API 可用于“要求”部分中指定的操作系统。它可能会在后续版本中更改或不可用。对于 Windows Vista 及更高版本,使用 Windows 防火墙推荐使用 Advanced Security API",要求:最低支持的客户端:Windows Vista、带有 SP2 的 Windows XP;支持的最低服务器:带有 SP1 的 Windows Server 2003。因此,如您所见,即使在 Windows Vista 上,也不推荐使用它的这个 API 部分。 MS 有时很疯狂 :-)【参考方案2】:

如果您需要为您的应用程序添加一些例外,您可以使用 netsh

在命令行中写入(适用于 XP):

netsh firewall add allowedprogram ?

在命令行中写入(W7):

netsh advfirewall firewall add rule ?

这种差异是因为 netsh firewall 命令已弃用。相反,我们必须使用命令 netsh advfirewall firewall

更多关于使用命令 netsh advfirewall firewall 而不是 netsh firewall 命令的信息,我们可以在知识库中看到:http://go.microsoft.com/fwlink/?linkid=121488

例子:

为没有对 messenger.exe 进行安全封装的传入流量添加规则:

netsh advfirewall firewall add rule name="allow messenger" dir=in program="c:\programfiles\messenger\msmsgs.exe" security=authnoencap action=allow

为端口 80 的传出流量添加规则:

netsh advfirewall firewall add rule name="allow80" protocol=TCP dir=out localport=80 action=block

通过端口 80 为 TCP 的入站流量添加安全和流量加密规则:

netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow

【讨论】:

【参考方案3】:

这是可以传递给 Windows 命令行工具的众多任务之一。 netsh 做了适当的事情,但它(就像 netsh 所做的一切一样)几乎是不可能找到的。简单版是:netsh firewall add allowedprogram <path> <name> 更多详情,请运行:netsh firewall add allowedprogram ?

这些可以在[Run] 部分或通过调用Exec 来完成。

请注意,这在 Windows 7 中已折旧;如果您只针对 Vista/2008 或更高版本,则应改用 netsh advfirewall firewall。微软有an article从前者转换后者,但我仍然要支持XP,所以我没有这样做。

【讨论】:

【参考方案4】:

TechNet:Create an Outbound Port Rule on Windows 7, Windows Vista, Windows Server 2008 or Windows Server 2008 R2

虽然我假设您打算以编程方式创建此类规则,但如果是这种情况,您可能会对Working with Group Policy Objects Programmatically 感兴趣。

最后,如果您打算在安装期间这样做,InnoSetup 应该能够在安装时合并必要的注册表项。

【讨论】:

以上是关于如何添加出站 Windows 防火墙例外?的主要内容,如果未能解决你的问题,请参考以下文章

windows server防火墙添加例外的步骤

windows防火墙规则有优先级吗

解决办法windows防火墙出入站规则放通telnet方法

Windows防火墙出站入站相关知识总结

操作方法windows防火墙添加出入站规则方法

禁用程序通过 API 向 Windows 防火墙添加例外的能力