' SCRIPT: AutoBan.vbs ' AUTHOR: SysTools ' UPDATED: 2019.05.12 ' CREATED: 2014.11.26 ' DESC: AutoBan script for Gene6 FTP Server ' SITE: http://systools.losthost.org/?code=6 '----------------------------------------------------------------------- ' !!! BEFORE USE - READ THIS !!! ' 1) THIS SCRIPT IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES! ' USE AT YOUR OWN RISK! ' 2) Tested with Gene6 FTP Server v3.10.0 (Build 15). ' Minimum required version: Gene6 FTP Server v3.6.0.23 - 18/Jul/2005 ' Server : Added "OnClientLoginFailed" event. ' Change log: http://www.g6ftpserver.com/en/version ' 3) This script must be copied to "Scripts" subfolder in your installation ' folder of Gene6 FTP Server (later - G6FS). Default installation path: ' C:\Program Files\Gene6 FTP Server\Scripts\AutoBan.vbs ' Don't forget to enable it in "Customize" - "Scripts" tab in G6FS Administrator. ' 4) Replace "example.com" with your server hostname in StopList() and also you can ' add or remove login names. ' 5) First item must be your host name, because it's used as domain name for login ' (i.e. checked both "login" and "login.example.com" as banned login names). ' 6) All banned IPs will be available on "Secure" - "IP access" tab in ' G6FS Administrator (right click on your domain name and select "Properties"). ' Please note that this script do a PERMANENT ban - so you will be forced ' to manually delete banned clients from "IP access" if you want to unban them. ' 7) Also you can turn on "Block banned IP" option in "Secure" - "Options". '----------------------------------------------------------------------- ' VBScript Reference: https://www.w3schools.com/asp/asp_ref_vbscript_functions.asp ' Uncomment next three lines if you want to change and debug script. 'Sub OnScriptError(error) ' Domain.WriteLog(error) 'End Sub ' Debug helper routine. Do not uncomment if you don't understand. 'Sub OnClientLoggedIn() 'Dim Manager ' Client.Kick() ' Set Manager = CreateObject("G6FTPServer.Manager") ' Domain.WriteLog(Manager.Domains.Item(Domain.Name).Properties.Values("IPAccessList")) 'End Sub ' 22 -> IPAccessList ' Domain.WriteLog("! " & Manager.Domains.Item(Domain.Name).Properties.Names(22)) ' Manager.Domains.Item(Domain.Name).BanList.ban(Client.PeerIP, "AUTO_BAN", 24*60*60) ' TLB -> IManager ' http://www.g6ftpserver.com/manuals/devguide_en/ ' OnClientLoginFailed() is undocumented due to poor documentation (it is not listed here): ' http://www.g6ftpserver.com/manuals/en/scripts.html ' But if you smart enough (*sigh*) you can find a glimpse of it in the G6FS Administrator ' at the "Customize" - "Events" (add a new event to see the full list of events). Sub OnClientLoginFailed() Dim Manager Dim StopList Dim I Dim J Dim K Dim S Dim O Dim P StopList = Array( _ "example.com", _ "admin", _ "administrator", _ "alex", _ "backup", _ "changeme", _ "cisco", _ "contact", _ "demo", _ "ftp", _ "ftpadmin", _ "ftpguest", _ "ftpuser", _ "guest", _ "info", _ "local", _ "login", _ "magazin", _ "newuser", _ "oplata", _ "order", _ "payment", _ "plcmspip", _ "pos", _ "public", _ "root", _ "server", _ "shop", _ "site", _ "support", _ "system", _ "terminal", _ "termsip", _ "test", _ "tester", _ "testing", _ "testuser", _ "upload", _ "user", _ "username", _ "web", _ "webadmin", _ "www", _ "www-data", _ "xxxxxx", _ "zakaz" _ ) ' Save original login O = Client.Username O = LCase(O) O = Trim(O) ' Current login here S = O ' From last non-empty operation P = O ' Test for login@domain format I = InStr(S, "@") ' "@domain" => "domain" If (I = 1) Then S = Mid(S, 2) End If ' "login@domaun" => "login" If (I > 1) Then S = Mid(S, 1, I - 1) End If ' Empty string - restore S = Trim(S) If (Len(S) = 0) Then S = P Else P = S End If ' "subdomain.domain" => "subdomain" I = InStr(1, S, "." & StopList(0), vbTextCompare) If (I >= 1) Then S = Mid(S, 1, I - 1) End If ' Empty string - restore S = Trim(S) If (Len(S) = 0) Then S = P Else P = S End If ' Check against years For I = 2000 To Year(Now) If (StrComp(S, CStr(I), vbTextCompare) = 0) Then ' Change to first banned name S = StopList(0) Exit For End If Next ' Convert "login1", "login12345", etc. to just "login" For I = "0" To "9" S = Replace(S, I, "") Next ' Only digits in login - restore S = Trim(S) If (Len(S) = 0) Then S = P End If ' S - normalized ' P - normalized with digits ' O - original ' Check against each login in StopList() For I = 0 To UBound(StopList) If (StrComp(S, StopList(I), vbTextCompare) = 0) Or _ (StrComp(P, StopList(I), vbTextCompare) = 0) Or _ (StrComp(O, StopList(I), vbTextCompare) = 0) Then Set Manager = CreateObject("G6FTPServer.Manager") ' Check for intersection with the existing login accounts list K = True For J = 1 To Manager.Domains.Item(Domain.Name).UserList.Count If (StrComp(Manager.Domains.Item(Domain.Name).UserList.Item(J - 1).Name, _ O, vbTextCompare) = 0) Then K = False Exit For End If Next ' No intersection - ban this client IP If (K = True) Then Manager.Domains.Item(Domain.Name).Properties.Values("IPAccessList") = _ Manager.Domains.Item(Domain.Name).Properties.Values("IPAccessList") & _ Client.PeerIP & ",Denied,AUTO_BAN" & vbCrLf Manager.Domains.Item(Domain.Name).Properties.ApplyChanges() Domain.WriteLog("AUTO_BAN: " & Client.PeerIP & " (" & O & ")") Client.Kick() End If Exit For End If Next End Sub
2015.08.03