Interpreter/Parser logów NPS(RADIUS)

Interpreter/Parser logów NPS(RADIUS)

Kontynuując wątek rozpoczęty w poprzednik wpisie (http://mkrzanowicz.pl/?p=485) pozostajemy w tematyce sieci komputerowych, VLANów, 802.1x, RADIUS’a, NPS’a…

We wcześniejszym wątku opisałem krótko zmagania z dziwnym przypadkiem użytkownika nieobsługiwanego poprawnie przez polityki sieciowe na serwerze MS NPS (Network Policy Server). Metoda dojścia do rozwiązania była dosyć partyzancka, bo polegała na porównywaniu wszystkich parametrów kont użytkownika, któremu wszystko działało poprawnie oraz tego, którego dotyczył problem. Oczywiście najważniejsze że udało się rozwiązać problem, jednak mimo wszystko istotny jest czas rozwiązywania podobnych przypadków. To skłoniło mnie do głębszego sięgnięcia w dokumentację oraz zapisy standardów.

Okazuje się że logi NPS/IAS/RADIUS w wydaniu Microsoftu są bardzo ciekawie skomponowane. W relatywnie niewielkim rozmiarze zawartych jest ogrom informacji potrzebnych do weryfikacji ewentualnych problemów, raportowania, statystyk etc. Chociaż będąc uczciwym trzeba przyznać że pierwszy kontakt z tą formą logowania informacji powoduje reakcję typu „WTF?” albo skłania do domysłów o co chodzi. Potem następuje przegrzebywanie dokumentacji w poszukiwaniu informacji i manualne rozszyfrowywanie poszczególnych pozycji… Aż w końcu rodzi się myśl czy nie można tego zrobić lepiej, szybciej, automatycznie?

Zacznijmy od składni takiego loga. Przykładowy wpis wygląda tak:

„10.10.10.4,anonymous,10/12/2015,13:06:10,IAS,RADIUS1,6,2,12,1500,30,50-50-A8-D3-C1-EE,38,5C-97-0E-DD-F2-55,61,15,5,50130,87,GigabitEthernet1/4,4,10.10.10.4,4108,10.10.10.4,4116,9,4128,switch1,4154,NAP 802.1X (Wired),4155,1,4129,MKrzanowicz\anonymous,4130,MKrzanowicz\anonymous,4132,,25,311 1 10.10.10.11 09/11/2015 06:09:17 39763,4127,5,4136,1,4142,0”

Trochę adresów IP, trochę adresów MAC, trochę kont domenowych, data i godzina i „jakieś cyferki” 🙂

Po zagłębieniu się w dokumentację dochodzimy do wniosku że jest w tym logika (IMHO. W obecnej chwili jeden z najlepszych sposobów kodowania informacji). Logika wygląda następująco:

1. Każde pole z informacjami rozdzielane jest znakiem „,”

2. Pierwsze 6 pól tworzy nagłówek

3. Kolejne pola są kodowane na zasadzie: Pole określające parametr + kolejne pole z wartością parametru i tak iteracyjnie aż do końca wiersza.

Prawda że fajne proste i przyjemne? 🙂

Tylko bolesne jest ślęczenie z dokumentacją i rozszyfrowywanie czym jest parametr „61” lub co oznacza wartość „0” dla parametru „4142”…

Aż się prosi żeby robić to sprawniej. Niestety narzędzi do tego jest jak na lekarstwo. Dosyć sensowne jest online’owe narzędzie interpretujące logi: http://iso.csusb.edu/tools/nps-log-interpreter  z tym, że nie wszystkie parametry i wartości są poprawnie dekodowane a i samo narzędzie nie radzi sobie z analizą większej ilości danych. Np. upload ~10MB loga zabija skutecznie stronkę 🙂 No i pozostaje cały czas obawa, że przesyłamy gdzieś w świat w bliżej nieokreślone miejsce dane o adresacji IP, MAC czy użytkownikach domeny.

Z narzędzi nadających się do użytku na polu boju zostaje jedynie „IAS Log Viewer” – ale jego cena to coś około 100 euro za rok no i wymaga ręcznego wskazywania plików logów a wyszukiwanie nie jest jakieś świetne (przynajmniej jak dla mnie).

W obliczu takich okoliczności wpadłem na pomysł napisania swojego interpretera/parsera logów 802.1x odkładanych przez Microsoftowego NPS’a, który pozwala zaoszczędzić czas. Pozwala na „automatyczne” przeszukiwanie logów na serwerach NPS (kilku jednocześnie) po zadanej frazie (np. adresie MAC, użytkowniku, nazwie polityki NPS…), z określonej ilości dni wstecz etc. Bez wymagania ręcznego wskazywania kolejnych plików logów.

Jak pomyślałem tak zrobiłem i efekty możecie obejrzeć/pobrać/przetestować w galerii skryptów Microsoftu: https://gallery.technet.microsoft.com/MS-NPSRADIUS-Logs-b68af449 Wszelkie uwagi mile widziane. Zawsze znajdzie się jakieś pole do poprawy jak tylko pozwoli na to czas 🙂

A jak się to ma do rozwiązywania problemów z poprzedniego wątku? Gdybym miał swojego interpretera logów wystarczyłoby mi wydanie polecenia:

I odczytanie, że źródłem problemu w komunikacie RADIUS’owym Access-Reject jest: „IAS_DIALIN_DISABLED”

Ale czego się przy tym nauczyłem to moje 🙂 Miałem motywację żeby ten proces usprawnić co w moim odczuciu się udało, a że wiedzy do grobu nie zabiorę to się nią dzielę.

Bierzcie i korzystajcie 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *