Een nieuwe VPS hardenen: SSH-keys, firewall en Fail2ban
Kort antwoord
Doe vier dingen voordat je een nieuwe VPS echt in gebruik neemt: schakel over op SSH-key-authenticatie en zet wachtwoordlogins uit, installeer en configureer Fail2ban, en zet de firewall op portalniveau ervoor. Elke stap staat elders in deze kennisbank volledig uitgewerkt, dit artikel is de checklist die ze samenbrengt.
Een net uitgerolde VPS is vanaf het moment dat hij bestaat bereikbaar op het internet, en geautomatiseerde scanners vinden hem binnen enkele minuten. Geen van de stappen hieronder is op zichzelf moeilijk, wat telt is dat je ze in deze volgorde doorloopt voordat je de server gaat gebruiken.
1. Overschakelen op SSH-key-authenticatie
Genereer en installeer een sleutelpaar
Genereer een SSH-sleutelpaar op je eigen machine en kopieer de publieke sleutel naar de server. Zie Een SSH-sleutelpaar aanmaken voor de volledige uitleg, inclusief ssh-keygen en ssh-copy-id.
Voor een nieuwe Flexible VPS is het eenvoudiger om de sleutel toe te voegen voordat de server bestaat: ga naar Flexible VPS → Settings in Portal en voeg je publieke sleutel daar toe, handmatig of geïmporteerd vanuit GitHub of GitLab, en selecteer hem vervolgens bij het aanmaken zodat hij al klaarstaat bij de eerste opstart.
Test de sleutel voordat je wachtwoorden aanraakt
Log in met de sleutel vanuit een nieuw terminalvenster terwijl je bestaande sessie open blijft. Ga pas naar de volgende stap als dit werkt.
2. Wachtwoordauthenticatie uitschakelen
Zodra login met de sleutel bevestigd werkt, zet je wachtwoordlogins uit. Plak de instellingen niet zomaar onderaan /etc/ssh/sshd_config. Op de meeste actuele cloud-images begint dat bestand met een regel Include /etc/ssh/sshd_config.d/*.conf, levert het image daar een drop-in-bestand bij dat PasswordAuthentication yes zet, en houdt sshd de eerste waarde aan die het voor een instelling leest. Een aanpassing onderaan het hoofdbestand wordt stilzwijgend genegeerd, en wachtwoordlogin blijft aan terwijl jij denkt dat je hem hebt uitgezet.
Kijk eerst wat er al is ingesteld:
grep -rnE '^[[:space:]]*(Include|PasswordAuthentication|PermitRootLogin)' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/nullStaat er een Include-regel en zet een drop-in deze opties al, bewerk dan dat drop-in-bestand, of voeg een eigen bestand toe met een naam die eerder sorteert. Bestanden in /etc/ssh/sshd_config.d/ worden op naamvolgorde gelezen, dus 00-hardening.conf wordt gelezen vóór een meegeleverde 50-cloud-init.conf en de waarden daaruit winnen. Maak /etc/ssh/sshd_config.d/00-hardening.conf aan met:
PasswordAuthentication no
PermitRootLogin noHeeft je image geen Include-regel en geen map sshd_config.d, zet dezelfde twee regels dan in /etc/ssh/sshd_config zelf.
Controleer nu de syntax en, belangrijker nog, de waarden die sshd daadwerkelijk gaat gebruiken:
sudo sshd -t
sudo sshd -T | grep -iE 'passwordauthentication|permitrootlogin'Beide regels moeten no teruggeven. Staat er bij een van beide nog yes, dan wint een ander bestand. Ga terug naar de grep hierboven en los dat op voordat je iets herstart.
Herstart de SSH-service om dit toe te passen:
# Debian / Ubuntu
sudo systemctl restart ssh
# Rocky Linux / RHEL-based
sudo systemctl restart sshdHoud je bestaande sessie open totdat je hebt bevestigd dat een nieuwe login met de sleutel nog steeds lukt. Raak je buitengesloten, dan krijg je via consoletoegang in Portal weer toegang zonder SSH; zie Je SSH-beveiliging verbeteren voor de achtergrond bij deze stap en verdere hardeningsopties, zoals het wijzigen van de standaard SSH-poort.
3. Fail2ban installeren en configureren
Fail2ban houdt je authenticatielogs in de gaten en blokkeert IP-adressen tijdelijk na herhaalde mislukte loginpogingen. Het is een standaard tweede beveiligingslaag, ook nuttig als wachtwoordauthenticatie al is uitgeschakeld, omdat het ook andere diensten dekt die je mogelijk draait.
Installeer het
# Debian / Ubuntu
sudo apt update && sudo apt install fail2ban
Rocky Linux / RHEL-based
sudo dnf install fail2banMaak een lokale override aan
Bewerk jail.conf niet rechtstreeks, dat bestand wordt bij updates overschreven. Kopieer het in plaats daarvan naar een lokaal overridebestand:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localSchakel in jail.local de SSH-jail in en stel redelijke drempelwaarden in, bijvoorbeeld:
[sshd]
enabled = true
maxretry = 5
bantime = 1h
findtime = 10mStart en activeer de service
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdHet statuscommando toont actuele bans en bevestigt dat de jail actief is.
4. De firewall op portalniveau instellen
De stappen hierboven draaien allemaal op de VPS zelf. De portalfirewall zit ervoor als een aparte laag, een beheerde gateway per regio, en is de moeite waard om in te stellen ook als de server-side hardening al klaar is.
Alles wat je server buiten het standaardbeleid van de firewall om outbound moet kunnen bereiken, moet je expliciet als regel toevoegen onder Firewall Rules. Inbound toegang tot de VPS wordt op dezelfde manier geregeld, via NAT-regels in plaats van de server rechtstreeks bloot te stellen. Zie Firewall basisprincipes in Portal voor hoe je er een aanmaakt, het netwerk van je VPS koppelt en port forwarding instelt.
Checklist samenvatting
- SSH-sleutelpaar gegenereerd en getest, zie Een SSH-sleutelpaar aanmaken
- Wachtwoordauthenticatie en root-login uitgeschakeld in
sshd_config - Fail2ban geïnstalleerd, geconfigureerd met een lokale override, en actief
- Firewall op portalniveau aangemaakt voor de regio en gekoppeld aan de VPS, zie Firewall basisprincipes in Portal
- Besturingssysteem en OpenSSH doorlopend up-to-date houden