Een webserver opzetten op een Raspberry Pi, is een fluitje van een cent. Om een veilige webserver op te zetten, daar komt iets meer bij kijken. In dit artikel geef ik een uitleg hoe je een (relatief) veilige webserver kunt installeren op je Raspberry Pi.
Benodigdheden:
- Raspberry Pi (in dit voorbeeld gebruik ik een Raspbeery Pi 3)
- Een sd kaart met de laatste versie van Raspbian (download de laatste versie HIER)
- Netwerkkabel verbonden met een router of modem, zorg ervoor dat poort 80 (http) en 443 (https) open staan in router en/of modem (raadpleeg de handleiding van router en/of modem)
- Een geldige domeinnaam welke ingesteld is om naar uw externe ip adres door te verwijzen. (raadpleeg eventueel uw provider als u niet weet hoe u dit moet instellen)
- Enige basis kennis van linux, de Raspberry Pi en het gebruik van SSH (dmv Putty)
- Putty (putty kunt u HIER downloaden)
- Optioneel, een usb stick of usb externe harddisk
- BELANGRIJK: Kijk welk lokaal ip adres aan de Raspberry Pi is toegewezen. Stel zonodig dit lokale ip adres is als vast ip adres voor deze Raspberry Pi (raapleeg de handleiding van router en/of modem)
Na het opstarten van de Raspberry Pi gaan we deze eerst configureren en updaten. Ga op de Raspberry Pi naar Preferences -> Raspberry Pi Configuration.
Het eerste wat we nu gaan doen is het standaard wachtwoord veranderen van user Pi. (Change User Password) Ook stellen we in dat we voortan direct in de commandline interface willen opstarten, zet een vinkje bij "To CLI'. Haal het vinkje bij 'Auto Login' weg.Omdat we een webserver gaan opzetten is het nodig om de Hotsname te wijzigen. Typ hier de domeinnaam in die u wilt gebruiken voor uw webserver.
Vervolgens zet u op het tabblad 'Interfaces' SSH aan. Controleer meteen of alle overige interfaces op dit tabblad uitstaan, deze heeft u niet nodig. Op tabblad 'Performance' stellen we 'GPU Memory' in op 16. Voor een webserver heeft u de grafische mogelijkheden van de Raspberry Pi niet nodig, dus kunnen we rustig het aan de GPU toegewezen geheugenruimte minimaliseren. Op het tabblad 'Localisation' stellen we de tijdzone in op 'Europe -> Amsterdam' zodat de tijd op de webserver netjes gelijk loopt. Klik vervolgens op OK en kies voor het opnieuw opstarten van de Rasberry zodat alle zojuist gemaakte wijzigingen van kracht worden.
Na het opnieuw starten van de Raspberry Pi, hebben we het hierop aangesloten toetsenbord en beeldscherm niet meer nodig. We gaan nu verder via SSH dmv Putty. Start Putty op en login op de Raspberry dmv het ip lokale ip adres wat is toegewezen aan de Raspberry Pi. (LET OP! u dient in te loggen met het door u nieuw ingestelde wachtwoord)
We ga nu als eerste het root wachtwoord wijzigen. (typ de volgende regel(s) in, gevolgd door enter)
sudo passwd root
Kies nu een sterk wachtwoord voor user root!
Nu gaan we de raspberry Pi voorzien van de laatste updates en installeren we de voor de webserver benodigde software pakketten.
sudo apt-get update
sudo apt-get upgrade
Update Rasbian OS:
sudo apt-get dist-upgrade
Update de firmware:
sudo rpi-update
Herstart nu de Raspberry Pi:
sudo reboot
Na het herstarten en opnieuw inloggen gaan we een nieuwe user aanmaken en user Pi verwijderen. Voor we user Pi gaan verwijderen moeten we eerst uitvinden tot welke groepen deze user behoord. Dit doen we met het volgende commando:
groups
Kopieer de regel met user groups en plak deze even in een notitie via bijvoorbeeld kladblok. De regel ziet er ongeveer zo uit.
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
Nu gaan we een nieuwe user aanmaken. Dit doen we met het volgende commando: (controleer of de hieronder vermelde groepen overeenkomen met de groepen die u naar het kladblok heeft ge-kopieerd en pas onderstaand commando eventueel aan)
LET OP!! Vervang in onderstaande regel {USER-NAAM} door een door u gekozen user naam.
sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi {USER-NAAM}
Stel een wachtwoord in voor de zojuist gemaakte user: Vervang {USER-NAAM} door de door u in de vorige stap gekozen user naam
sudo passwd {USER-NAAM}
Start de Raspberry nu nog een keer opnieuw op en login met de zojuist aangemaakte user + wachtwoord.
sudo reboot
Nu gaan we de oude user Pi verwijderen.
sudo deluser --remove-all-files pi
Voor de server maken we de nieuwe groep 'server' aan met:
sudo addgroup server
Wijzig de eigenaar van het SU commando naar de zojuist aangemaakte groep:
sudo chgrp server /bin/su
sudo chmod 4550 /bin/su
Als het goed is moet nu het commando SU de volgende foutmelding opleveren:
-bash: /bin/su: Permission denied
Dit gaan we oplossen door uw nieuw aangemaakte user toe te voegen aan de groep server. (vervang {USER_NAAM} door de juiste naam)
sudo adduser {USER_NAAM} server
Om deze wijzigingen te activeren moeten we de Raspberry Pi opnieuw opstarten.
sudo reboot
Na het opstarten logt u weer in. Test nu of het SU commando werkt door SU in te typen. Er word nu gevraagd om een wachtwoord, vul hier het wachtwoord in van de root user.
Een webserver heeft geen WiFi en/of Bluetooth nodig, dus dat gaan we uitschakelen.
sudo nano /etc/modprobe.d/raspi-blacklist.conf
(Ik gebruik hier de standaard nano editor. Raadpleeg de eventueel de handleiding)
In deze nieuwe file plakt u de volgende tekst:
#wifi
blacklist brcmfmac
blacklist brcmutil
#bt
blacklist btbcm
blacklist hci_uart
(file opslaan met CTRL+X en Yes)
We gaan nu het SUDO commando configureren voor de niewe user groep:
sudo visudo
Scroll in de nu geopende file naar beneden tot u ergens: '%sudo ALL=(ALL:ALL) ALL'ziet staan. Voeg daaronder deze regel in en sla het bestand op (CTRL+X YES)
%server ALL=(root) ALL
Om ook de SSH verbinding veiliger te maken, gaan we de SSH configuratie aanpassen:
sudo nano /etc/ssh/sshd_config
In deze file ziet u ergens aan het begin "# Port 22' staan. Haal het hekje weg en verander het getal 22 in een ander. (Kies een poort tussen 1024 en 65536).
Scroll nu helemaal naar het einde van de file en voeg deze regel toe, sla vervolgens het bestand op.
PermitRootLogin no
Nergens voor nodig dat root direct in kan loggen via SSH. Stukje veiligheid.
Om deze wijziging te activeren starten we de SSH service opnieuw op met:
sudo service ssh restart
LET OP! Voor het inloggen via SSH met Putty moet u voortaan het gewijzigde poortnummer gebruiken!!
We gaan nu een aantal extra pakketten installeren:
sudo apt-get update
sudo apt-get install bc git tmux htop
Uitleg van deze pakketten:
- bc - een script om berekeningen uit te voeren.
- git - een stuk software voor het installeren en updaten van github repositories
- tmux - voor het isoleren van sessies die later opnieuw geopend kunnen worden
- htop - een programma voor het monitoren van geheugen en lopende processen
Het is aan te raden om de zogenaamde swap file uit te breiden naar 1 Gb. Dit doen we door de volgende file te wijzigen:
sudo nano /etc/dphys-swapfile
Zoek de regel: CONF_SWAPSIZE=100 en wijzig de 100 in 1024 en sla het bestand op.
CONF_SWAPSIZE=1024
Tot zover de voorbereiding en een stuk beveiliging van uw webserver.
Lees verder in deel 2 van deze handleiding >>>DEEL 2 >>>
Dit werk valt onder een Creative Commons Naamsvermelding-NietCommercieel 4.0 Internationaal-licentie.