Bots proberen voortdurend in te loggen op elke VPS. Met deze stappen maak je je Debian- of Ubuntu-VPS veel veiliger. Volg ze in deze volgorde.
Sluit jezelf niet buiten. Houd je huidige SSH-venster open terwijl je aan SSH en de firewall werkt. Test elke wijziging in een tweede venster en sluit het eerste pas als dat lukt.
Updates installeren
Log in als root zoals in Verbinden met je Linux VPS via SSH en installeer alle updates:
apt update && apt upgrade
Bevestig met Y. Herstart daarna met reboot en log na een minuut opnieuw in.
Een eigen gebruiker met sudo
Werk niet als root: één typfout raakt dan je hele server. Maak een gewone gebruiker en gebruik sudo voor beheertaken. Vervang alex door de naam die je wilt:
apt install sudo
adduser alex
adduser alex sudo
adduser vraagt twee keer een wachtwoord en daarna gegevens die je met Enter overslaat. Het eerste commando is voor Debian, waar sudo soms ontbreekt.
Inloggen met een SSH-sleutel
Maak een sleutel op je eigen computer, niet op de VPS:
ssh-keygen -t ed25519
Druk op Enter voor de standaardlocatie en kies een wachtwoordzin (passphrase). In de map .ssh in je gebruikersmap staan nu id_ed25519, je privésleutel die je nooit deelt, en id_ed25519.pub, de openbare sleutel voor je server.
Op macOS en Linux zet je de sleutel zo op je VPS:
ssh-copy-id [email protected]
Op Windows bestaat ssh-copy-id niet. Open de openbare sleutel in Kladblok met notepad $env:USERPROFILE\.ssh\id_ed25519.pub en kopieer de hele regel. Log in als alex en voer dit uit:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys
Plak de regel, sla op met Ctrl+O en Enter en sluit af met Ctrl+X.
Test in een nieuw venster: ssh [email protected] vraagt nu hooguit je wachtwoordzin, niet het wachtwoord van alex. Controleer ook sudo whoami met het wachtwoord van alex: dat toont root.
Inloggen met een wachtwoord uitzetten
Doe dit pas als je sleutel en sudo allebei werken. Maak een nieuw bestand:
sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
Zet er deze regels in en sla op:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
SSH leest deze map vóór het hoofdbestand, op alfabetische volgorde, en de eerste waarde telt. Door 00 gaat jouw bestand voor. Controleer de instellingen en herstart SSH:
sudo sshd -t
sudo systemctl restart ssh
Geeft sshd -t geen uitvoer, dan is alles in orde. Test in een nieuw venster: ssh [email protected] werkt nog, maar ssh -o PubkeyAuthentication=no [email protected] en ssh [email protected] worden geweigerd.
Een firewall met ufw
Sta SSH toe voordat je de firewall aanzet, anders sluit je jezelf buiten:
sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw enable
sudo ufw status verbose
Bevestig de vraag met y. Inkomend verkeer is nu geblokkeerd, behalve wat je toestaat. Open zo ook de poorten van je diensten, bijvoorbeeld sudo ufw allow 443/tcp voor een website. Let op: poorten die je met Docker publiceert, gaan buiten ufw om.
Automatische beveiligingsupdates
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Kies Yes. Op Ubuntu staat dit al aan, op Debian zet je het zo aan. Je VPS installeert nu elke dag beveiligingsupdates, maar herstart niet vanzelf. Voer daarom af en toe sudo reboot uit voor een nieuwe kernel.
Toch buitengesloten?
Neem contact op met support en vermeld het IP-adres van je VPS. Stuur nooit je wachtwoord of privésleutel mee. Achtergrond vind je in de OpenSSH-handleiding van Ubuntu.