我正在尝试创建一个 PS 脚本,该脚本创建 Windows 防火墙规则,阻止 INBOUND 连接上某个 .exe 文件的端口“6672”,但允许我选择将某些 IP 列入白名单。
手动执行此操作的方式意味着我必须将.exe 文件的端口 (6672) 完全阻止到所有 IP,然后添加一个范围,排除我想要列入白名单的 IP。
例如,如果我想添加“192.168.0.3”,我必须在规则上设置一个范围,从“0.0.0.0”到“192.168.0.2”,然后再设置一个范围,从“192.168.0.4”到“255.255.255.255”。我必须这样做的原因是,在 Windows 防火墙中,似乎无法将单个 IP 从阻止规则列入白名单,并且阻止规则会覆盖任何允许规则。
回到我最初的观点,我现在真的很难找到解决这个问题的方法,因为我找不到解决方法。有没有人知道有什么方法可以将某些 IP 从规则中排除,或者如何使允许规则优先于阻止规则?
编辑
所以我有这个代码:
New-NetFirewallRule -DisplayName "GTAO" -Direction Inbound -LocalPort 6672 -Protocol UDP -Action Block
New-NetFirewallRule -DisplayName "GTAO" -Direction Outbound -LocalPort 6672 -Protocol UDP -Action Block
我基本上想要这样的事情来覆盖以前的规则,在这个规则上为单个 IP 创建“白名单”
$UIP = Read-Host "Enter IP to whitelist"
New-NetFirewallRule -DisplayName "GTA$UIP" -Direction Inbound -LocalPort 6672 -Protocol UDP -Action Allow -RemoteAddress $UIP
答案1
这不是 PS 特有的问题,而是‘如何让 WF 执行其未设计为的 X 或 Y 操作’。
与此讨论和建议非常相似,其中一些您已经暗示了。
如何对 Windows 防火墙出站规则进行例外设置
根据 Windows 防火墙文档,阻止规则始终优先于允许规则,因此即使您的允许规则看起来比阻止规则更具体,允许规则也不会起作用,并且匹配允许和阻止规则的流量将被阻止。“允许此防火墙规则覆盖阻止规则”选项仅适用于需要 IPSec 的规则,不适用于出站规则。
要使用 Windows 防火墙实现接近所需的目标,您唯一能做的就是将出站连接的默认行为切换为“阻止”,然后为您需要的所有出站连接添加明确的允许规则(而不仅仅是针对单个程序)。或者,您可以寻找具有更多功能的第三方防火墙软件。
...您也可以为单个程序制定上述规则,只需为一个程序设置规则,而不是所有程序。
因此,您可以设置 2 条或更多规则(取决于您想要允许多少个 IP 地址)并阻止所有其他规则。例如,如果您只想允许
10.10.10.10
和
20.20.20.20
你设定规则:
阻止从 0.0.0.0 到 10.10.10.9、从 10.10.10.11 到 20.20.20.19 以及从 20.20.20.21 到 255.255.255.255