场景描述:
某用户有将近100台windows服务器作为备份客户端,需要针对备份服务端应用程序及大量端口,设置进站、出战规则,如果按照windows图形界面进行设置,工作量非常大,且容易出错,因此必须使用批处理的方式,那么如何在防火墙上批量开放或禁用端口、允许或阻止访问应用程序呢?以下批处理程序就是批量设置防火墙规则。
一、当用户环境允许关闭防火墙时,直接关闭防火墙最简单省事(不推荐)
在cmd使用以下命令关闭防火墙或在控制面板→windows Defender防火墙→自定义设置中关闭 #netsh advfirewall set allprofiles state off
二、当用户环境不允许关闭防火墙时(推荐)
为了能够正常访问某些程序或端口,我们可以在控制面板\所有控制面板项\Windows Defender 防火墙\高级设置中添加入站、出战规则,来允许或阻止我们访问某些应用跟端口,需要注意的是,如果添加的规则比较多且多台计算机需要做同样的操作,建议使用bat处理脚本进行添加(这也是本文重点推荐的方法,减轻工作量,提高效率跟失误)
1.新建文本文件然后将以下内容复制进去,然后根据现场实际情况修改允许或禁止访问的端口以及程序路径,修改完成后,保存后将文件后缀名修改为.bat
@echo off
for /f "tokens=2,*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do set "desktop_dir=%%j"
rem set dir="d:\scan"
set dir="%desktop_dir%\scan"
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo ---请求管理员权限运行...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
#前面部分代码作用是为了命令在cmd以管理员权限运行
#后面部分为添加防火墙规则的具体命令,使用此脚本时,请将中文注释删除保存后再执行
命令参数解释:
name为规则名称
protocol为使用的协议
in为入站规则
out为出站规则;
localport为允许或阻止访问的端口;
action为要执行的操作;
允许为allow,
阻止为block;
program为需要允许或阻止访问的应用程序具体路径
cd %~dp0
netsh advfirewall firewall add rule name="netvault-tcp" protocol=TCP dir=in localport=20031-20051 action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-udp" protocol=udp dir=in localport=20031-20051 action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-tcp" protocol=TCP dir=out localport=20031-20051 action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-udp" protocol=udp dir=out localport=20031-20051 action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvraw" dir=out program="C:\Program Files\NetVault Backup\bin\nvraw.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvcoreplg" dir=out program="C:\Program Files\NetVault Backup\bin\nvcoreplg.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvfs" dir=out program="C:\Program Files\NetVault Backup\plugins\filesystem\nvfs.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvpmgr" dir=out program="C:\Program Files\NetVault Backup\bin\nvpmgr.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvraw" dir=in program="C:\Program Files\NetVault Backup\bin\nvraw.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvcoreplg" dir=in program="C:\Program Files\NetVault Backup\bin\nvcoreplg.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvfs" dir=in program="C:\Program Files\NetVault Backup\plugins\filesystem\nvfs.exe" action=allow>nul 2>nul
netsh advfirewall firewall add rule name="netvault-nvpmgr" dir=in program="C:\Program Files\NetVault Backup\bin\nvpmgr.exe" action=allow>nul 2>nul
三、如何在100台服务器上同时执行呢?
1、如果用户环境中有域控服务器,且这些服务器都通过域控统一管理的话,可以使用域控组策略,统一下发bat脚本到100台服务器上,然后设置开机&关机,登录&注销,任意一个条件下执行脚本。
2、一般情况下这么多台服务器一般都会有域控,不然不好管理,我遇到的就是没有域控的环境,如果用户环境中没有域 ,那可以将脚本放到文件服务器,共享给所有服务器访问,这样每台服务器都可以看到脚本,直接执行即可。
3、用户服务器如果允许插u盘,将脚本拷贝到u盘,按个插到服务器然后执行,其实也很快。