c't 22/2017
S. 144
Praxis
Raspi als digitales Flugblatt
Aufmacherbild

In die Freiheit entlassen

Digitales Flugblatt: Raspberry Pi mit Batterie als anonymer WLAN-Hotspot und Webserver

Dissidenten leben gefährlich: Die Nazis ermordeten die Geschwister Scholl dafür, dass sie mit Flugblättern zum Widerstand aufgerufen hatten. Heute nutzen Widerständler das Internet, doch Regimes greifen ungeniert in die Meinungsfreiheit ein und blockieren diesen Verbreitungsweg. Mit einem batteriebetriebenen Raspi haben wir eine digitale Variante des Flugblatts geschaffen, das versteckt ausgelegt per WLAN oder Tor unzensiert Informationen unter das Volk bringt.

Flugblätter sind in Zeiten von Internet und Smartphones eine ziemlich archaische Methode, gegen autoritäre Regime zu protestieren oder unliebsame Informationen über Autokraten ins öffentliche Licht zu rücken. Und eine gefährliche noch dazu: Vor fast genau 75 Jahren ermordeten das Nazi-Regime die Geschwister Scholl dafür, dass sie mit Flugblättern zum Widerstand aufgerufen hatten. Die Studenten wurden beim Verteilen erwischt. Heute nutzen Widerstandsgruppen das Internet und veröffentlichen ihre Informationen auf ausländischen Servern – die von den Regimes im Handumdrehen blockiert werden.

Um die Bevölkerung vor Ort trotz Internet-Zensur informieren zu können, haben wir ein digitales Flugblatt auf Basis des Raspberry Pi Zero W entwickelt. Der Mini-Rechner wird von einer Batterie gespeist und lässt sich leicht an belebten Plätzen in alltäglichen Gegenständen wie Blumenkübeln, Bäumen oder anderen Gegenständen verstecken. Wir haben die Kosten bewusst niedrig gehalten, damit niemand aus finanziellen Gründen eine Festnahme riskieren muss, wenn er das Flugblatt wieder einsammelt, weil ihm der Strom ausgegangen ist.

Den Raspi Zero W bekommen Sie in Deutschland bei buyzero.de für knapp 11 Euro. Für den Batteriebetrieb benötigen Sie außerdem einen Spannungswandler, den Sie für 5,50 Euro gleich mitbestellen können. Sie bekommen letzteren aber auch bei diversen eBay-Händlern, zum Teil kostet er dort nicht einmal einen Euro. Durch den Wandler haben Sie eine große Auswahl an Batterien, angefangen von vier Knopfzellen, die allerdings nur wenige Stunden durchhalten, bis hin zu Monozellen, die für einen Monat Betrieb ausreichen.

Der Zusammenbau des Flugblatts ist trivial: Ein Spannungswandler zwischen Batterie und Raspi sorgt dafür, dass die Batterie bis fast zum letzten Elektron entladen wird.

Der Zusammenbau ist leicht: Zunächst versorgen Sie den Spannungswandler provisorisch mit Strom, schließen ein Voltmeter am Ausgang an und stellen die Ausgangsspannung über das Poti auf 5,1 bis 5,2 Volt ein. Anschließend kappen Sie die Verbindungen und löten den Spannungswandler direkt an den GPIO-Anschluss des Raspi Zero an. Der Pluspol des Spannungswandler-Ausgangs gehört an Pin 4 des Raspi und der Minuspol an Pin 6.

Gut versorgt

Welche Batterie Sie verwenden, hängt nicht zuletzt von der Art des Verstecks ab – Geocaching-Erfahrungen sind hier eindeutig von Vorteil. Um das Flugblatt in einem Blumentopf deponieren zu können, haben wir versuchsweise zehn Monozellen mit einer Kapazität von je 18 Amperestunden zusammengelötet – somit steht bei einer Zellenspannung von 1,5 Volt eine Gesamtenergie von 270 Wattstunden zur Verfügung.

Die Leistungsaufnahme des Raspi Zero W, inklusive aller nachfolgend beschriebenen Stromsparmaßnahmen, liegt bei 0,5 Watt, sodass der Ring aus zehn Monozellen theoretisch 540 Stunden oder 22,5 Tage durchhält. Das lässt sich durch noch mehr Monozellen noch toppen: Der Spannungswandler von buyzero.de verträgt bis zu 17 in Reihe geschaltete Zellen, womit theoretisch genug Energie für 38 Tage vorhanden wäre. Durch die Wandlerverluste, der typische Wirkungsgrad beträgt knapp unter 90 Prozent, dürfte die tatsächliche Betriebsdauer bei ungefähr einem Monat liegen.

Wichtig ist, die Zahl der Zellen und damit die Klemmenspannung nicht zu niedrig zu wählen: Der Spannungswandler schaltet bei etwa sechs Volt ab, weshalb Batterien aus nur vier Zellen gar nicht vollständig entladen werden – sobald die Spannung auch nur leicht sinkt, ist Schluss. Bei acht Zellen hingegen schaltet der Spannungswandler erst ab, wenn die Zellenspannung auf unter 0,75 gefallen ist – dann ist die Batterie auch fast vollständig leer.

Mehr Reichweite: Der Antennenanschluss, ein U.FL-Stecker, lässt sich mit etwas Geschick nachträglich auf den Raspi Zero W auflöten. Mit einer externen Antenne vergrößert sich der Versorgungsbereich des Flugblatts um ein Vielfaches.

Es gibt weiteres Optimierungspotenzial: Die interne Antenne des Raspi Zero W ist keineswegs optimal für große Reichweiten, auf der Platine ist aber ein Bestückungsplatz für einen U.FL-Antennenanschluss vorgesehen. Mit etwas Lötgeschick können Sie den Stecker nachrüsten und dann mit einer externen WLAN-Antenne die Reichweite des Raspi um ein Vielfaches erhöhen. Das erschwert auch das Auffinden des Flugblatts, denn durch den viel größeren Versorgungsbereich kommen auch mehr Versteckmöglichkeiten infrage.

Aufgespielt

Als Betriebssystem des Raspi Zero W ist die Lite-Variante von Raspbian gut geeignet: Sie ist ohne Desktop deutlich schlanker als die reguläre Variante und der Raspi verbraucht damit weniger Strom, denn einige Dienste wie etwa das grafische Login werden nicht gestartet. Für die Installation benötigen Sie eine MicroSD-Karte ab 1 GByte.

Bitte laden Sie Raspbian Lite direkt von raspberrypi.org herunter und verwenden Sie nicht NOOBS für die Installation – sonst funktioniert die nachfolgende Konfiguration nicht wie in diesem Artikel beschrieben. Haben Sie das Zip-Archiv mit dem SD-Karten-Image von Raspbian Lite entpackt, kopieren Sie das Image mit dem Programm W32DiskImager Byte für Byte auf die Speicherkarte. Linux- und macOS-User benutzen dafür das Kommandozeilenprogramm dd.

Nachdem der Datentransfer abgeschlossen ist, können Sie Raspbian für den ersten Start des Raspi Zero vorbereiten. Ein WLAN vorausgesetzt benötigen Sie dazu weder Tastatur noch Monitor – die Einrichtung erfolgt per SSH. Zunächst entfernen Sie die SD-Karte aus dem Kartenleser und stecken sie nach ein paar Sekunden wieder hinein. So erzwingen Sie, dass Windows die Partitionstabelle neu einliest – Windows findet dort zwei Partitionen. Während Windows die erste, etwa 20 MByte große Partition mit dem Namen boot problemlos lesen kann und automatisch einem Laufwerksnamen zuordnet, fragt zumindest Windows 10 bei der zweiten, ob sie formatiert werden soll. Dies müssen Sie unbedingt verneinen, sonst löschen Sie das dort installierte Raspbian.

Damit der Raspi Zero sich in Ihr WLAN einklinken kann, benötigt er die SSID und den WLAN-Schlüssel. Hier sollten Sie keinesfalls die Daten ihres privaten WLAN angeben, sondern ein Gästenetz oder einen zusätzlichen Access Point mit einer generischen SSID wie guests benutzen: Denn Sie müssen SSID und Schlüssel in die Datei wpa_supplicant.conf eintragen, die Sie unter ct.de/yva6 herunterladen können, und die Datei auf dem Laufwerk boot der SD-Karte speichern. Sollte das Flugblatt Ermittlern in die Hände fallen, finden sie möglicherweise Reste dieser Daten und können Sie damit identifizieren.

Zum Editieren der Datei müssen Sie unbedingt einen Editor wie Notepad++ benutzen (kostenlos, Download-Link auf ct.de/yva6), der Unix-typische Textdateien ohne Return am Zeilenende speichern kann. Mit Windows-Bordmitteln geht das nicht. Außerdem müssen Sie den SSH-Daemon einschalten, der standardmäßig deaktiviert ist. Dazu legen Sie eine Datei mit dem Namen ssh ebenfalls auf dem Laufwerk boot an, der Inhalt der Datei spielt keine Rolle.

So vorbereitet lassen Sie die Speicherkarte von Windows auswerfen, stecken sie in den Raspi Zero und schließen ein Netzteil an dem mit „PWR“ beschrifteten USB-Micro-Port des Raspi an. Die LED neben dem Anschluss blinkt dann im Takt der Zugriffe auf den Flash-Speicher während des Bootvorgangs, nach etwa 30 Sekunden sollte sich der Raspi in Ihrem WLAN angemeldet haben. Nun sollten Sie sich innerhalb von zwei Minuten per SSH auf dem Raspi einloggen. Unter Windows verwenden Sie dazu den kostenlosen SSH-Client Putty (Download siehe ct.de/yva6), unter Linux oder macOS ssh im Terminal. Der Benutzername lautet pi und Sie können den Raspi meist einfach über seinen Hostnamen raspberrypi ansprechen – alternativ finden Sie die IP-Adresse, die dem Raspi zugewiesen wurde, im Web-Frontend Ihres WLAN-Routers. Das Passwort zum Einloggen lautet ebenfalls raspberrypi.

Sind Sie eingeloggt, geben Sie als Erstes folgenden Befehl ein:

sudo iw wlan0 set power_save off

So deaktivieren Sie die Stromsparfunktion des WLAN-Adapters, die dazu führt, dass das WLAN nach wenigen Minuten Inaktivität abgeschaltet wird. Schließlich soll das Flugblatt über WLAN stets erreichbar sein und Sie hätten ansonsten nicht einmal die Möglichkeit, Raspbian sauber herunterzufahren.

Damit die WLAN-Stromsparfunktion künftig automatisch ausgeschaltet wird, öffnen Sie mit dem Befehl sudo pico /etc/network/interfaces die zentrale Netzwerkkonfigurationsdatei und tragen am Ende folgendes ein:

auto wlan0

iface wlan0 inet dhcp

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

wireless-power off

Um den Strom des WLAN-Chips wieder einzusparen, können Sie den HDMI-Ausgang abschalten. Sonst verschwendet der Raspi gut 20 Prozent des Stroms allein dafür – selbst wenn gar kein Monitor angeschlossen ist. Dazu öffnen Sie mit dem Befehl sudo pico /etc/rc.local das Skript, das am Ende jedes Bootvorgangs ausgeführt wird, und fügen vor der Zeile exit 0 folgenden Aufruf ein:

/usr/bin/tvservice -o

Auch die Aktivitäts-LED neben dem Stromanschluss ist Stromverschwendung, noch dazu könnte sie durch ihr Blinken ein ansonsten gut verstecktes Flugblatt verraten. Damit sie außer kurz nach dem Einschalten und kurz vor dem Ausschalten nicht mehr leuchtet, öffnen Sie mit sudo pico /boot/config.txt die zentrale Raspi-Konfigurationsdatei und fügen am Ende folgende Zeilen an:

dtparam=act_led_trigger=none

dtparam=act_led_activelow=on

Die Änderungen werden erst beim nächsten Neustart des Raspi übernommen, so lange bleibt die LED aktiv.

Als Webserver empfehlen wir Nginx, der weniger Ressourcen und damit weniger Strom verbraucht als Apache. Es genügt, wenn Sie per sudo apt-get install nginx den Daemon nebst aller Abhängigkeiten nachinstallieren; er ist standardmäßig so konfiguriert, die unterhalb des Verzeichnisses /var/www/html abgelegten Dateien auszuliefern.

Hidden Service …

Für den Fall, dass das Flugblatt eine (fremde) Internetverbindung über WLAN mitbenutzen soll, arbeitet es als Server für einen Tor Hidden Service und verbreitet so die Inhalte auf der ganzen Welt. Dazu installieren Sie mit dem Befehl sudo apt-get install tor den Tor-Daemon aus der Paketverwaltung nach. Anschließend müssen Sie die Konfigurationsdatei mit dem Befehl sudo pico /etc/tor/torrc bearbeiten und die Raute-Zeichen vor folgenden Zeilen entfernen:

HiddenServiceDir /var/lib/tor/hidden_service/

HiddenServicePort 80 127.0.0.1:80

Eine ausführliche Beschreibung zum Betrieb von Tor Hidden Services finden Sie auf Seite 140. Auf Seite 148 erfahren Sie außerdem, wie Sie Ihre Anonymität zusätzlich schützen sollten. Damit die veränderte Tor-Konfiguration wirksam wird, starten Sie den Dienst mit dem Befehl systemctl restart tor neu und können dann die Onion-Adresse Ihres aktiven Hidden Service mit dem Befehl sudo cat/var/lib/tor/hidden_service/hostname abrufen.

Haben Sie alle Dokumente aufgespielt und wollen den Raspi aussetzen, rufen Sie mit sudo raspi-config das Raspi-Konfigurationsprogramm auf. Dort ändern Sie das Standard-Passwort und schalten im Menü „Interfacing Option“ den SSH-Daemon wieder aus, damit sich später niemand einloggen kann. Die letzten Schritte sind, mit den Befehlen unset HISTFILE und rm -f /root/.bash_history /etc/wpa_supplicant/wpa_supplicant.conf die Befehlshistorie sowie die WLAN-Zugangsdaten Ihres Gäste-WLAN zu löschen und später beim Aussetzen wie eingangs beschrieben eine neue Konfiguration auf der Boot-Partition der SD-Karte zu speichern, die die Zugangsdaten des mitzubenutzenden WLAN enthält.

… oder Hotspot

Der zweite Betriebsmodus des Flugblatts ist als lokaler WLAN-Hotspot ohne Verschlüsselung. Strategisch günstig etwa in einem Blumenkübel, auf einer Litfasssäule oder einem Kiosk platziert kann der Raspi die Informationen an einem öffentlichen Platz verteilen – Passanten müssen sich lediglich mit dem WLAN verbinden und werden automatisch auf den lokalen Webserver umgeleitet.

Damit der Raspi als Hotspot arbeitet, müssen Sie zwei Pakete nachinstallieren:

sudo apt-get install hostapd dnsmasq

Der HostAP-Daemon spannt den Access Point auf und DNSmasq ist für die Adressvergabe per DHCP zuständig. Die Konfigurationsdateien beider Programme sind im Zip-Archiv enthalten und müssen nach /etc kopiert werden:

sudo cp 1722-144/default/* /etc/default

sudo cp -a 1722-144/hostapd /etc

sudo cp 1722-144/dnsmasq.conf /etc

Außerdem benötigen Sie einen mit statischer IP-Adresse konfigurierten WLAN-Adapter, wozu Sie mit sudo pico /etc/network/interfaces die zentrale Netzwerkkonfigurationsdatei öffnen und dort folgendes anfügen:

auto wlan0

iface wlan0 inet static

address 192.168.255.1

netmask 255.255.255.0

wireless-mode Master

wireless-power off

Als Letztes kopieren Sie den FakeDNS-Daemon in das Verzeichnis /usr/local/bin und sorgen dafür, dass er künftig zusammen mit DNSmasq gestartet wird:

sudo cp fakedns/*.py /usr/local/bin

sudo cp fakedns/*.service /etc/systemd/system

sudo systemctl enable fakedns.service

Abgefangen

FakeDNS antwortet auf sämtlichen Domain-Anfragen mit der IP-Adresse 192.168.255.1 – also der des Raspi. Damit ist es nicht mehr nötig, Besuchern eine IP-Adresse oder eine lokale Adresse mitzuteilen, die sie aufrufen sollen: Sobald sie http://www.google.de oder einen beliebigen anderen Server per HTTP zu kontaktieren versuchen, landen sie auf dem lokalen Webserver des Flugblatts.

Es gibt noch einen Trick: iOS, Android und Windows Phone versuchen bei der Anmeldung in einem WLAN festzustellen, ob sie vollen Internetzugang haben oder ob es sich um einen Hotspot etwa eines Hotels handelt, der eine Anmeldung erfordert. Dazu rufen die Mobilgeräte unterschiedliche URLs ab – erhalten sie das gewünschte Ergebnis, besteht eine Internetverbindung. Bekommen sie hingegen den HTTP-Status-Code 302 „Moved Temporarily“ und eine Zieladresse, gehen sie davon aus, dass man erst eine Anmeldeseite besuchen muss, ein sogenanntes Captive Portal.

Indem Sie mit dem Befehl sudo pico /etc/nginx/sites-available/default die Webserver-Konfiguration bearbeiten und dort vor location die Zeile

error_page 404 =302 http://192.168.255.1/;

einfügen, erhalten die Mobilgeräte anstelle des Fehlers 404 den Status-Code 302 mit der Adresse des Flugblatts als Ziel.

Sobald sich ein Mobilgerät mit dem WLAN des Flugblatts verbindet, öffnet sich die Startseite automatisch oder nach Antippen einer Notification.

Auf iOS- und Windows-Phone-Geräten führt das dazu, dass die Zielseite automatisch im Browser angezeigt wird, bei iOS allerdings ohne Adressleiste. Auf Android-Geräten öffnet sich die Seite entweder automatisch oder man erhält eine Benachrichtigung, dass man sich im Netzwerk anmelden müsse, und landet beim Antippen auf der Startseite des Flugblatts. Ein weiterer positiver Nebeneffekt der Umleitung ist, dass Besucher beim Anklicken eines nicht existierenden Links auch auf der Startseite landen, anstatt eine Fehlermeldung zu bekommen.

Ausgeschaltet

Um den Raspi etwa nach einem ersten Test wieder herunterfahren zu können, ohne Tastatur und Monitor zu benötigen, sollten Sie das Programm Pi-Shutdown (siehe ct.de/yva6) installieren. Es wartet darauf, dass die GPOI-Pins 5 und 6 gebrückt werden, etwa mit einem Jumper. Damit die Stromversorgung nicht im Weg ist, schließen Sie den Spannungswandler dann an die Pins 2 (Plus) und 14 (Minus) an. Schließen Sie den Jumper für etwa eine Sekunde lang an und entfernen ihn dann wieder, so führt Pi-Shutdown einen Neustart durch; lassen Sie den Jumper drei bis fünf Sekunden lang gesteckt, schaltet sich der Raspi aus. Dass sich der Raspi ausschaltet, erkennen das daran, dass die Betriebs-LED neben dem Micro-USB-Anschluss kurz blinkt.

Die Einrichtung von Pi-Shutdown ist einfach: Sie laden das Python-Programm pishutdown.py aus dem Github-Repository herunter und speichern es im Verzeichnis /usr/local/bin auf dem Raspi:

sudo wget -O /usr/local/bin/pishutdown.py http://raw.githubusercontent.com/gilyes/pi-shutdown/master/pishutdown.py

Damit Pi-Shutdown künftig automatisch bei jedem Start des Raspi geladen wird, finden Sie im Zip-Archiv einen passenden Systemd-Job, den Sie folgendermaßen einrichten:

sudo cp 1722-144/pishutdown/* /etc/systemd/system

sudo systemctl enable pishutdown

Bevor Sie den Raspi herunterfahren, müssen Sie wie bei der Tor-Variante noch das Standard-Passwort ändern, Ihre Spuren beseitigen, SSH abschalten und Ihre WLAN-Zugangsdaten löschen. Dann ist Ihr Raspi flugbereit. (mid@ct.de)