脚本编程

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

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

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