前几天有个熊孩子像抽风了一样不停地 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         http://www.yongfa365.com
' * Email       yongfa365[at]qq.com
' * FirstWrite  http://www.yongfa365.com/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 地址


2012-6-30 11:23:56 补充:

功能更强大、处理效率更高、运行速度更快的应用程序版公布:IIS 6.0 IP 地址限制辅助工具 v1.0

留言评论(旧系统):

【匿名者】 @ 2012-06-11 18:22:26

核总V5

本站回复:

╮(╯_╰)╭

【匿名者】 @ 2012-06-11 23:03:48

怎么获取被屏蔽的IP列表?是获取IIS日志还是??

本站回复:

获取被屏蔽的IP列表??靠,你看源码了么???改一下很容易就可以获取了,或者在 IIS 安全设置里,有个访问权限设置,有IP列表。 我猜,你应该指的是如何获取CC的IP列表?很简单,看日志,或者:Anti-CC.asp,或者其他可以监控网络连接的程序。 它们的特征极其明显,所以可以很容易的和正常用户区分出来……

佚名 @ 2013-09-17 22:14:51

我的小站经常也是,换过好多服商了, 高山铁观音http://www.cha315.com/prodnew.asp 所在IP段遭到大规模攻击,还请高手指点,谢谢!我的小站经常也是,换过好多服商了, 高山铁观音http://www.cha315.com/prodnew.asp 所在IP段遭到大规模攻击,今天开通百度加速乐,可惜源站已先不能访问,做不了,还请高手指点,谢谢!

本站回复:

建议先更换原始IP(防止盯着原IP打),然后再做CDN,否则别人知道你原始IP,盯着你原始IP打就行了…… 可以参考一下本站的处理方式:http://lcx.cc/?i=3829