Je doorloopt een checklist die van een nieuwe VPS een veilige server maakt: updates, sterke wachtwoorden, een eigen gebruiker, een SSH-sleutel, een firewall, fail2ban en automatische beveiligingspatches. Bij elke stap leggen we uit waarom je hem zet en wat je precies instelt.
Wat je nodig hebt
- Een nieuwe VPS bij StormHost met Ubuntu 24.04 of Debian 13
- Een SSH-verbinding als root (handleiding)
- Een wachtwoordmanager of een veilige plek om wachtwoorden te bewaren
- Ongeveer 30 minuten
Waarom meteen na het aanmaken#
Elk openbaar IP-adres is vanaf het hele internet zichtbaar. Geautomatiseerde bots lopen adressen af en proberen via SSH in te loggen met veelgebruikte namen en wachtwoorden. Op een nieuwe VPS zie je de eerste pogingen vaak al binnen een paar minuten. Probeer het zelf:
journalctl -u ssh --since "1 hour ago" | grep -E "Failed password|Invalid user"journalctl -u ssh– toont de logregels van de SSH-service.--since "1 hour ago"– alleen van het afgelopen uur.grep -E "…"– laat alleen regels over met een mislukte inlogpoging of een niet-bestaande gebruiker.
Op het netwerk blokkeren we bekende internetscanners, maar dat houdt niet alle pogingen tegen. Tegen de rest beschermen een sterk wachtwoord, een SSH-sleutel en fail2ban je.
Checklist#
| Stap | Waarom | Waar |
|---|---|---|
| Het systeem bijwerken | Verhelpt bekende beveiligingsfouten. | Deze handleiding |
| Het rootwachtwoord wijzigen | Het oorspronkelijke wachtwoord is via e-mail of je scherm gegaan. | Het rootwachtwoord wijzigen |
| Een gebruiker met sudo aanmaken | Dagelijks werk zonder de onbeperkte rechten van root. | Deze handleiding |
| Een SSH-sleutel instellen en het wachtwoord uitschakelen | Een sleutel is niet te raden. | SSH-sleutel |
| Inloggen als root verbieden | Een aanvaller moet dan ook de gebruikersnaam kennen. | Deze handleiding |
| De firewall inschakelen | Van buitenaf is alleen bereikbaar wat jij wilt. | Firewall in je klantaccount, UFW |
| Fail2ban installeren | Blokkeert IP-adressen die wachtwoorden proberen. | Fail2ban |
| Automatische updates inschakelen | Beveiligingspatches worden vanzelf geïnstalleerd. | Automatische updates |
| De tijdzone instellen | De tijden in de logs komen overeen met jouw tijd. | Deze handleiding |
Beveiliging en je klantaccount#
De tabbladen Bestanden en Databases in je klantaccount maken via SSH verbinding met de VPS, en wel met een gebruiker en wachtwoord (standaard root en het wachtwoord van het moment van aanmaken). Sommige stappen in deze handleiding hebben daar dus invloed op:
| Wat je wijzigt | Wat er gebeurt met de tabbladen Bestanden en Databases | Wat je doet |
|---|---|---|
Het rootwachtwoord (passwd) | Ze kunnen niet meer inloggen. | Vul bij Bestanden › Inloggegevens wijzigen het nieuwe wachtwoord in. |
| De SSH-poort | Ze kunnen geen verbinding meer maken. | Vul bij Bestanden › Inloggegevens wijzigen de nieuwe poort in. |
| Inloggen als root verboden | Ze loggen niet in als root. | Vul daar een andere gebruiker en diens wachtwoord in. Je ziet de bestanden met de rechten van die gebruiker. De installatie en de automatische verbinding op het tabblad Databases vereisen dan dat die gebruiker sudo kan gebruiken zonder een wachtwoord in te voeren. |
| Inloggen met wachtwoord uitgeschakeld | Ze werken helemaal niet meer. | Beheer bestanden met een SFTP-client met een sleutel, databases via een SSH-tunnel. |
| SSH alleen toegestaan vanaf jouw IP | Ze werken niet meer (ze verbinden vanaf onze servers). | Hetzelfde als hierboven. |
De inloggegevens op het tabblad Bestanden kan alleen de eigenaar van de dienst wijzigen. De Console en de tabbladen Netwerk, Firewall, Back-ups en Pakket wijzigen werken altijd, de instellingen van de VPS hebben er geen invloed op. Bepaal wat voor jou belangrijker is. De hoogste veiligheid krijg je door inloggen met wachtwoord uit te schakelen. Gebruik je de tabbladen Bestanden en Databases, laat het wachtwoord dan aan, maar kies een sterk wachtwoord en installeer fail2ban.
Het systeem bijwerken#
Haal de lijst met beschikbare updates op:
bash apt updateapt update– haalt uit de repository's de lijst met nieuwe pakketversies op. Het installeert zelf niets.
Installeer alle updates:
bash apt full-upgrade -yapt full-upgrade– werkt pakketten bij en mag daarvoor afhankelijkheden toevoegen of verwijderen (bijvoorbeeld een nieuwe kernel).-y– automatisch “ja” antwoorden op de bevestigingsvraag.
Verschijnt er tijdens de installatie een vraag over een configuratiebestand (bijvoorbeeld
/etc/ssh/sshd_config“has been locally modified”), kies dan keep the local version currently installed. Zo behoud je de huidige instellingen waarmee de VPS werkt.Controleer of een herstart nodig is:
bash ls /var/run/reboot-requiredVindt het commando het bestand, herstart dan. Op Debian zonder het pakket
unattended-upgradeswordt het bestand niet altijd aangemaakt, herstart daar daarom altijd na een update van de kernel (een pakket dat begint metlinux-image).Herstart de VPS:
bash rebootDe SSH-verbinding wordt verbroken. Verbind na ongeveer een minuut opnieuw.
Het rootwachtwoord wijzigen#
Het wachtwoord van het moment van aanmaken heb je in je klantaccount gezien, of in een e-mail. Stel een nieuw wachtwoord in dat alleen jij kent.
Genereer een sterk wachtwoord, bijvoorbeeld met de wachtwoordgenerator (minstens 20 tekens), en sla het op in je wachtwoordmanager.
Start de wachtwoordwijziging:
bash passwdpasswd– wijzigt zonder verdere parameter het wachtwoord van de gebruiker die het commando uitvoert (dus root).
Plak bij de vraag
New password:het nieuwe wachtwoord en druk op Enter. Het wachtwoord wordt niet getoond.Plak het bij de vraag
Retype new password:nog een keer. Je zietpasswd: password updated successfully.Sluit het huidige venster niet. Open een nieuw venster en probeer in te loggen met het nieuwe wachtwoord.
Open in je klantaccount het tabblad Bestanden, klik op Inloggegevens wijzigen, vul Gebruiker
root, Poort22en het nieuwe Wachtwoord in en klik op Controleren en opslaan.
In je klantaccount blijft het oude wachtwoord staan
Je klantaccount kent het nieuwe wachtwoord niet. Op het tabblad Console blijft de regel Wachtwoord na een klik op Tonen het wachtwoord van het moment van aanmaken tonen, en dat is niet meer geldig. Het geldige wachtwoord staat alleen in je wachtwoordmanager.
Een nieuwe gebruiker met sudo#
Als root raakt elke typfout in een commando het hele systeem. Maak voor het dagelijkse werk een eigen gebruiker aan, die alleen met het commando sudo beheerdersrechten opvraagt. Als voorbeeld gebruiken we de naam jan.
Maak de gebruiker aan:
bash adduser janadduser– maakt de gebruiker en zijn thuismap/home/janaan en vraagt om een wachtwoord.
Voer twee keer een wachtwoord in (een ander dan het rootwachtwoord). Sla de vragen over naam, telefoon en andere gegevens over met de toets Enter en bevestig aan het einde met
Y.Voeg de gebruiker toe aan de groep
sudo:bash usermod -aG sudo janusermod– wijzigt de eigenschappen van een gebruiker.-aG sudo– voegt (-a) de gebruiker toe aan de extra groep (-G)sudo. Zonder-azou de gebruiker uit alle andere groepen verdwijnen.- Leden van de groep
sudomogen commando's als root uitvoeren.
Heb je bij root al een SSH-sleutel, kopieer die dan ook naar de nieuwe gebruiker:
bash install -d -m 700 -o jan -g jan /home/jan/.ssh install -m 600 -o jan -g jan /root/.ssh/authorized_keys /home/jan/.ssh/authorized_keysinstall -d– maakt de map.sshaan.-m 700/-m 600– de rechten: de map alleen voor de eigenaar, het bestand lezen en schrijven alleen voor de eigenaar. Andere rechten weigert SSH.-o jan -g jan– de gebruikerjanwordt de eigenaar.
Log in een nieuw venster in als de nieuwe gebruiker en probeer sudo uit:
bash ssh [email protected] sudo whoamisudo whoami– voert het commandowhoamiuit als root. Nadat je het wachtwoord van de gebruikerjanhebt ingevoerd, moet hetroottonen.
Ontbreekt het commando adduser of sudo (minimale installatie van Debian), installeer ze dan: apt install adduser sudo.
SSH-sleutel en inloggen met wachtwoord uitschakelen#
Dit is de belangrijkste stap. Een wachtwoord is te raden, een SSH-sleutel praktisch niet. De stappen voor Windows, macOS en Linux vind je in de aparte handleiding SSH-sleutel: inloggen zonder wachtwoord, inclusief het veilig uitschakelen van inloggen met wachtwoord.
Inloggen als root verbieden#
Als root niet via SSH mag inloggen, moet een aanvaller ook de naam van je gebruiker kennen. Doe dit pas wanneer je als de nieuwe gebruiker kunt inloggen en sudo bij jou werkt.
Open (of maak) een eigen configuratiebestand voor de SSH-server:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confVoeg deze regel toe:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PermitRootLogin noInstelling Wat het doet Aanbevolen waarde Wanneer wijzigen PermitRootLoginOf root via SSH mag inloggen. no= helemaal niet,prohibit-password= alleen met een sleutel,yes= ook met een wachtwoord.noprohibit-password, als je met een sleutel als root moet kunnen inloggen (bijvoorbeeld voor een back-upscript).De bestandsnaam begint met
00, zodat het bestand als eerste wordt geladen. De SSH-server gebruikt namelijk de eerste waarde die hij voor elke instelling vindt.Controleer de configuratie en de geldende waarde:
bash sshd -t && sshd -T | grep -i permitrootloginsshd -t– controleert de syntaxis. Bij een fout toont het het bestand en de regel.&&– het volgende commando wordt alleen uitgevoerd als het vorige zonder fout is afgerond.sshd -T– toont de uiteindelijke geldende configuratie. Daarin moetpermitrootlogin nostaan.
Herstart de SSH-server:
bash systemctl restart sshDe huidige verbinding blijft open.
Controleer in een nieuw venster dat
ssh [email protected]niet meer inlogt enssh [email protected]wel.
Als root werk je daarna via sudo -i (opent een opdrachtprompt van root nadat je het wachtwoord van de gebruiker jan hebt ingevoerd).
De SSH-poort wijzigen#
SSH van poort 22 naar een andere poort verplaatsen is geen echte beveiliging, een aanvaller vindt de nieuwe poort wel. Wel zie je duidelijk minder pogingen van bots in het log.
Voordelen:
- Minder automatische inlogpogingen en schonere logs.
Nadelen:
- Bij elke verbinding moet je de poort opgeven (
ssh -p 2222 …). - Sommige bedrijfsnetwerken en openbare netwerken blokkeren niet-standaardpoorten.
- Je moet de poort aanpassen in de firewall, in fail2ban en in je klantaccount (Bestanden).
Besluit je de poort te wijzigen, kies dan een poort boven 1024 die geen andere applicatie gebruikt (vermijd bijvoorbeeld poort 2022, die sommige gamepanels voor SFTP gebruiken). In het voorbeeld gebruiken we 2222.
Sta de nieuwe poort toe in de firewall voordat je SSH verplaatst: voeg op het tabblad Firewall een regel Inkomend, Toestaan, TCP, poort
2222toe (nodig in de modus Alles blokkeren behalve wat is toegestaan, in de modus Alles toestaan kan het geen kwaad) en voer, als je UFW gebruikt,ufw allow 2222/tcpuit.Voeg aan het bestand
/etc/twee regels toe. De oude poort laat je voorlopig staan, zodat de wijziging je niet buitensluit:ssh/ sshd_ config. d/ 00-zabezpeceni. conf /etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf Port 22 Port 2222Port– de poort waarop de SSH-server luistert. Er mogen meerdere regels metPortzijn, de server luistert dan op allemaal.
Controleer de configuratie:
sshd -t.Zoek uit hoe SSH op je VPS wordt gestart:
bash systemctl is-active ssh.socketHet resultaat
activebetekent dat systemd SSH via een socket start (de standaard op Ubuntu 24.04). Het resultaatinactivebetekent een gewone service (meestal Debian 13).
Pas de nieuwe poort toe op basis van het resultaat:
Socket actief
systemctl daemon-reload
systemctl restart ssh.socketsystemctl daemon-reload– laat systemd de configuratie opnieuw inlezen. Op Ubuntu 24.04 neemt een speciale generator daarbij de poorten uit de SSH-configuratie over in de instellingen van de socket. Zonder deze stap zou SSH op poort 22 blijven.systemctl restart ssh.socket– begint te luisteren op de nieuwe poorten.
Socket niet actief
systemctl restart sshsystemctl restart ssh– herstart de SSH-server, die de poorten uit de configuratie leest.
- Controleer of SSH op beide poorten luistert:
ss -tlnp | grep -E ':22 |:2222 '. - Verbind in een nieuw venster via de nieuwe poort:
ssh -p 2222 [email protected]. - Werkt de verbinding via de nieuwe poort, verwijder dan de regel
Port 22uit de configuratie. - Controleer de configuratie:
sshd -t. - Laad de wijziging met hetzelfde commando als hierboven (afhankelijk van of de socket actief is).
- Open in je klantaccount Bestanden › Inloggegevens wijzigen en vul poort
2222in. De tabbladen Bestanden en Databases maken via SSH verbinding met de VPS en zouden zonder de nieuwe poort niet meer werken. - Pas de poort aan in de jail
sshdvan fail2ban (zie Fail2ban). - Verwijder in de firewall de regel voor poort 22.
Firewall en fail2ban#
- De firewall in je klantaccount filtert het verkeer al vóór de VPS en stel je met klikken in: Firewall in je klantaccount.
- UFW is een firewall rechtstreeks in de VPS: Firewall UFW.
- Fail2ban houdt mislukte inlogpogingen in de gaten en blokkeert aanvallers: Fail2ban.
Eén van de firewalls is genoeg. Voor beginners raden we de firewall in je klantaccount aan, omdat je die ook kunt herstellen als je jezelf hebt buitengesloten.
Automatische beveiligingsupdates#
Het pakket unattended-upgrades installeert één keer per dag beveiligingsupdates. Op Ubuntu is het geïnstalleerd en ingeschakeld, op Debian schakel je het zelf in.
Ubuntu 24.04
Controleer of automatische updates zijn ingeschakeld:
bash cat /etc/apt/apt.conf.d/20auto-upgradesDe uitvoer moet dit bevatten:
Uitvoertext APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";Update-Package-Lists "1"– elke dag (1 = elke 1 dag) de lijst met updates ophalen.Unattended-Upgrade "1"– elke dag de toegestane updates installeren.
Ontbreekt het bestand, voer dan
dpkg-reconfigure -plow unattended-upgradesuit en antwoord Yes.
Debian 13
Installeer de pakketten:
bash apt install unattended-upgrades apt-listchangesunattended-upgrades– automatische installatie van updates.apt-listchanges– kan een overzicht sturen van de wijzigingen in bijgewerkte pakketten.
Schakel automatische updates in:
bash dpkg-reconfigure -plow unattended-upgradesdpkg-reconfigure– start de configuratie van een pakket opnieuw.-plow– toont ook minder belangrijke vragen.
Antwoord Yes op de vraag of stabiele updates automatisch moeten worden gedownload en geïnstalleerd. Het bestand
/etc/wordt aangemaakt.apt/ apt. conf. d/ 20auto-upgrades
Standaard worden op Ubuntu alleen beveiligingsupdates geïnstalleerd, op Debian beveiligingsupdates en fixes uit de point releases van de stabiele versie (bijvoorbeeld 13.1, 13.2). De VPS herstart niet vanzelf. Het gedrag pas je aan in een eigen bestand dat voorrang krijgt op het standaardbestand 50unattended-upgrades (pas dat bestand zelf niet aan, een update van het pakket zou het kunnen overschrijven):
nano /etc/apt/apt.conf.d/52unattended-upgrades-localUnattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
Automatic-Reboot | Herstart de VPS als een update dat vereist (meestal een nieuwe kernel). De standaard is false. | true | Laat false staan als je applicaties na een herstart niet vanzelf weer starten (ze zijn niet als service ingesteld). Herstart dan één keer per week handmatig. |
Automatic-Reboot-Time | Wanneer de herstart plaatsvindt, bijvoorbeeld "04:00". Zonder deze instelling gebeurt dat direct na de update. | "04:00" | Kies een tijdstip waarop de server het minste verkeer heeft. |
Remove-Unused-Dependencies | Verwijdert pakketten die na een update nergens meer voor nodig zijn. | true | false, als je niet wilt dat er iets vanzelf wordt gedeïnstalleerd. |
Probeer de instellingen uit met een proefrun:
unattended-upgrade --dry-run --debug--dry-run– alleen een simulatie, er wordt niets geïnstalleerd.--debug– uitgebreide uitvoer, inclusief de geladen instellingen en de pakketten die zouden worden bijgewerkt.
De logs van echte updates vind je in de map /var/.
Tijdzone en servernaam#
Stel de tijdzone in, zodat de tijden in de logs kloppen (het voorbeeld gebruikt de Tsjechische tijdzone):
bash timedatectl set-timezone Europe/Praguetimedatectl– stelt de tijd en de tijdzone van het systeem in.set-timezone Europe/Prague– Midden-Europese tijd, inclusief zomertijd.
Controleer het resultaat met het commando
timedatectl. De regelTime zonemoetEurope/Praguetonen enSystem clock synchronized: yes.Wijzig eventueel de naam van de server (hostname):
bash hostnamectl set-hostname vps1hostnamectl set-hostname vps1– stelt de naam van de VPS in opvps1. Gebruik kleine letters, cijfers en koppeltekens.
De nieuwe naam verschijnt in de opdrachtprompt nadat je opnieuw bent ingelogd. Begint
sudode meldingunable to resolve host vps1te tonen, vul de naam dan aan in/etc/hostsop de regel127.0.1.1. Staat in de kop van het bestand dat het automatisch wordt gegenereerd, volg dan de aanwijzingen uit die kop.
Hoe verder#
- Back-ups: van de hele VPS maken wij back-ups en je herstelt hem op het tabblad Back-ups. Maak van belangrijke gegevens ook een back-up buiten de VPS, zie Back-ups van je VPS.
- Overzicht: controleer af en toe de schijfruimte (
df -h), de draaiende services (systemctl --failed) en de logs van fail2ban. - Alleen de diensten die je nodig hebt: installeer niet wat je niet nodig hebt. Elke open poort is een extra mogelijke ingang.
Controle#
apt updatetoont na het bijwerkenAll packages are up to date.- Het nieuwe rootwachtwoord werkt en het tabblad Bestanden logt in.
- De gebruiker
janlogt in via SSH ensudo whoamitoontroot. sshd -T | grep -E "^(toont de waarden die je hebt ingesteld.permitrootlogin| passwordauthentication| port) " unattended-upgrade --dry-run --debugverloopt zonder fout.
Als iets niet werkt#
Je hebt jezelf buitengesloten van SSH#
Gebruik de console in de browser. Je logt in met het rootwachtwoord (ook als root via SSH verboden is) en herstelt de fout, bijvoorbeeld door het bestand /etc/ te verwijderen en SSH te herstarten met het commando systemctl restart ssh.
sudo: jan is not in the sudoers file#
De gebruiker zit niet in de groep sudo. Voer als root usermod -aG sudo jan uit. De gebruiker moet daarna uitloggen en opnieuw inloggen voordat de groep actief wordt.
Het tabblad Bestanden meldt dat inloggen op de VPS is mislukt#
Je klantaccount gebruikt oude gegevens. Open Bestanden › Inloggegevens wijzigen en vul de huidige gebruiker, de huidige poort en het huidige wachtwoord in. Heb je inloggen met wachtwoord uitgeschakeld of SSH alleen vanaf jouw IP-adres toegestaan, dan werkt het tabblad niet (zie de tabel in het hoofdstuk Beveiliging en je klantaccount).
sshd -T toont een andere waarde dan je hebt ingesteld#
Dezelfde instelling staat in een ander bestand dat eerder wordt geladen (de SSH-server neemt de eerste waarde die hij vindt). Zoek dat bestand op:
grep -rni "permitrootlogin" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/grep -rni– zoekt tekst in alle bestanden van een map (-r), zonder onderscheid tussen hoofdletters en kleine letters (-i), en toont het regelnummer (-n).
Zet de regel in het andere bestand in commentaar (typ # aan het begin ervan), of wijzig de waarde daar. Voer daarna opnieuw sshd -t && sshd -T | grep -i permitrootlogin uit en herstart SSH.
SSH luistert na het wijzigen van de poort nog steeds alleen op poort 22#
Op Ubuntu 24.04 heb je waarschijnlijk systemctl daemon-reload overgeslagen. Voer dat uit en daarna systemctl restart ssh.socket.
E: Could not get lock /var/lib/dpkg/lock-frontend #
Op de achtergrond loopt op dit moment een andere installatie, meestal de automatische updates (bij een nieuwe VPS na de eerste start). Wacht een paar minuten en voer het commando opnieuw uit. Beëindig het proces niet met geweld.
Samenvatting
- Werk het systeem bij (
apt update,apt full-upgrade) en herstart na een nieuwe kernel. - Wijzig het rootwachtwoord met het commando
passwden vul het nieuwe wachtwoord ook in op het tabblad Bestanden. - Werk onder een eigen gebruiker met
sudoen verbied root via SSH pas na het testen. - Stel een SSH-sleutel, een firewall en fail2ban in volgens de aparte handleidingen.
- Automatische beveiligingsupdates regelt
unattended-upgrades, aanpassingen horen in52unattended-upgrades-local. - Het wachtwoord uitschakelen of SSH tot jouw IP beperken schakelt de tabbladen Bestanden en Databases uit, de console werkt altijd.