Avatar von vandyke
  • vandyke

19 Beiträge seit 18.05.2017

Ergänzungen/Verbesserungen zu SrpWatch

Hallo,

ich hatte schon im SrpWatch Artikel die folgenden Ergänzungen im Kommentarbereich gemacht. Nun noch mal hier, da vielleicht andere Nutzer die folgenden Verbesserungen auch nutzen wollen.

Die Anpassungen erfolgen in der Datei srpwatch.ps1 im Installationsverzeichnis von SrpWatch (Standardpfad: »C:\Program Files (x86)\srpwatch«). Die Datei einfach mit dem Editor öffnen. Bei unzureichenden Rechten, muss man die bearbeitete Datei erst z.B. auf dem Desktop speichern und sie dann von da in das Programmverzeichnis von SrpWatch verschieben/kopieren.

Ergänzung 1: Benutzerloginnamen in der E-Mail von SrpWatch ergänzen
Damit man überhaupt weiß, welcher Benutzer eine nicht autorisierte Anwendung ausführen wollte, macht es durchaus Sinn diesen in der Warnungs E-Mail zu ergänzen. Verändert wird die foreach-Schleife:

foreach ( $event in $events) { $msg=$event.Message $obj_User = "N/A"; $sid = $event.userid; if($sid) { $objSID = New-Object System.Security.Principal.SecurityIdentifier($sid) $obj_User = $objSID.Translate([System.Security.Principal.NTAccount]) } $msg=""+ $event.TimeCreated+ " - "+ $msg+ " ("+ $event.Id+ ")" + " [" + $obj_User + "]" LogWrite $msg if ( $msg -ne "") { $msgs+= $msg } }

Ergänzung 2: SSL Verschlüsselung abstellbar machen
In der srpwatch_vars.ps1 soll man laut der Beispieldatei (srpwatch_vars.ps1.example) die ssl Verschlüsselung per $ssl=$false deaktivieren können. Das funktioniert aber nicht. Hier die nötigen Änderungen, damit es funktioniert. Verändert wird die MySendMail-Funktion:

function MySendMail( $subj, $body) { $error.Clear() LogWrite "Sende Mail" $SMTPClient = New-Object Net.Mail.SmtpClient($smtpserver, $smtpport) $SMTPClient.EnableSsl = $usessl if (( $smtppass) -And ( $smtpuser)) { $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($smtpuser, $smtppass) } try { $SMTPClient.Send($from, $to, $subj, $body) If ( $error.Count -gt 0) { $error[0].ToString() return 1 } } catch { $error[0].ToString() return 1 } return 0 }

:-)

Und noch mal die komplett überarbeitete Datei (srpwatch.ps1)

# Aufrufpfad bestimmen, dort Variablen einlesen $myhome= Split-Path $MyInvocation.MyCommand.Path try { . "$myhome/srpwatch_vars.ps1" } catch { Write-Error -ErrorRecord $_ exit 1 } $mylog= "$(gc env:ProgramData)\srpwatch.log" # Fuer die Fehlersuche Function LogWrite { Param ([string]$logstring) if ( -Not $log) { return } $stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") $line= "$stamp $logstring" Add-content $mylog -value $line } # Mehrfach benoetigte Funktionen function MySendMail( $subj, $body) { $error.Clear() LogWrite "Sende Mail" $SMTPClient = New-Object Net.Mail.SmtpClient($smtpserver, $smtpport) $SMTPClient.EnableSsl = $usessl if (( $smtppass) -And ( $smtpuser)) { $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($smtpuser, $smtppass) } try { $SMTPClient.Send($from, $to, $subj, $body) If ( $error.Count -gt 0) { $error[0].ToString() return 1 } } catch { $error[0].ToString() return 1 } return 0 } if ( !$hostname) { $hostname= $env:computername } # Fuer einfaches Pruefen der Mail-Konfiguration if ( $args[0] -eq "-mailcheck") { $mailres= MySendMail "[srpwatch] $hostname Mail-Test" "Die Mail-Konfiguration funktioniert." exit $mailres } LogWrite "Aufgerufen" # Zeitpunkt merken $startdate= Get-Date # Letzten Lauf lesen, ggf. 12 Stunden Interval annehmen try { $lasttimestamp= Import-Clixml $env:temp\srp_watch.xml } catch { $lasttimestamp= $startdate-(New-TimeSpan -hour 12) } # Bremse: Nicht häufiger als 5 Minuten if (( $startdate- $lasttimestamp). TotalMinutes -lt 5) { exit 0 } LogWrite "Aufgewacht" # Ereignisprotokoll(e) auslesen $msgs=@() $events= Get-WinEvent -FilterHashTable @{ LogName = "Application"; ProviderName="Microsoft-Windows-SoftwareRestrictionPolicies"; Starttime=$lasttimestamp } # Weiterverarbeitung nur, wenn Nachrichten vorliegen if ( ($events | Measure-Object).Count -eq 0 ) { # Datum der Abfrage merken $startdate | export-clixml $env:temp\srp_watch.xml LogWrite "Nichts zu tun" exit 0 } else { LogWrite "Baue Bericht" foreach ( $event in $events) { $msg=$event.Message $obj_User = "N/A"; $sid = $event.userid; if($sid) { $objSID = New-Object System.Security.Principal.SecurityIdentifier($sid) $obj_User = $objSID.Translate([System.Security.Principal.NTAccount]) } $msg=""+ $event.TimeCreated+ " - "+ $msg+ " ("+ $event.Id+ ")" + " [" + $obj_User + "]" LogWrite $msg if ( $msg -ne "") { $msgs+= $msg } } # Nachrichtentext zusammenstellen $OFS="`r`n`r`n" $msgstxt=[string]($msgs) $msgstxt="SRP-Warnungen auf "+ $hostname +":`n`n"+ $msgstxt # Ohne Mailserver ausgeben und Abflug if ( $smtpserver -eq "mailhorst.example.com") { $msgstxt exit 0 } # Mail schicken $subject="[srpwatch] $hostname" $mailres= MySendMail $subject $msgstxt if ( $mailres -eq 0) { # Erst jetzt Datum der letzten Abfrage wegschreiben $startdate | export-clixml $env:temp\srp_watch.xml exit 0 } exit 1 }
Bewerten
- +
Anzeige