继续上一篇章的内容,了解一下powershell下管理防火墙的“高级设置”。之前讲到的都只能算是入门级了,只有真正掌握了“高级配置”的powershell命令配置方法,才算毕业。还好,不算太难。
其实关于windows防火墙,图形界面下能操作和显示的也就那几个位置。而最为关键和核心的,肯定就是“高级设置”里面的“入站规则”和“出站规则”了。
无论出站还是入站,要关注的内容无非就是这么一大堆:名称、组、本地地址和端口,远程地址和端口、协议、程序……
真的很多,所以要是人工配置1-2台windows服务器还好,配置多台的话,配置完毕后自己都会疑神疑鬼了,更别说准确率了……
上一章节用过一段命令:
PS C:WINDOWSsystem32> New-NetFirewallRule -DisplayName "notepad" -Direction Inbound -Enabled True -Program "C:WindowsSystem32otepad.exe" `-Description "记事本,测试用" -Group "记事本,notepad" -Profile Public -Action Allow -LocalAddress 2.2.2.2 -RemoteAddress 3.3.3.3 -LocalPort 22 -RemotePort 33 -Protocol TCP
这里已经包含了很多图形界面上配置时要用到的内容了,剩下一些冷门偏门的配置项参数,有需要就自行研究吧。
New出来容易,查看就相对没那么简单了。虽然Get-NetFirewallRule命令本身已经能Get到相当一部分的内容出来,但如果想如图形界面那样呈现出所有或指定特定参数输出,如协议、端口、地址等,那还是需要借助Get-NetFirewall*Filter这些命令了。
例如我想获取刚刚配置的notepad程序的入站规则的端口和协议信息,那么我需要使用如下图所示命令:
如果我要修改呢?把Get换成Set,再按要求指定参数即可。
如我想把LocalPort改成44,RemotePort改成66,那么可以执行如下命令:
PS C:WINDOWSsystem32> Get-NetFirewallRule|Where-Object{$_.DisplayName -eq "notepad"}|Get-NetFirewallPortFilter|Set-NetFirewallPortFilter -LocalPort 44 -RemotePort 66
执行完毕后再Get一次看看检查:
对于一些已经配置好的防火墙策略,如果我想禁用或启用甚至删除,则可以使用Enable-NetFirewallRule、Disable-NetFirewallRule、Remove-NetFirewallRule命令。
不过需要注意一个问题,在上一章节中我们用命令“Get-NetFirewallRule”获取到的策略中,有很多DisplayName重名或者DisplayGroup重名的策略,如果有重名的,建议详细的指定DisplayName、Direction(出站还是入站)、Action(阻止还是允许)等参数,不然仅仅指定一个DisplayName参数,就会把所有同名的一并处理了。
而且一个DisplayGroup(即图形界面中的“组”)中可以有多个DisplayName(即图形界面中的“名称”),且这个“组”或“名称”是对应到“允许应用或功能通过Windows Defender防火墙”选项里的“名称”一列的,所以禁用、启用甚至删除时就要留意清楚是否为所指定的策略,避免一窝端。
其实windows的防火墙(甚至是传统的软件防火墙,包括linux的)配置并不复杂,只要搞清楚配置规则,多敲敲键盘就能用powershell处理问题了。
最后忘了说一个很重要的问题。。。无论是new还是set等,只要是涉及到修改配置的,都需要在管理员权限下操作,否则会操作失败的。至于如何自动启用管理员权限执行命令甚至脚本,有机会再探讨吧。