最近老是有用户申请开通某网站的访问权限,我接手之前浏览权限的设置方法是修改 tomcat 下的 server.xml 配置文件,通过定义 allow="IP.."的访问规则来控制浏览权限。这种方法有个很不好的地方,每加一次权限,你就得重启一次 tomcat,用户老是挤牙膏一样,一次一两个 IP 的发邮件来申请开通,不但很烦人,而且对正在使用的用户体验也非常的糟糕!于是我决定要改善这个糟糕的局面。
在 Linux 下,我们都是通过配置防火墙 iptables 来控制 80 端口的访问的,结果到了 windows 下,估计前面的人也没深究如何进行类似的设置,于是就使用了那个蹩脚的方法!
我在接手 WEB 运维之前,做过一段时间的 PC 维护,当时公司为了安全考虑需要封堵一些后门端口,我也因此编写过相关的封端口的脚本,所以看到 windows 平台的 WEB 防火墙问题,自然而然就想到了通过封堵 80 端口来控制浏览权限的方法。
在非 Server(windows XP/7 等)的环境下,要通过命令行来设置IP 安全性原则是需要用到一个叫做 ipseccmd.exe 的命令行工具的,而今天是 Windows Server 平台,就完全支持使用 netsh ipsec static add filter 命令来设置 IP 安全性规则!命令行的用法我也就先不说了,有时间再来补充,直接上代码:
@echo off
color 2f
mode con cols=60 lines=25
title Windows平台WEB防火墙白名单批量导入工具
:start
cls
echo=
echo ※注•意•事•项•(必读)※
echo============================================================
echo 1.不同IP之间可以使用空格或逗号隔开,切勿无符号连在一起;
echo=
echo 2.暂时仅支持一个C的IP段,如192.168.101.0/24是一个IP段;
echo=
echo 3.如果是IP段,需以1或0结尾,如10.10.100.0或10.10.100.1;
echo=
echo 4.若导入成功将在接口显示信息,若失败则写入到ipsec.log。
echo============================================================
set /p ip=请输入IP:
cls
setlocal enabledelayedexpansion
for /f "delims=" %%i in ("%ip%") do (
set var=%%i
set var=!var:,= !
for %%f in (!var!) do (
set result_ip=%%f
for /f "tokens=4 delims=." %%z in ("!result_ip!") do (
if "%%z"=="0" ( netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.0 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/24 IP段已成功导入规则! || echo !result_ip!/24 IP段导入失败,请检查格式!>>ipsec.log ) else (
if "%%z"=="1" (
netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.0 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/24 IP段已成功导入规则! || echo !result_ip!/24 IP段导入失败,请检查格式!>>ipsec.log
) else (netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.255 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/32 单IP已成功导入规则! || echo !result_ip!/32 单IP导入失败,请检查格式!>>ipsec.log)
)
)
)
)
netsh ipsec static set policy name=IP_security assign=yes >nul
echo 导入完毕,任意键继续...
pause>nul
goto start
@echo off
color 2f
mode con cols=60 lines=25
title Windows平台WEB防火墙白名单批量导入工具
:start
cls
echo=
echo ※注•意•事•项•(必读)※
echo============================================================
echo 1.不同IP之间可以使用空格或逗号隔开,切勿无符号连在一起;
echo=
echo 2.暂时仅支持一个C的IP段,如192.168.101.0/24是一个IP段;
echo=
echo 3.如果是IP段,需以1或0结尾,如10.10.100.0或10.10.100.1;
echo=
echo 4.若导入成功将在接口显示信息,若失败则写入到ipsec.log。
echo============================================================
set /p ip=请输入IP:
cls
setlocal enabledelayedexpansion
for /f "delims=" %%i in ("%ip%") do (
set var=%%i
set var=!var:,= !
for %%f in (!var!) do (
set result_ip=%%f
for /f "tokens=4 delims=." %%z in ("!result_ip!") do (
if "%%z"=="0" ( netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.0 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/24 IP段已成功导入规则! || echo !result_ip!/24 IP段导入失败,请检查格式!>>ipsec.log ) else (
if "%%z"=="1" (
netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.0 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/24 IP段已成功导入规则! || echo !result_ip!/24 IP段导入失败,请检查格式!>>ipsec.log
) else (netsh ipsec static add filter filterlist=WEB_ALLOW srcaddr=!result_ip! srcport=0 srcmask=255.255.255.255 dstaddr=me dstport=80 protocol=tcp && echo !result_ip!/32 单IP已成功导入规则! || echo !result_ip!/32 单IP导入失败,请检查格式!>>ipsec.log)
)
)
)
)
netsh ipsec static set policy name=IP_security assign=yes >nul
echo 导入完毕,任意键继续...
pause>nul
goto start
简单说明:此脚本的功能主要是省去了 IP 安全性原则繁琐的手动设置步骤,直接粘贴 IP 即可导入白名单!通过 3 个 for 循环(可能有点冗余,暂时未考虑优化)将整行多个 IP 依次分离导入到规则中。这里说的整行的意思是,你只需要将你的 IP 粘贴进来,不论是单个 IP 还是 IP 段,不论是空格隔开还是,逗号隔开,都能实现依次分离导入。
注意事项:
1.由于编写时间很短,所以暂未实现多个 C 的 IP 段的判断,若是多个 C,比如 10.*.*.*/22 请拆分为 4 个段输入(待改进).
2.输入的 IP 需要使用空格或逗号隔开,不要直接连接在一起,否则就会傻傻分不清楚拉;
3.支持单个 IP 和 IP 段的混输,能够判断 IP 类型来执行不同的语句;
4.默认定义一个 C 的 IP 段结尾为 0 或 1,即如果你是 192.168.1.1 或 192.168.1.0,脚本会将其作为相同的 IP 段处理,也就是直接判断为 192.168.1.0/24。
以上脚本为今天下午应急之作,可能存在 BUG,仅供参考~若有问题留言请联系,希望能帮到您!