Question Journal des événements Windows - notification par courrier électronique


Existe-t-il un moyen simple d'envoyer un courrier électronique lorsqu'un événement d'une gravité particulière provenant d'un service donné atteint le journal des événements du serveur Windows? Ceci est sur Windows Server 2003, si cela fait une différence.

nb nous avons mis en place une surveillance et des alertes appropriées pour les serveurs de production sur mon lieu de travail, mais nous avons simplement besoin d'une solution rapide pour ce service en développement.


7
2017-07-30 10:24


origine




Réponses:


Vous pouvez le faire avec OSSEC, un logiciel open source multiplateforme:

OSSEC est une plate-forme complète pour surveiller   et contrôlez vos systèmes. Ça se mélange   ensemble tous les aspects de HIDS   (détection d'intrusion basée sur l'hôte), journal   surveillance et SIM / SIEM ensemble dans un   simple, puissant et open source   Solution.

Et pour la surveillance des journaux / alertes:

Alertes en temps réel et configurables

OSSEC permet aux clients de configurer   incidents sur lesquels ils souhaitent être alertés   ce qui leur permet de se concentrer sur   priorité des incidents critiques sur   le bruit régulier sur n'importe quel système.   Intégration avec smtp, sms et syslog   permet aux clients d'être au sommet de   alertes en les envoyant à un e-mail   et des appareils de poche tels que la cellule   téléphones et téléavertisseurs.

[...]

Chaque système d'exploitation, application,   et l'appareil sur votre réseau génèrent   journaux (événements) pour vous faire savoir ce qui est   événement. OSSEC recueille, analyse   et corrèle ces journaux pour vous laisser   savoir si quelque chose ne va pas   (attaque, mauvaise utilisation, erreurs, etc.).

Voici un article sur OSSEC sur la sécurité à 360 °.


Alternative spécialisée, commerciale: EventTracker (Prism Microssystems):

EventTracker est une sécurité complète   Gestion de l'information et des événements   (SIEM) qui combine   Gestion des journaux en temps réel avec de puissants   Configuration et gestion du changement dans   un logiciel clé en main.


6
2017-07-30 10:33





Voici une autre création stupide de VBScript de ma part, concoctée à partir de quelques autres scripts.

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 = "EventLogMonitor@company.com"
Const EMAIL_RECIPIENT = "recipient@company.com"
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

Vous pouvez exécuter cela en tant que service Windows si vous utilisez quelque chose comme le Gestionnaire de service non-suceuse ou SRVANY pour l'installer. En utilisant NSSM, la ligne de commande serait:

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

Assurez-vous de remplacer le destinataire du courrier électronique, l'expéditeur et le nom du serveur SMTP.

Vous définissez les événements pour lesquels vous souhaitez être alerté avec l'appel "PushEventToMonitor". Les arguments sont les suivants: ID d'événement, nom du journal des événements, source, catégorie, type, utilisateur et une expression régulière pouvant être comparée au message de journal. J'ai ici un exemple qui correspond au début / à la fin du service TELNET, ainsi qu'un exemple qui correspondra au démarrage du script lui-même (qui enregistre un événement dans le journal des applications).

Il s’agit d’un premier brouillon, car celui que j’ai écrit pour un client qui est "en production" a été écrit à son compte et "leur appartient". En tant que tel, j’ai re-codé celui-ci (qui est en fait très différent de celui utilisé par le client) et il pourrait bien contenir des bugs stupides. Je l’utilise depuis un peu de temps ce soir sur certains de mes systèmes et je ne vois pas de problèmes.

Peut-être que je vais éventuellement améliorer un peu la situation. Ce serait bien si elle retirait sa configuration du registre (afin qu'elle puisse être contrôlée avec la stratégie de groupe) et si elle était empaquetée en tant que MSI pour un déploiement facile sur des groupes de serveurs. Tant pis.


4
2017-07-31 02:31





Vous pouvez le faire avec une tâche Windows
Vois ici http://www.vistax64.com/tutorials/67961-event-viewer-email-notification.html 


3
2018-04-05 05:58



La question d'origine spécifiait Windows Server 2003. Cette solution fonctionne-t-elle avec Windows Server 2003 ou uniquement avec Vista / Windows 7? - Ken Burkhardt


Serveurs vivants peut le faire pour vous. Le produit est gratuit pour un maximum de 10 événements à surveiller.

Le moniteur de journal des événements NT est un plug-in gratuit situé ici. Assez facile à utiliser et à configurer.


1
2017-07-30 12:36





L'outil de gestion centralisée des journaux d'événements de GFI (GFI EventsManager) fait ceci, bien que ce ne soit pas FOSS.

Alertes en temps réel, alertes SNMPv2 incluses

La dernière version de GFI EventsManager a amélioré le niveau d'alerte pour les événements clés ou les intrusions détectées sur le réseau. GFI EventsManager vous permet de déclencher des actions telles que des scripts ou d'envoyer une alerte à une ou plusieurs personnes par courrier électronique, messages réseau, notifications SMS envoyées via une passerelle ou un service de messagerie vers SMS. Elle inclut désormais les interruptions SNMPv2. La génération d'alertes SNMP permettra également aux administrateurs d'intégrer GFI EventsManager à des mécanismes de surveillance préexistants ou génériques.


0
2017-07-30 12:07





Voir https://serverfault.com/a/517457/75770 pour un moyen d'envoyer des emails en fonction de filtres d'événements personnalisés

Testé en travaillant sur Server 2008, et même lorsque l'authentification SMTP est requise.


0
2018-06-21 07:06