Beveiliging van de Raspberry Pi
De beveiliging van de Raspberry Pi is belangrijk. Gaten in de beveiliging kan ervoor zorgen dat hackers de Raspberry Pi, zonder dat je het weet, overnemen en er alles mee kunnen doen.
Het gewenste beveiligingsniveau is afhankelijk van wat je met de Raspberry Pi wilt gaan doen. Indien je het apparaat in je thuisnetwerk, achter een router met firewall, wilt gebruiken dan is de standaard beveiliging meestal al voldoende.
Echter, indien jouw Raspberry Pi direct met het internet verbonden is, bijvoorbeeld met een SSH-verbinding, dan moet je zeker wat beveiligingsmaatregelen nemen.
Wijzig het standaard wachtwoord
De standaard gebruikersnaam en wachtwoord wordt gebruikt voor iedere Raspberry Pi waar Raspbian op draait. Indien iemand toegang kan krijgen tot jouw Raspberry Pi en de gebruikersnaam en wachtwoord zijn niet gewijzigd dan heeft die persoon root acces tot jouw Raspberry Pi.
Met onderstaand commando gaan we het wachtwoord wijzigen. Geef in de terminal in:
1 |
sudo raspi-config |
Selecteer optie 1 en volg de instructies om het wachtwoord te wijzigen.
Wijzig de gebruikersnaam
Door het wijzigen van de gebruikersnaam maak je de Raspberry Pi een klein stukje veiliger. De gebruikersnaam van alle Raspberry’s is standaard pi
, wijzig dit daarom zo snel mogelijk.
Om een nieuwe gebruiker toe te voegen met dezelfde rechten als de pi
gebruikers gebruiken we het volgende comanndo:
1 |
sudo useradd -m fred -G sudo |
Hiermee is een nieuwe gebruiker met de naamfred
aangemaakt, een home folder gecreëerd en de gebruiker is toegevoegd aan de sudo
groep. Je moet vervolgens een wachtwoord instellen voor de nieuwe gebruiker:
1 |
sudo passwd fred |
Log uit en log in met de nieuwe accountgegevens. Controleer of alle rechten in orde zijn (bv. sudo opdrachten) met commando:
1 |
sudo visudo |
Het visudo
commando kan alleen uitgevoerd worden door een gebruiker met sudo rechten. Als het succesvol uitgevoerd wordt dan kun je er zeker van zijn dat het nieuwe account juist is toegevoegd aan de sudo
groep.
Indien je zeker weet dat het nieuwe account goed werkt dan kun je de pi
gebruiker verwijderen. Let er wel op dat de huidige Raspbian distributie soms de gebruiker pi
nodig heeft. Indien je niet zeker bent verwijder de gebruiker pi
dan niet.
Gebruik onderstaand commando om de pi
gebruiker te verwijderen:
1 |
sudo deluser pi |
Dit commando zorgt ervoor dat de pi
gebruiker wordt verwijderd, maar dat de home/pi
folder blijft bestaand. Met onderstaand commando kun je de home folder van de gebruiker pi
direct verwijderen. Let er wel op dat alle data in deze folder permanent verwijderd wordt. Zorg er dus voor dat je eventueel een back-up gemaakt hebt.
1 |
sudo deluser -remove-home pi |
Sudo vereist een wachtwoord
Indien je sudo
voor een commando zet wordt dit commando uitgevoerd als superuser. Standaard heb je hier geen wachtwoord voor nodig. Opzich is dit geen probleem. Echter, indien jouw Raspberry Pi met het internet verbonden is en iemand heeft toegang gekregen tot de Raspberry (bijvoorbeeld via een webpage exploit) dan kan de hacker dingen wijzigen waar een superuser login eigenlijk voor nodig is, tenzij je een wachtwoord op sudo
hebt gezet.
Om er een wachtwoord op te zetten geef je onderstaand commando in:
1 |
sudo nano /etc/sudoers.d/010_pi-nopasswd |
en wijzig de pi
regel (of welke gebruikersnaam superuser rechten heeft ) naar
1 |
pi ALL=(ALL) PASSWD: ALL |
Sla tot slot het bestand op.
Installeer de laatste securiy fixes
Zorg er altijd voor dat je Raspbian versie up-to-date is, aangezien de meeste recente distributie de laatste security fixes bevatten.
Updaten van alle geïnstalleerde packages:
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade |
Tijdelijke bestanden opruimen:
1 2 |
sudo apt-get autoremove sudo apt-get autoclean |
Indien je gebruik maakt van SSH om verbinding te maken met jouw Raspberry Pi dan kan het zinvol zijn om een cron job toe te voegen om de SSH-server periodiek te updaten. Onderstaand commando, wat je kunt instellen als een dagelijkse cron job, zorgt ervoor dat je altijd de laatste SSH beveiligings fixes hebt, onafhankelijk van je normale update-proces.
1 |
sudo apt-get install openssh-server |
Verbeteren van gebruikersnaam/wachtwoord beveiliging
Het belangrijkste is dat je een erg sterk wachtwoord gebruikt, zeker indien de Raspberry Pi aan het internet verbonden. Gebruik hoofd- en kleine letters, cijfers én leestekens.
Je kunt ook bepaalde gebruikersnaam toestaan of blokkeren in de sshd
configuratie:
1 |
sudo nano /etc/ssh/sshd_config |
Voeg onderstaande regel toe aan het bestand (uiteraard alleen de namen gebruikers die je toestemming wilt geven om in te kunnen loggen).
1 |
AllowUsers edward andrew charles anne |
Je kunt ook DenyUsers gebruiken, zodat bepaalde namen niet kunnen inloggen:
1 |
DenyUsers harry william |
Nadat je de wijzigingen hebt doorgevoerd moet je de sshd
service herstarten met commandosudo systemctl restart ssh
of de Raspberry Pi simpelweg rebooten.
Installeer een firewall
Er zijn veel firewall mogelijkheden beschikbaar voor Linux. De meest gebruikte oplossing is om gebruik te maken van iptables. Standaard is iptables
geïnstalleerd bij Raspbian, maar niet geconfigureerd. De configuratie kan een ingewikkelde taak zijn. Een gemakkelijkere alternatief is gebruik maken van ufw
, wat staat voor ‘Uncomplicated Fire Wall’. Dit is de standaard firewall in Ubuntu, maar kan ook eenvoudig geïnstalleerd worden op jouw Raspberry Pi:
1 |
sudo apt-get install ufw |
ufw
is een tamelijk eenvoudige opdrachtregel. In dit artikel leggen we een paar basis opdrachtregels uit. Let erop dat ufw
uitgevoerd moet worden met superuser rechten, alle commando’s worden dus voorafgegaan met sudo
. Je kunt alle commando’s ook uitvoeren met de optie --dry-run
, hierdoor worden alle commando’s uitgevoerd, zonder dat er wijzigen doorgevoerd worden.
Om de firewall in te schakelen (ook na een reboot) geef je onderstaand commando in:
1 |
sudo ufw enable |
Om de firewall uit te schakelen (ook na een reboot) geef je onderstaand commando in:
1 |
sudo ufw disable |
Een bepaalde poort openzetten:
1 |
sudo ufw allow 22 |
Een bepaald poort blokkeren:
1 |
sudo ufw deny 22 |
Je kunt ook een bepaalde sevice op een bepaalde poort blokkeren of toestaan:
1 |
sudo ufw deny 22/tcp |
Je kunt een bepaalde service toestaan, zelfs als je niet weet welke poort het gebruikt. Dit voorbeeld staat de ssh service toe via de firewall:
1 |
sudo ufw allow ssh |
Het statusoverzicht van alle settings van de firewall:
1 |
sudo ufw status |
De regels kunnen redelijk gecompliceerd zijn, bijvoorbeeld door een specifiek IP adres te blokkeren, specificeren in welke richting verkeer toegestaan is of het aantal pogingen om verbinding te maken te limiteren (bv. om een Denial of Service (DoS) aanval te voorkomen. Je kunt ook aangeven of de regels gelden voor de LAN-verbinding (eth0) of voor de Wi-Fi verbinding (wlan0). Voor de volledige details kun je kijken op de ufw
man pagina (man ufw
), maar de meeste voorkomende commando’s vind je hieronder.
Limiteer de log in pogingen op de SSH poort met tcp: dit zorgt ervoor dat een IP adres dat zes of meer pogingen binnen 30 seconden heeft gedaan geen verbinding meer kan maken:
1 |
sudo ufw limit ssh/tcp |
Weiger verbinding met poort 30 vanaf IP adres 192.168.2.1
1 |
sudo ufw deny from 192.168.2.1 port 30 |
Dank voor dit goed overzicht om een Raspberry beter te beveiligen, zoals verwacht kreeg ik problemen met fail2ban vanwege IPv6 probleem (ERROR: problem running ip6tables). Maar ik heb nog een ander vreemd probleem, eerst mijn UFW status:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip
To Action From
— —— —-
vpnpoort/udp ALLOW IN Anywhere
Anywhere ALLOW IN 192.x.y.0/24
Met deze instelling kan ik probleemloos via VPN (na poort forwarding op mijn router) de Raspberry via SSH benaderen. Maar mijn browser via VPN gebruiken lukt niet (inclusief het benaderen van mijn Domestica op een ander Pi) . Ik heb toevallig wel een oplossing gevonden maar deze begrijp ik niet; bovenstaand probleem is na een reboot van de Pi maar na de twee commando’s: “sudo ufw disable/sudo ufw enable” werkt het (browser/domestica) wel. Omdat ik dit verschil niet direct door had, was ik behoorlijk “dazed and confuzed” wanneer het wel dan weer niet werkte. Enig idee?
Pi 3B+ / OpenVPN private IP: 10.8.0.2