Przechwytywanie pakietów sieciowych przy pomocy tcpdump już przy starcie systemu

Uruchamianie przechwytywania pakietów sieciowych przy pomocy tcpdump już na etapie ładowania systemu może być nieocenione w diagnozowaniu problemów związanych z siecią oraz bezpieczeństwem. Wczesne przechwycenie ruchu pozwala na rejestrowanie pakietów zanim jakiekolwiek usługi użytkownika czy aplikacje zostaną uruchomione i jeszcze zanim ktokolwiek zaloguje się do systemu, jakikolwiek użytkownik co jest szczególnie istotne w sytuacjach, gdy […]

Lut 24, 2025 - 11:39
 0
Przechwytywanie pakietów sieciowych przy pomocy tcpdump już przy starcie systemu

Uruchamianie przechwytywania pakietów sieciowych przy pomocy tcpdump już na etapie ładowania systemu może być nieocenione w diagnozowaniu problemów związanych z siecią oraz bezpieczeństwem.

Wczesne przechwycenie ruchu pozwala na rejestrowanie pakietów zanim jakiekolwiek usługi użytkownika czy aplikacje zostaną uruchomione i jeszcze zanim ktokolwiek zaloguje się do systemu, jakikolwiek użytkownik co jest szczególnie istotne w sytuacjach, gdy podejrzewasz problemy z konfiguracją sieci lub występowanie złośliwej aktywności, która może pojawić się na bardzo wczesnym etapie działania systemu, a po zalogowaniu się będzie dodatkowy szum informacyjny. Dzięki temu możesz uchwycić pełne dane, takie jak konfiguracja DHCP, zapytania DNS czy ruch inicjowany przez system w trakcie bootowania.

Takie rozwiązanie sprawdza się także w scenariuszach, gdzie system działa w środowiskach o wysokich wymaganiach bezpieczeństwa, takich jak serwery czy urządzenia IoT, gdzie każde nieautoryzowane połączenie może być potencjalnym zagrożeniem. Logowanie ruchu od startu systemu pozwala na pełną widoczność w zakresie wczesnych pakietów przychodzących i wychodzących, co może pomóc w identyfikacji potencjalnych ataków, błędów konfiguracji lub anomalii w ruchu sieciowym.

Dzięki temu, tcpdump staje się narzędziem nie tylko do diagnostyki, ale również do wczesnego wykrywania zagrożeń. To oczywiście w dużym uproszczeniu i samo włączenie tcpdump’a nie wystarczy, ale jest to kolejna cegiełka, którą dokładamy do naszego bezpieczeństwa.

W tym artykule na przykładzie systemu CentOS Stream 9 pokażę jak przygotować taki skrypt, który po uruchomieniu systemu zacznie zczytywać nam logi aktywności.

Na początek utworzymy plik startowy do systemd:

/etc/systemd/system/boot-tcpdump.service

i wrzucimy do niego zawartość poniższą:

[Unit]

Description=tcpdump

After=network.target

Before=remote-fs-pre.target

[Service]

Type=simple

ExecStart=/usr/sbin/tcpdump -s0 -n -i any -w /root/tcpdump.pcap

Restart=on-abort

[Install]

WantedBy=multi-user.target

Kolejno musimy włączyć skrypt do startu:

systemctl enable boot-tcpdump.service

Omówienie wybranych sekcji:

[Unit]

Description=tcpdump

Ta linia opisuje usługę, podając jej nazwę lub cel. W tym przypadku wskazuje, że jest to usługa przechwytywania pakietów przy użyciu tcpdump.

After=network.target

Określa, że usługa powinna zostać uruchomiona po aktywacji network.target, co oznacza, że usługa poczeka, aż podstawowe elementy sieci będą dostępne. Jest to o tyle istotne, że gdybyśmy uruchomili ją przed startem sieci, mogła by się nie uruchomić lub wyrzucić błąd.

Before=remote-fs-pre.target

Wskazuje, że usługa musi zostać uruchomiona przed remote-fs-pre.target, co obejmuje montowanie zdalnych systemów plików. Dzięki temu tcpdump przechwytuje pakiety jeszcze przed rozpoczęciem komunikacji z zewnętrznymi systemami.

W sekcji [Service] większość jest pewnie jasne, omówię więc sam start tcpdumpa z poszczególnymi przełącznikami.

ExecStart=/usr/sbin/tcpdump -s0 -n -i any -w /root/tcpdump.pcap

Ta linia definiuje polecenie, które ma zostać wykonane po uruchomieniu usługi:

-s0: Ustawia rozmiar przechwytywanego pakietu na pełen rozmiar (domyślnie jest to ograniczone do 96 bajtów).

-n: Wyłącza rozwiązywanie nazw hostów, co przyspiesza proces i zmniejsza liczbę dodatkowych zapytań DNS.

-i any: Przechwytuje pakiety na wszystkich dostępnych interfejsach sieciowych.

-w /root/tcpdump.pcap: Zapisuje przechwycone pakiety do pliku w formacie .pcap w katalogu /roota.

Można w tym miejscu oczywiście zmienić ustawienia na dowolne inne. Na przykład gdybyśmy chcieli przechwytywać pakiety tylko dla komunikacji email na portach 25, 587, 465 to konfiguracja mogłaby wyglądać tak:

/usr/sbin/tcpdump -s0 -n -i any 'port 25 or port 587 or port 465′ -w /root/email-tcpdump.pcap

A gdybyśmy chcieli monitorować tylko ruch http I https to mogłoby to wyglądać tak:

/usr/sbin/tcpdump -s0 -n -i any 'port 80 or port 443′ -w /root/http-tcpdump.pcap

Pamiętajmy, że każdorazowo zmiany należy przeładowywać poprzez:

systemctl daemon-reload

Pozostaje zatem reboot systemu:

reboot

Po restarcie od razu w katalogu root pojawia się plik:

boot.pcap

zawierający przechwycone informacje.

Zamknięcie procesu

Kiedy chcemy zamknąć proces wystarczy wydać komendę:

pkill tcpdump

Przeglądanie logów

Na pewno sporo osób po zalogowaniu paczek będzie zastanawiała się jak przeglądać taki plik z wygenerowanym strumieniem danych. Plik bowiem wygląda tak:

Jest to w pewien sposób niezrozumiałe na pierwszy rzut oka, ale z pomocą przychodzą przeglądarki tego typu logów, które upraszczają cały proces.

Jednym z takich narzędzi może być tshark – konsolowa wersja wiresharka.

dnf –y install wireshark-cli

Po instalacji odpowiedniego pakietu zabieramy się za przeglądanie naszego pliku .pcap.

tshark -r /root/boot.pcap

Wygląda nieco lepiej prawda? Ale nie wyczerpuje tematu. Możemy tu filtrować zapytania poprzez odpowiednie przełączniki. Na przykład gdybyśmy chcieli zobaczyć tylko połączenia po protokole ntp.

tshark -r /root/boot.pcap -Y ‘ntp’

Możemy też dokonać konwersji całego pliku I przeglądać go w innym narzędziu lub w takiej postaci już można eksportować go do centralnego logowania.

tshark -r boot.pcap -T text > log-tekstowy.txt