Ein wenig mehr über Diagramme oder das Erkennen von Abhängigkeiten zwischen Ihren Anwendungen

Guten Tag, Kollegen. In letzter Zeit wurde viel darüber gesprochen, Anwendungen von physischen Infrastrukturen, gelesenen Rechenzentren, in die Cloud zu übertragen. Zum Beispiel in Microsoft Azure . Nun, oder allgemein, über jede andere Übertragung einer oder mehrerer Anwendungen von einem Ort an einen anderen. Eines der größten Probleme bei dieser Art von Problem ist die Notwendigkeit, alle externen Abhängigkeiten der Anwendung zu finden. Dies bezieht sich nicht auf Abhängigkeiten im Code, sondern auf Abhängigkeiten von externen Systemen in Bezug auf die Anwendung. In der Tat müssen wir manchmal herausfinden, mit wem unser Vorschlag spricht und wer mit ihm spricht. Wie geht das, wenn wir sozusagen kein umfassendes SIEM haben und das SIEM für die Armen verwenden? Genau genommen gibt es für Systeme unter Windows den folgenden Satz.


Wir müssen:


  • Aktivieren Sie die Anmeldung in der Windows-Firewall auf allen Computern, auf die eine oder andere Weise, die der Anwendung zugeordnet sind
  • Laden Sie das PSQuickGraph-Modul der Admin-Station herunter
  • Stapeln und analysieren Sie Protokolle, erstellen Sie ein Diagramm mit Links

In ihrer einfachsten Form sieht die Protokollanalyse ungefähr so ​​aus. Schrecklich, Stirn, aber was kannst du tun? Tatsächlich war ich zu faul, um Logik für das Log-Rennen zu schreiben. Ich habe einfach alles zweimal kopiert. Aber für unsere Zwecke wird auch "grob und in die Stirn" gehen, um die Idee zu zeigen


$f = gc "C:\Temp\pfirewall_public.log" $regex = '^(?<datetime>\d{4,4}-\d{2,2}-\d{2,2}\s\d{2}:\d{2}:\d{2})\s(?<action>\w+)\s(?<protocol>\w+)\s(?<srcip>\b(?:\d{1,3}\.){3}\d{1,3}\b)\s(?<dstip>\b(?:\d{1,3}\.){3}\d{1,3}\b)\s(?<srcport>\d{1,5})\s(?<dstport>\d{1,5})\s(?<size>\d+|-)\s(?<tcpflags>\d+|-)\s(?<tcpsyn>\d+|-)\s(?<tcpack>\d+|-)\s(?<tcpwin>\d+|-)\s(?<icmptype>\d+|-)\s(?<icmpcode>\d+|-)\s(?<info>\d+|-)\s(?<path>.+)$' $log = $f | % { $_ -match $regex | Out-Null if ($Matches) { [PSCustomObject]@{ action = $Matches.action srcip = [ipaddress]$Matches.srcip dstport = $Matches.dstport tcpflags = $Matches.tcpflags dstip = [ipaddress]$Matches.dstip info = $Matches.info size = $Matches.size protocol = $Matches.protocol tcpack = $Matches.tcpac srcport = $Matches.srcport tcpsyn = $Matches.tcpsyn datetime = [datetime]$Matches.datetime icmptype = $Matches.icmptype tcpwin = $Matches.tcpwin icmpcode = $Matches.icmpcode path = $Matches.path } } } $f = gc "C:\Temp\pfirewall_public2.log" $log2 = $f | % { $_ -match $regex | Out-Null if ($Matches) { [PSCustomObject]@{ action = $Matches.action srcip = [ipaddress]$Matches.srcip dstport = $Matches.dstport tcpflags = $Matches.tcpflags dstip = [ipaddress]$Matches.dstip info = $Matches.info size = $Matches.size protocol = $Matches.protocol tcpack = $Matches.tcpac srcport = $Matches.srcport tcpsyn = $Matches.tcpsyn datetime = [datetime]$Matches.datetime icmptype = $Matches.icmptype tcpwin = $Matches.tcpwin icmpcode = $Matches.icmpcode path = $Matches.path } } } $l = $log + $log2 $g = new-graph -Type BidirectionalGraph $l | ? {$_.srcip -and $_.dstip} | % { Add-Edge -From $_.srcip -To $_.dstip -Graph $g | out-null } Show-GraphLayout -Graph $g 

In diesem Beispiel analysieren wir das Windows-Firewall-Protokoll einfach mit einem regulären Ausdruck und teilen es in Objekte auf - ein Objekt pro Zeile. Gott segne sie mit RAM, stirb nicht. In diesem Beispiel haben wir zwei Protokolle von zwei verschiedenen Computern. Nach dem Parsen führen wir einfach alles zu einem großen Array zusammen und führen eine Suche durch, wobei wir Scheitelpunkte und Kanten des Diagramms hinzufügen. Nun, und als Ergebnis - zeigen Sie es an. Es sieht also ungefähr so ​​aus:


appLinks


Ich hoffe, jemand ist nützlich.

Source: https://habr.com/ru/post/de425235/


All Articles