我决定使用白名单方法来保护我的环境(即默认阻止所有入站/出站连接,除非另有说明)。
我需要在防火墙中将一些 Windows 应用程序(不是全部)列入白名单,例如 Powershell、cmd、远程桌面。但是,简单地添加 cmd.exe、MSTSC.exe 等并不能解决问题。我确信这些应用程序对其他应用程序有一定的网络连接依赖性,但我不知道它们是什么。
例如,简单地将 system32 的 openssh 文件列入白名单,并不能在 PowerShell 中授予对 ssh 的访问权限。我在提升访问权限时收到“权限被拒绝”错误(禁用防火墙可以修复此问题,因此应该通过适当的防火墙规则来修复此问题)。
打开端口不是一个选择,因为打开端口后,其他我不喜欢的应用程序也会访问这些端口。例如,我想在 cmd 上执行 curl,但我不想让任何其他应用程序访问端口 443。
此外,黑名单不是一个选择,因为我需要阻止的应用程序数量远远超过我需要的这三个应用程序的数量。
答案1
Windows 11:在防火墙中允许 System32/svchost.exe,然后一切都会正常工作。
PS:这里是关于svchost的一些观察。
有趣的是,在阻止此文件后,Windows 几分钟后就失去了互联网功能。我想看看为什么,所以我阻止了除此文件之外的所有内容,我注意到它向 Microsoft 和一些未知 IP 发送了大量加密数据包,尽管我在注册表中关闭了遥测、Windows 更新等。阻止 svchost 后,Windows 会重试发送这些数据包,但几分钟后,整个互联网连接就会断开。
这很有趣,因为似乎某些应用程序(如 Firefox)在没有 svhost 的情况下也可以运行几分钟,因此它们可能不需要 svhost 来访问互联网(与 powershell 不同,powershell 在阻止 svhost 后会立即失去功能),但尽管如此,Windows 还是决定完全关闭互联网。这可能也与Windows 防火墙是否完全阻止 Windows 遥测?同样,因为对防火墙行为的两种观察都是错误的。Windows IP 不是硬编码在防火墙中的(如果是这种情况,在阻止包括 svhost 在内的所有内容后,我们仍然可以看到 tls 数据包,但事实并非如此),而且我们也无法通过阻止所有内容来阻止 Windows 发送这些数据包,因为 svhost 应该在防火墙中列入白名单。