Кто и когда подключался по RDP – часть 2
В первой части статьи (Кто и когда подключался по RDP) я в конце говорил, что скрипт не записывает ip адрес подключившегося, но при просмотре логов, ip адрес очень легко получить.
Подключение средствами RDP.
Необходимо просмотреть логи Microsoft-Windows-TerminalServices-RemoteConnectionManager по событию 1149, что бы получить возможность сопоставить пользователя с ip адресом. По умолчанию, логи настроены на малое количество записей, поэтому не забываем настроить максимальный объем журнала.
Сам скрипт выглядит вот так:
1 2 3 4 5 6 7 8 9 10 |
Get-WinEvent "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" | ?{$_.ID -eq "1149"} | %{ New-Object PSObject -Property @{ MachineName = $_.MachineName TimeCreated = $_.TimeCreated User = $_.Properties[0].Value Domain = $_.Properties[1].Value SourceIP = $_.Properties[2].Value } }| Out-GridView |
Данный скрипт необходимо запускать на терминальном сервере.
Подключение средствами RDG.
В случае если используется подключение через защищенное соединение – RDG (Remote Desktop Gateway), то необходимо обратиться к логам Microsoft-Windows-TerminalServices-Gateway, которые так же необходимо настроить на максимальный объем хранения.
300 – The user “%1”, on client computer “%2”, met resource authorization policy requirements and was therefore authorized to connect to resource “%4”.
302 – The user “%1”, on client computer “%2”, connected to resource “%4”.
303 – The user “%1”, on client computer “%2”, disconnected from the following network resource: “%4”. Before the user disconnected, the client transferred %6 bytes and received %5 bytes. The client session duration was %7 seconds.
Источник: MS
В итоге получаем вот такой скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$Events = Get-WinEvent -FilterHashtable @{Logname = "Microsoft-Windows-TerminalServices-Gateway/Operational" ; ID = 300,302,303 } $date = Get-Date -format yyyy-MM-dd $ArrayList = New-Object System.Collections.ArrayList Foreach ($Event in $Events) { [xml]$Xml = $Event.ToXml() $Row = "" | Select Username,TimeCreated,IPAddress $Row.Username = $Xml.Event.UserData.EventInfo.Username $Row.TimeCreated = $Event.TimeCreated.ToString() $Row.IPAddress = $Xml.Event.UserData.EventInfo.IpAddress [void]$ArrayList.Add($Row) } $ArrayList | export-csv C:\LogFile\$date.csv -nti |
P.S.
Уже даже нарисовал формочку для скрипта:
Но это уже тема для другой статьи. 🙂