Server hardening
Server hardening is een belangrijk onderdeel van de Tulpencraft-infrastructuur.
Iedere nieuwe server wordt na de installatie van Rocky Linux 10 volgens een vaste basisinrichting beveiligd voordat daarop Tulpencraft-software wordt geΓ―nstalleerd.
Het doel is om het aanvalsoppervlak zo klein mogelijk te houden en tegelijkertijd een stabiele en beheersbare omgeving voor Minecraft en de bijbehorende netwerkdiensten te behouden.
Deze pagina beschrijft de algemene hardeningstandaard van Tulpencraft. Afhankelijk van de functie van een server kunnen aanvullende maatregelen of uitzonderingen noodzakelijk zijn.
Hardening is geen eenmalige installatiehandeling. De beveiligingsconfiguratie wordt gedurende de levensduur van een server onderhouden en opnieuw gecontroleerd wanneer de functie, software of netwerkpositie verandert.
π― Doelstellingen
De Tulpencraft-hardening heeft de volgende doelstellingen:
- alleen noodzakelijke software installeren;
- alleen noodzakelijke netwerkpoorten openstellen;
- SSH veilig configureren;
- directe root-login voorkomen;
- SSH-sleutelauthenticatie gebruiken;
- SELinux ingeschakeld houden;
- firewalld gebruiken;
- Fail2Ban gebruiken waar dit relevant is;
- systemen regelmatig bijwerken;
- onnodige services uitschakelen;
- logbestanden beschikbaar houden;
- correcte tijdsynchronisatie gebruiken;
- rechten zo beperkt mogelijk instellen;
- serverconfiguraties reproduceerbaar maken.
ποΈ Hardening als basislaag
De hardening vindt plaats tussen de OS-installatie en de installatie van de Tulpencraft-software.
ββββββββββββββββββββββββββββββββ β Tulpencraft software β β Paper / Velocity / Java β ββββββββββββββββββββββββββββββββ€ β Server hardening β β SSH β’ Firewall β’ Fail2Ban β β SELinux β’ Updates β’ Rights β ββββββββββββββββββββββββββββββββ€ β Rocky Linux 10 β ββββββββββββββββββββββββββββββββ€ β Proxmox VE β ββββββββββββββββββββββββββββββββ
Hiermee wordt voorkomen dat beveiligingsmaatregelen pas worden toegevoegd nadat de server al in productie is genomen.
π SSH
SSH is de primaire beheerinterface voor Tulpencraft-servers.
De SSH-configuratie wordt zo ingericht dat alleen noodzakelijke toegang mogelijk is.
Root-login
Directe root-login via SSH is niet toegestaan.
De beheerder logt in met een normaal gebruikersaccount en gebruikt vervolgens sudo voor beheertaken.
Bijvoorbeeld:
ssh rroethof@<SERVER>
Daarna:
sudo -i
of voor een afzonderlijke opdracht:
sudo <commando>
Hierdoor worden beheertaken aan een individuele gebruikersaccount gekoppeld.
π SSH-sleutels
SSH-sleutelauthenticatie heeft de voorkeur boven wachtwoordauthenticatie.
De publieke sleutel wordt op de server geplaatst in:
~/.ssh/authorized_keys
De private sleutel blijft uitsluitend bij de beheerder en wordt nooit op de server opgeslagen.
De sleutelbestanden moeten bovendien correct worden afgeschermd.
Bijvoorbeeld:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
π« Wachtwoordlogin
Wanneer SSH-sleutelauthenticatie voor de betreffende beheeromgeving correct werkt, wordt wachtwoordauthenticatie uitgeschakeld.
Daarmee wordt voorkomen dat internetbereikbare SSH-diensten gevoelig zijn voor password spraying en brute-force aanvallen.
De SSH-configuratie wordt gecontroleerd voordat wachtwoordauthenticatie wordt uitgeschakeld.
De effectieve configuratie kan worden gecontroleerd met:
sudo sshd -T
π€ Gebruikers en rechten
Tulpencraft gebruikt waar mogelijk het principe van least privilege.
Een applicatie krijgt niet standaard rootrechten.
Voorbeelden:
Minecraft β βββ eigen gebruiker Velocity β βββ eigen gebruiker Database β βββ eigen service-account
De exacte gebruikersstructuur kan per server verschillen.
Minecraft- en andere applicatieprocessen worden niet standaard uitgevoerd als root.
π₯ Firewall
De host-firewall wordt verzorgd door firewalld.
De firewall vormt een belangrijke eerste verdedigingslaag en bepaalt welke netwerkverbindingen naar een server zijn toegestaan.
Controle:
sudo firewall-cmd --state
Gewenst:
running
De actieve configuratie kan worden bekeken met:
sudo firewall-cmd --list-all
πͺ Alleen noodzakelijke poorten
Het uitgangspunt is:
Default deny, expliciet toestaan wat noodzakelijk is.
Een server krijgt dus niet standaard een groot aantal open poorten.
Een Velocity-proxy kan bijvoorbeeld de Minecraft-poort naar buiten aanbieden:
TCP 25565
Een backendserver zoals Survival hoeft daarentegen niet rechtstreeks vanaf internet bereikbaar te zijn.
De netwerkarchitectuur van Tulpencraft zorgt ervoor dat spelers via de proxy naar de lobby en vervolgens naar backendservers worden geleid.
π Backendservers
Backendservers worden niet bedoeld als rechtstreeks publiek toegangspunt.
De netwerkarchitectuur is:
Internet
β
βΌ
Velocity Proxy
β
βΌ
Lobby
β
βββ Survival
βββ Events
βββ toekomstige servers
Daarmee wordt voorkomen dat iedere Minecraft-server afzonderlijk aan het internet wordt blootgesteld.
De firewall van een backendserver kan bovendien worden gebruikt om netwerktoegang verder te beperken.
π‘οΈ SELinux
SELinux blijft ingeschakeld.
De gewenste status is:
getenforce
Resultaat:
Enforcing
SELinux vormt een aanvullende beveiligingslaag bovenop de normale Linux-bestands- en gebruikersrechten.
SELinux wordt daarom niet simpelweg uitgeschakeld wanneer een applicatie problemen geeft.
Eerst wordt onderzocht:
- welke toegang wordt geweigerd;
- welke service dit veroorzaakt;
- waarom die toegang noodzakelijk is;
- of een correcte SELinux-context of policy-aanpassing mogelijk is.
SELinux-denials kunnen bijvoorbeeld worden onderzocht met:
sudo ausearch -m AVC -ts recent
of:
sudo journalctl | grep -i avc
π« Fail2Ban
Fail2Ban kan worden gebruikt als aanvullende beveiligingslaag tegen brute-force- en password-sprayingaanvallen.
Fail2Ban analyseert logbestanden en kan bij herhaaldelijke mislukte authenticatiepogingen automatisch een IP-adres tijdelijk blokkeren.
Fail2Ban is nadrukkelijk geen vervanging voor goede SSH-beveiliging.
De primaire maatregelen blijven:
- beperkte netwerktoegang;
- SSH-sleutels;
- geen directe root-login;
- geen wachtwoordauthenticatie zodra sleuteltoegang correct werkt;
- een correcte firewallconfiguratie.
Fail2Ban vormt daarbovenop een extra detectie- en blokkeerlaag.
Installatie
Fail2Ban wordt via een geschikte Rocky Linux-repository geΓ―nstalleerd.
Na installatie wordt de service ingeschakeld:
sudo systemctl enable --now fail2ban
Status controleren:
sudo systemctl status fail2ban
De algemene status:
sudo fail2ban-client status
SSH-jail
De belangrijkste toepassing binnen de Tulpencraft-infrastructuur is het beschermen van SSH.
Lokale configuratie wordt bij voorkeur opgeslagen onder:
/etc/fail2ban/jail.d/
Hierdoor worden standaardconfiguratiebestanden niet onnodig aangepast.
Een voorbeeld van een SSH-jail:
[sshd] enabled = true
De exacte instellingen voor bantime, findtime en maxretry worden afgestemd op de betreffende server en beheeromgeving.
Controle
Actieve jails:
sudo fail2ban-client status
Specifiek voor SSH:
sudo fail2ban-client status sshd
Hiermee kan onder andere worden gecontroleerd:
- hoeveel pogingen zijn gedetecteerd;
- welke IP-adressen momenteel geblokkeerd zijn;
- hoeveel adressen in totaal zijn geblokkeerd.
Fail2Ban en firewall
Fail2Ban werkt samen met de firewall en vormt daarmee een dynamische beveiligingslaag.
Een IP-adres dat herhaaldelijk ongewenst authenticatiegedrag vertoont kan tijdelijk worden geblokkeerd.
De blokkering is standaard tijdelijk. Hierdoor wordt voorkomen dat een incidentele fout automatisch tot een permanente blokkade leidt.
Beheer-IP's kunnen indien noodzakelijk worden uitgesloten van blokkering.
π¦ Minimale installatie
Een nieuwe server begint bij voorkeur met een Minimal Install.
Onnodige software wordt niet geΓ―nstalleerd.
Dit beperkt:
- het aanvalsoppervlak;
- het aantal services;
- het aantal mogelijke kwetsbaarheden;
- onderhoud;
- resourcegebruik.
Software wordt alleen toegevoegd wanneer deze daadwerkelijk nodig is.
π Updates
Servers worden regelmatig bijgewerkt.
Handmatig:
sudo dnf upgrade -y
Beschikbare updates kunnen worden gecontroleerd met:
sudo dnf check-update
Security-updates worden zo snel mogelijk beoordeeld en geΓ―nstalleerd, waarbij rekening wordt gehouden met de impact op de betreffende Minecraft-server.
Updates worden bij voorkeur eerst getest wanneer een wijziging een directe impact op de Minecraft-stack kan hebben.
π Repositories
Alleen noodzakelijke repositories worden ingeschakeld.
De standaard Rocky Linux-repositories zijn leidend.
Controle:
sudo dnf repolist
Niet-productierepositories, developmentrepositories of repositories met experimentele software worden niet zonder duidelijke reden ingeschakeld.
Dit is belangrijk omdat extra repositories ook extra softwarebronnen en afhankelijkheden introduceren.
βοΈ Services
Actieve services worden gecontroleerd met:
systemctl list-units --type=service --state=running
Daarnaast kunnen alle ingeschakelde services worden bekeken met:
systemctl list-unit-files --state=enabled
Onnodige services worden uitgeschakeld.
Bijvoorbeeld:
sudo systemctl disable --now <service>
Een service wordt echter niet blind uitgeschakeld.
Eerst wordt gecontroleerd of deze onderdeel is van de Rocky Linux-basis of door andere software wordt gebruikt.
β±οΈ Tijdsinrichting
Correcte systeemtijd is onderdeel van de beveiligingsbasis.
Controle:
timedatectl
Tijdssynchronisatie:
chronyc tracking
De server moet gesynchroniseerd zijn met een betrouwbare NTP-bron.
Een correcte systeemtijd is belangrijk voor:
- logging;
- authenticatie;
- TLS-certificaten;
- monitoring;
- incidentonderzoek;
- correlatie van gebeurtenissen tussen servers.
π Logging
Logs worden niet onnodig verwijderd of genegeerd.
Belangrijke bronnen zijn onder andere:
systemd journal SSH firewalld SELinux / audit Fail2Ban Minecraft Velocity
Voor systeemlogs:
journalctl
SSH-gerelateerde gebeurtenissen:
journalctl -u sshd
Firewall:
journalctl -u firewalld
Fail2Ban:
journalctl -u fail2ban
SELinux/audit:
ausearch -m AVC
De loggingconfiguratie kan per server worden uitgebreid.
π§ͺ Security-controles
Na de basis-hardening worden minimaal de volgende controles uitgevoerd.
OS
cat /etc/os-release
Kernel
uname -r
SELinux
getenforce
Verwacht:
Enforcing
Firewall
sudo firewall-cmd --state
Verwacht:
running
SSH
sudo sshd -T
Controleer hierbij onder andere:
- root-login;
- wachtwoordauthenticatie;
- public-key-authenticatie;
- toegestane gebruikers.
Fail2Ban
sudo fail2ban-client status
Wanneer SSH door Fail2Ban wordt beschermd:
sudo fail2ban-client status sshd
Updates
sudo dnf check-update
Tijd
timedatectl
Actieve services
systemctl list-units --type=service --state=running
π Luisterende netwerkpoorten
Openstaande netwerkpoorten worden gecontroleerd met:
sudo ss -tulpn
Hiermee kan worden vastgesteld welke services daadwerkelijk op netwerkpoorten luisteren.
Dit is een belangrijke controle omdat zowel de firewallconfiguratie als de daadwerkelijke applicatieconfiguratie moeten kloppen.
Voorbeeld:
Internet
β
βββ TCP 25565 β Velocity
β
βββ overige poorten β geblokkeerd
Op een backendserver worden alleen de poorten geopend die voor de interne werking noodzakelijk zijn.
π§± Bestandsrechten
Configuratie- en applicatiebestanden moeten de juiste eigenaar en permissies hebben.
Voorbeeld:
ls -la /srv/minecraft/
Gevoelige configuratiebestanden worden niet wereld-leesbaar gemaakt.
Bijvoorbeeld:
chmod 600 <bestand>
waar passend.
Private keys en credentials mogen nooit onnodig toegankelijk zijn voor andere gebruikers.
π Secrets
Wachtwoorden, API-tokens, private keys en andere secrets worden niet opgenomen in:
- de wiki;
- openbare GitHub-repositories;
- screenshots;
- scripts die publiek beschikbaar zijn.
Gebruik in documentatie uitsluitend placeholders:
<SERVER_IP> <DOMAIN> <API_TOKEN> <DATABASE_PASSWORD>
π Hardening-baseline
Iedere nieuwe Tulpencraft-server moet minimaal voldoen aan onderstaande baseline.
- [ ] Rocky Linux 10 geΓ―nstalleerd
- [ ] Systeem volledig bijgewerkt
- [ ] Alleen noodzakelijke repositories actief
- [ ] Alleen noodzakelijke software geΓ―nstalleerd
- [ ] Beheerdersaccount aangemaakt
- [ ]
sudocorrect ingericht - [ ] SSH-sleutel geΓ―nstalleerd
- [ ] Directe root-login via SSH uitgeschakeld
- [ ] Wachtwoordlogin via SSH uitgeschakeld nadat sleuteltoegang is getest
- [ ] SELinux actief in
Enforcing - [ ] firewalld actief
- [ ] Alleen noodzakelijke netwerkpoorten geopend
- [ ] Fail2Ban geΓ―nstalleerd indien van toepassing
- [ ] Fail2Ban-service actief indien van toepassing
- [ ] SSH-jail actief wanneer SSH publiek bereikbaar is
- [ ] Onnodige services uitgeschakeld
- [ ] Tijdssynchronisatie actief
- [ ] Hostnaam correct ingesteld
- [ ] Logging gecontroleerd
- [ ] Luisterende netwerkpoorten gecontroleerd
- [ ] Bestandsrechten gecontroleerd
- [ ] Minecraft/servicegebruikers zonder rootrechten
- [ ] Back-upstrategie vastgesteld
- [ ] Monitoring ingericht indien van toepassing
π‘οΈ CIS en security frameworks
De Tulpencraft-hardening is een eigen praktische baseline en moet niet worden geΓ―nterpreteerd als formele CIS-, DISA-STIG-, ISO 27001- of andere compliance-certificering.
Voor Rocky Linux 10 bestaat een specifieke CIS Benchmark met beveiligingsrichtlijnen. Deze kan in de toekomst worden gebruikt om de Tulpencraft-baseline verder te toetsen en aan te scherpen.
Het uitgangspunt blijft dat beveiligingsmaatregelen proportioneel moeten zijn voor de functie van de server.
Een Minecraft-server moet bijvoorbeeld niet zodanig worden gehard dat noodzakelijke Minecraft-functionaliteit of beheerbaarheid wordt beperkt zonder dat daar een aantoonbaar beveiligingsvoordeel tegenover staat.
π§ Uitzonderingen
Niet iedere server heeft exact dezelfde configuratie.
Een uitzondering kan noodzakelijk zijn vanwege:
- Minecraft;
- Velocity;
- databases;
- monitoring;
- backups;
- netwerkfunctionaliteit;
- toekomstige diensten.
Een uitzondering moet waar mogelijk worden gedocumenteerd.
Daarbij wordt vastgelegd:
| Onderdeel | Beschrijving |
|---|---|
| Server | Welke server |
| Maatregel | Welke hardeningmaatregel |
| Uitzondering | Wat wijkt af |
| Reden | Waarom |
| Risico | Welk risico ontstaat |
| Mitigatie | Welke aanvullende maatregel wordt toegepast |
| Datum | Wanneer vastgesteld |
π Onderhoud
Hardening is geen eenmalige installatiehandeling.
Bij wijzigingen aan een server wordt opnieuw gekeken naar:
- software;
- services;
- firewall;
- SELinux;
- Fail2Ban;
- SSH;
- netwerkpoorten;
- gebruikers;
- rechten;
- logging;
- updates.
Bij grote wijzigingen wordt de hardening opnieuw gecontroleerd.
π Gerelateerde documentatie
Tulpencraft security baseline
Nieuwe servers worden niet beschouwd als productieklaar zodra Rocky Linux is geΓ―nstalleerd. De server moet eerst volgens de Tulpencraft-hardeningbaseline worden ingericht, gecontroleerd en gedocumenteerd.