最近有朋友跟我吐槽说其单位有很多windows2012R2及2016以上的服务器需要配置系统防火墙,手工一台台处理很麻烦,而且很难保证策略统一或者说很难方便地统筹管理策略。想了想,windows自带的netsh不是有命令行配置功能可以管理系统防火墙么?不过netsh都已经如cmd一样老了,除非以前经常玩,否则都不建议学习和使用了。而且还要批量管理一堆服务器,还要考虑配置推送的问题。那有什么可以担此大任呢?
有人会想到python,毕竟火的东西容易第一时间被想起。但其实最简单的方式,是通过windows自带的powershell进行批量管理和防火墙配置了。windows系统原生自带的powershell,不香么?
不过这里有一个前提,能被powershell管理的系统防火墙必须是windows2012(对应桌面版的windows8)及其后推出的操作系统的防火墙,对于老旧版本的windows,就只能老老实实使用netsh命令工具了。
打开powershell,先看看有什么关于防火墙的命令可以使用。
powershell中用于防火墙管理的命令
感觉命令挺多的,但实际就分两类:查看和配置。而且重点是,这里所有的命令操作,其实都可以在图形界面上找到对应的操作行为。
先来个简单的。
图形界面上,最直观看到的就是如下图所示的界面了。
那在powershell上,则可以通过“Get-NetFirewallProfile”命令来查看获取相关信息。
输出是挺多,但只需要关注前两列,Name和Enabled。另外,不在域里的Windows也会有Domain防火墙,只不过默认不显示不使用罢了。
如果需要关闭防火墙,可以通过“Set-NetFirewallProfile”命令来执行。同样的,启用也是此命令。只是关闭的参数是 -enabled false,启用是true。
图形界面上,我们还能看到左上方有一个“允许应用或功能通过Windows Defender防火墙”的选项,打开一看如下图所示。这个其实也很好理解,就是我们安装部署了一些系统工具或软件,需要授权其能否通过对应的网络交互数据。
先来个命令“Get-NetFirewallRule”,可以看到一大堆输出,其中的DisplayGroup就是对应“允许应用或功能通过Windows Defender防火墙”的图形界面中每一行的内容(基本上一一对应,除非在自行添加程序的时候没有明确注明DisplayGroup,那就图形界面处就会显示DisplayName的内容了),虽然有很多重名,但其实就是同一个Group中有多条DisplayName的策略罢了。
虽然输出不是很整齐,但Profile一列还是可以明显看出来的,无非就是Private、Domain、Public以及Any(即包含3种网络)。很明显,这就是对应图形界面的“专用”“公用”(“域”隐藏了)列的复选框了,至于Enabled列即为是否启用此网络,也是能和图形界面一一对应的。至于Direction和Action等列,在当前的图形界面上没法呈现,先跳过吧。
“允许应用或功能通过Windows Defender防火墙”界面下,还有一个按钮“允许其他应用”。打开后可以填的内容其实也很显而易见了。
这里弄一个实例,让我们的记事本(notepad)有权通过防火墙。(纯粹练手用,实际上notepad根本就没有网络功能,但打个酱油还是可以的。。。)马上new一个试一下:
PS C:WINDOWSsystem32> New-NetFirewallRule -DisplayName "notepad" -Direction Inbound -Enabled True -Program "C:WindowsSystem32otepad.exe" `-Description "记?事º?本À?,ê?测a试º?用®?" -Group "记?事º?本À?notepad" -Profile Public -Action Allow -LocalAddress 2.2.2.2 -RemoteAddress 3.3.3.3 -LocalPort 22 -RemotePort 33 -Protocol TCP
命令很长,但这才具体啊,几乎囊括了所有我们配置防火墙时考虑到的参数(部分冷门参数就不列出了)。然后再返回图形界面看看,即可以看到刚刚配置的内容了。
同样的,可用命令 Get-NetFirewallRule -DisplayGroup “记事本notepad” 或 Get-NetFirewallRule -DisplayName “notepad” 看一下输出结果。当然,二者还是有小许区别的。具体要到图形界面的“高级设置”处了解了。这个就下回分解吧。