вторник, 17 ноября 2020 г.

Как посмотреть активные Radius сессии анализируя логи Windows NPS сервера

C начала эпидемии повалил народ работать по VPN. В связи с чем мне как мега-админу пришлось решать вопрос - как отследить кто сейчас работает по VPN, а кто просто сидит дома. Понадобилось простое средство увидеть кто в онлайне, анализируя только логи NPS-Radius сервера на Windows.

Поиск в интернете не дал нужного мне решения. Пришлось делать его самому. Представляю вашему вниманию скрипт NPSLogOnline.ps1

Краткое описание

Этот скрипт получает обязательным параметром от одного до нескольких лог-файлов NPS-сервера. Логи должны быть в формате DTS, а записи о времени в логах соответствовать datetime в PowerShell-e. 

На экран выводится таблица активных сессий, а в самом низу - их количество. Далее скрипт ждет примерно 10 сек. Потом ожидает следующей записи в логах и опять выводит эту таблицу.

Табличка активных сессий включает имя пользователя, имя хоста пользователя, длительность сессии в часах минутах секундах, внешний IP адрес пользователя, IP адрес пользователя внутри VPN-туннеля, внешний адрес Radius-клиента-NAS-сервера,его же внутренний адрес, имя Radius-сервера, количество входящих и исходящих байт.

Самый последний столбец - Status. Он показывает как давно в логах Radius-сервера была последняя запись об этой VPN сессии. Слово Online говорит что меньше 5 мин назад, "Простой" говорит что от 5 до 10 мин назад. "Превышено время" - последняя запись об этой сессии была более 10 мин назад. При нормальной работе систем могут быть только два первых сообщения.

Последнее число в квадратных скобках показывает сколько секунд назад в логах Radius-сервера была последняя запись об этой сессии. Удобно для отслеживания ошибок.

Если понадобится изменить список выводимых столбцов таблицы, отредактируйте строку "Format-Table -Property UserName,UserDevName,DurationHMS,UserExternalIP, ...". Допустимые поля смотри в коде скрипта в объявлении объекта $OneVPNSessionDesc.

Все пользователи появляются примерно через 5 минут работы скрипта. Такое время потому что Radius-клиент посялает пакеты о состоянии соединения Radius-серверу примерно каждые 5 минут. Так у моего сервера.

Входные параметры

-LogFiles - активные лог-файлы NPS-Radius сервера. Можно указать один или несколько файлов. Должны быть разделены символом запятая
-SortVPNSessionsByField - по какому полю упорядочивает выводимые результаты. Допустимые поля берутся из того же объекта $OneVPNSessionDesc. По умолчанию упорядочивает по полю имени пользователя (поле UserName). Можно еще упорядочить по:
UserDevName - Имя устройства VPN-клиента
DurationSec - Длительность сессии
RadiusServer - Имя Радиус-сервера, который обрабатывает эту сессию
TunnelType - Тип туннеля
UserExternalIP - Наружный IP адрес VPN-клиента
TunnelClientIP - IP адрес VPN-клиента внутри VPN-туннеля
NASServerExternalIP - Наружный IP адрес NAS сервера-Radius клиента
NASServerInternalIP - IP адрес NAS сервера-Radius клиента внутри VPN-туннеля
InputOctets - Число входящих байт
InputPackets - Число входящих пакетов
OutputOctets - Число исходящих байт
OutputPackets - Число исходящих пакетов

Примеры

Анализирует файл in2011.log, выходную таблицу упорядочивает по умолчанию по имени пользователя

.\NPSLogOnline.ps1 -LogFiles "c:\Windows\System32\LogFiles\in2011.log"

Анализирует два лог-файла. Упорядочивает выходную таблицу по длительности сессии
.\NPSLogOnline.ps1 -LogFiles "\\192.168.10.10\c$\Windows\System32\LogFiles\in2011.log,\\192.168.10.11\c$\Windows\System32\LogFiles\in2011.log" -SortVPNSessionsByField "DurationSec"

Анализирует один лог-файл из текущей папки и таблица упорядочивается по количеству входящих байт в сессии
.\NPSLogOnline.ps1 -LogFiles "in2011.log" -SortVPNSessionsByField "InputOctets"


Еще был написан скрипт который анализируя логи за определенный период времени выдает подробные CSV-таблицы о каждой сессии каждого пользователя и по каждому пользователю статистику. Но об этом в следующей статье.

Комментариев нет:

Отправка комментария