GNU/Linux >> Znalost Linux >  >> Linux

Filtrování tcpdump:Vytváření řádu z chaosu

V mém posledním článku, Odstraňování problémů s tcpdump, jsem se podíval na tcpdump nástroj, několik základních případů použití a prošel si maketou scénáře ze skutečného světa. Teď chci kopat trochu dál. Každý, kdo používá tento nástroj v reálné situaci, si okamžitě všimne, kolik informací (domnívám se, že tomu říkají "verbózní"...) je uživateli prezentováno. Jedna z nejlepších věcí, kterou pro sebe můžete udělat, je vymyslet praktický způsob, jak filtrovat informace, které potřebujete. Pojďme se podívat na několik způsobů, jak to můžete udělat.

Běžné možnosti filtrování

tcpdump nástroj má několik různých vestavěných způsobů filtrování samotného zachycení. To znamená, že můžete zúžit informace, které obdržíte, ještě před začátkem zachycení. To je vysoce preferováno a filtrování po zachycení je mnohem méně zdlouhavý proces. Některé z filtrů předběžného zachycení, které můžete použít, jsou následující:

Filtrování podle IP adresy:

$ sudo tcpdump host x.x.x.x

Chcete-li filtrovat podle rozhraní:

$ sudo tcpdump -i eth0

Chcete-li filtrovat podle zdroje:

$ sudo tcpdump src x.x.x.x

Chcete-li filtrovat podle cíle:

$ sudo tcpdump dst x.x.x.x

Chcete-li filtrovat podle protokolu:

$ sudo tcpdump icmp

Tento seznam nepokrývá všechny dostupné možnosti, ale poskytuje vám dobrý výchozí bod. Dále se podívejme na některé další způsoby, jak můžeme manipulovat se zachycením.

Zápis snímků do souboru (pcap)

Vzhledem k povaze řešení problémů považuji za užitečné zdokumentovat to, co při pořizování snímků vidím, pomocí tcpdump . Naštěstí tcpdump má výstupní formát souboru, který zachycuje všechna data, která vidíme. Tento formát se nazývá zachycení paketů soubor, aka PCAP, a používá se v různých nástrojích, včetně síťových analyzátorů a tcpdump . Zde zapisujeme do souboru PACAP s názvem output_file pomocí -w přepínač.

[root@server ~]# tcpdump -i enp0s8 -c100 -nn -w output_file
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel

Čtení souborů pcap

Soubory PCAP můžete číst pomocí -r přepínač. Jen upozornění – pokud se pokusíte číst soubor PCAP konvenčními prostředky (cat , Vim atd.), obdržíte nečitelné bláboly. Pokud chcete tyto programy použít k zobrazení výstupu, pokračujte ve čtení.

$ tcpdump -r output_file

Zápis tcpdump do .txt

Pokud chcete ke čtení výstupního souboru použít konvenční prostředky, musíte znovu spustit tcpdump , kromě -w vlajka. Níže můžete vidět, že používáme standardní výstup do formátu souboru s názvem output.txt .

[root@server ~]# tcpdump -i enp0s8 -c100 -nn > output.txt
  tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
  100 packets captured
  102 packets received by filter
  0 packets dropped by kernel

Příklad

Než půjdeme dále, chci vysvětlit scénář, který jsem nastavil pro zbytek tohoto článku. Ve stejné síti běží tři virtuální počítače. Klient 1 i klient 2 budou pingovat server nonstop. Zaznamenáme provoz ICMP na rozhraní enp0s8 na virtuálním počítači serveru a poté filtrujte pakety z každého klientského počítače. Uvědomuji si, že se jedná o poměrně jednoduché cvičení, ale principy lze aplikovat na složitější prostředí reálného světa.

  • Server – 172.25.1.5
  • Klient 1 – 172.25.1.4
  • Klient 2 – 172.25.1.7

Dále se podíváme na dva příkazy používané ke generování našich zachycení:

  1. Zápis do souboru PCAP - tcpdump -i enp0s8 -c100 -nn -w output_file
  2. Zápis do souboru TXT - tcpdump -i enp0s8 -c100 -nn > output.txt

Jediným výrazným rozdílem je výstupní formát. Vidíte, že jsme zachytili provoz na rozhraní enp0s8 a že jsme omezili zachycení na 100 paketů bez názvu nebo rozlišení portu. Nyní vyfiltrujme náš soubor pouze na provoz z klienta 1.

K tomu používáme jeden ze dvou příkazových řetězců (v závislosti na formátu souboru našeho zachycení):

Filtrovat výstup PCAP - tcpdump -r output_file | grep -i 172.25.1.4

[root@server ~]# tcpdump -r output_file | grep -i 172.25.1.4
reading from file output_file, link-type EN10MB (Ethernet)
22:01:14.947643 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 109, length 64
22:01:14.947704 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 109, length 64
22:01:16.023097 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 110, length 64
22:01:16.023153 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 110, length 64
22:01:17.081338 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 111, length 64
22:01:17.081386 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 111, length 64
22:01:18.103740 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 112, length 64
22:01:18.103784 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 112, length 64
22:01:19.128568 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 113, length 64
22:01:19.128646 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 113, length 64
22:01:20.129531 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 114, length 64
22:01:20.129577 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 114, length 64
22:01:21.175573 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 115, length 64
22:01:21.175631 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 115, length 64
22:01:22.199852 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 116, length 64
22:01:22.199899 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 116, length 64
22:01:23.231032 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 117, length 64
22:01:23.231083 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 117, length 64
22:01:24.247585 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 118, length 64
22:01:24.247660 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 118, length 64
22:01:25.248875 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 119, length 64
22:01:25.248937 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 119, length 64
22:01:26.295889 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 120, length 64
22:01:26.295946 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 120, length 64
22:01:27.255274 ARP, Request who-has server.example.com tell 172.25.1.4, length 46

*Edited for length*

nebo

Filtrovat výstup TXT - cat output.txt | grep -i 172.25.1.4

[root@server ~]# cat output.txt | grep -i 172.25.1.4
12:03:56.653494 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 342, length 64
12:03:56.653534 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 342, length 64
12:03:57.674036 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 343, length 64
12:03:57.674089 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 343, length 64
12:03:58.701049 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 344, length 64
12:03:58.701107 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 344, length 64
12:03:59.721996 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 345, length 64
12:03:59.722134 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 345, length 64
12:04:00.746748 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 346, length 64
12:04:00.746805 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 346, length 64
12:04:01.774055 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 347, length 64
12:04:01.774130 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 347, length 64
12:04:02.793968 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 348, length 64
12:04:02.794012 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 348, length 64
12:04:03.846026 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 349, length 64
12:04:03.846082 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 349, length 64
12:04:04.918800 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 350, length 64
12:04:04.918850 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 350, length 64
12:04:05.930499 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 351, length 64
12:04:05.930543 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 351, length 64
12:04:06.954222 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 352, length 64
12:04:06.954269 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 352, length 64
12:04:07.990890 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 353, length 64
12:04:07.990937 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 353, length 64
12:04:09.002781 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 354, length 64
12:04:09.002842 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 354, length 64
12:04:10.032385 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 355, length 64
12:04:10.032451 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 355, length 64
12:04:11.055533 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 356, length 64
12:04:11.055583 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 356, length 64
12:04:12.074288 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 357, length 64

*Edited for length*

Abychom zkontrolovali provoz do/z klienta 2, potřebujeme pouze změnit IP adresu v grep dotaz. Tato metoda funguje pro názvy hostitelů, čísla portů a všechna další klíčová slova, která najdete v zachyceném souboru. Tento konkrétní příklad ukazuje sílu předběžného a následného filtrování. K předběžnému filtrování dochází, když zachytíme pouze přes určité rozhraní, a k následnému filtrování, když použijeme grep dotaz na zachycený soubor.

Stánek s sebou

Doufám, že sdělím, že tcpdump je neuvěřitelně mocný nástroj. Výkonné technologie jsou však často plné informací, které nemusí odpovídat vašim konkrétním potřebám. S trochou přemýšlení a plánování můžete své zachycení předfiltrovat, abyste zúžili množství zachyceného provozu, a poté použít chytrý grep nebo awk dotaz na výstupní soubor, abyste rychle našli interakce s provozem, které hledáte. Tyto strategie, pokud jsou správně aplikovány, mohou exponenciálně urychlit úsilí o odstraňování problémů. Nyní zbývá doufat, že to v dohledné době nebudete muset zavádět do praxe.

[ Naučte se, jak přidat automatizaci do sady nástrojů pro vytváření sítí pomocí této bezplatné elektronické knihy. ]


Linux
  1. Jak zablokovat uživatele bez oprávnění root ve vytváření záznamu crontab v Linuxu

  2. Vyloučení adresáře při vytváření souboru .tar.gz

  3. zkopírujte soubor z Windows do Linuxu

  1. Průvodce pro začátečníky vytvářením přesměrování v souboru .htaccess

  2. Pořadí přesměrování?

  3. xauth nevytváří soubor .Xauthority

  1. Nahradit řádky odpovídající vzoru řádky z jiného souboru v pořadí?

  2. Jak vykopat soubor z Awk?

  3. Awk z různých řádků?