Windows 防火墙 - 大规模阻止 IP 地址范围 - 性能考虑?

Windows 防火墙 - 大规模阻止 IP 地址范围 - 性能考虑?

我们的服务之一是供全英国 200 名员工专用的外联网。我们发现来自中国、俄罗斯、乌克兰和尼日利亚的登录尝试数量巨大。我有一个很大的 IP 范围列表,我想屏蔽这些 IP 范围。列表里有数千个条目。

(就本次讨论而言,我无意展开关于封锁整个国家的是非之争。这是我的要求——而且我需要满足它。)

我编写了一个 Powershell 脚本,该脚本每 24 小时更新一次列表,并将使用阻止规则填充 Windows 防火墙。但是,我对激活它感到紧张。

我的问题是,Windows 防火墙以这种方式处理数千条阻止规则的效率如何?例如,如果我的脚本包含 10,000 条阻止规则(甚至 100,000 条),它会有效运行还是会停止运行?

虽然我希望尽可能保护我的网络服务器,但我需要确保网络服务器能够快速处理请求。

更新

我决定冒险运行 PowerShell 脚本。我采用了一种略有不同的技术。我没有创建 6700 条规则(覆盖数百万个 IP),而是创建了一条规则,并将所有不良 IP 范围推送到所有远程地址部分的母体中。

结果:运行完美。拦截了中国、俄罗斯、台湾、乌克兰和尼日利亚的大部分地区,而这些地区正是我们遭受入侵攻击最多的地区。性能上没有明显差异。我们似乎在处理相同数量的请求,没有任何变化。Windows 防火墙的优势之一。它似乎能够非常高效地处理数千个 IP 拦截。

更新 2 - 反馈

该脚本已经运行了几天,所以我想你会喜欢一些关于它运行情况的反馈。我将脚本设置为每日运行的计划作业,使用新的 IP 范围更新防火墙,从 CSV 文件中读取。这一切都运行良好,防火墙运行非常迅速。然而需要注意的是:脚本本身大约需要 4-5 分钟才能运行,在此期间 CPU 会达到最大负荷,并且 Web 请求会非常缓慢。

因此,我建议在晚上或您预计负载不会太重的维护时段运行该脚本。

对我来说,解决方案是在每个负载平衡服务器上的不同时间运行脚本,以便在执行期间性能不会下降。

脚本如下:

$csv = Import-Csv -Path 'C:\Scripts\IP Block List.csv'

$data = @()
$csv | ForEach-Object { $data += $_.From + "-" + $_.To }

Set-NetFirewallRule -Name "BlockAllIPsInList" -RemoteAddress $data

以下是示例 CSV 文件:

From,To
1.2.3.4,1.2.3.255

因此,在此示例中,它将阻止从 1.2.3.4 到 1.2.3.255 的所有内容

只需一点点工作,就可以修改脚本以适用于 CIDR 格式。希望这能有所帮助。

答案1

我们在游戏服务器上做了这个。我们最终将其更改为 pfsense 上的插件,但我们没有注意到 Windows 防火墙中几千个 IP 块的性能下降。基于 IP 的阻止是防火墙可以执行的最基本任务之一。除了管理开销(您已经有了一个脚本),我看不出有什么理由会出现问题。FWIW,我考虑过使用亚马逊的 route53 来实现这一点,但它当时并没有达到我们的目的。它可以让您解决这些国家/地区的虚假 IP。

答案2

即使我们的场景不同,我还是想分享:我有一个小型 VPS(1 CPU,256MB RAM)在 Linux 上运行一些服务,防火墙有数千条规则拒绝整个地址块,跨越整个国家,但我没有看到任何减速。

我认为简单地丢弃大量数据包对服务器的要求比让它们进入应用程序并进行处理(然后返回错误消息)要低。丢弃它们消耗的电量要少得多。

相关内容