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.
De Tulpencraft-hardening heeft de volgende doelstellingen:
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 is de primaire beheerinterface voor Tulpencraft-servers.
De SSH-configuratie wordt zo ingericht dat alleen noodzakelijke toegang mogelijk is.
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-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
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
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.
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
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 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 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:
SELinux-denials kunnen bijvoorbeeld worden onderzocht met:
sudo ausearch -m AVC -ts recent
of:
sudo journalctl | grep -i avc
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:
Fail2Ban vormt daarbovenop een extra detectie- en blokkeerlaag.
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
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.
Actieve jails:
sudo fail2ban-client status
Specifiek voor SSH:
sudo fail2ban-client status sshd
Hiermee kan onder andere worden gecontroleerd:
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.
Een nieuwe server begint bij voorkeur met een Minimal Install.
Onnodige software wordt niet geΓ―nstalleerd.
Dit beperkt:
Software wordt alleen toegevoegd wanneer deze daadwerkelijk nodig is.
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.
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.
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.
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:
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.
Na de basis-hardening worden minimaal de volgende controles uitgevoerd.
cat /etc/os-release
uname -r
getenforce
Verwacht:
Enforcing
sudo firewall-cmd --state
Verwacht:
running
sudo sshd -T
Controleer hierbij onder andere:
sudo fail2ban-client status
Wanneer SSH door Fail2Ban wordt beschermd:
sudo fail2ban-client status sshd
sudo dnf check-update
timedatectl
systemctl list-units --type=service --state=running
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.
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.
Wachtwoorden, API-tokens, private keys en andere secrets worden niet opgenomen in:
Gebruik in documentatie uitsluitend placeholders:
<SERVER_IP> <DOMAIN> <API_TOKEN> <DATABASE_PASSWORD>
Iedere nieuwe Tulpencraft-server moet minimaal voldoen aan onderstaande baseline.
sudo correct ingerichtEnforcingDe 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.
Niet iedere server heeft exact dezelfde configuratie.
Een uitzondering kan noodzakelijk zijn vanwege:
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 |
Hardening is geen eenmalige installatiehandeling.
Bij wijzigingen aan een server wordt opnieuw gekeken naar:
Bij grote wijzigingen wordt de hardening opnieuw gecontroleerd.
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.