14

我需要为正在编写的应用程序打开 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

问题是该方法只创建一个入站规则,而不是一个出站规则。(C# 和 InnoSetup 脚本都使用相同的方法。)这对我来说完全没用。

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

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

我错过了什么?

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

4

4 回答 4

24

如果您需要为您的应用程序添加一些例外,您可以使用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
于 2012-02-01T22:10:36.613 回答
1

TechNet 可以:在 Windows 7、Windows Vista、Windows Server 2008 或 Windows Server 2008 R2 上创建出站端口规则

虽然我假设您打算以编程方式创建此类规则,但如果是这种情况,您可能会对以编程方式使用组策略对象感兴趣。

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

于 2011-10-09T06:01:14.240 回答
1

netsh的问题在于它在某些 Windows 版本(例如 Windows Vista Basic)上不起作用。这就是为什么最好在不使用netsh的情况下添加异常。本文包含示例 Inno Setup 代码

于 2014-02-24T08:47:09.640 回答
0

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

这些可以在[Run]部分中完成,也可以通过调用来完成Exec

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

于 2011-10-20T04:39:23.313 回答