前几天有个熊孩子像抽风了一样不停地 CC 本站,造成了一些小插曲,于是本人抽了点时间进行了一点研究,写了点小脚本,完美解决此问题……
现在将 VBS 脚本公布,希望以后对其他朋友能有所帮助……
(配上自动监控程序,就可以实现24小时全自动封CC攻击IP了,效果很赞……)
关于批量封禁CC攻击IP、批量封IP的方法,网上其实早已有大量讨论文章,其中大多数人使用的方法均是:IPSecCmd [IP安全策略命令行版]、服务器批量封禁 IP
这种方法虽然是最底层屏蔽指定IP通讯,屏蔽效果很好,但是有很严重的缺陷:
如果IP数达到几百个,处理进度会越来越慢,最后巨慢、巨慢!!!!
而且还有更严重的缺陷,你封禁多少个 IP 就会添加多少个过滤、屏蔽规则,删掉该条策略之后,还不会自动删掉这些规则,更蛋疼的是手动还不能批量删,导致残留巨量无用规则,严重影响以后新建策略……
经过一番研究,找到了一个小脚本,并进行了一些修改(版权归原作者所有),并写上了很多注释,后半部分代码没写注释,参考前半部分的,代码基本一样,代码很简单,很容易理解,抽时间整理了一下,现公布出来……
IISBanIP.vbs 部分代码:
'/*=========================================================================
' * Intro VBScript使用ADSI为IIS批量添加屏蔽或允许访问的IP
' * FileName VBScript-ADSI-IIS-Add-Deny-Grant-IP-Change-MetaBase.xml.vbs
' * Author yongfa365
' * Version v1.0
' * WEB
' * Email yongfa365[at]qq.com
' * FirstWrite /Item/ADSI-IIS-Add-Deny-Grant-IP.vbs.html
' * From http://blog.csdn.net/linyu/archive/2008/11/14/3300454.aspx
' * MadeTime 2008-12-08 23:10:45
' * LastModify 2008-12-08 23:10:45
' *==========================================================================*/
'
'示例:
' AddDenyIP2All "192.168.1.106,255.255.255.0" '添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点
' AddDenyIP2All "127.0.0.1" '添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点
' AddDenyIP "123456","127.0.0.1" '添加要屏蔽的IP或一组计算机,到一个指定站点上
'用法:
' cscript.exe IISBanIP.vbs
'--------------------------------------------------------------------------------
Dim Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.FileExists("ip.txt") Then '检查文件是否存在
Dim IP, I
IP = Split(Fso.OpenTextfile("ip.txt", 1, False).Readall, vbCrLf) '读取文本内容,并存为数组
echo "Ban IP List:"
For I = LBound(IP) To UBound(IP)
If Len(IP(I)) > 7 Then
AddDenyIP2All IP(I)
End If
Next
echo "IP Total: " & (UBound(IP) + 1) & ", All Done!"
Else
echo "ip.txt 不存在!"
End If
'--------------------------------------------------------------------------------
'在控制台输出字符串
Sub echo(Str)
WScript.echo Str
End Sub
'判断 IP 列表中是否已存在某个 IP,不存在返回:True,存在返回:False
Function CheckIP(List, IP)
Dim I
For I = LBound(List) To UBound(List)
If Left(List(I), InStr(List(I), ",") - 1) = IP Then
CheckIP = False
Exit Function
End If
Next
CheckIP = True
End Function
'添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点
'如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点
Sub AddDenyIP2All(IP)
Dim SecObj, MyIPSec, IPList, I
Set SecObj = GetObject("IIS://LocalHost/W3SVC")
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = True '设置默认授权访问(允许)
IPList = MyIPSec.IPDeny '获取禁止的IP列表:IPDeny;允许的IP列表为:MyIPSec.IPGrant
If CheckIP(IPList, IP) = True Then '判断该 IP 是否已存在
'将新的 IP 加入到原 IP 列表中
I = UBound(IPList) + 1
ReDim Preserve IPList(I)
IPList(I) = IP
'更新 IIS 配置
MyIPSec.IPDeny = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
echo "Ban IP: " & IP & ", OK!"
Else
echo "Ban IP: " & IP & ", Already Exists!"
End If
End Sub
'添加要屏蔽的IP或一组计算机,到一个指定站点上
Sub AddDenyIP(strWebNo, strDenyIp)
'On Error Resume Next
Set SecObj = GetObject("IIS://LocalHost/W3SVC/" & strWebNo & "/Root")
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = True
IPList = MyIPSec.IPDeny
I = UBound(IPList) + 1
ReDim Preserve IPList(I)
IPList(I) = strDenyIp
MyIPSec.IPDeny = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
'添加允许的IP或一组计算机,到IIS公共配置,以应用到所有站点
'如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点
Sub AddGrantIP2All(strGrantIp)
'On Error Resume Next
Set SecObj = GetObject("IIS://LocalHost/W3SVC")
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = False
IPList = MyIPSec.IPGrant
I = UBound(IPList) + 1
ReDim Preserve IPList(I)
IPList(I) = strGrantIp
MyIPSec.IPGrant = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
'添加允许的IP或一组计算机,到一个指定站点上
Sub AddGrantIP(strWebNo, strGrantIp)
'On Error Resume Next
Set SecObj = GetObject("IIS://LocalHost/W3SVC/" & strWebNo & "/Root")
Set MyIPSec = SecObj.IPSecurity
MyIPSec.GrantByDefault = False
IPList = MyIPSec.IPGrant
I = UBound(IPList) + 1
ReDim Preserve IPList(I)
IPList(I) = strGrantIp
MyIPSec.IPGrant = IPList
SecObj.IPSecurity = MyIPSec
SecObj.Setinfo
End Sub
'显示IIS公共配置里禁止访问的IP
Sub ListDenyIP()
Set SecObj = GetObject("IIS://LocalHost/W3SVC")
Set MyIPSec = SecObj.IPSecurity
IPList = MyIPSec.IPDeny '允许的IP:IPGrant,禁止的IP:IPDeny
echo Join(IPList, vbCrLf)
For I = 0 To UBound(IPList)
echo I + 1 & "-->" & IPList(I)
Next
End Sub
完整文件及示例程序下载地址:IIS 批量封禁 IP 地址
阅读(2700) | 评论(0) | 转发(0) |