Hoe zet je een VPS op in 10 minuten?
```bash ssh-keygen -t ed25519 -C "vps-$(date +%Y%m%d)" ```
Geef een sterke passphrase. Ja, dat is onhandig. Nee, het is niet optioneel als die sleutel ooit op een gedeelde machine staat.
Koppel de publieke sleutel (`~/.ssh/id_ed25519.pub`) aan de VPS tijdens het aanmaken. Kies Ubuntu 22.04 LTS. Noteer het IP-adres dat je krijgt.
Verbinding maken:
```bash ssh -i ~/.ssh/id_ed25519 ubuntu@JOUW_IP ```
De eerste keer krijg je een fingerprint-vraag. Vergelijk die met wat de provider toont in het dashboard. Klopt het niet, verbreek dan de verbinding — een verkeerde fingerprint betekent dat je tegen de verkeerde server praat.
Stap 2: Systeem updaten
Een verse image loopt vaak maanden achter. Patch eerst.```bash sudo apt update && sudo apt upgrade -y ```
Dit kost een minuut of twee. Sla je het over, dan draait je server vanaf seconde één met bekende CVE's. Bij een reboot na kernel-update ben je even offline; plan dat niet midden in een deployment.
Stap 3: Firewall opzetten met nftables
`nftables` is de moderne opvolger van `iptables` en zit standaard in Ubuntu 22.04. Je wilt alleen SSH naar binnen laten, plus bestaande verbindingen.```bash sudo nft add table inet filter sudo nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }' sudo nft add rule inet filter input ct state established,related accept sudo nft add rule inet filter input iif lo accept sudo nft add rule inet filter input ip protocol icmp accept sudo nft add rule inet filter input tcp dport 22 accept sudo nft add rule inet filter input counter drop ```
De laatste regel telt wat er tegengehouden wordt. Zonder die counter weet je niet of je firewall iets doet of gewoon alles doorlaat.
Regels verdwijnen bij reboot. Maak ze persistent:
```bash sudo mkdir -p /etc/nftables.d sudo nft list ruleset | sudo tee /etc/nftables.d/99-vps.nft > /dev/null sudo sed -i 's|^include "/etc/nftables.conf"|include "/etc/nftables.d/*.nft"|' /etc/nftables.conf sudo systemctl enable nftables sudo systemctl restart nftables ```
Dit is meer werk dan `ufw` — dat is de eerlijke afweging. `ufw` is één commando, maar het is een wrapper die je later beperkt als je NAT, forwarding of rate limiting nodig hebt. Voor een simpele VPS is `ufw` prima. Voor alles wat groeit, is nftables de betere investering.
Stap 4: Gebruiker aanmaken en root-login uitschakelen
Werken als root is een gewoonte die je één keer moet afleren.```bash sudo adduser beheerder sudo usermod -aG sudo beheerder sudo mkdir -p /home/beheerder/.ssh sudo cp ~/.ssh/authorized_keys /home/beheerder/.ssh/ sudo chown -R beheerder:beheerder /home/beheerder/.ssh sudo chmod 700 /home/beheerder/.ssh sudo chmod 600 /home/beheerder/.ssh/authorized_keys ```
Test eerst of de nieuwe gebruiker kan inloggen in een tweede terminal. Ga niet verder voordat dat werkt — anders sluit je jezelf buiten.
Dan pas root-login dichtzetten:
```bash sudo sed -i 's/^#PermitRootLogin./PermitRootLogin no/' /etc/ssh/sshd_config sudo sed -i 's/^#PasswordAuthentication./PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart ssh ```
Wachtwoord-authenticatie uitzetten is de grootste winst. Bots proberen dagelijks duizenden wachtwoorden; met alleen key-based auth valt dat hele aanvalsoppervlak weg.
Stap 5: Monitoring met sysstat
Je wilt weten wat er gebeurt voordat de server omvalt.```bash sudo apt install -y sysstat sudo sed -i 's/^ENABLED="false"/ENABLED="true"/' /etc/default/sysstat sudo systemctl enable --now sysstat ```
`sar` verzamelt elke 10 minuten statistieken en bewaart die een maand. Lichtgewicht, geen agent, geen dashboard. Voor een snelle setup ideaal — voor echte productie wil je er iets als Prometheus naast zetten, want `sar` stuurt geen alerts.
Stap 6: Netwerkconfiguratie veilig aanpassen met netplan
Op Ubuntu 22.04 beheert `netplan` de netwerkinterfaces. Wijzig je daar iets fout, dan verlies je de SSH-verbinding en kun je via de console van je provider weer naar binnen.`netplan try` vangt dat op: het past de configuratie toe, wacht op bevestiging, en rolt automatisch terug na 120 seconden.
```bash sudo netplan try ```
Druk op Enter als de verbinding blijft werken. Druk je niets, dan herstelt het systeem zichzelf. Dit is de reden om netplan boven handmatige `/etc/network/interfaces` te verkiezen — de veiligheidsklep is ingebouwd.
Stap 7: Bestandssysteem controleren
ext4 raakt zelden corrupt, maar een onverwachte power-off kan het toch doen. `e2fsck` controleert en repareert.```bash sudo tune2fs -c 30 /dev/vda1 ```
Dit forceert elke 30 mounts een check. Op een VPS met weinig reboots betekent dat misschien één keer per jaar. Vaker is onnodig; nooit is roekeloos.
Stap 8: Logs filteren met mawk
`mawk` is de standaard AWK-implementatie op Ubuntu — sneller dan `gawk`, en voor logverwerking ruim voldoende.```bash sudo tail -f /var/log/auth.log | mawk '/sshd/ && /Failed/ {print $1, $2, $3, $11}' ```
Dit toont alleen mislukte SSH-pogingen met tijdstip en gebruiker. Handig tijdens het debuggen van key-auth, en een snelle manier om te zien of je server al gescand wordt. Spoiler: dat wordt hij.
Verificatie
Drie checks, in deze volgorde.SSH draait zonder wachtwoord en zonder root:
```bash ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no beheerder@JOUW_IP ```
Deze moet geweigerd worden. Lukt het toch, dan staat `PasswordAuthentication` nog op `yes`.
Firewall actief:
```bash sudo nft list ruleset | grep -c "policy drop" ```
Output moet minimaal `1` zijn.
Monitoring loopt:
```bash sar -u 1 3 ```
Drie regels CPU-statistieken. Zie je `Cannot open /var/log/sysstat/saXX`, dan is sysstat nog niet actief — meestal omdat de service niet herstart is na het aanpassen van `/etc/default/sysstat`.
Veelgestelde problemen
"Permission denied (publickey)" na het uitzetten van wachtwoord-login. De authorized_keys van de nieuwe gebruiker heeft verkeerde rechten. `chmod 700 ~/.ssh` en `chmod 600 ~/.ssh/authorized_keys`, en controleer of de home-directory niet group-writable is."Connection refused" na netplan-wijziging. Je hebt de SSH-poort of het IP-adres veranderd en de rollback was al voorbij. Gebruik de console in het dashboard van je provider, of start in rescue mode.
`nft` regels weg na reboot. Je hebt de `include`-regel in `/etc/nftables.conf` niet aangepast, of `nftables.service` niet ge-enabled. Controleer met `systemctl status nftables` en `cat /etc/nftables.conf | head`.
Tien minuten is realistisch voor deze setup. Wat je niet in tien minuten krijgt: fail2ban, automatische security-updates, een monitoring-stack met alerts, en een backup-strategie. Die komen in de volgende ronde — of nooit, en dan merk je het op het moment dat je het het minst kunt gebruiken.