Er kleven risico’s aan vrije meningsuiting. Het kan zelfs gevaarlijk zijn. Moderne dissidenten verspreiden hun pamfletten digitaal via internet, maar repressieve overheden blokkeren ze en beperken de vrijheid van meningsuiting. Met een Raspberry Pi en een batterij maak je een digitaal pamflet om anoniem ongecensureerde boodschappen te verspreiden via wifi en Tor.
Flyers en posters zijn in dit internettijdperk een archaïsche manier om te protesteren tegen overheden of informatie ongecensureerd te verspreiden. Het is ook riskant: Sophie Scholl werd door het nazi-regime met de minstens zo archaïsche guillotine geëxecuteerd voor het verspreiden van pamfletten. De studente werd opgepakt bij het uitdelen ervan. Tegenwoordig gebruiken dissidenten het internet en publiceren ze hun pamfletten op buitenlandse servers – maar die worden vervolgens meteen geblokkeerd.
Om mensen in staat te stellen informatie toch vrij te verspreiden, hebben we een digitaal pamflet ontwikkeld op basis van de Pi Zero W. Deze minicomputer krijgt stroom van een batterij en is makkelijk te verstoppen in een bloembak, aan een boomtak of waar dan ook. We hebben de kosten bewust laag gehouden, zodat je niet terug hoeft om de Pi op te halen – met risico op arrestatie. Lees hier hoe je zo’n pamflet zelf maakt. In c’t magazine 1-2/2018 lees je meer over de gebruikte hidden services en het beschermen van je anonimiteit.
Ontvang gratis meer tips voor de Pi Zero W en goedkope projecten, schrijf je in voor de nieuwsbrief:
De Raspberry Pi Zero W schaf je voor 11 euro aan bij aanbieders als Kiwi Electronics en SOS Solutions. Voor aansluiting op de batterij(en) moet je nog een DC/DC-converter kopen die een stabiele spanning levert. Die kost zo’n 5,50 euro. Via Marktplaats of Chinese webshops vind je ze zelfs nog veel goedkoper. Met een geschikte converter kun je kiezen uit allerlei batterijen, van een set knoopcellen die een paar uur stroom levert tot een monoblock dat het wel een maand volhoudt.
In elkaar zetten is eenvoudig. Sluit de converter aan op de batterij(en), sluit een voltmeter aan op de uitgang en stel de converter in op een spanning van 5,1 tot 5,2 volt. Verbind vervolgens de uitgangen van de converter rechtstreeks (solderen) met de GPIO-pinnen van de Zero. De pluspool van de converter verbind je met pin 4 en de minpool met pin 6.
Moeilijk op te sporen
Welke batterij het handigst is, hangt onder andere af van de verstopplek voor het pamflet. Ervaring met geocachen is hier een voordeel. Om het pamflet in een bloempot te verstoppen, gebruikten we bijvoorbeeld tien monocellen met elk een capaciteit van 18 Ah. Bij een celspanning van 1,5 volt bood dit een totale capaciteit van 270 Wh. De cellen waren met een messingstrip van 1 mm (modelbouwshop) in serie gesoldeerd en met tape vastgezet.
Het opgenomen vermogen van een Zero W is, na alle besparingsmaatregelen die we verderop beschrijven, ongeveer 0,5 watt. De ring van tien monocellen zou in theorie dus 540 uur, oftewel 22,5 dagen, mee moeten gaan. Als de converter meer seriegeschakelde cellen aan kan, is een nog langere termijn haalbaar. Een converter heeft over het algemeen een rendement van bijna 90 procent.
Het is belangrijk om het aantal cellen en daarmee de klemspanning niet te laag te kiezen. De converter die wij gebruikten schakelde bij een spanning van circa 6 volt al uit, waardoor een batterij op basis van vier cellen niet volledig ontladen werd. Zodra de spanning te ver zakt, is het afgelopen. Bij acht cellen schakelde de converter pas uit toen de spanning per afzonderlijke cel was gezakt onder 0,75 volt. De batterij was toen ook bijna helemaal leeg.
Er zijn nog meer punten die je kunt verbeteren. De interne antenne van de Zero W heeft niet veel bereik, maar op de printplaat zit een contact voor een U.FL-antenne-aansluiting. Als je goed kunt solderen, voeg je zo’n aansluiting toe en vergroot je het bereik met een externe antenne. Daarmee wordt lokaliseren van het digitale pamflet ook moeilijker, omdat de ‘actieradius’ en daarmee het aantal verstopplekken groter is.
Het digitale pamflet maken
Als besturingssysteem voor de Zero W is de Lite-uitvoering van Raspbian heel geschikt. Die is door het ontbreken van een desktop duidelijk slanker dan de standaarduitvoering en de Zero verbruikt daarmee minder stroom doordat services zoals de grafische log-in niet worden gestart. Voor de installatie is een geheugenkaart (micro-SD) nodig van minimaal 1 GB.
Download Raspbian Lite rechtstreeks van raspberrypi.org of bijvoorbeeld van SourceForge en installeer het niet met NOOBS, anders werkt de verderop beschreven configuratie niet. Als je het zip-archief met de image voor het geheugenkaartje hebt uitgepakt, schrijf je de image met het programma W32DiskImager byte voor byte naar de geheugenkaart. Gebruikers van Linux of MacOS doen dat vanaf de opdrachtprompt met het commando dd
.
Als de kaart klaar is, kun je Raspbian voorbereiden om de Zero voor de eerste keer op te starten. Als je een draadloos netwerk hebt, hoef je geen toetsenbord of monitor aan te sluiten maar configureer je Raspbian via SSH. Haal eerst de geheugenkaart uit de lezer en doe hem na even wachten terug in de pc. Zo dwing je Windows de partitietabel opnieuw te lezen. Windows vindt twee partities. De eerste genaamd boot
kan het systeem probleemloos lezen en deze krijgt een stationsletter toegewezen. Mogelijk vraagt Windows of je de tweede partitie wilt formatteren. Dat moet je beslist weigeren, anders wordt de geïnstalleerde Raspbian weer gewist.
Om de Zero voor configuratie draadloos te verbinden, heeft hij het SSID en de sleutel voor een wifi-netwerk nodig. Gebruik in geen geval de gegevens van je persoonlijke wifi-netwerk, maar een gastnetwerk of extra accesspoint met een generiek SSID zoals guest
. Je moet de SSID en sleutel namelijk toevoegen aan het bestand wpa.supplicant.conf
. Dat kun je via de c’t-website downloaden. Kopieer het bestand naar het station boot op de geheugenkaart. Als het pamflet in verkeerde handen valt, zijn resten van dit bestand mogelijk terug te vinden.
Om het bestand te bewerken moet je beslist een editor zoals het gratis Notepad++ gebruiken, die typische Unix-tekstbestanden bewaart zonder return op het einde van een regel. Dat is ook handig voor andere Raspberry Pi-projecten, want met standaard Windows-software gaat dat niet. Verder moet je de SSH-daemon activeren, die standaard is uitgeschakeld. Maak daarvoor een leeg tekstbestand en bewaar dit met de naam ssh
op het station boot
.
Na deze voorbereidingen kun je de geheugenkaart uit de pc halen en in de Zero stoppen. Sluit een voeding aan op de usb-poort van de Zero met het label ‘PWR’. De led naast deze aansluiting knippert bij het booten als de kaart wordt benaderd en na ongeveer 30 seconden moet de Zero zijn aangemeld op het draadloze netwerk. Nu moet je binnen twee minuten via SSH inloggen op het apparaat. In Windows kan dat met de gratis SSH-client PuTTY , in Linux of macOS met Terminal. De gebruikersnaam is pi
en de Zero is doorgaans te benaderen via de hostnaam raspberrypi
. Desnoods zoek je het IP-adres van de Zero op via de webinterface van je router. Het standaardwachtwoord voor inloggen is raspberry
.
Als je bent ingelogd, voer je als eerste opdracht in:
sudo iw wlan0 set power_save off
Daarmee schakel je de energiebesparingsfunctie uit die de wifi-adapter na enkele minuten inactiviteit uitschakelt. Het pamflet moet continu bereikbaar zijn en anders kun je Raspbian niet netjes afsluiten.
Om te voorkomen dat de functie later weer automatisch wordt ingeschakeld, open je met de opdracht sudo pico /etc/network/interfaces
het centrale netwerkconfiguratiebestand. Voeg aan het eind de volgende tekst toe:
auto wlan0
iface wlan0 inet
dhcp wpa-conf /etc/wpa_supplicant/ wpa_supplicant.conf
wireless-power off
Om elders weer stroom te besparen, schakel je de hdmi-uitgang uit. Die is normaliter verantwoordelijk voor 20 procent van het stroomverbruik, zelfs als er geen monitor is aangesloten. Open met de opdracht sudo pico /etc/rc.local
het script dat wordt uitgevoerd bij het opstarten. Voeg voor de regel exit 0
de volgende opdracht toe:
/usr/bin/tvservice -o
Ook het ledje naast de stroomaansluiting verspilt energie. Bovendien kan het geknipper de locatie van een goed verstopt pamflet verraden. Om te zorgen dat het na het opstarten uit gaat en blijft, open je met sudo pico /boot/config.txt
het centrale configuratiebestand van de Pi en voeg je op het einde de volgende regels toe:
dtparam=act_led_trigger=none
dtparam=act_led_activelow=on
De wijzigingen worden pas doorgevoerd nadat je de Pi opnieuw hebt opgestart.
Als webserver raden we Nginx aan. Dat is erg licht en levert een lager energieverbruik op dan Apache. Je hoeft alleen met sudo apt-get install nginx
de daemon met alle afhankelijkheden te installeren. Standaard is die geconfigureerd om de bestanden in de map /var/www/html weer te geven.
Je boodschap wereldwijd verkondigen
In de situatie dat het pamflet een (openbare) internetverbinding via wifi kan gebruiken, werkt hij als server met een Tor Hidden Service en wordt de content voor de hele wereld gepubliceerd. Daarvoor installeer je met de opdracht sudo apt-get install tor
de Tor-daemon uit het pakketbeheer. Vervolgens moet je het configuratiebestand bewerken met sudo pico /etc/tor/torrc
en de commentaarhekjes verwijderen bij de volgende regels:
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80
Meer informatie over Tor Hidden Services vind je in c’t magazine 1-2/2018. Daarin lees je bovendien meer over het beschermen van je anonimiteit. Om de aangepaste Tor-configuratie te activeren, herstart je de service met de opdracht systemctl restart tor
. Daarna kun je het onion-adress van de geactiveerde hidden service opvragen met de opdracht sudo cat /var/lib/tor/hidden_service/hostname
.
Als je alle webcontent hebt toegevoegd en de Pi wilt uitschakelen, start je met sudo raspi-config
weer het configuratieprogramma van de Pi. Verander het standaardwachtwoord en schakel onder ‘Interfacing Option’ de SSH-daemon weer uit, zodat niemand meer remote kan inloggen. De laatste stap is met de opdrachten unset HISTFILE
en rm -f /root/.bash_history /etc/wpa_supplicant/wpa_supplicant.conf
de opdrachtgeschiedenis en de wifi-gegevens van het gastnetwerk te wissen. Tot slot zet je, zoals eerder beschreven, een nieuw bestand met toegangsgegevens voor het te gebruiken wifi-netwerk op de boot-partitie.
Je boodschap verspreiden op een bepaalde locatie
De tweede bedrijfsmodus voor het pamflet is als lokaal openbaar wifi-netwerk zonder versleuteling. Verberg het apparaat bijvoorbeeld in een vaas, reclamezuil of kiosk bij een openbare ruimte. Als voorbijgangers een wifi-verbinding maken, worden ze automatisch doorgestuurd naar de opgeslagen webpagina.
Om de Zero te laten werken als hotspot, moet je nog twee pakketten installeren:
sudo apt-get install hostapd dnsmasq
De HostAP-daemon zorgt voor het draadloze toegangspunt en DNSmasq voor het uitdelen van IP-adressen via DHCP. De configuratiebestanden voor beide programma’s vind je in het zip-archief (via de c’t-website) en moet je kopiëren naar /etc
:
sudo cp 1722-144/default/* /etc/default
sudo cp -a 1722-144/hostapd /etc
sudo cp 1722-144/dnsmasq.conf /etc
Verder moet de wifi-adapter worden ingesteld met een statisch IP-adres. Open met sudo pico /etc/network/interfaces
het centrale netwerkconfiguratiebestand en voeg daaraan het volgende toe:
auto wlan0
iface wlan0 inet static
address 192.168.255.1
netmask 255.255.255.0
wireless-mode Master
wireless-power off
Tot slot kopieer je de FakeDNS-daemon naar de map /usr/local/bin en zorg je ervoor dat die voortaan samen met DNSmasq wordt gestart:
sudo cp fakedns/*.py /usr/local/bin
sudo cp fakedns/*.service /etc/systemd/system
sudo systemctl enable fakedns.service
Het digitale pamflet publiceren
FakeDNS geeft bij alle opgevraagde domeinen het IP-adres 192.168.255.1 als antwoord: het adres van de Pi Zero. Het is dus niet nodig om bezoekers te laten weten welk adres ze moeten gebruiken. Of ze nu www.google.nl of een willekeurig ander http-adres opvragen, ze belanden altijd bij de lokale webserver van het digitale pamflet.
Er is nog een andere truc. Android en iOS (en Windows Phone) controleren na aanmelding bij een wifi-netwerk of ze volledige internettoegang hebben of dat het om een hotspot gaat van bijvoorbeeld een hotel, waar eerst moet worden ingelogd. Daarvoor vragen ze bepaalde url’s op: krijgen ze het gewenste resultaat, dan gaan ze ervan uit dat er internettoegang is. Ontvangen ze daarentegen de HTTP-statuscode 302 “Moved Temporarily” en een doeladres, dan gaan ze ervan uit dat eerst een aanmeldpagina bezocht moet worden (een zogeheten Captive Portal).
Bewerk daarom met sudo pico /etc/nginx/sites-available/default
de webserver- configuratie en voeg voor location de volgende regel in:
error_page 404 =302 http://192.168.255.1/;
De mobiele apparaten krijgen dan in plaats van een 404-foutmelding de statuscode 302 met het adres van het pamflet als doelpagina.
Bij iOS en Windows Phone zorgt dat ervoor dat de startpagina automatisch in de browser wordt getoond. Bij Android wordt de site automatisch geopend of krijgt de bezoeker een notificatie om zich aan te melden. Bij tikken op de notificatie verschijnt dan de startpagina van het pamflet. Een positief neveneffect van de omleiding is dat bezoekers bij een fout in een link weer terechtkomen op de startpagina in plaats van dat er een foutmelding verschijnt.
Vrije meningsuiting in de praktijk
Om de Pi na de eerste test te kunnen afsluiten zonder monitor en toetsenbord, installeer je het programma Pi-Shutdown. Die houdt in de gaten of GPIO-pinnen 5 en 6 worden overbrugd, bijvoorbeeld met een jumper. Om te zorgen dat de stroomvoorziening niet in de weg zit, sluit je die aan op pin 2 (plus) en 14 (min). Als je de jumper een seconde lang laat zitten en weer weghaalt, voert Pi-Shutdown een herstart uit. Laat je de jumper 3 tot 5 seconden zitten, dan wordt de Pi uitgeschakeld. Je herkent dit aan het kort knipperen van de led naast de usb-stroomaansluiting.
Het installeren van Pi-Shutdown is eenvoudig. Download het Python-programma pishutdown.py uit de Github-repository en sla het op in /usr/local/bin op de Pi:
sudo wget -O /usr/local/bin/ pishutdown.py http://raw.githubusercontent.com/gilyes/pi-shutdown/master/pishutdown.py
Om te zorgen dat Pi-Shutdown voortaan elke keer dat de Pi opstart wordt geladen, heb je net als bij de Tor-variant een Systemd-taak nodig die je vindt in het zip-archief. Kopieer dat als volgt naar de juiste map:
sudo cp 1722-144/pishutdown/etc/systemd/system
sudo systemctl enable pishutdown
Voordat je de Pi Zero W uitschakelt, moet je net als bij de Tor-variant nog het standaardwachtwoord wijzigen, je sporen verwijderen, SSH uitschakelen en je wifi-toegangsgegevens wissen. Daarna kun je op pad met je digitale pamflet.
(Daniel Cooper / Marco den Teuling, c’t magazine 1-2/2018)