Geavanceerde VPS Hardening Gids 2026: Beveilig je Server als een Professional
Geavanceerde VPS-beveiligingsgids met kernel-tuning, inbraakdetectie, firewallregels, fail2ban, AppArmor en meer. Bescherm je server tegen echte bedreigingen.
Geavanceerde VPS Hardening Gids: Beveilig je Server als een Professional
Een standaard VPS-installatie laat je kwetsbaar achter. Standaardconfiguraties, open poorten en zwakke authenticatie zijn een open uitnodiging. Deze gids gaat verder dan de basis — kernel hardening, inbraakdetectie, automatische blokkering en audit-logging die daadwerkelijk bedreigingen opspoort.
Heb je al SSH-sleutels en een firewall? Mooi. Dit gaat verder waar beginnersgidsen ophouden.
Wat deze gids behandelt
| Laag | Tools | Doel |
|---|---|---|
| Netwerk | UFW, iptables, fail2ban | Ongeautoriseerde toegang blokkeren |
| Authenticatie | SSH hardening, 2FA | Brute force voorkomen |
| Kernel | sysctl tuning | Aanvalsoppervlak verkleinen |
| Verplichte toegangscontrole | AppArmor / SELinux | Gecompromitteerde services beperken |
| Inbraakdetectie | AIDE, auditd | Ongeautoriseerde wijzigingen detecteren |
| Logging | rsyslog, logwatch | Alles monitoren |
| Automatische updates | unattended-upgrades | Kwetsbaarheden patchen |
Vereisten
- Een VPS met Ubuntu 22.04+ of Debian 12+ (de meeste voorbeelden werken ook op RHEL/Rocky met kleine aanpassingen)
- SSH-sleutelauthenticatie al geconfigureerd
- Root- of sudo-toegang
- Basiskennis van de Linux-commandoregel
Aanbevolen VPS-providers voor beveiligingsbewuste gebruikers:
| Provider | Waarom | Startprijs |
|---|---|---|
| Hetzner | EU-datacenters, AVG-conform, ruwe prestaties | €3,79/mnd |
| Hostinger | Betaalbare KVM met snapshot-back-ups | $4,99/mnd |
| Vultr | Bare metal opties, DDoS-bescherming inbegrepen | $6/mnd |
| DigitalOcean | VPC-netwerken, beheerde firewalls | $6/mnd |
1. SSH Hardening (Verder dan de basis)
Je hebt al sleutelgebaseerde authenticatie. Nu gaan we het verder vergrendelen.
Beperk SSH tot alleen sleutels, schakel root uit
sudo nano /etc/ssh/sshd_config
Stel deze waarden in:
# Authenticatie
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
# Beperk blootstelling
MaxAuthTries 3
MaxSessions 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
# Schakel onnodige functies uit
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
# Gebruik alleen sterke algoritmen
KexAlgorithms skedf25519-sha256,skedf25519-sha256@libssh.org,diffie-hellman-group16-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
Verander de standaard SSH-poort
SSH verplaatsen van poort 22 stopt de meeste geautomatiseerde scans:
# Voeg nieuwe poort toe (verwijder 22 nog niet!)
Port 2222
Port 22
Herstart en test met de nieuwe poort voordat je 22 verwijdert:
sudo systemctl restart sshd
ssh -p 2222 user@your-server
Zodra bevestigd, verwijder Port 22 en herstart opnieuw.
Voeg tweefactorauthenticatie toe
sudo apt install libpam-google-authenticator
google-authenticator
Bewerk de PAM-configuratie:
sudo nano /etc/pam.d/sshd
Voeg bovenaan toe:
auth required pam_google_authenticator.so
Pas sshd_config aan:
AuthenticationMethods publickey,keyboard-interactive
ChallengeResponseAuthentication yes
Nu vereist inloggen zowel je SSH-sleutel als een TOTP-code.
2. Firewallconfiguratie met UFW + snelheidsbeperking
Basis UFW-installatie
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Sta SSH toe (gebruik je aangepaste poort)
sudo ufw limit 2222/tcp comment 'SSH rate-limited'
# Sta webverkeer toe
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Activeer
sudo ufw enable
De limit-regel beperkt automatisch verbindingen — 6 verbindingen per 30 seconden, daarna wordt geblokkeerd.
Geavanceerd: iptables-regels voor DDoS-mitigatie
Voor servers met veel verkeer, voeg deze iptables-regels toe:
# Ongeldige pakketten verwerpen
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Poortscannen blokkeren
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Nieuwe verbindingen beperken (SYN flood-bescherming)
sudo iptables -A INPUT -p tcp --syn -m limit --limit 25/second --limit-burst 50 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP
# ICMP beperken (ping flood-bescherming)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Sla regels op zodat ze herstarts overleven:
sudo apt install iptables-persistent
sudo netfilter-persistent save
3. Fail2Ban: Intelligente brute force-bescherming
Installeren en configureren
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Bewerk /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
backend = systemd
# E-mailnotificaties (optioneel)
destemail = you@example.com
action = %(action_mwl)s
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 86400
[sshd-ddos]
enabled = true
port = 2222
# Bescherm nginx
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
[nginx-botsearch]
enabled = true
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
# Bescherm tegen herhaalde 404's (scanners)
[nginx-404]
enabled = true
port = http,https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 60
bantime = 3600
Maak het nginx-404 filter aan:
sudo nano /etc/fail2ban/filter.d/nginx-404.conf
[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD).*" 404
ignoreregex =
Start fail2ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status
4. Kernel hardening met sysctl
Deze instellingen verkleinen het aanvalsoppervlak van je kernel:
sudo nano /etc/sysctl.d/99-hardening.conf
# Schakel IP-forwarding uit (tenzij je Docker/VPN draait)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Voorkom IP-spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Negeer ICMP-omleidingen
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Stuur geen ICMP-omleidingen
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Negeer source-routed pakketten
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# Activeer SYN cookies (SYN flood-bescherming)
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Log verdachte pakketten
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Schakel IPv6 uit indien niet nodig
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# Kernel verharden
kernel.randomize_va_space = 2
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.perf_event_paranoid = 3
kernel.yama.ptrace_scope = 2
# Beperk onbevoegde user namespaces
kernel.unprivileged_userns_clone = 0
# Bestandssysteem hardening
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.suid_dumpable = 0
Direct toepassen:
sudo sysctl --system
Docker-gebruikers: Houd
net.ipv4.ip_forward = 1als je containers draait. Docker heeft dit nodig voor netwerken.
5. AppArmor: Verplichte toegangscontrole
AppArmor beperkt programma’s tot een gelimiteerde set resources — zelfs als een aanvaller een kwetsbaarheid misbruikt, kan hij niet buiten het profiel ontsnappen.
Activeren en status controleren
sudo apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra
sudo aa-status
Profielen afdwingen voor belangrijke services
# Beschikbare profielen weergeven
sudo aa-unconfined
# Zet nginx in afdwingmodus
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
# Maak een profiel aan voor een aangepaste applicatie
sudo aa-genprof /usr/local/bin/myapp
Aangepaste profielen maken
Voor applicaties zonder bestaand profiel:
# Start in klachtmodus (logt overtredingen maar blokkeert niet)
sudo aa-complain /path/to/application
# Draai de app normaal, gebruik alle functies
# Bekijk daarna de logs en zet om naar afdwingmodus
sudo aa-logprof
sudo aa-enforce /path/to/application
6. Inbraakdetectie met AIDE
AIDE (Advanced Intrusion Detection Environment) bewaakt bestandsintegriteit — het waarschuwt je wanneer systeembestanden onverwacht veranderen.
Installeren en initialiseren
sudo apt install aide
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Configureren wat gemonitord wordt
sudo nano /etc/aide/aide.conf
Voeg aangepaste regels toe:
# Monitor kritieke systeemmappen
/etc p+i+u+g+sha256
/bin p+i+u+g+sha256
/sbin p+i+u+g+sha256
/usr/bin p+i+u+g+sha256
/usr/sbin p+i+u+g+sha256
# Monitor webroot
/var/www p+i+u+g+sha256
# Sluit drukke mappen uit
!/var/log
!/var/cache
!/tmp
Automatiseer dagelijkse controles
sudo crontab -e
Voeg toe:
0 5 * * * /usr/bin/aide --check | mail -s "AIDE Report $(hostname)" you@example.com
7. Audit-logging met auditd
Houd bij wie wat doet op je systeem:
sudo apt install auditd audispd-plugins
Auditregels toevoegen
sudo nano /etc/audit/rules.d/hardening.rules
# Monitor authenticatie
-w /etc/pam.d/ -p wa -k auth_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/passwd -p wa -k passwd_changes
# Monitor SSH-configuratie
-w /etc/ssh/sshd_config -p wa -k sshd_config
# Monitor sudo-gebruik
-w /var/log/auth.log -p wa -k auth_log
-w /etc/sudoers -p wa -k sudoers
# Monitor cron
-w /etc/crontab -p wa -k cron_changes
-w /etc/cron.d/ -p wa -k cron_changes
-w /var/spool/cron/ -p wa -k cron_changes
# Monitor netwerkconfiguratie
-w /etc/hosts -p wa -k hosts_changes
-w /etc/network/ -p wa -k network_changes
# Monitor kernelmodules
-w /sbin/insmod -p x -k kernel_modules
-w /sbin/modprobe -p x -k kernel_modules
-w /sbin/rmmod -p x -k kernel_modules
# Log alle commando's uitgevoerd door root
-a always,exit -F arch=b64 -F euid=0 -S execve -k root_commands
# Maak regels onwijzigbaar (herstart vereist om te wijzigen)
-e 2
Herstart auditd:
sudo systemctl restart auditd
Doorzoek auditlogs:
# Vind alle sudo-events
sudo ausearch -k sudoers
# Vind SSH-configuratiewijzigingen
sudo ausearch -k sshd_config
8. Automatische beveiligingsupdates
Mis nooit een kritieke patch:
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
Configureer wat automatisch wordt bijgewerkt:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
// E-mailnotificaties
Unattended-Upgrade::Mail "you@example.com";
Unattended-Upgrade::MailReport "on-change";
9. Beveilig gedeeld geheugen en /tmp
Voorkom shared memory-aanvallen:
sudo nano /etc/fstab
Voeg toe:
tmpfs /run/shm tmpfs defaults,noexec,nosuid,nodev 0 0
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G 0 0
Opnieuw mounten:
sudo mount -o remount /run/shm
sudo mount -o remount /tmp
Let op:
noexecop/tmpkan sommige installers breken. Mount tijdelijk opnieuw met exec wanneer nodig:sudo mount -o remount,exec /tmp
10. Logmonitoring met Logwatch
Ontvang dagelijkse beveiligingssamenvattingen:
sudo apt install logwatch
Configureer:
sudo nano /etc/logwatch/conf/logwatch.conf
Output = mail
MailTo = you@example.com
Detail = High
Range = yesterday
Service = All
Test het:
sudo logwatch --detail High --mailto you@example.com --range today
Beveiligingschecklist
Loop dit na na het hardenen:
| Controle | Commando | Verwacht |
|---|---|---|
| SSH root uitgeschakeld | grep PermitRootLogin /etc/ssh/sshd_config | no |
| Wachtwoordauth uit | grep PasswordAuthentication /etc/ssh/sshd_config | no |
| Firewall actief | sudo ufw status | active |
| Fail2ban draait | sudo fail2ban-client status | Actieve jails weergegeven |
| AppArmor geladen | sudo aa-status | Profielen in afdwingmodus |
| AIDE geïnitialiseerd | sudo aide --check | Geen onverwachte wijzigingen |
| Auto-updates aan | apt-config dump | grep Unattended | "1" |
| Open poorten minimaal | sudo ss -tlnp | Alleen verwachte poorten |
| Kernel gehard | sysctl kernel.randomize_va_space | 2 |
Doorlopend onderhoud
Hardening is geen eenmalige actie. Plan het volgende in:
- Dagelijks: Bekijk fail2ban-bans (
sudo fail2ban-client status sshd) - Wekelijks: Controleer AIDE-rapporten, bekijk authenticatielogs
- Maandelijks: Werk alle pakketten bij, controleer open poorten, check op nieuwe CVE’s
- Per kwartaal: Audit gebruikersaccounts, roteer SSH-sleutels, bekijk firewallregels
Beste VPS-providers voor beveiliging
| Provider | Beveiligingsfuncties | Beste voor |
|---|---|---|
| Hostinger | KVM-isolatie, DDoS-bescherming, back-ups | Beste prijs-kwaliteit — sterke beveiliging tegen lage kosten |
| Hetzner | EU-privacywetgeving, dedicated firewall, snapshots | Privacygerichte implementaties |
| Vultr | DDoS-bescherming, firewall-API, bare metal | Werklasten met hoge beveiligingseisen |
| DigitalOcean | VPC, beheerde firewalls, monitoring | Teamomgevingen |
| Linode | Gratis DDoS-mitigatie, Longview-monitoring | Monitoring-intensieve opstellingen |
Hostinger biedt de beste balans tussen beveiligingsfuncties en prijs — KVM-virtualisatie zorgt voor volledige isolatie van andere huurders, en hun geautomatiseerd back-upsysteem geeft je herstelopties als er iets misgaat.
Conclusie
Een geharde VPS draait niet alleen om het draaien van een firewall. Het gaat om lagen: netwerkfiltering, authenticatiecontroles, kernelrestricties, verplichte toegangscontrole, bestandsintegriteitsmonitoring en geautomatiseerde patching. Elke laag vangt op wat de andere missen.
Begin met SSH hardening en fail2ban (directe impact), voeg daarna kernel-tuning en AppArmor toe (diepere bescherming), en sluit af met AIDE en auditd (detectie en forensisch onderzoek).
Geen enkele server is onhackbaar. Maar een goed geharde VPS zorgt ervoor dat aanvallers doorschuiven naar makkelijkere doelwitten — en dat is het doel.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCloudflare Tunnel VPS Guide 2026: Expose Services Without Opening Ports
Set up Cloudflare Tunnel on your VPS to expose web apps securely without opening ports or revealing your server IP. Complete guide with Docker and DNS config.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: March 14, 2026. Disclosure: This article may contain affiliate links.