Czasami zdarza się, że istnieje potrzeba sprawdzenia co się dzieje w dłuższym okresie czasu na danym urządzeniu jeśli chodzi o ruch sieciowy jaki przez nie przechodzi. Rpi nadaje się do tego całkiem nieźle. Do podsłuchania i zapisania ruchu wystarczyłby w zupełności tcpdump
lub tshark
ale zdecydowałem, że uruchomię wiresharka na Rpi i będę co jakiś czas podglądał pakiety. Stąd też instalacja serwera VNC w postaci tightvncserver
.
Architektura
W moim wypadku wyglądało to tak, że modem DSL (który nie przydzielał adresów IP) miał być podłączony przez router do badanego urządzenia - Device-A. Pech chciał, że nie miałem pod ręka wolnego routera a testy trzeba było zacząć już. W związku z czym Rpi pełniło jednocześnie funkcje serwera DHCP, routera, sniffera i sieciowej konsoli ponieważ Device-A miał port szeregowy. Dodatkowo dla wygody, Rpi było podłączone do sieci Wifi z której mogłem sobie podglądać co tam się “wyrabia” ;)
Oprogramowanie
sudo apt-get update
sudo apt-get install dnsmasq wireshark picocom tightvncserver
- dnsmasq - serwer DHCP/TFTP i DNS proxy
- wireshark - podsłuchiwanie ruchu
- picocom - konsola do połączeń szergowych
- tightvncserver - serwer VNC
Konfiguracja Rpi
- Konfiguracja
/etc/network/interfaces
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Włączenie przekazywania ruchu IPV4 pomiędzy interfejsami sieciowymi
sysctl -w net.ipv4.ip_forward=1`
Włączenie “maskarady”
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Gdybyśmy chcieli, żeby zmiana przetrwała restart Rpi, zapisujemy tablice
sudo bash -c 'iptables-save > /etc/network/iptables'
Dodanie do /etc/network/interfaces
linijki zaczytującej tablice
sudo bash -c 'echo "pre-up iptables-restore < /etc/network/iptables" >> /etc/network/interfaces'
Konfiguracja tightvncserver
Konfiguracja hasła do VNC
tightvncserver
Uruchomienie serwera VNC
vncserver :0 -geometry 1200x800 -depth 16
Konfiguracja wireshark
Nadanie użytkownikowi “pi” uprawnień do przechwytywania ruchu (oczywiście można uruchomić wiresharka na koncie root ale wyrabianie dobrych nawyków zawsze w cenie)
sudo dpkg-reconfigure wireshark-common
W oknie, które się pojawi wybieramy “Yes” a następnie dodajemy “pi” do grupy “wireshark”
sudo usermod -a -G wireshark pi
Żeby powyższa operacja stała się aktywna konieczne jest ponowne zalogowanie się (ewentualnie restart Rpi)
Konfiguracja dnsmasq
/etc/dnsmasq.conf
1 2 3 4 |
|
dnsmasq
jest naprawdę ok, w sumie dwie pierwsze linijki wystarczają do skonfigurowania go jako serwer DHCP. interface=eth1
to interfejs na którym nasłuchuje serwer DHCP. log-queries
i log-dhcp
spowodują, że w /var/log/syslog
pojawią się zapytania DNS i DHCP wysyłane przez klientów. Może to być przydatne gdyby były jakieś kłopoty.
Podsumowując
Należy uważać na ilość zbieranych danych, jeśli wiadomo, że interesuje nas ruch tylko z udziałem konkretnego adresu IP można dodać filtr na wejściu (Capture Filter):
host 192.168.0.1
. Specyficznego portu:port 80
. Kombinacja:host 192.168.0.1 and port 80
.Instalacja wiresharka i tightvncserver może być czasami nadmiarowa i spokojnie wystarczy
tcpdump
(Instalacjasudo apt-get install tcpdump
). Przechwytywanie całych pakietów na interfejsieeth0
do pliku zrzut.pcap o maksymalnym rozmiarze 100MB, powstanie 10 takich plików i będą po kolei nadpisywane po przekroczeniu 1GB w sumie:sudo tcpdump -i eth0 -C100M -W10 -s0 -w /home/pi/zrzut.pcap &
Trzeba pamiętać o uruchomieniu tcpdump
w tle &
dzięki temu rozłaczenie sesji ssh nie zakończy działania programu. Po ponownym zalogowaniu, kończymy działanie programu:
killall tcpdump
Nic gorszego niż “zawieszenie się” Rpi podczas sesji trwającej kilka dni. Żeby nie było “jak krew w piach”, dla bezpieczeństwa można co jakiś czas pobierać przechwytywany ruch za pomocą np.
scp
. Wireshark zapisuje tymczasowe pliki w katalogu/tmp
pod nazwą w takim formaciewireshark_eth1_20140911192644_X8aumU
. Bez problemu można je pobrać i analizować w innym miejscu.scp pi@raspberrypi:/tmp/wireshark_eth1_20140911192644_X8aumU zrzut.pcap