Knippin University · Beveiliging

Ubuntu-server beveiligen: basisinstellingen, firewall en tools

Een nieuwe server staat binnen minuten online, en wordt ook binnen minuten gescand. Zo zet u een Ubuntu-server fatsoenlijk dicht, en houdt u hem daarna ook veilig.

AuteurStefan Lousberg
Gepubliceerd03-11-2026
Leestijdca. 15 minuten
Geschikt voorUbuntu 22.04 en 24.04 LTS

Voordat u begint

U heeft een server met Ubuntu 22.04 of 24.04 LTS en kunt inloggen als root of als gebruiker met sudo-rechten. Houd tijdens het aanpassen van SSH en de firewall altijd een tweede sessie open: sluit u zichzelf per ongeluk buiten, dan kunt u het via die sessie nog herstellen. Bij een server van Knippin ICT kunt u in noodgevallen ook contact opnemen met onze support.

Deel 1 · De basis

1Systeem bijwerken en automatische beveiligingsupdates

Begin altijd met een volledig bijgewerkt systeem:

sudo apt update
sudo apt full-upgrade -y
sudo reboot   # als er een nieuwe kernel is geïnstalleerd

Laat beveiligingsupdates daarna automatisch installeren met unattended-upgrades:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades   # kies "Yes"

Standaard worden alleen beveiligingsupdates automatisch geïnstalleerd; gewone updates doet u zelf, zodat u controle houdt over grotere wijzigingen. Wilt u dat de server zo nodig 's nachts zelf herstart, zet dan in /etc/apt/apt.conf.d/50unattended-upgrades:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

2Een eigen beheergebruiker

Werk niet dagelijks als root. Maak een eigen gebruiker aan en geef die sudo-rechten:

sudo adduser beheerder
sudo usermod -aG sudo beheerder

Kies een sterk, uniek wachtwoord: u heeft het nodig voor sudo, ook als u straks met een SSH-sleutel inlogt.

3SSH: inloggen met een sleutel

Sleutel maken en plaatsen

Maak op uw eigen computer (niet op de server) een sleutelpaar en zet de publieke sleutel op de server:

ssh-keygen -t ed25519 -C "uw-naam@laptop"
ssh-copy-id beheerder@uw-server

Test in een nieuwe terminal of ssh beheerder@uw-server werkt zonder wachtwoord. Pas daarna gaat u verder.

SSH aanscherpen

Zet uw instellingen in een eigen bestand, dan blijven ze behouden bij updates van het pakket:

sudo nano /etc/ssh/sshd_config.d/10-knippin.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers beheerder
X11Forwarding no

Controleer de configuratie en herstart SSH:

sudo sshd -t && sudo systemctl restart ssh
Let op: sluit uw huidige sessie pas als een nieuwe login als beheerder met uw sleutel gelukt is. Een andere SSH-poort dan 22 vermindert vooral de ruis in de logboeken; echte bescherming komt van sleutels, de firewall en Fail2ban.

4Firewall met UFW

UFW (Uncomplicated Firewall) zit standaard in Ubuntu. Uitgangspunt: alles dicht wat binnenkomt, behalve wat u echt gebruikt.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH          # eerst SSH toestaan!
sudo ufw allow 80/tcp           # alleen als u een webserver draait
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Beheert u de server altijd vanaf een vast IP-adres, beperk SSH dan tot dat adres:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw delete allow OpenSSH
Docker? Docker schrijft eigen firewallregels en kan poorten van containers buiten UFW om openzetten. Publiceer containerpoorten daarom alleen op 127.0.0.1 of gebruik een reverse proxy.

5Fail2ban tegen inlogpogingen

Fail2ban leest de logboeken en blokkeert IP-adressen die herhaaldelijk verkeerd inloggen.

sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
banaction = ufw
# eigen vaste IP-adressen nooit blokkeren:
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Draait er ook een webserver of mailserver, dan heeft Fail2ban daar kant-en-klare jails voor (bijvoorbeeld nginx-http-auth of postfix); zet die op dezelfde manier aan.

6Overbodige diensten uitzetten

Alles wat niet draait, kan ook niet worden aangevallen. Bekijk welke diensten luisteren op het netwerk:

sudo ss -tulpn

Ziet u iets wat u niet gebruikt, zet het dan uit (en verwijder het eventueel):

sudo systemctl disable --now naam-van-de-dienst

Databases zoals MySQL/MariaDB en Redis horen normaal alleen op 127.0.0.1 te luisteren, niet op het publieke adres.

Deel 2 · Extra beveiligingslagen

7Tweestapsverificatie voor SSH

Wilt u naast de sleutel nog een tweede factor, gebruik dan een TOTP-code uit een authenticator-app (bijvoorbeeld Microsoft Authenticator of Aegis):

sudo apt install -y libpam-google-authenticator
google-authenticator   # als 'beheerder' uitvoeren; QR-code scannen, herstelcodes bewaren

Voeg onderaan /etc/pam.d/sshd toe:

auth required pam_google_authenticator.so

En vul uw SSH-bestand 10-knippin.conf aan, zodat zowel de sleutel als de code nodig is:

KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Zet in /etc/pam.d/sshd de regel @include common-auth uit (met een # ervoor), anders vraagt SSH ook nog uw wachtwoord. Herstart SSH en test in een nieuwe sessie.

8Rootkits en gewijzigde bestanden opsporen

Twee aanvullende controles die laten zien of er al iets mis is:

  • rkhunter zoekt naar bekende rootkits, verdachte bestanden en aangepaste systeemprogramma's.
  • AIDE maakt een vingerafdruk van uw systeembestanden en meldt later elke wijziging.
sudo apt install -y rkhunter aide
sudo rkhunter --propupd          # nulmeting na een schone installatie
sudo rkhunter --check --sk

sudo aideinit                    # maakt de eerste database (duurt even)
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
sudo aide --check --config /etc/aide/aide.conf

Na elke update meldt AIDE terecht gewijzigde bestanden: werk de database dan bij. Het gaat om meldingen die u niet verwacht.

9Back-ups die u echt kunt terugzetten

Beveiliging kan falen; een goede back-up is uw laatste vangnet. Houd de 3-2-1-regel aan: drie kopieën, op twee soorten opslag, waarvan één op een andere locatie.

# eenvoudige kopie van /etc en /var/www naar een andere server
rsync -aAX --delete /etc /var/www backup@backupserver:/backups/uw-server/

# of versleuteld en met versies, bijvoorbeeld met restic
sudo apt install -y restic
restic -r sftp:backup@backupserver:/restic/uw-server init
restic -r sftp:backup@backupserver:/restic/uw-server backup /etc /var/www /home

Vergeet databases niet: maak eerst een dump (mysqldump of pg_dump) en neem die mee. En test minstens een paar keer per jaar of terugzetten ook echt lukt.

Deel 3 · Veilig blijven

10Vast onderhoud: logboeken, schijfruimte, gebruikers

Een veilige server blijft alleen veilig met wat vaste aandacht. Een eenvoudige maandelijkse ronde:

sudo apt update && apt list --upgradable     # openstaande updates
sudo journalctl -p warning --since "-7 days"  # waarschuwingen en fouten
sudo lastb | head                            # mislukte inlogpogingen
last | head                                  # geslaagde logins: herkent u ze?
df -h                                        # schijfruimte
awk -F: '$3 >= 1000 {print $1}' /etc/passwd  # gebruikersaccounts
getent group sudo                            # wie heeft beheerrechten?
htop                                         # processen en belasting

Wilt u een dagelijkse samenvatting per e-mail, installeer dan logwatch. Verwijder accounts en SSH-sleutels van mensen die niet meer bij uw organisatie werken direct.

11Webapplicaties zoals WordPress

De meeste inbraken lopen niet via de server zelf, maar via een verouderde website. Houd WordPress, plugins en thema's bij, verwijder wat u niet gebruikt, gebruik sterke wachtwoorden met tweestapsverificatie voor beheerders en zorg dat bestandsrechten niet ruimer zijn dan nodig. Bij Knippin ICT kan dit ook volledig verzorgd worden met Managed WordPress.

12Controleren met Lynis

Lynis is een gratis beveiligingsscanner die uw instellingen naloopt en concrete verbeterpunten geeft:

sudo apt install -y lynis
sudo lynis audit system

Kijk vooral naar de Warnings en Suggestions onderaan het rapport en de Hardening index. Draai de scan opnieuw na wijzigingen en daarna bijvoorbeeld maandelijks.

13Een plan voor als het misgaat

Bedenk vóór een incident wat u dan doet; tijdens een incident is daar geen tijd voor.

  • Voorbereiden: leg vast wat er op de server draait, waar de configuratie staat, waar de back-ups staan en wie u moet bellen.
  • Herkennen: onverklaarbare belasting, onbekende processen of gebruikers, uitgaand spamverkeer of meldingen van rkhunter/AIDE zijn signalen.
  • Beperken: haal de server van het netwerk of sluit hem af in de firewall, maar wis nog niets: bewijs kan nodig zijn.
  • Herstellen: installeer bij twijfel opnieuw en zet een schone back-up terug van vóór de inbraak; vervang alle wachtwoorden en sleutels.
  • Leren: zoek uit hoe het kon gebeuren en dicht dat gat. Gaat het om persoonsgegevens, dan geldt mogelijk een meldplicht bij de Autoriteit Persoonsgegevens (binnen 72 uur).

Tot slot

Met deze stappen staat de basis: actuele software, geen root- of wachtwoordlogin via SSH, een firewall die alleen het nodige toelaat, automatische blokkade van aanvallers, controles op inbraak, back-ups en een vaste onderhoudsronde.

Liever dat wij dit voor u regelen? Bij Systeembeheer & Managed Services van Knippin ICT richten wij uw server veilig in, houden we hem up-to-date en bewaken we hem dag en nacht.