itoutline.me

 

Raspberry Pi i podsłuchiwanie ruchu

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 tsharkale 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
auto lo
iface lo inet loopback

#Interfejs WAN
auto eth0
iface eth0 inet static
      address xxx.xxx.xxx.xxx
      netmask 255.255.255.0
      gateway xxx.xxx.xxx.xxx

#Interfejs LAN
auto eth1
iface eth1 inet static
      address 192.168.11.1
      network 255.255.255.0
      gateway 192.168.11.1

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
        wpa-ssid "SID_WIFI"
        wpa-psk "Haslo_WIFI"

iface default inet dhcp
  • 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
interface=eth1
dhcp-range=192.168.11.140,192.168.11.150,255.255.255.0,12h
log-queries
log-dhcp

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 (Instalacja sudo apt-get install tcpdump). Przechwytywanie całych pakietów na interfejsie eth0 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 formacie wireshark_eth1_20140911192644_X8aumU. Bez problemu można je pobrać i analizować w innym miejscu.

      scp pi@raspberrypi:/tmp/wireshark_eth1_20140911192644_X8aumU zrzut.pcap
    

Comments