Как узнать кто подключался на тот или иной сервер по RDP.
С помощью логов которые пишет ОС Windows, можно получить информацию о том с каких IP и какие пользователи подключались к виртуальному серверу, и когда они это делали.
Приведенная ниже инструкция может быть использована также на десктопных версиях Windows.
Рассмотрим некоторые наиболее распространенные коды связанные со временем запуска и завершения работы сервера.
1149: Присутствие данного кода говорить об успешной аутентификации пользователя на сервере. (Remote Desktop Services: User authentication succeeded)
21: данный код говорить об успешном входе в систему, то-есть пользователь увидел окно рабочего стола. (Remote Desktop Services: Session logon succeeded)
24: это событие говорить об успешном отключении от RDP (Remote Desktop Services: Session has been disconnected)
25: говорит об переподключении к RDP сессии. (Remote Desktop Services: Session reconnection succeeded)
23: пользователь нажал Logoff и вышел из системы (Remote Desktop Services: Session logoff succeeded )
39: пользователь лично отключился от RDP сессии (не просто закрыл RDP окно). Или его отключил другой пользователь или администратор.
Как просмотреть данные события?
Нажмите Win+R и введите eventvwr
В левой части панели откройте «Журналы Windows => Система»
В колонке Event ID мы увидим список событий, произошедших во время работы Windows. Журнал событий можно сортировать по идентификатору события.
Для того что бы отсортировать нужные нам события, с правой стороны, выберем «Фильтр текущего журнала»
Теперь введите нужные нам события, через запятую, 1149,39,25,24,23,21 и нажмите Ок.
Теперь мы можем наблюдать журнал событий с завершением работы нашего сервера VPS.
Данные ивенты, можно посмотреть в разных разделах. Например:
EventId 1149,4624,4625 — фильтруем в Windows Logs => Security
EventId 25,24,21,39 — фильтруем в Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational
EventId 23 — Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operationa
Теперь вы можете самостоятельно проверить по кто и когда заходил по RDP на Ваш сервер.
В этой статье мы рассмотрим, как получить и проанализировать логи RDP подключений в Windows. Логи RDP подключений позволяют администраторам терминальных RDS серверов/ферм получить информацию о том, какие пользователи подключались к серверу, когда был выполнен вход и когда сеанс завершен, с какого устройства (имя или IP адрес) подключался пользователь.
Описанные методики получения и исследования RDP логов применима как к Windows Server 2022/2019/2016/2012R2, так и для десктопных версий Windows 11, 10, 8.1 c.
Содержание:
- События RDP подключений в журналах Windows (Event Viewer)
- Получаем логи RDP подключений в Windows с помощью PowerShell
- Логи RDP подключений на клиентах Windows
События RDP подключений в журналах Windows (Event Viewer)
Когда пользователь удаленно подключается к RDS серверу или удаленному столу Windows (RDP), информация об этих событиях сохраняется в журналы Windows. Рассмотрим основные этапы RDP подключения и связанные с ними события в Event Viewer.
- Network Connection
- Authentication
- Logon
- Session Disconnect/Reconnect
- Logoff
Network Connection: – событие установления сетевого подключение к серверу от RDP клиента пользователя. Событие с EventID – 1149 (Remote Desktop Services: User authentication succeeded). Наличие этого события не свидетельствует об успешной аутентификации пользователя. Этот журнал находится в разделе Applications and Services Logs -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager -> Operational. Включите фильтр по данному событию (ПКМ по журналу-> Filter Current Log -> EventId 1149).
С помощью PowerShell можно вывести список всех попыток RDP подключений:
$RDPAuths = Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -FilterXPath '<QueryList><Query Id="0"><Select>*[System[EventID=1149]]</Select></Query></QueryList>'
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData = Foreach ($event in $xml.Event)
{ New-Object PSObject -Property @{
TimeCreated = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm:ss K')
User = $event.UserData.EventXML.Param1
Domain = $event.UserData.EventXML.Param2
Client = $event.UserData.EventXML.Param3
}
} $EventData | FT
В результате у вас получится список с историей всех сетевых RDP подключений к данному серверу. В событии содержится имя пользователя, домен (если используется NLA аутентификация, при отключенном NLA текст события выглядит иначе) и IP адрес компьютера пользователя.
Authentication: – успешная или неудачная аутентификация пользователя на сервере. Журнал Windows -> Security. Здесь нас могут интересовать события с EventID – 4624 (успешная аутентификация — An account was successfully logged on) или 4625 (ошибка аутентификации — An account failed to log on). Обратите внимание на значение LogonType в событии.
- LogonType = 10 или 3 — при входе через терминальную службу RDP —.
- LogonType = 7, значит выполнено переподключение к уже существующему RDP сеансу.
- LogonType = 5 – событие RDP подключения к консоли сервера (в режиме mstsc.exe /admin)
Вы можете использовать события с ошибками аутентификации для защиты от удаленного перебора паролей через RDP. СВы можете автоматически блокировать на файерволе IP адреса, с которых выполняется подбор пароля, простым PowerShell скриптом (см. статью).
При этом имя пользователя содержится в описании события в поле Account Name, имя компьютера в Workstation Name, а имя пользователя в Source Network Address.
Обратите внимание на значение поля LogonID – это уникальный идентификатор сессии пользователя, с помощью которого можно отслеживать дальнейшую активность данного пользователя. Но при отключении от RDP сессии (disconnect) и повторного переподключения к той же сессии, пользователю будет выдан новый TargetLogonID (хотя RDP сессия осталась той же самой).
Вы можете получить список событий успешных авторизаций по RDP (событие 4624) с помощью такой команды PowerShell.
Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 4624 -and $_.Message -match 'logon type:\s+(10)\s'} | Out-GridView
Logon: – RDP вход в систему, EventID – 21 (Remote Desktop Services: Session logon succeeded. Это событие появляется после успешной аутентификации пользователя. Этот журнал находится в разделе Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Как вы видите, здесь можно узнать идентификатор RDP сессии для пользователя — Session ID.
Событие с EventID – 21 (Remote Desktop Services: Shell start notification received) означает успешный запуск оболочки Explorer (появление окна рабочего стола в RDP сессии).
Session Disconnect/Reconnect – события отключения и переподключения к сессии имеют разные коды в зависимости от того, что вызвало отключение пользователя (отключение по неактивности, заданному в таймаутах для RDP сессий; выбор пункта Disconnect в сессии; завершение RDP сессии другим пользователем или администратором и т.д.). Эти события находятся в разделе журналов Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Рассмотрим RDP события, которые могут быть полезными:
- EventID – 24 (Remote Desktop Services: Session has been disconnected) – пользователь отключился от RDP сессии.
- EventID – 25 (Remote Desktop Services: Session reconnection succeeded) – пользователь переподключился к своей имеющейся RDP сессии на сервере.
- EventID – 39 (Session <A> has been disconnected by session <B>) – пользователь сам отключился от своей RDP сессии, выбрав соответствующий пункт меню (а не просто закрыл окно RDP клиента). Если идентификаторы сессий разные, значит пользователя отключил другой пользователь (или администратор).
- EventID – 40 (Session <A> has been disconnected, reason code <B>). Здесь нужно смотреть на код причины отключения в событии. Например:
- reason code 0 (No additional information is available) – обычно говорит о том, что пользователь просто закрыл окно RDP клиента.
- reason code 5 (The client’s connection was replaced by another connection) – пользователь переподключился к своей старой сессии.
- reason code 11 (User activity has initiated the disconnect) – пользователь сам нажал на кнопку Disconnect в меню.
Событие с EventID – 4778 в журнале Windows -> Security (A session was reconnected to a Window Station). Пользователь переподключился к RDP сессии (пользователю выдается новый LogonID).
Событие с EventID 4779 в журнале Windows -> Security (A session was disconnected from a Window Station). Отключение от RDP сеанса.
Logoff: – выход пользователя из системы. При этом в журнале Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational регистрируется событие с EventID 23 (Remote Desktop Services: Session logoff succeeded).
При этом в журнале Security нужно смотреть событие EventID 4634 (An account was logged off).
Событие Event 9009 (The Desktop Window Manager has exited with code (<X>) в журнале System говорит о том, что пользователь инициировал завершение RDP сессии, и окно и графический shell пользователя был завершен.
EventID 4647 — User-initiated logoff
Получаем логи RDP подключений в Windows с помощью PowerShell
Ниже представлен небольшой PowerShell скрипт, который выгружает из журналов терминального RDS сервера историю всех RDP подключений за текущий день. В полученной таблице указано время подключения, IP адрес клиента и имя пользователя (при необходимости вы можете включить в отчет другие типы входов).
Get-EventLog -LogName Security -after (Get-date -hour 0 -minute 0 -second 0)| ?{(4624,4778) -contains $_.EventID -and $_.Message -match 'logon type:\s+(10)\s'}| %{
(new-object -Type PSObject -Property @{
TimeGenerated = $_.TimeGenerated
ClientIP = $_.Message -replace '(?smi).*Source Network Address:\s+([^\s]+)\s+.*','$1'
UserName = $_.Message -replace '(?smi).*\s\sAccount Name:\s+([^\s]+)\s+.*','$1'
UserDomain = $_.Message -replace '(?smi).*\s\sAccount Domain:\s+([^\s]+)\s+.*','$1'
LogonType = $_.Message -replace '(?smi).*Logon Type:\s+([^\s]+)\s+.*','$1'
})
} | sort TimeGenerated -Descending | Select TimeGenerated, ClientIP `
, @{N='Username';E={'{0}\{1}' -f $_.UserDomain,$_.UserName}} `
, @{N='LogType';E={
switch ($_.LogonType) {
2 {'Interactive - local logon'}
3 {'Network conection to shared folder)'}
4 {'Batch'}
5 {'Service'}
7 {'Unlock (after screensaver)'}
8 {'NetworkCleartext'}
9 {'NewCredentials (local impersonation process under existing connection)'}
10 {'RDP'}
11 {'CachedInteractive'}
default {"LogType Not Recognised: $($_.LogonType)"}
}
}}
Можно экспортировать логи RDP подключений из журнала в CSV файл (для дальнейшего анализа в таблице Excel). Экспорт журнала можно выполнить из консоли Event Viewer (при условии что логи не очищены) или через командную строку:
WEVTUtil query-events Security > c:\ps\security_log.txt
Или с помощью PowerShell:
get-winevent -logname "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" | Export-Csv c:\ps\rdp-log.csv -Encoding UTF8
Если ваши пользователи подключаются к RDS серверам через шлюз удаленных рабочих столов Remote Desktop Gateway, вы можете обрабатывать логи подключений пользователей по журналу Microsoft-Windows-TerminalServices-Gateway по EventID 302. Например, следующий PowerShell скрипт выведет полную историю подключений через RD Gateway указанного пользователя:
$rdpusername="kbuldogov"
$properties = @(
@{n='User';e={$_.Properties[0].Value}},
@{n='Source IP Adress';e={$_.Properties[1].Value}},
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='Target RDP host';e={$_.Properties[3].Value}}
)
(Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-Gateway/Operational';ID='302'} | Select-Object $properties) -match $rdpusername
Другие события, связанные с подключениями пользователей на RD 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.
Список текущих RDP сессий на сервере можно вывести командой:
qwinsta
Команда возвращает как идентификатор сессии (ID), имя пользователя (USERNAME)и состояние (Active/Disconnect). Эту команду удобна использовать, когда нужно определить ID RDP сессии пользователя при теневом подключении.
Список запущенных процессов в конкретной RDP сессии (указывается ID сессии):
qprocess /id:157
Логи RDP подключений на клиентах Windows
Также вы можете изучать логи исходящих подключений на стороне RDP клиента. Они доступны в журнале событий Application and Services Logs -> Microsoft -> Windows -> TerminalServices-ClientActiveXCore -> Microsoft-Windows-TerminalServices-RDPClient -> Operation.
Например, событие с Event ID 1102 появляется, когда компьютер устанавливает подключение с удаленным RDS хостом Windows Server или компьютером с Windows 10/11 с включенной службой RDP (десктопные версии Windows также поддерживают несколько одновременных rdp подключений).
The client has initiated a multi-transport connection to the server 192.168.31.102.
Следующий RDP скрипт выведет историю RDP подключений на указанном компьютере (для получения событий Event Log используется командлет Get-WinEvent):
$properties = @(
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LocalUser';e={$_.UserID}}
@{n='Target RDP host';e={$_.Properties[1].Value}}
)
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RDPClient/Operational';ID='1102'} | Select-Object $properties
Скрипт возвращает SID пользователей, которые инициировали RDP подключения на этом компьютере и DNS имена/IP адреса серверов, к которым подключались пользователи. Вы можете преобразовать SID в имена пользователей.
Также история RDP подключений пользователя хранится в реестре.
Что-то странное у меня творится с подключением по RDP, постоянно отваливается соединение. Захотелось мне посмотреть кто и откуда коннектился на сервер. Быстрый способ узнать кто и откуда заходил на сервер можно через PowerShell.
$RDPAuths = Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -FilterXPath '<QueryList><Query Id="0"><Select>*[System[EventID=1149]]</Select></Query></QueryList>'
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData = Foreach ($event in $xml.Event)
{ New-Object PSObject -Property @{
TimeCreated = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm:ss K')
User = $event.UserData.EventXML.Param1
Domain = $event.UserData.EventXML.Param2
Client = $event.UserData.EventXML.Param3
}
} $EventData | FT
Здесь мы считываем из журнала Windows события с EventID=1149: дату, время, имя пользователя, домен, IP адрес точки подключения. Событие «Remote Desktop Services: User authentication succeeded».
Журнал можно найти в разделе Applications and Services Logs → Microsoft -> Windows → Terminal-Services-RemoteConnectionManager → Operational.
Могут пригодиться и другие типы событий:
- EventID=4624 (An account was successfully logged on)
- EventID=4625 (An account failed to log on)
- EventID=4778 (A session was reconnected to a Window Station)
- EventID=4779 (A session was disconnected from a Window Station)
- EventID=9009 (The Desktop Window Manager has exited with code X)
- EventID=4647 (User-initiated logoff)
Дополнительно скрипт списка подключений с клиента:
$properties = @(
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LocalUser';e={$_.UserID}}
@{n='Target RDP host';e={$_.Properties[1].Value}}
)
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RDPClient/Operational';ID='1102'} | Select-Object $properties
Скрипты честно содрал здесь:
https://winitpro.ru/index.php/2018/09/25/analizing-rdp-logs-windows-terminal-rds/
Monitoring user logins on a Windows Server is a critical aspect of system administration. This comprehensive guide will cover a range of methods, from simple command-line tools to powerful PowerShell scripts, and will also delve into event logs and dedicated management tools. Please see how to Block downloads on Microsoft Edge using GPO on Windows Server 2019 and 2022, Group Policy: Desktop Wallpaper and Screen Saver Management, and How to Disable TLS 1.0, TLS 1.1 and TLS 1.2 in Windows Using GPO.
Knowing the current logged-in users can help in troubleshooting issues, efficiently managing resources, and improving security by logging off idle or unauthorized sessions. It aims to offer you a holistic understanding of how to monitor users currently logged on a Windows Server.
Methods to Check Users Currently Logged on Windows Server
Here are other related guides: Display interactive logon messages for Windows PCs via GPO, Windows 11 Taskbar: Modifying via Intune and GPO, and Password Policy: How to Create via GPO with Group Policy Object.
Checking Logged-In Users Using Command Prompt:
Launch Command Prompt as an administrator.
To view a list of logged-in users, run the “query user” Command:
query user
This command shows a list of currently logged-in users, their session ID, and the type of session.
To view a comprehensive list of user sessions, including session IDs, usernames, and session state, type the following command and press enter:
qwinsta
Viewing Active Sessions with PowerShell:
Launch PowerShell as an administrator.
You can use quser or query user to check users connected on the server:
quser
query user
You can use query session or qwinsta to check sessions connected
qwinsta
query session
Utilizing the Task Manager:
Press Ctrl + Shift + Esc or right-click the taskbar and select “Task Manager.”
Click on the “Users” tab in Task Manager.
You will see a list of logged-in users and their session details.
Querying the Event Logs:
Press Win + X and select “Event Viewer” or search for it in the Start menu.
Expand “Windows Logs” in Event Viewer and select “Security.”
Look for login and logoff events to identify user sessions.
Utilizing Third-Party Software:
Explore third-party software options designed for advanced user session monitoring and reporting.
Consider tools like SolarWinds Server & Application Monitor, SysKit Monitor, or other trusted solutions.
Conclusion:
Monitoring user sessions on a Windows Server is essential for system administrators. By following the methods and tools described in this guide, you can efficiently identify which users are currently logged in, manage their sessions, and improve the overall security and performance of your server environment.
FAQs
Can I find out when and how a user logged in or logged out on a Windows Server?
Yes, the guide explains how to query the Windows Event Logs to access information about user logins, logouts, and session activities. This can provide details about the timing and methods of user sessions.
Is there a way to remotely monitor user sessions on a Windows Server, especially for remote desktop sessions?
Yes, the guide includes information on monitoring remote desktop sessions. You can use tools like the Remote Desktop Services Manager to keep track of remote users and their sessions. This is particularly useful for servers that frequently host remote users or administrators.
I hope you found this article useful on how to Find Out Which Users Are Logged on Windows Server. Please feel free to leave a comment below.
Помогите пожалуйста
Пришла такая задача от руководителя.
Нужно узнать за последний месяц, кто подключался к нашей внутренней сети из вне, по каким протоколам и когда
RDP, RTSP, и т.д.
Вообще реально ли такое предоставить, попросили сделать анализ
Буду благодарен за любую помощь.
-
Вопрос задан
-
6027 просмотров
Пригласить эксперта
Внутренний журнал Windows на сервере обладает данной информацией.
Если нужны все подключения, то смотрите логи Вашего роутера. Или что выступает в роли него.
Если конкретно RDP — то журнал подключения RDP сервера
Вот тут гляньте, возможно, что-нибудь пригодится -> Tracking and Analyzing Remote Desktop Activity Log…
Удачи! )))
ЗЫ: У нас начальство тоже такой ерундой мается, когда всех на удаленку отправило. Но у нас RDG развернут и все коннектятся через него. Там в логах все есть.
В логах винды все должно быть. Правда не знаю, причем тут RTSP — потоковый протокол реального времени, по которому обычно голос идет в IP-телефонии
Если нужно фильтровать RDP по маске IP адресов — Разрешать обычный доступ для всех пользователей при подключении из локальной сети (LAN) тогда как для подключений из внешней сети (WAN) требовать предъявление 2ФА одноразового пароля либо электронного ключа.
www.rohos.ru/2015/03/terminal-server-login-by-sms-otp (платно)
Войдите, чтобы написать ответ
-
Показать ещё
Загружается…