
NETASQ & TCPDUMP
TCPDUMP to program o którym każdym admin słyszeć musiał choć nie każdy miał okazję go wykorzystać w praktyce. TCPDUMP to program należący do kategorii tzw. snifferów sieciowych czyli aplikacji których zadaniem jest przechwytywanie i gromadzenie pakietów przepływających w sieci komputerowej. Program potrafi zbierać informacje na wielu warstwach modelu OSI przez co można go traktować jako najważniejsze narzędzie do analizy i rozwiązywania problemów pojawiających się w sieciach komputerowych. Zupełnie inna kwestia to interpretacja zebranych danych, tutaj liczy się tylko i wyłącznie wiedza interpretującego. W artykule pokażę sposób wykorzystania kliku opcji programu oraz przykładowa analizę częstego problemu (problem dotyczy sytuacji gdy po złożeniu tunelu mamy działające pingi do zasobu ale nie możemy dostać się na http lub zdalny pulpit komputera w sieci LAN:).
Tcpdump możemy uruchomić następującymi opcjami:
absolutnie podstawową kwestie jest wskazanie interfejsu na na którym chcemy zbierać pakiety, dedykowana temu jest opcja -i, jeżeli nie znamy nazw interfejsów możemy skorzystać z polecenia ifconfig:
w przykładzie np. interfejs zewnętrzny to eth0, jeżeli chcemy przechwytywać wszystkie pakiety pojawiające sie na tym interfejsie to wydajemy polecenie
tcpdump -i eth0
zawartość pakietu możemy np. prezentować w hex:
tcpdump -i eth1 -x
lub też dodatkowo a ASCII:
tcpdump -i eth1 -X
tcpdump -i eth1 not port 23
– przechwytujemy cały ruch ruch na interfejsie eth1 oprócz pakietów aplikacji telnet
tcpdump -i eth1 udp or port http
– przechwytujemy cały ruch UDP oraz tcp/HTTP na interfejsie eth1
tcpdump -i eth1 tcp and port 53
– przechwytujemy na interfejsie tylko DNS TCP (pakiety wymiany stref pomiędzy serwerami DNS)
tcpdump -s0 -i eth0 esp or port isakmp
– przechwytujemy na interfejsie eth0 ruch ESP oraz pakiety negocjacji połączenia VPN
standardowo efekt działania programu jest wysyłany na konsolę, jednak w wielu sytuacjach konieczne jest zapamiętanie pakietów w celu późniejszej analizy. Chociażby musimy wysłać zrzut do Wsparcia Technicznego.
Opcja -w pozwala na zapisanie efektu do pliku. Tcpdump pozwala na eksportowanie przechwytywanych pakietów bezpośrednio do plik zgodnego z programem WinShark:
tcpdump -i eth1 -X -w /tmp/eth1.pcap
możemy wymusić aby program tworzył pliki o określonej maksymalnej wielkości np. po 10MB (opcja -C) lub też określić liczbę przechwytywanych pakietów (-c liczba):
tcpdump -i eth1 -C10 -w /tmp/eth1.pcap
w praktyce zbieranie całego ruchu na interfejsie nie zawsze potrzebne, jeżeli analizujemy ruch związany z konkretnym hostem po prostu możemy podać o jakiego hosta nam chodzi:
tcpdump -i eth1 -w /tmp/eth1.pcap host 192.168.99.227
lub
tcpdump -i eth1 -w /tmp/eth1.pcap src 192.168.99.227
– jeżeli chcemy zapisać pakiety wychodzące od hosta, lub
tcpdump -i eth1 -w /tmp/eth1.pcap src 192.168.99.227 or dst 192.168.99.227
– jeżeli chcemy przechwycić pakiety zarówno wychodzące od hosta jak i do niego przychodzące
tcpdump -s0 -i eth1 -w /tmp/eth1.pcap src 192.168.99.227 or dst 192.168.99.227
– jeżeli chcemy przechwycić całe pakiety zarówno wychodzące od hosta jak i do niego przychodzące
jeżeli chcemy zapisywać pakiety z kilku interfejsów jednocześnie to wydajemy polecenie:
tcpdump -s0 -i eth0 -w /tmp/eth0.pcap & tcpdump -s0 -i eth1 -w /tmp/eth1.pcap & tcpdump -s0 -i ng4 -w /tmp/ng4.pcap &
żeby zatrzymać zapisywanie pakietów wydajemy polecenie: killall tcpdump
Przedstawiłem tylko niewielka część możliwości filtrowania na jakie powalają opcje programu tcpdump
. Celem artykułu nie jest stworzenie kolejnego manuala dla tcpdumpa (takich opisów w sieci są dziesiatki) a jedynie o zasygnalizowanie możliwości użycia tego narzędzia przy administrowaniu NETASQ-kiem.
Problem z PPTP
Złożenie tunelu odbywa się bez problemu, możemy pingować hosta 192.168.200.2 ale gdy chcemy otworzyć na nim stronę po http transmisja „wisi”.
Poleceniem ifconfig | more
wyświetlamy stan interfejsów:
Wirtualny interfejs dla PPTP (ng4) ma ustawiony MTU (maksymalna wielkość pakietu transmitowana bez fragmentacji) na 1396 bajtów. Czyli MSS (maksymalny rozmiar segmentu) dla pakietu TCP nie może być większy od 1358 bajtów. MSS to maksymalna liczba bajtów w polu danych segmentu, którą host jest w stanie odebrać, przy założeniu, że nagłówki IP oraz TCP wynoszą po 20 bajtów. Wartość ta obliczana jest w następujący sposób:
MSS = MTU – 20 – 20
Serwer http jest podłączony do podsieci na interfejsie nr 2 NETASQ-a czyli na interfejsie eth1 (U70). Z poziomu NETASQ-a (konsola, ssh) wydajemy polecenie:
tcpdump -s0 -i eth1 -w /tmp/eth1.pcap
nawiązujemy połączenie PPTP a następnie otwieramy przeglądarkę i próbujemy dokonać połączenia http://192.168.200.2
Kombinacją CTRL+C kończymy działanie polecenia tcpdump. Łączymy sie przez WinSCP i pobieramy na dysk lokalny plik zrzutu /tmp/eth1.pcap. Otwieramy plik w WinShark-u:
Jak możemy zauważyć uzgodnione zostało połączenie (wiersze 126-130) z MSS=1360 bajtów czyli MTU=1400 bajtów. Widzimy również, że przesłany datagram IP (o wielkości 1400 bajtów – wiersz 135) ma ustawioną flagę DF (brak zgody na fragmentację). Innymi słowy taka transmisja nie będzie mogła być skutecznie przeprowadzona ponieważ PMTU dla całej trasy wynosi 1396 batów (MTU interfejsu ng4). PMTU to minimalna wartość MTU na trasie.
Musimy zmniejszyć MTU połączenia pomiędzy klientem a serwerem http. Możemy to zrobić poprzez ustawienia ograniczenia MSS dla profilu 01 (outgoing):
ustawienie takie jednak zmniejsza MTU/MSS dla całego ruchu TCP co może niekorzystnie wpłynąć na wydajność sieci. Lepszym rozwiązaniem jest ustawienia MSS na nie używanym dotychczas profilu IPS a następnie podpięcie tego profilu pod regułę dopuszczającą ruch dla klientów PPTP.
Gdy wykonamy modyfikację MSS powtórnie przechwyćmy pakiety za pomocą tcpdump-a i obejrzyjmy je w WinShark-u.:
Zgodnie z założeniem zostało wynegocjonowane połączenie TCP (wiersze 40-42) z MSS=1356 bajtów. MTU wynosi 1396 bajtów zatem pakiety mogą być transmitowane w całości. Jak widać (wiersze 43-58) transmisja odbywa się bez przeszkód (oczywiście w przeglądrce mamy również wyświetlona zawartość otwieranej strony).

NETASQ zaleca aby w przypadku gdy ograniczamy MSS dla połączeń realizowanych przez VPN (IPSEC, PPTP) ustawiać MSS na wartość 1300.
- Paweł Grzelewski