我们的其中一项服务是在英国境内的200名员工专用的外联网。 我们看到来自中国,俄罗斯,乌克兰和尼日利亚的大量login尝试。 我有大量的IP范围,我想阻止。 有成千上万的条目。
(为了这个讨论的目的,我没有兴趣开放一个关于阻止整个国家是非的辩论,这是我的要求 – 我需要完成它。)
我写了一个Powershell脚本,每24小时更新一次列表,并将填充Windows防火墙与规则。 但是,我很担心激活它。
我的问题是,Windows防火墙在以这种方式处理数千个阻止规则方面的效率如何? 比如说,如果我的脚本包含了10000个块规则(甚至是10万个),它会有效地工作还是停下来?
虽然我想尽可能保护我的Web服务器,但我需要确保Web服务器能够快速处理请求。
UPDATE
我决定抓住机会运行PowerShell脚本。 我已经去了一个稍微不同的技术。 我创build了一个规则,而不是创build6700个规则(覆盖数百万个IP),并将所有错误的IP范围推送到所有远程地址部分的母亲。
结果 :完美地工作。 阻挡大部分中国,俄罗斯,台湾,乌克兰和尼日利亚,这是我们入侵黑客攻击最多的地方。 性能没有明显的差异。 我们似乎在没有任何改变的情况下提供相同数量的请求。 一个用于Windows防火墙。 它似乎能够非常有效地处理数千个IP块。
更新2 – 反馈
脚本已经存在了好几天了,所以我想你会很感激一些反馈。 我将脚本设置为每天运行的计划作业,使用新的IP范围更新防火墙,并从CSV文件读入。 这一切都完美,防火墙function非常快。 但有一个警告的字眼:脚本本身需要约。 运行4-5分钟,在这段时间内,CPU占用最大,Web请求极其缓慢。
因此,我build议在晚上或在不期待重负载的维护时段内运行脚本。
对我来说,解决scheme是在每个负载平衡服务器上的不同时间运行脚本,以便在执行过程中不会降低性能。
这是脚本:
$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格式。 希望这可以帮助。
我们用游戏服务器做了这个。 我们最终改变了它在pfsense上的插件,但是我们没有注意到windows防火墙中几千个ip块的性能下降。 基于IP的阻塞是防火墙可以做的最基本的任务之一。 除了pipe理开销(你已经有一个脚本),我不会看到任何原因为什么会有问题。 FWIW,我用亚马逊的route53来看这个,但是当时并没有达到我们的目的。 它会让你在这些国家解决虚假知识产权。
即使我们的场景不同,我想分享一下:我有一个小的VPS(1个CPU,256MB RAM)在Linux上运行一些服务,而且防火墙有成千上万的规则拒绝整个国家的整个地址块,我没有看到任何放缓。
我认为在服务器上要求丢弃大量的数据包,而不是让它们进入应用程序并进行处理,只是为了发回和出错信息。 放下它们需要很less的电力。