Netzwerk-Monitoring bzw. Man-in-the-Middle auf dem Raspberry Pi einrichten
Für eine Aufgabe, bei der es darum geht, Netzwerk-Verkehr aufzuzeichnen wir ein Raspberry Pi benötigt, der als Man-in-the-Middle eingerichtet ist. Ein Man-in-the-Middle ist eine Netzwerk-Einrichtung, die in der Lage ist Netzwerkverkehr abzuhören, aufzuzeichnen und zu manipulieren. Damit das gelingt, wird das entsprechende Gerät in eine Netzwerk-Verbindung bzw. zwischen zwei Endpunkten gesetzt.
Aufgabe
- Für diesen Zweck soll der Raspberry Pi mit einem WLAN-Adapter ausgestattet werden, der einen Monitor-Modus hat.
- Der WLAN-Adapter soll als WLAN-Zugangspunkt dienen.
- Der Ethernet-Port soll als Übergang ins leitungsgebundene Netz dienen.
- Zwischen dem WLAN-Adapter und dem vorhandenen Ethernet-Port soll eine Netzwerk-Brücke konfiguriert werden.
Lösung: Raspberry Pi als Netzwerk-Brücke (Bridge-Modus)
Im Prinzip könnte man hergehen und den Raspberry Pi einfach zum WLAN-Access-Point machen. Allerdings macht das nur dann Sinn, wenn man ein größeres Netzwerk mit verschiedenen IP-Adressbereichen betreibt. In diesem Fall reicht es aus, wenn der Raspberry Pi als WLAN-to-LAN-Bridge läuft. Das macht die Sache einfacher, als wenn man ihn zum Access-Point konfigurieren müsste.
Der Betrieb als Netzwerk-Brücke setzt natürlich voraus, dass sich in dem lokalen Netzwerk ein DHCP-Server und Standard-Gateway betrieben werden.
Damit diese Lösung gelingt sollte man die Distribution Raspbian verwenden und sicherstellen, dass der WLAN-Adapter mit dem Raspberry Pi funktioniert. Der WLAN-Adapter sollte außerdem den Monitor-Modus beherrschen, was nicht alle können. Hiermit kann man herausfinden, ob der WLAN-Adapter überhaupt erkannt wurde:
lsusb
Wenn hier etwas von "wireless" oder "802.11" steht, dann hat man schon fast gewonnen.
Ob der WLAN-Adapter den Monitor-Modus beherrscht, findet man folgendermaßen heraus:
iw list | grep monitor
Wenn dieser Befehl Zeilen mit „monitor“ auswirft, dann ist alles im grünen Bereich und der WLAN-Adapter beherrscht den Monitor-Modus. Wenn nicht, dann sollte man sich einen anderen WLAN-Adapter besorgen.
Hinweis: Gegebenenfalls muss "iw" nachinstalliert werden:
sudo apt-get install iw
Bevor man anfängt zu installieren und zu konfigurieren empfiehlt es sich zuerst ein Update der bereits installierten Software zu machen:
sudo apt-get update && sudo apt-get upgrade
Hat man sichergestellt, dass der WLAN-Adapter geeignet und ein Software-Update vorgenommen ist, geht es an die Installation der notwendigen Software. Hier sind im wesentlichen „hostapd“ und „bridge-utils“ zu erwähnen. Das eine für die WLAN-Access-Point-Funktion und das andere für die Netzwerk-Brücke:
sudo apt-get install hostapd bridge-utils
Ist die Software erfolgreich installiert muss eine Konfigurationsdatei für "hostapd" erstellt werden:
sudo nano /etc/hostapd/hostapd.conf
Dort trägt man folgende Zeilen als Minimal-Konfiguration ein:
# Minimal-Konfiguration interface=wlan0 bridge=br0 driver=nl80211 country_code=DE ssid=RasPiBridge hw_mode=g channel=1 ieee80211n=1 wmm_enabled=1
Grundsätzlich sollte man ein WLAN immer verschlüsselt betreiben.
# Verschlüsselung wpa=2 wpa_passphrase={WLANPASSWORT} wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
Anschließend speichern und schließen: Strg+O, Return, Strg+X.
Jetzt geht es darum, die Netzwerk-Interfaces und die Brücke zu konfigurieren. Dazu öffnet man die Datei mit den Netzwerk-Einstellungen:
sudo nano /etc/network/interfaces
Bei der folgenden IP-Konfiguration muss man berücksichtigen, dass die Angaben von IP-Adresse usw. hier beispielhaft eingesetzt sind und an das jeweilige Netzwerk angepasst werden müssen. Es wäre auch denkbar, dass „eth0“ und „br0“ ihre IP-Konfiguration per DHCP bekommen. In diesem Beispiel wurden feste IP-Adressen vergeben. Das vereinfacht die spätere Verbindungsaufnahme per SSH und das Netzwerk-Monitoring.
# Localhost auto lo iface lo inet loopback
# Ethernet iface eth0 inet static address 192.168.168.1 netmask 255.255.255.0 gateway 192.168.168.8 dns-servers 192.168.168.8
# WLAN allow-hotplug wlan0 iface wlan0 inet manual
# Bridge auto br0 iface br0 inet static address 192.168.168.2 netmask 255.255.255.0 gateway 192.168.168.8 dns-servers 192.168.168.8 bridge-ports eth0 wlan0 bridge_fd 0 bridge_stp no
# Default iface default inet dhcp
Anschließend speichern und schließen: Strg+O, Return, Strg+X.
Dann startet man „hostapd“ testweise mit der erstellten Konfigurationsdatei:
sudo hostapd -dd /etc/hostapd/hostapd.conf
Wenn „hostapd“ mit Fehlermeldungen abbricht, dann hat man einen Fehler gemacht. Die Fehler sind allerdings äußerst vielfältig, weshalb nicht alle erwähnt werden können. In der Regel fehlt der Treiber für den WLAN-Adapter oder er beherrscht den Monitor-Modus nicht. Was auch ein Problem sein kann, wenn man eine andere Distribution als „Raspbian“ verwendet. Auch ein „Minibian“ oder andere abgespeckte Varianten können Probleme machen.
Wenn alles in Ordnung ist, dann läuft das Programm durch und wird nicht beendet. Das heißt, „hostapd“ kehrt nicht zur Befehlseingabe zurück. Mit Strg+C kann man das Programm abbrechen.
Da wir „hostapd“ nicht händisch, sondern automatisch beim Booten und im Hintergrund starten wollen, müssen wir noch eine weitere Konfiguration vornehmen. Dazu müssen wir eine Konfigurationsdatei öffnen und den Start als Daemon (Hintergrund-Start) eintragen.
sudo nano /etc/default/hostapd
Hier trägt man folgende Zeilen ein:
DAEMON_CONF="/etc/hostapd/hostapd.conf" RUN_DAEMON=yes
Anschließend speichern und schließen: Strg+O, Return, Strg+X.
Um den Raspberry Pi als Man-in-the-Middle zu testen muss man ihn nur noch neu starten:
sudo reboot
Nach dem Neustart müsste es möglich sein, dass die WLAN-Clients den Raspberry Pi als Access Point nutzen und so Zugang zum Netzwerk bekommen. Wenn die WLAN-Verbindung möglich ist, dann kann man den Raspberry Pi als Man-in-the-Middle verwenden.