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:

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:

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:

sudo passwd fred

Log uit en log in met de nieuwe accountgegevens. Controleer of alle rechten in orde zijn (bv. sudo opdrachten) met commando:

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:

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.

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:

sudo nano /etc/sudoers.d/010_pi-nopasswd

en wijzig de pi regel (of welke gebruikersnaam superuser rechten heeft ) naar

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:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Tijdelijke bestanden opruimen:

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.

sudo apt-get install openssh-server

Verbeteren van gebruikersnaam/wachtwoord security

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:

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).

AllowUsers edward andrew charles anne

Je kunt ook DenyUsers gebruiken, zodat bepaalde namen niet kunnen inloggen:

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:

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:

sudo ufw enable

Om de firewall uit te schakelen (ook na een reboot) geef je onderstaand commando in:

sudo ufw disable

Een bepaalde poort openzetten:

sudo ufw allow 22

Een bepaald poort blokkeren:

sudo ufw deny 22

Je kunt ook een bepaalde sevice op een bepaalde poort blokkeren of toestaan:

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:

sudo ufw allow ssh

Het statusoverzicht van alle settings van de firewall:

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:

sudo ufw limit ssh/tcp

Weiger verbinding met poort 30 vanaf IP adres 192.168.2.1

sudo ufw deny from 192.168.2.1 port 30

Installeer fail2ban

Indien je jouw Raspberry Pi als een server gebruikt, bijvoorbeeld als ssh of webserver, dan zitten er ‘gaten’ in de firewall. Door deze gaten gaat het gewenste verkeer. Echter, kwaadwillenden kunnen via deze gaten ook naar binnen komen en daar kan Fail2ban goed van pas komen. Fail2ban, geschreven in Python, is een scanner die de logbestanden van de Raspberry Pi bekijkt op verdachte activiteiten. Zaken als brute-force pogingen om in te loggen zullen opgemerkt worden. Vervolgens wordt de geïnstalleerde firewall ‘geïnformeerd’ dat verdere log in pogingen van een verdacht IP adres geblokkeerd moeten worden. Je hoeft dus zelf de logbestanden niet meer te bekijken voor ongewenste pogingen en je hoeft de firewall zelf ook niet meer aan te passen.

Installeer Fail2ban met het volgende commando:

sudo apt-get install fail2ban

Let op dat de versie van Fail2ban in de repository (v.0.8.13) geen IPv6 netwerken ondersteunt. Indie je IPv6 gebruikt dan moet je versie v0.10 of hoger installeren. Kijk op de website van Fail2ban voor meer informatie hoe je dit precies kunt doen.

Tijdens de installatie creëert Fail2ban een folder /etc/fail2ban waar het configuratiebestand jail.conf in staat. Dit moet gekopieerd worden naar jail.local om het te actieveren. In het configuratiebestand staat een set van standaard opties. Geef onderstaande commando’s bij de terminal in:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Ga opzoek naar de sectie[ssh]. Je zal iets soortgelijks als onderstaand zien (mocht je [ssh] niet vinden voeg onderstaande regels dan toe aan het bestand):

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Zoals je kunt zien heet deze sectie ssh, is ingeschakeld, betreft de ssh poort, filters gebruiken de \etc\fail2ban\filters.d\sshd.conf parameters, maakt een logbestand aan in /var/log/auth.log voor verdachte activiteiten en staat zes pogingen toe, voordat er daadwerkelijk actie wordt ondernomen. We zien dat de standaard ban actie het volgende is:

# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overridden globally or per
# section within jail.local file
banaction = iptables-multiport

iptables-multiport betekent dat het Fail2ban systeem het /etc/fail2ban/action.d/iptables-multiport.conf bestand uitvoert indien aan de voorwaarden wordt voldaan. Er is een aantal verschillende actie configuratiebestanden die gebruikt kunnen worden. Multiport blokkeert alle toegang tot alle poorten.

Indien je een IP adres permanent wilt blokkeren na drie gefaalde pogingen dan kun je de waarde van maxretry in de[ ssh] sectie op 3 zetten en de bantime een negatief nummer geven:

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3 
bantime = -1

Verdere specifieke informatie over settings van Fail2 ban kun je hier vinden. Nadat je alle settings goed gezet hebt gaan we Fail2ban herstarten, zodat alle wijzigingen ook actief zijn:

sudo service fail2ban restart

Vanaf nu is je Raspberry Pi beschermd tegen brute-force aanvallen, hoewel alle bans worden opgeheven indien je Fail2ban of je Raspberry Pi herstart. Mocht je het voor elkaar krijgen om jezelf te bannen, dan kun je simpelweg de Raspberry Pi rebooten.

Je kunt jouw IPTables bekijken om alle gebande IP adressen in te zien met commando:

sudo iptables -L -n --line

Voorbeeld logbestand Fail2ban

Mocht je nog niet overtuigd zijn van het nut van Fail2ban, bekijk dan eens onderstaand lijstje. Dit is de vangst van een halve dag:

19-3-2018 fail2ban.actions [26697]: NOTICE [sshd] Ban 103.99.0.186
19-3-2018 fail2ban.actions [26697]: NOTICE [sshd] Ban 182.100.67.119
19-3-2018 fail2ban.actions [27877]: NOTICE [ssh] Ban 182.100.67.119
19-3-2018 fail2ban.actions [27877]: NOTICE [ssh] Ban 103.99.0.186
19-3-2018 fail2ban.actions [27877]: NOTICE [ssh] Ban 96.68.99.234
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 92.254.141.170
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 162.105.28.7
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 45.122.221.42
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 202.104.149.55
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 183.157.164.198
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 66.98.69.142
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 123.20.15.251
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 103.83.198.104
19-3-2018 fail2ban.actions [440]: NOTICE [sshd] Ban 103.83.198.104
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 193.70.90.250
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 5.188.10.179
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 203.154.243.50
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 137.119.55.87
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 195.88.62.244
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 88.87.202.71
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 85.95.185.53
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 36.34.85.175
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 193.70.85.206
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 35.178.84.184
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 101.236.61.35
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 52.210.166.166
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 35.227.78.252
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 180.250.210.133
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 193.70.46.201
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 85.199.232.4
19-3-2018 fail2ban.actions [440]: NOTICE [ssh] Ban 94.158.98.3
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 195.219.9.72
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 54.36.190.101
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 38.108.53.157
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 113.188.187.148
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 116.107.129.184
19-3-2018 fail2ban.actions [471]: NOTICE [ssh] Ban 186.91.223.82

 

Indien je bovenstaande stappen hebt uitgevoerd is je Raspberry Pi uitstekend beveiligd tegen indringers van buitenaf!

Eén gedachte over “Beveiliging van de Raspberry Pi

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *