Windows-Ereignisprotokoll - E-Mail-Benachrichtigung

7

Gibt es eine einfache Möglichkeit, eine E-Mail zu senden, wenn ein bestimmter Schweregrad eines Ereignisses von einem bestimmten Dienst das Windows Server-Ereignisprotokoll erreicht? Dies ist unter Windows Server 2003 der Fall, wenn es einen Unterschied macht.

nb Wir haben zwar eine ordnungsgemäße Überwachung und Alarmierung für Produktionsserver an meinem Arbeitsplatz, aber wir brauchen nur eine schnelle Lösung für diesen Service in der Entwicklung.

Matt Howells
quelle

Antworten:

6

Sie können dies mit OSSEC tun , einer Open-Source-Software für mehrere Plattformen:

OSSEC ist eine vollständige Plattform zur Überwachung und Steuerung Ihrer Systeme. Es vereint alle Aspekte von HIDS (Host-basierte Intrusion Detection), Protokollüberwachung und SIM / SIEM in einer einfachen, leistungsstarken und Open Source-Lösung.

Und für die Protokollüberwachung / -warnung:

Echtzeit- und konfigurierbare Warnungen

Mit OSSEC können Kunden Vorfälle konfigurieren, auf die sie aufmerksam gemacht werden möchten, sodass sie sich darauf konzentrieren können, die Priorität kritischer Vorfälle gegenüber dem regulären Rauschen auf jedem System zu erhöhen. Durch die Integration in SMTP, SMS und Syslog können Kunden Benachrichtigungen auf dem Laufenden halten, indem sie diese an E-Mail- und Handheld-Geräte wie Mobiltelefone und Pager senden.

[...]

Jedes Betriebssystem, jede Anwendung und jedes Gerät in Ihrem Netzwerk generiert Protokolle (Ereignisse), um Sie über das Geschehen zu informieren. OSSEC sammelt, analysiert und korreliert diese Protokolle, um Sie darüber zu informieren, ob etwas nicht stimmt (Angriff, Missbrauch, Fehler usw.).

Hier ist ein Artikel über OSSEC über 360 ° -Sicherheit .


Spezialisierte, kommerzielle Alternative: EventTracker (Prism Microssystems):

EventTracker ist eine vollständige SIEM-Lösung (Security Information and Event Management), die Protokollverwaltung in Echtzeit mit leistungsstarkem Konfigurations- und Änderungsmanagement in einem schlüsselfertigen Softwarepaket kombiniert.

splattne
quelle
4

Hier ist eine weitere alberne VBScript-Kreation von mir, die aus ein paar anderen Skripten zusammengeschustert wurde.

Option Explicit

' Main
Dim objShell, objWMIService, objEventSink, dictEventsToMonitor, eventToMonitor

' =====================( Configuration )=====================

' Set to 0 to disable event log reporting of bans / unbans
Const USE_EVENTLOG = 1
Const EVENTLOG_SOURCE = "SimpleEventMonitor"

' SMTP configuration
Const EMAIL_SENDER = "[email protected]"
Const EMAIL_RECIPIENT = "[email protected]"
Const EMAIL_SMTP_SERVER = "smtp-server"
Const EMAIL_SMTP_PORT = 25
Const EMAIL_TIMEOUT = 20

Set dictEventsToMonitor = CreateObject("Scripting.Dictionary")

' Define events that should be monitored. Matches are based on exact matches of all non-NULL fields

' Monitor our own startup and alert based on starting
PushEventToMonitor "100", "Application", EVENTLOG_SOURCE, NULL, NULL, NULL, NULL
PushEventToMonitor "7036", "System", "Service Control Manager", NULL, NULL, NULL, "Telnet service.*(running|stopped).*state"

' ===================( End Configuration )===================


Set objShell = CreateObject("WScript.Shell")

' Create event sink to catchevents
Set objWMIService = GetObject("winmgmts:{(security)}!root/cimv2")
Set objEventSink = WScript.CreateObject("WbemScripting.SWbemSink", "eventSink_")
objWMIService.ExecNotificationQueryAsync objEventSink, "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'"

' Loop sleeping for one week, logging an event each week to say we're still alive
While (True)
    LogEvent 100, "INFORMATION", "Simple Event Log Monitor started"
    WScript.Sleep(7 * 24 * 60 * 60 * 1000)
Wend

' Fires each time new events are generated
Sub eventSink_OnObjectReady(objEvent, objWbemAsyncContext)
    Dim evt, field, boolAlert, regexpMessage

    For Each evt In dictEventsToMonitor.Keys
        boolAlert = True

        For Each field In dictEventsToMonitor.Item(evt).Keys
            If UCase(Field) = "MESSAGE" Then 
                Set regexpMessage = new Regexp
                regexpMessage.Pattern = dictEventsToMonitor.Item(evt).Item(Field)
                regexpMessage.IgnoreCase = True
                If NOT regexpMessage.Test(objEvent.TargetInstance.Properties_(Field)) then boolAlert = False
            Else
                If UCase(objEvent.TargetInstance.Properties_(Field)) <> UCase(dictEventsToMonitor.Item(evt).Item(field)) Then boolAlert = False
            End If
        Next ' field

    if boolAlert = True Then
        SendMessage "Simple Event Log Monitor notification from " & objEvent.TargetInstance.ComputerName, _
            "Event ID:       " & objEvent.TargetInstance.EventCode & VbCrLf _
            & "Date/Time:      " & Mid(objEvent.TargetInstance.TimeGenerated, 5, 2) & "/" & Mid(objEvent.TargetInstance.TimeGenerated, 7, 2) & "/" & Mid(objEvent.TargetInstance.TimeGenerated, 1, 4) & " " & Mid(objEvent.TargetInstance.TimeGenerated, 9, 2) & ":" & Mid(objEvent.TargetInstance.TimeGenerated, 11, 2) & ":" & Mid(objEvent.TargetInstance.TimeGenerated, 13, 2)   & VbCrLf _
            & "Computer:       " & objEvent.TargetInstance.ComputerName & vbCrLf _
            & "Event Log:      " & objEvent.TargetInstance.LogFile & vbCrLf _
            & "Event Source:   " & objEvent.TargetInstance.SourceName & vbCrLf _
            & "Event Category: " & objEvent.TargetInstance.CategoryString & vbCrLf _
            & "Event Type:     " & objEvent.TargetInstance.Type & vbCrLf _
            & "User Name:      " & objEvent.TargetInstance.User & vbCrLf _
            & "Message:" & vbCrLf & vbCrLF _
            & objEvent.TargetInstance.Message
        Exit Sub
    End If

    Next ' evt
End Sub

Sub LogEvent(ID, EventType, Message)
    ' Log an event to the Windows event log
    If USE_EVENTLOG Then objShell.Exec "EVENTCREATE /L APPLICATION /SO " & EVENTLOG_SOURCE & " /ID " & ID & " /T " & EventType & " /D """ & Message & """"
End Sub

Sub SendMessage(strSubject, strBody)
    Dim objCDOMessage
    Set objCDOMessage = CreateObject("CDO.Message")

    objCDOMessage.From = EMAIL_SENDER
    objCDOMessage.To = EMAIL_RECIPIENT
    objCDOMessage.Subject = strSubject
    objCDOMessage.Textbody = strBody
    objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = EMAIL_SMTP_SERVER
    objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = EMAIL_SMTP_PORT
    objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = EMAIL_TIMEOUT
    objCDOMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objCDOMessage.Configuration.Fields.Update
    objCDOMessage.send
End Sub

Sub PushEventToMonitor(strID, strLog, strSource, strCategory, strType, strUser, strMessagePattern)
    Dim x

    x = dictEventsToMonitor.Count
    Set dictEventsToMonitor.Item(x) = CreateObject("Scripting.Dictionary")
    If NOT IsNull(strID) Then dictEventsToMonitor.Item(x).Add "EventCode", strID
    If NOT IsNull(strLog) Then dictEventsToMonitor.Item(x).Add "LogFile", strLog
    If NOT IsNull(strSource) Then dictEventsToMonitor.Item(x).Add "SourceName", strSource
    If NOT IsNull(strCategory) Then dictEventsToMonitor.Item(x).Add "CategoryString", strCategory
    If NOT IsNull(strType) Then dictEventsToMonitor.Item(x).Add "Type", strType
    If NOT IsNull(strType) Then dictEventsToMonitor.Item(x).Add "User", strUser
    If NOT IsNull(strMessagePattern) Then dictEventsToMonitor.Item(x).Add "Message", strMessagePattern
End Sub

Sie können dies als Windows-Dienst ausführen, wenn Sie zum Installieren beispielsweise den Non-Sucking Service Manager oder SRVANY verwenden. Bei Verwendung von NSSM wäre die Befehlszeile:

nssm install SimpleEventLogMonitor %SystemRoot%\System32\cscript.exe "\"Pull_path_and_filename_of_script\""

Stellen Sie sicher, dass Sie den Namen Ihres E-Mail-Empfängers, Absenders und SMTP-Servers eingeben.

Sie definieren die Ereignisse, über die Sie mit dem Aufruf "PushEventToMonitor" benachrichtigt werden möchten. Die Argumente sind: Ereignis-ID, Name des Ereignisprotokolls, Quelle, Kategorie, Typ, Benutzer und ein regulärer Ausdruck, der mit der Protokollnachricht abgeglichen werden kann. Ich habe dort ein Beispiel, das dem Start / Stopp des TELNET-Dienstes entspricht, sowie eines, das dem Start des Skripts selbst entspricht (das ein Ereignis im Anwendungsprotokoll abmeldet).

Dies ist ein erster Entwurf, weil der, den ich für einen Kunden geschrieben habe, der tatsächlich "in Produktion" ist, auf seinen Cent geschrieben wurde und ihnen "gehört". Als solches habe ich dieses neu codiert (was sich tatsächlich wesentlich von dem vom Kunden verwendeten unterscheidet) und es kann durchaus dumme Fehler enthalten. Ich habe es heute Abend für eine Weile auf einigen meiner Systeme ausgeführt und sehe keine Probleme.

Vielleicht mache ich das irgendwann etwas besser. Es wäre schön, wenn es seine Konfiguration aus der Registrierung ziehen würde (damit es mit Gruppenrichtlinien gesteuert werden könnte) und wenn es als MSI für die einfache Bereitstellung auf Servergruppen gepackt wäre. Naja.

Evan Anderson
quelle
1

Lebende Server können dies für Sie tun. Das Produkt ist für bis zu 10 zu überwachende Ereignisse kostenlos.

Der NT-Ereignisprotokollmonitor ist ein kostenloses Plug-In, das sich hier befindet . Ziemlich einfach zu bedienen und einzurichten.

SpaceManSpiff
quelle
0

Das Centralized Event Log Management-Tool von GFI ( GFI EventsManager ) führt dies aus, ist jedoch nicht FOSS.

Echtzeitwarnungen, SNMPv2-Traps-Warnungen enthalten

Die neueste Version von GFI EventsManager ™ bietet eine verbesserte Warnstufe für wichtige Ereignisse oder Eingriffe, die im Netzwerk erkannt werden. Mit GFI EventsManager können Sie Aktionen wie Skripts auslösen oder eine Warnung per E-Mail, Netzwerknachrichten, SMS-Benachrichtigungen, die über ein E-Mail-an-SMS-Gateway oder einen E-Mail-Dienst gesendet werden, an eine oder mehrere Personen senden. Jetzt sind SNMPv2-Traps enthalten. Durch die Generierung von SNMP-Warnungen können Administratoren GFI EventsManager auch in bereits vorhandene oder generische Überwachungsmechanismen integrieren.

SirStan
quelle
0

Siehe https://serverfault.com/a/517457/75770 eine Möglichkeit zum Senden von E-Mails basierend auf benutzerdefinierten Ereignisfiltern

Getestet auf Server 2008 und auch wenn eine SMTP-Authentifizierung erforderlich ist.

JeremyS
quelle