我们希望将运行在 Windows 2008 服务器中的 IIS 上的网站的 IP 地址列表列入白名单。由于此 IP 地址列表是动态的,我们希望将其存储在文本文件中,该文件将使用 Web 服务进行更新。您如何做到这一点?我们必须避免任何类型的手动干预,例如打开 GUI 或重新启动服务器。我们知道如何通过 IP 表或通过动态生成 Apache 或 Nginx 规则在 Linux 上做到这一点。
有人可以帮我们解决这个问题吗?
答案1
您可以使用 PowerShell 和计划任务来实现此目的。可以使用新 NetFirewallRuleCmdlet。您的规则可能如下所示:
New-NetFirewallRule -DisplayName "name" -Direction Inbound -LocalPort 80 -Protocol TCP -RemoteAddress $IPs -Action Allow | Out-Null
您必须将允许的 IP 地址放入数组中(参见变量 $IPs)才能使其工作。当然,脚本的这一部分取决于文本文件的布局。如果您的文件如下所示:
8.8.8.8
8.8.4.4
然后下面的代码片段应该可以工作:
$IPs = Get-Content -Path "Path\to\file.txt"
New-NetFirewallRule -DisplayName "name" -Direction Inbound -LocalPort 80 -Protocol TCP -RemoteAddress $IPs -Action Allow | Out-Null
要更新规则,您可以使用 Remove-NetFirewallRule Cmdlet 删除它,然后使用 IP 地址网络集重新创建它,并使用显示名称作为标识符。
Remove-NetFirewallRule -DisplayName "name"
或者您可以使用设置 NetFirewallRuleCmdlet 使用同一组参数来修改现有规则。