IIS 批量封禁 IP 地址、網站被 CC 攻擊的解決辦法

前幾天有個熊孩子像抽風了同樣不停地 CC 本站,形成了一些小插曲,因而本人抽了點時間進行了一點研究,寫了點小腳本,完美解決此問題……html

如今將 VBS 腳本公佈,但願之後對其餘朋友能有所幫助……數組

(配上自動監控程序,就能夠實現24小時全自動封CC攻擊IP了,效果很贊……)安全


關於批量封禁CC攻擊IP、批量封IP的方法,網上其實早已有大量討論文章,其中大多數人使用的方法均是:IPSecCmd [IP安全策略命令行版]、服務器批量封禁 IP 服務器

這種方法雖然是最底層屏蔽指定IP通信,屏蔽效果很好,可是有很嚴重的缺陷:網站

若是IP數達到幾百個,處理進度會愈來愈慢,最後巨慢、巨慢!!!! spa

並且還有更嚴重的缺陷,你封禁多少個 IP 就會添加多少個過濾、屏蔽規則,刪掉該條策略以後,還不會自動刪掉這些規則,更蛋疼的是手動還不能批量刪,致使殘留巨量無用規則,嚴重影響之後新建策略…… .net

通過一番研究,找到了一個小腳本,並進行了一些修改(版權歸原做者全部),並寫上了不少註釋,後半部分代碼沒寫註釋,參考前半部分的,代碼基本同樣,代碼很簡單,很容易理解,抽時間整理了一下,現公佈出來……命令行

IISBanIP.vbs 部分代碼:code

'/*=========================================================================
' * 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,存在返回:FalseFunction 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 = TrueEnd 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.SetinfoEnd 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.SetinfoEnd 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)
    NextEnd Sub

完整文件及示例程序下載地址:IIS 批量封禁 IP 地址xml

相關文章
相關標籤/搜索