Inhoud

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:


πŸ—οΈ 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:

  1. welke toegang wordt geweigerd;
  2. welke service dit veroorzaakt;
  3. waarom die toegang noodzakelijk is;
  4. 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:

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:


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:

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

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:

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:

Gebruik in documentatie uitsluitend placeholders:

<SERVER_IP>
<DOMAIN>
<API_TOKEN>
<DATABASE_PASSWORD>

πŸ“‹ Hardening-baseline

Iedere nieuwe Tulpencraft-server moet minimaal voldoen aan onderstaande baseline.


πŸ›‘οΈ 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:

Een uitzondering moet waar mogelijk worden gedocumenteerd.

Daarbij wordt vastgelegd:

OnderdeelBeschrijving
ServerWelke server
MaatregelWelke hardeningmaatregel
UitzonderingWat wijkt af
RedenWaarom
RisicoWelk risico ontstaat
MitigatieWelke aanvullende maatregel wordt toegepast
DatumWanneer vastgesteld

πŸ”„ Onderhoud

Hardening is geen eenmalige installatiehandeling.

Bij wijzigingen aan een server wordt opnieuw gekeken naar:

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.