Option Public Option Declare 'Número mínimo de errores desde la misma IP para bloquearla Const NUMERO_MINIMO_ATAQUES = 20 'Etiqueta devuelta por @Platform Const WINDOWS_2003_SERVER = "Windows/NT 5.2" Const WINDOWS_2008_SERVER = "Windows 2008" Sub Initialize Dim s As New NotesSession Dim db As NotesDatabase Dim dc As NotesDocumentCollection Dim result As Integer Dim docMemo As NotesDocument Set db = s.Currentdatabase Set dc = db.Unprocesseddocuments ' Nuevos documentos a procesar. Contienen las IPs desde dónde se están generando los ataques Print "Ag1001: " & CStr(dc.Count) & " docs. nuevos" Dim docAlerta As NotesDocument Set docAlerta = dc.Getfirstdocument() Dim ipStr As String Dim macro As String Dim dcBloqueo As NotesDocumentCollection Dim vistaBloqueo As NotesView Set vistaBloqueo = db.getView("VW01") ' Dim ret As Variant ret = Evaluate(|@Platform([Specific])|) Dim plat As String plat = Join(ret, " ") Do While Not docAlerta Is Nothing '1º Averiguamos la IP ipStr = StrRightBack(docAlerta.eventText(0) , " ") '2º Averiguamos si hay más de 20 peticiones Set dcBloqueo = vistaBloqueo.getAllDocumentsByKey(ipStr, True) If dcBloqueo.count > NUMERO_MINIMO_ATAQUES Then '3º Bloqueamos la IP Print plat If InStr(plat, WINDOWS_2003_SERVER) > 0 Then macro = |netsh ipsec static add filter filterlist="IPS Bloqueadas" srcaddr=| + ipStr + | srcmask=255.255.255.255 dstaddr=me description="| + ipStr + |" protocol=any srcport=0 dstport=0| ElseIf plat = WINDOWS_2008_SERVER Then macro = |netsh advfirewall firewall add rule name="Bloqueo IP | + ipStr + | desde línea de comando" protocol=TCP localport=80 action=block dir=IN remoteip=| + ipStr Else macro = || End If result = Shell(macro,6 ) Print "Ag1001: Se ha bloqueado la IP " & ipStr '4º Marcamos todos los documentos asociados a la IP como bloqueados Call dcBloqueo.stampAll("Bloqueado", "1") Call dcBloqueo.stampAll("BloqueadoFecha", Now) '5º Enviamos un mensaje al administrador Set docMemo = New NotesDocument( db ) docMemo.Form = "Memo" docMemo.SendTo = "LocalDomainAdmins" docMemo.Subject = "SMTPAttacks - AG Revisar bloqueo de IP: Se ha bloqueado la IP " & ipStr Call docMemo.Send( False ) End If Set docAlerta = dc.Getnextdocument(docAlerta) Loop End Sub