Raspberry Pi als Password Manager met Bitwarden & zo doe je het!

Noud van Kruysbergen
0

Inhoudsopgave

    Veel internetgebruikers hebben te maken met een opstapeling van toegangsgegevens tot portals en diensten, wat een gevaarlijke situatie kan opleveren. Het is vrijwel onmogelijk om voor elk account een uniek en veilig wachtwoord te bedenken en te onthouden. 

    In deze workshop laten we zien hoe je een Raspberry Pi kunt gebruiken als Password Manager en server met behulp van Bitwarden. Hierdoor kun je toegangsgegevens synchroniseren tussen meerdere apparaten zonder dat je je database in vreemde handen hoeft te geven.

    De beloftes van wachtwoordmanagers

    Hoewel wachtwoordmanagers beloven je te helpen, hangen deze vaak aan hun eigen cloud. Bovendien synchroniseren ze de wachtwoordverzameling tussen meerdere apparaten alleen als je daar een maandelijks bedrag voor betaalt. Daarnaast moet je een hoge mate van vertrouwen hebben in de betreffende aanbieder, omdat de virtuele bos sleutels wordt bewaard in een kluisje van een externe derde partij.

    Raspberry Pi als password manager

    Raspberry Pi als password manager met open-source wachtwoordmanager Bitwarden

    Je kunt de opensource wachtwoordmanager Bitwarden zelf hosten. Bitwarden bestaat uit twee delen:

    • de server, die de wachtwoorden beheert en verstrekt
    • de clients, die ze opvragen

    Bitwarden_RS: afgeslankte versie van de officiële server

    Het communityproject Bitwarden_RS heeft een afgeslankte versie van de officiële Bitwarden-server gemaakt die de Bitwarden-API implementeert. Hiermee kan de Raspberry Pi de rol als password manager op zich nemen terwijl hij compatibel blijft met de officiële Bitwarden-applicaties. Dit is een mooi voorbeeld van praktische Raspberry Pi projects.


    Ontvang gratis meer praktische Raspberry Pi Projects en tips, schrijf je in voor de nieuwsbrief:

    Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

    Minimale vereisten: Raspberry Pi 3 en commandline toegang

    Om Bitwarden te installeren heb je minimaal een Raspberry Pi 3 nodig. Je kunt Raspberry Pi OS gebruiken met een grafische gebruikersinterface of verbinding maken via SSH. Voor het installeren heb je alleen toegang tot de commandline nodig.

    Configuratie via Vault en admin-panel

    Na installatie kun je met meerdere accounts via Bitwarden-clients of een webinterface (web-vault) toegang krijgen tot de server en Bitwarden vanaf elk apparaat met een browser configureren. De webinterface omvat een webtoepassing (Vault) waarmee gebruikers hun account kunnen beheren en biedt beheertools via een admin-panel.


    workshop bitwarden raspberry wachtwoordkluis

    Het inlogscherm van de Bitwarden-webinterface). Na het installeren van Bitwarden_RS heb je alleen een browser nodig om op elk moment toegang te hebben tot je wachtwoorden.


    Advies van Bitwarden: Docker-container

    De ontwikkelaars van Bitwarden_RS raden aan om de server op te zetten als een Docker-container. Dit voorkomt dat de wachtwoordmanager andere diensten op de Raspberry Pi belemmert.

    Ingrediënten: Reverse-proxy en containerized edgerouter Traefik

    Voor de installatie zijn een reverse-proxy en een containerized edgerouter Traefik nodig om de webinterface en API versleuteld op internet te krijgen. De TCP-poorten 80 en 443 op de Raspberry Pi mogen nog niet bezet zijn. Traefik haalt de benodigde TLS-certificaten zelf op en vernieuwt deze automatisch.

    Voorbeeldbestanden; downloadlinks & naslag

    Docker-compose bespaart je lange docker run-commando’s. De configuraties van de containers worden daarbij in een compose-bestand samen­gevoegd, dat door een .env-bestand met omgevingsvariabelen wordt aangevuld.

    We stellen voorbeeldbestanden beschikbaar in een GitHub-­repository.

    Om ervoor te zorgen dat browsers en clients de Raspberry Pi kunnen aansturen, heb je een vaste hostnaam nodig die naar het WAN-IPv4-adres van de router verwijst. Daar kun je een DynDNS-service voor gebruiken. Die stuurt verzoeken die bij de geconfigureerde DynDNS-hostnaam aankomen door naar het betreffende WAN-IPv4-adres van de router. Het maakt verder niet uit welke DynDNS-service je gebruikt.

    In deze tutorial dient het adres bitwarden.example.com als voorbeeld.


    Blijf op de hoogte van de nieuwste informatie en tips!
    Schrijf je in voor de nieuwsbrief:

    Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.


    Fase 1: Raspberry Pi OS met Bitwarden voorbereiden

    De eerste stap is om het systeem up-to-date te brengen en met een script de Docker-engine voor de container-runtime-omgeving te installeren. Als het een nieuw systeem is, herstart de Raspberry Pi dan na het toepassen van de updates alvorens Docker te installeren.

    sudo apt upgrade

    sudo reboot

    curl -fsSL https://get.docker.com -o get-docker.sh

    sudo sh get-docker.sh

    Als de Apache2-utilities en de versiebeheertool Git niet op je systeem staan, installeer die pakketten dan ook.

    sudo apt install apache2-utils

    sudo apt install git

    Docker-compose kun je het beste installeren met de Python-pakketmanager ‘pip’.

    sudo apt install python3-pip

    sudo pip3 install docker-compose

    Voor interactie met de Docker-daemon heb je wel systeembeheerdersrechten nodig. Als je daarbij Docker-­commando’s wilt gebruiken zonder daar sudo voor te zetten, moet je gebruiker pi toevoegen aan de groep docker en opnieuw inloggen. Als dat nog niet gebeurd is, is het nu ook een mooi moment om het standaard wachtwoord van de gebruiker pi te veranderen.

    sudo usermod -aG docker pi

    passwd

    De benodigde software is dan geïnstalleerd en ­Docker is klaar voor gebruik.


    Alvorens de containers op te zetten, moet je er echter voor zorgen dat de Rasp­berry Pi – en dus de webinterface en API – bereikbaar zijn vanaf internet.

    Netwerkverkeer dirigeren, vast IP adres

    Om ervoor te zorgen dat de verzoeken betrouwbaar aankomen bij de Raspberry Pi en niet bij een ander netwerkapparaat, moet je een vast IP-adres toe­wijzen. Voer het IP-adres voor de actieve netwerkinterface in bij het bestand /etc/dhcpcd.conf met behulp van een teksteditor. Als de Pi via ethernet met het netwerk verbonden is, selecteer dan de interface eth0 (of wlan0 voor wifi).

    Pas de volgende vier regels in het bestand aan je lokale netwerk aan, bijvoorbeeld zo:

    interface eth0

    static ip_address=192.168.0.184/24

    static routers=192.168.0.1

    static domain_name_servers=192.168.0.1

    • Start het systeem opnieuw op met sudo reboot zodat de wijzigingen toegepast worden.
    • Stel dan portforwarding in de webinterface van je router in.
    • Verzoeken van buitenaf die binnenkomen op TCP-poort 80 en 443 moeten worden doorgestuurd naar de Raspberry Pi en eindigen bij de reverse-proxy Traefik.
    • Selecteer TCP als protocol en voer poort 80 in.
    • Je kunt de service een willekeurige naam geven. Die is vervolgens hetzelfde voor poort 443.

    DynDNS-service koppelen aan huidige WAN-IPv4-adres van router

    Om de DynDNS-service te laten verwijzen naar het huidige WAN-IPv4-adres van de router, heeft de router een bron nodig die hem de juiste informatie verschaft. De meeste moderne routers kunnen dit zelf doen.

    Selecteer je provider in het bijbehorende menu en vul de gevraagde gegevens in, zoals de inloggegevens en een update-url. Als je provider niet in de lijst staat, kun je er zelf een instellen.


    Fase 2: de containerarchitectuur

    Na die voorbereidingen is het tijd voor de container­architectuur. Als opslaglocatie voor de containerconfiguraties en compose-bestanden op het Linux-­bestandssysteem ligt de directory /srv voor de hand. Als je daar bestanden naartoe wilt schrijven, moet je werken met sudo of jezelf rootrechten toekennen. Kloon de GitHub-repository naar /srv en ga er dan in.

    sudo git clone https://github.com/ndi-ct/raspi-pwm /srv/raspi-pwm

    cd /srv/raspi-pwm

    Als container-blueprint staat er in de gedownloade repository een YAML-bestand klaar. Dat specificeert welke containerimages uit de Docker Hub geladen moeten worden en worden geconfigureerd.

    Om­gevingsvariabelen worden opgeslagen in het bijbehorende .env-bestand, dat standaard niet wordt weergegeven. Zo nodig kun je daar met ls -a een overzicht van krijgen.

    De reverse-proxy heeft daarnaast nog de bestanden traefik.toml en dynamic.yml nodig, waarin instructies staan voor het verkrijgen van certificaten en het regelen van het netwerkverkeer.


    Open traefik.toml met je favoriete teksteditor en voer een geldig e-mailadres in op de regel mail = “[email protected] (de aanhalingstekens moeten blijven staan). Let’s Encrypt stuurt waarschuwingen naar dat mailadres als er problemen zijn met het uitgegeven certificaat.

    Traefik slaat de certificaten, die het automatisch ophaalt met het ACME-­protocol, op in het bestand acme.json. Dat bestand mag alleen voor root leesbaar zijn. Maak een leeg bestand aan met de naam acme.json in de directory config-files en pas de rechten aan.

    sudo touch acme.json

    sudo chmod 600 acme.json

    Maak vervolgens een virtueel netwerk voor de reverse-proxy aan.

    sudo docker network create

    traefik_reverse_proxy


    workshop bitwarden raspberry wachtwoordkluis

    Welkom in je eigen kluis. In de webapp kun je je wachtwoorden beheren en instellingen aanpassen, bijvoorbeeld om tweefactorauthenticatie te activeren.


    Fase 3: beveiligingsinstellingen - kluis dichtmaken

    Ga naar de directory /srv/raspi-pwm. Om een overzicht te krijgen van de containerstructuur, kun je de inhoud van het composebestand laten weergeven met het commando:

    cat docker-compose.yaml

    De images ‘bitwarden_rs/server’ en ‘traefik’ zijn gelabeld met versienummers om je voor onaangename verrassingen te behoeden. Zonder die tag zal Docker altijd de laatste image downloaden van Docker Hub. Dat kan ertoe leiden dat de container plotseling niet meer start omdat de nieuwe versie wijzigingen in de configuratiebestanden vereist.

    Controleer regelmatig op updates voor images

    Controleer regelmatig of er (beveiligings)updates zijn voor je images. Zo ja, vervang dan de oude image door een nieuwe.
    De parameter restart: unless-stopped zorgt ervoor dat de containers ook na een reboot van de Raspberry Pi opnieuw starten – tenzij je een container voordien handmatig gestopt hebt.

    Gegevens opslaan – locatie

    De sectie volu­mes specificeert waar de Bitwarden-container persistente gegevens opslaat:

    volumes:

    – /var/docker/bitwarden:/data

    De directory /data in het containerbestandssysteem komt overeen met /var/docker/bitwarden in het hostbestandssysteem. Daar bevindt zich ook het SQLite-­databasebestand db.sqlite3.

    Regelmatig back-up

    Zorg dat je regelmatig een back-up maakt van de directory /var/docker/bitwarden.

    In het composebestand staan de variabelen ${BITWARDEN_URL}, ${WEBSOCKET_ENABLED} en ${ADMIN_TOKEN}. Docker-compose haalt de waarden uit het .env-bestand. Open het bestand met een teksteditor.

    BITWARDEN_URL=bitwarden.example.com

    WEBSOCKET_ENABLED=true

    ADMIN_TOKEN=

    Zet je DynDNS-adres achter BITWARDEN_URL=. Het adres wordt als host aan Traefik doorgegeven. De regel WEBSOCKET_ENABLED=true zorgt ervoor dat de wachtwoorden en andere items in de kluis gesynchroniseerd worden telkens als ze gewijzigd worden – als de betreffende client dat ondersteunt (LiveSync).


    bitwarden admin panel

    Het adminpanel is het controlecentrum van Bitwarden_RS. Daar heb je toegang tot belangrijke instellingen en kun je de gebruikers beheren.


    Configureren via het admingedeelte

    Het is raadzaam Bitwarden_RS te configureren via het admingedeelte van de webinterface. Om het adminpanel te activeren, voeg je een token toe achter ADMIN_TOKEN=. Daarvoor maak je op de ­commandline een lange string aan met het volgende commando:

    openssl rand -base64 48 | tr -d /=

    Je kunt de ingevoerde token gebruiken om jezelf ­later te authenticeren in het adminpanel van de web­interface. De instellingen die het admin­panel biedt kun je handmatig aanpassen door extra omgevingsvariabelen in te stellen in het .env-bestand en daar naar te verwijzen in het bestand docker-compose.yaml

    De ontwikkelaars van Bitwarden_RS bieden een uitgebreid voorbeeldbestand op de GitHub-wiki van het project, die je via de link kunt vinden. Verwijder in dit geval de regel ­ADMIN_TOKEN= uit het .env-bestand en de betreffende referentie uit het composebestand.


    Extra beveiligd met een basisauthenticatie

    In dit voorbeeld hebben we het adminpanel extra beveiligd met een basisauthenticatie, bestaande uit een gebruikersnaam met een wachtwoord. Daarvoor dient een middleware van de ­reverse-proxyTraefik, die al in het composebestand aangemaakt is. Als je in je browser naar bitwarden.example.com/admin gaat, moet je eerst de inloggegevens invoeren om de pagina te zien en kun je je pas bij de tweede stap met de token als admin authen­ticeren. Je kunt de benodigde inlog­gegevens genereren met het volgende commando:

    htpasswd -nb user password | sed -e s/\$/\$/g

    Dat commando genereert het inlogdatapaar ‘user:password’, waarbij ‘password’ wordt uitgevoerd als een hash. Vervang user en password door veilige inloggegevens. Open daarna het bestand docker-compose.yaml met een teksteditor en vervang ‘user:password’ in de onderstaande regel door de uitvoer van het commando.

    – “traefik.http.middlewares.admin-auth.basicauth.users=user:password”

    Sla tot slot het bestand docker-compose.yaml op en start de beide containers:

    sudo docker-compose up -d

    Docker laadt dan eerst de images uit de container-­registry. De reverse-proxy zorgt voor het certificaat van Let’s Encrypt en levert de webvault en het admin­panel van Bitwarden via het geconfigureerde DynDNS-adres. Geef de containers wat tijd om op te starten. Op een RaspberryPi 4 met 4 GB geheugen neemt de eerste keer opstarten een paar minuten om beslag. Je kunt de status van de containers controleren met het commando docker ps. Zodra de Bitwarden-container de status ‘up x minutes (healthy)’ toont, kun je de webvault oproepen in een browser op bitwarden.example.com. Voor het adminpanel voeg je /admin toe aan de url. Als je ergens een fout hebt gemaakt, zal het commando docker logs gevolgd door de naam van de container helpen bij de diagnose.

    Fase 4: vergrendelen - masterwachtwoord maken

    Registreer een nieuwe gebruiker en maak een veilig masterwachtwoord aan. Log vervolgens in op de webvault en stel je gebruikersaccount in. Als je al eerder een andere wachtwoordmanager hebt gebruikt, vind je snel je weg.

    Mijn kluis

    De categorie ‘Mijn kluis’ bevat items zoals opgeslagen inloggegevens en beveiligde notities. Je kunt ze markeren als favorieten of sorteren in mappen.

    Hulpmiddelen

    Onder Hulpmiddelen vind je een wachtwoordgenerator, rapportages over zwakke of gelekte wachtwoorden en de functies om wachtwoordverzamelingen te importeren en exporteren. Bitwarden ondersteunt de meest voorkomende formaten (.csv, .json, .xml, .txt).

    Tweefactorauthenticatie instellen

    Stel absoluut tweefactorauthenticatie in om te voorkomen dat aanvallers toegang krijgen tot je wachtwoorddatabase. Wijzig de instellingen in het submenu Tweestapsaanmelding.

    Bitwarden_RS biedt tweefactorauthenticatie via 2FA-apps zoals Authy, Duo en Microsoft Authenticator, via e-mail en met FIDO-compatibele hardwarematige beveiligingssleutels.

    Menu Tweestapsaanmelding – een herstelcode

    Zodra tweefactorauthenticatie is ingesteld, kun je in het menu Tweestapsaanmelding een herstelcode laten weergeven. Noteer deze code en bewaar hem op een veilige plaats. Dit is de laatste mogelijkheid om nog toegang te krijgen tot je kluis als je je mobiele telefoon verliest en geen toegang meer hebt tot de tweede factor.

    Verschillende methoden instellen

    Als je meteen verschillende methoden voor tweefactorauthenticatie instelt, zul je nooit in de situatie terechtkomen dat je de herstelcode nodig hebt.

    URL staat nog open - nieuwe registraties deactiveren

    Om te voorkomen dat anderen toegang krijgen tot je Bitwarden-account, moet je ongewenste gebruikersregistraties beperken. Ga naar het adminpanel op bitwarden.example.com/admin om enkele instellingen te wijzigen en aanvalsmogelijkheden op je wachtwoordserver te verkleinen.

    Wijzig instellingen in het adminpanel

    Onder de sectie General moet je de juiste waarde invoeren in het veld ‘Domain URL’, zodat automatisch verzonden e-mails de juiste links bevatten. Verwijder bij ‘Allow new signups’ het vinkje om inschrijvingen op de hoofdpagina te voorkomen.

    Verhinder dat anderen gebruikers uitnodigen

    Je kunt andere gebruikers nog steeds via e-mail uitnodigen, ook als het registreren op de hoofdpagina is uitgeschakeld. Als je de wachtwoordserver met vrienden deelt, kun je het beste verhinderen dat zij nog meer gebruikers uitnodigen. Ga naar de sectie General en verwijder het vinkje bij ‘Allow Invitations’.

    Extra beveiligingsopties

    Als dat niet genoeg is, kun je de webvault deactiveren met de omgevingsvariabele WEB_VAULT_ENABLED=false of Bitwarden_RS uitsluitend in het lokale netwerk gebruiken met zelf gegenereerde certificaten. Om van buitenaf toegang te krijgen tot de wachtwoordserver, zou je een VPN-oplossing moeten gebruiken.

    Beveiliging via reverse-proxy Caddy en Let’s Encrypt

    De ontwikkelaars raden het gebruik van de geïntegreerde ROCKET_TLS-methode voor HTTPS af. In plaats daarvan raden zij aan om privé-instanties te beveiligen met de reverse-proxy Caddy en Let’s Encrypt-certificaten. Je kunt een handleiding voor deze procedure vinden op GitHub in de wiki van het project.

    Raspberry Pi als Password Manager met Bitwarden is gereed

    De Raspberry Pi als Password Manager met Bitwarden is gereed. Bitwarden_RS biedt veel functies waarvoor je normaal gesproken een Premium-account van Bit­warden nodig hebt. Sommige functies ontbreken echter, zoals LiveSync en pushnotificaties voor iOS en Android, Single-Sign-On en Emergency Access. De ontwikkelaars hebben een lijst van de verschillen met de officiële Bitwarden-server in de wiki van het project gezet.


    bitwarden clients verschillende platformen

    Er bestaan Bitwarden-clients voor verschillende platformen, hier zie je bijvoorbeeld de browser-add-on in Chromium. Om de client toegang te geven tot de wachtwoordserver, heeft hij de url van de server nodig.


    Naast de webvault kun je ook gebruik maken van de Bitwarden-browserextensies en de apps voor Android en iOS om wachtwoorden op te slaan, beheren en synchroniseren. Er zijn desktopclients voor Windows, Linux, macOS, en zelfs tools voor de commandline. Een lijst van alle clients staat op de Bitwarden-­website.

    Verborgen optie

    Om de applicaties te laten communiceren met de server-API op de Raspberry Pi, moet je de url van je Bitwarden-instantie invoeren. De optie daarvoor zit verborgen achter het tandwiel in de linker bovenhoek van het inlogvenster.

    Voorzichtig! Uitlogknop is uitloggen van de server

    Wees voorzichtig bij het uitloggen uit Bitwarden: de knop ‘uitloggen’ in de clients is misleidend. Het betekent ‘uitloggen van de server’. Als je je volledig uitlogt en de server-API niet toegankelijk is, zal Bitwarden een nieuwe aanmelding weigeren.

    Vergrendel je gebruikersaccount

    Om opnieuw in te loggen, moet je verbonden zijn met de server. Kies daarom altijd de optie ‘Nu vergrendelen’ om je gebruikersaccount te vergrendelen. Tenzij je van plan bent om van gebruikersaccount te wisselen of de client op een andere server aan te melden.

    Gebruik de browserextensie om de wachtwoordkluis te vullen

    Dan kun je aan de slag met Bitwarden en de wachtwoordkluis vullen. Wanneer je in de toekomst bijvoorbeeld een inlogpagina op een website bezoekt en inloggegevens invoert, biedt de browserextensie aan de inloggegevens in de kluis op te slaan.

    Maak gebruik van de wachtwoordgenerator

    Voor nieuwe aanmeldingen kan de geïntegreerde wachtwoordgenerator willekeurige, veilige wachtwoorden aanmaken. Als de inloggegevens al zijn opgeslagen in je kluis, kan Bitwarden automatisch inlogformulieren invullen. Je kunt het auto-fill-gedrag aan je wensen voor verschillende websites aanpassen.

    Synchroniseer automatisch opgeslagen wachtwoorden

    Opgeslagen wachtwoorden worden voortaan automatisch gesynchroniseerd.

    Conclusie Raspberry Pi als Password Manager met Bitwarden

    Bitwarden_RS maakt het mogelijk om je Raspberry Pi als Password Manager te gebruiken met cloudfunctionaliteit. Hou er wel rekening mee dat als je gebruikmaakt van Bitwarden_RS, het belangrijk is om regelmatig back-ups te maken en de containerimages te controleren op beveiligingsupdates. Al met al kan Bitwarden_RS een betaalde password manager vervangen en is ideaal voor gebruik in kleine teams of met vrienden en familie.


    Deze informatie is afkomstig uit een artikel in c’t magazine, dat is geschreven door Niklas Dierking en Noud van Kruysbergen.


    Volg meer workshops in c't 05/2024

    Deel dit artikel

    Noud van Kruysbergen
    Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

    Lees ook

    Netwerken testen met een Raspberry Pi en de tool c’t-net-tester

    Deelt de router geen ip-adressen meer uit of is er een netwerkkabel kapot? Doet de smartphone moeilijk of is er echt geen wifi? Met onze tool c't-net-...

    Raspberry Pi 4 koeling: koeler, behuizing en andere opties

    De Raspberry Pi 4 wordt onder belasting heet en verlaagt zijn snelheid. Met koeling kan hij langer op topsnelheid werken. We testen verschillende oplo...

    0 Praat mee
    avatar
      Abonneer  
    Laat het mij weten wanneer er