Chinaunix首页 | 论坛 | 博客
  • 博客访问: 223676
  • 博文数量: 53
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1506
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-25 10:52
文章分类
文章存档

2014年(22)

2013年(31)

我的朋友

分类: 网络与安全

2013-08-05 09:17:47

前几天有个熊孩子像抽风了一样不停地 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 地址
阅读(2687) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~