Назад | Перейти на главную страницу

Журнал событий Windows - уведомление по электронной почте

Есть ли простой способ отправить электронное письмо, когда событие определенного уровня серьезности от определенной службы попадает в журнал событий сервера Windows? Это на Windows Server 2003, если это имеет значение.

n.b. у нас есть надлежащий мониторинг и оповещения для производственных серверов на моем рабочем месте, но нам просто нужно быстрое решение для этой услуги в разработке.

Вы могли бы сделать это с OSSEC, многоплатформенное программное обеспечение с открытым исходным кодом:

OSSEC - это полноценная платформа для мониторинга и управления вашими системами. Он сочетает в себе все аспекты HIDS (обнаружение вторжений на основе хоста), мониторинг журналов и SIM / SIEM в простом, мощном решении с открытым исходным кодом.

И для мониторинга журналов / предупреждений:

Настраиваемые оповещения в режиме реального времени

OSSEC позволяет клиентам настраивать инциденты, о которых они хотят получать уведомления, что позволяет им сосредоточиться на повышении приоритета критических инцидентов над обычным шумом в любой системе. Интеграция с smtp, sms и syslog позволяет клиентам быть в курсе предупреждений, отправляя их на электронную почту и портативные устройства, такие как сотовые телефоны и пейджеры.

[...]

Каждая операционная система, приложение и устройство в вашей сети создают журналы (события), чтобы вы знали, что происходит. OSSEC собирает, анализирует и сопоставляет эти журналы, чтобы вы знали, происходит ли что-то не так (атака, неправильное использование, ошибки и т. Д.).

Вот статья о OSSEC о безопасности 360 °.


Специализированная коммерческая альтернатива: EventTracker (Prism Microssystems):

EventTracker - это комплексное решение для управления информацией и событиями безопасности (SIEM), которое сочетает в себе управление журналами в реальном времени с мощными функциями управления конфигурацией и изменениями в одном готовом программном пакете.

Вот еще одно глупое творение VBScript, созданное мной из нескольких других скриптов.

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

Вы можете запустить это как службу Windows, если используете что-то вроде Менеджер по обслуживанию без сосания или SRVANY, чтобы установить его. Используя NSSM, строка командной строки будет выглядеть так:

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

Не забудьте подставить получателя электронной почты, отправителя и имя SMTP-сервера.

Вы определяете события, о которых хотите получать предупреждения, с помощью вызова «PushEventToMonitor». Аргументы: идентификатор события, имя журнала событий, источник, категория, тип, пользователь и регулярное выражение, которое можно сопоставить с сообщением журнала. У меня есть пример, который соответствует запуску / остановке службы TELNET, а также пример, который соответствует запуску самого сценария (который регистрирует событие в журнале приложений).

Это первый черновик, потому что тот, который я написал для Заказчика, который фактически «находится в производстве», был написан на их копейке и «принадлежит» им. Таким образом, я перекодировал этот код (который на самом деле существенно отличается от того, который использовал Заказчик), и в нем вполне могут скрываться глупые ошибки. Я запускал его сегодня вечером на некоторых из моих систем и не вижу проблем.

Может, со временем я сделаю это немного лучше. Было бы неплохо, если бы он вытащил свою конфигурацию из реестра (чтобы ее можно было контролировать с помощью групповой политики) и если бы он был упакован как MSI для легкого развертывания на группах серверов. Ну что ж.

Вы можете сделать это с помощью задачи Windows
Посмотреть здесь http://www.vistax64.com/tutorials/67961-event-viewer-email-notification.html

Сервера живы могу сделать это за вас. Продукт бесплатен для отслеживания до 10 событий.

Монитор журнала событий NT - это бесплатный плагин, расположенный Вот. Довольно проста в использовании и настройке.

Инструмент централизованного управления журналами событий GFI (GFI EventsManager) делает это, хотя и не является СОПО.

Оповещения в реальном времени, оповещения о ловушках SNMPv2 включены

В последней сборке GFI EventsManager ™ улучшен уровень предупреждений для ключевых событий или вторжений, обнаруженных в сети. GFI EventsManager позволяет запускать действия, такие как сценарии, или отправлять оповещения одному или нескольким людям по электронной почте, сетевым сообщениям, SMS-уведомлениям, отправляемым через шлюз или службу электронной почты в SMS, и теперь включает ловушки SNMPv2. Генерация предупреждений SNMP также позволит администраторам интегрировать GFI EventsManager с уже существующими или общими механизмами мониторинга.

Видеть https://serverfault.com/a/517457/75770 для способа отправки электронных писем на основе настраиваемых фильтров событий

Протестировано при работе на Server 2008 и даже при необходимости аутентификации SMTP.