脚本编程

Win平台Web访问白名单设置脚本(IP安全性原则)

Jager · 1月10日 · 2014年 · · · 3652次已读

最近老是有用户申请开通某网站的访问权限,我接手之前浏览权限的设置方法是修改 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

简单说明:此脚本的功能主要是省去了 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,仅供参考~若有问题留言请联系,希望能帮到您!

0 条回应