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
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
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.