Windows 7 防火墙以默认选项运行,允许出站连接并阻止传入连接。我有一个进程尝试定期从本地网络内进行连接,这很好。当接受连接的程序正在运行时,一切顺利。当它没有运行时,Windows 7 防火墙会导致连接尝试超时,而不是拒绝连接(就像它应该做的那样)。
我尝试创建规则以明确允许该端口上的所有连接,但仍然超时。我想知道防火墙是否阻止了数据包RST
被发回?完全禁用公共配置文件会导致连接被拒绝(如预期的那样),但防火墙规则不会。
以下是我迄今为止尝试过但没有成功的规则:
端口类型,TCP,指定端口11211,允许连接,适用于域、私有和公共
有什么建议么?
笔记:当我说“拒绝”时,我指的是操作系统对连接的响应“抱歉,没有任何人在监听”。在本地机器上测试一下。打开命令提示符并输入telnet localhost 60000
。您应该看到类似以下内容:
Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused
这是拒绝连接。操作系统“拒绝”该请求,因为(至少在我的系统上)没有任何设备在监听端口 60000。
现在尝试一下telnet example.com 60000
。等待。你最终会看到类似这样的内容:
Trying 192.0.43.10... telnet: connect to address 192.0.43.10: Operation timed out
发现区别了吗?example.com 没有主机可以用“拒绝”来回复,所以你的本地操作系统(例如,不是服务器)显示“没有任何东西,超时”。
非常不同。问题是 Windows 7 防火墙没有像它应该的那样生成“拒绝”。我想知道如何解决这个问题。
答案1
这是由于 Windows 防火墙的“隐身模式”功能所致。其理念是,拒绝连接而不是超时,这将告诉攻击者该 IP 地址上确实有一台计算机。连接尝试超时后,攻击者可以忽略该计算机。有关隐身模式的更多信息,请参阅技术网。
您可以通过修改注册表来禁用隐身模式,如文档所述这里:
添加Software\Policies\Microsoft\WindowsFirewall\DomainProfile, Software\Policies\Microsoft\WindowsFirewall\PrivateProfile, Software\Policies\Microsoft\WindowsFirewall\PublicProfile, Software\Policies\Microsoft\WindowsFirewall\StandardProfile
名为REG_DWORD
DisableStealthMode
0x00000001
完成后,您需要重新启动 Windows 防火墙服务以使更改生效。