Ruch sieciowy dla wielu z nas jest zupełną zagadką. Mniej doświadczeni użytkownicy mogą łatwo monitorować go u siebie programem Sniffnet.
Monitoring ruchu sieciowego to chleb powszedni administratora. Większość adminów korzysta z graficznego narzędzia Wireshark ze względu na bogactwo funkcji i dostępność w repozytoriach większości dystrybucji. Adresatami Wiresharka są przede wszystkim profesjonaliści, więc korzystanie z tego narzędzia wymaga solidnej wiedzy. Nowy projekt Sniffnet kierowany jest zaś do osób mniej doświadczonych, którym dostarczy klarownych wyników w prostym, jednoznacznym i intuicyjnym interfejsie.
Instalacja
Sniffnet jest wieloplatformową aplikacją napisaną w Rust [1]. Jeśli w systemie nie ma środowiska tego języka, to najpierw trzeba je skonfigurować poleceniem z linii 2 w Listingu 1. Proces instalacji wymaga od nas nieco interaktywności i przy znaku zachęty wyświetla kilka komunikatów o stanie. Sniffnet jako taki instalujemy także z terminala menedżerem pakietów dla Rusta o nazwie Cargo (linia 4).
Listing 1: Instalacja Sniffneta
01 ### Instalacja Rusta
02 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
03 ### Konfiguracja Sniffneta przez Rusta
04 $ cargo install sniffnet
05 ### Instalacja Sniffneta z paczki DEB
06 $ sudo apt install sniffnet_Linux.deb
07 ### Instalacja zależności
08 $ sudo apt install libpcap-dev libfontconfig libfontconfig1-dev
Jeśli korzystamy z dystrybucji Linuksa z menedżerem pakietów DEB, możemy za to zainstalować już skompilowany pakiet DEB [2] z GitHuba projektu, co oszczędzi nam wcześniejszej instalacji środowiska Rust (linia 6).
Aby program działał poprawnie, należy też oczywiście spełnić kilka zależności [3] (linia 8), niezależnie od tego, gdzie będzie instalowany. Po wszystkim uruchamiamy program poleceniem sudo sniffnet.
Otwiera się okno startowe z opcjami filtrowania (Rysunek 1). Po prawej, zaznaczając odpowiedni przycisk, można wybrać wersję protokołów internetowego i transportowego. W obu przypadkach domyślnie aktywne są wszystkie dostępne wersje (tzn. IPv4 i IPv6, a także TCP i UDP). Po prawej z brzegu, spośród kilkunastu opcji na liście, wybieramy protokół aplikacji. Również tutaj Sniffnet domyślnie uwzględnia wszystkie protokoły.
W lewej części okna widać interfejsy sieciowe dostępne w naszym systemie – zarówno fizyczne, jak i wirtualne. Sniffnet zawsze aktywuje pierwszy dostępny interfejs fizyczny, dlatego w razie potrzeby musimy przełączyć się na inny. Po wprowadzeniu podstawowych ustawień klikamy przycisk Run!.
Sniffnet pracuje przez chwilę nad zebraniem dostępnych danych, po czym otwiera właściwe okno monitoringu (Rysunek 2). U góry widzimy aktualizowany na bieżąco wykres z liczbą pakietów na sekundę przechodzących przez aktywny interfejs sieciowy. Kolorami rozróżniono pakiety wychodzące i przychodzące. Objętość przesyłanych danych w bajtach na sekundę zobaczymy natomiast po wybraniu drugiego przycisku pod Plotted data (Dane na wykresie). W małej ramce obok wykresu znajdziemy trochę statystyk o połączeniu sieciowym, w tym liczbie filtrowanych pakietów, ich rozmiar w megabajtach oraz liczbę odfiltrowanych pakietów z podziałem na protokoły aplikacji.
Najciekawszym elementem jest chyba ramka Relevant connections (Powiązane połączenia) pod wykresem, która zawiera dokładne dane o poszczególnych połączeniach – adres źródłowy i docelowy, wykorzystywane porty, protokół transportowy i protokół aplikacji, a także liczbę przesłanych pakietów. Przy prawym brzegu okna, w kolumnie Bytes, jest także rozmiar danych przesłanych w ramach danego połączenia.
W oknie monitoringu Sniffnet wyróżnia dane kolorami – połączenia przychodzące są czerwono-brązowe, a wychodzące – niebieskie. Ten widok można zmienić, wybierając przycisk most packets (najwięcej pakietów), co pokaże nam połączenia według pakietów wysłanych lub odebranych, albo most bytes (najwięcej bajtów), gdzie połączenia zostaną posortowane malejąco według objętości przesłanych danych.
Kompleksowo
Na wykresie Sniffnet zawsze pokazuje najnowsze zdarzenia przesyłania danych. Aby śledzić ruch sieciowy w ujęciu czasowym, Sniffnet loguje wszystkie połączenia i aktywność na nich w formie tabeli pod $HOME/sniffnet_report/report.txt. Aby obejrzeć ten plik tekstowy, klikamy Open fill report, a otworzy się w naszym standardowym edytorze tekstu (Rysunek 3). Aplikacja aktualizuje ten dziennik niemal w czasie rzeczywistym.
Jeśli w trakcie analizowania ruchu chcemy coś zmienić w ustawieniach programu, klikamy ikonę strzałki w lewym górnym rogu (Rysunek 2), aby wrócić do głównego okna. Warto pamiętać, że Sniffnet usuwa plik dziennika przy każdym nowym uruchomieniu. W razie potrzeby logi można zapisać po zakończeniu działania aplikacji, czyli przed jej restartem.
Podsumowanie
Kiedy chcemy przyjrzeć się ruchowi na swojej sieci, Sniffnet jest prostym, niewymagającym nauki rozwiązaniem dla użytkowników na każdym poziomie biegłości. Narzędziu brakuje funkcjonalności analizy – jeżeli chcemy namierzyć problemy z siecią, trzeba będzie samodzielnie czytać logi.
W trakcie testów programu znalazłem w nim kilka bugów. Na Kubuntu 22.04 program nie otworzył raportu po kliknięciu przycisku Open full report, ale bez problemu można to obejść, otwierając plik ręcznie. Bardziej poważny problem to usuwanie plików dziennika bez żadnej dostrzegalnej prawidłowości. Ponadto Sniffnet nie tłumaczy adresów IP na nazwy urządzeń – do ciągu 104.26.7.95 trzeba samodzielnie dopasować nazwę urządzenia. Kolejny problem to niemożność kopiowania fragmentów pliku dziennika tworzonego na żywo. Interesujące nas fragmenty trzeba pozyskać po wygenerowaniu całego loga (przy założeniu, że ten nagle nie zniknie po sesji). Z całą pewnością w programie Sniffnet nie brakuje rzeczy do poprawki.
Źródła:
[1] Sniffnet: https://github.com/GyulyVGC/sniffnet
[2] Pakiet DEB: https://github.com/GyulyVGC/sniffnet/releases
[3] Instrukcja instalacji: https://github.com/GyulyVGC/sniffnet#installation