technische-infrastructuur:firewall

Dit is een oude revisie van het document!


Firewall

De Tulpencraft-servers gebruiken firewalld als host-based firewall.

Firewalld beheert netwerktoegang via zogenaamde zones, services, poorten en aanvullende regels. De configuratie kent daarbij een onderscheid tussen de actieve runtime-configuratie en de permanente configuratie.

De firewall vormt samen met de netwerkarchitectuur, SELinux, SSH-hardening en Fail2Ban een belangrijke beveiligingslaag binnen Tulpencraft.


Het uitgangspunt voor de Tulpencraft-firewall is:

Alleen netwerkverkeer toestaan dat daadwerkelijk noodzakelijk is.

Een service die lokaal draait, betekent niet automatisch dat deze vanaf het netwerk bereikbaar moet zijn.

Daarom wordt per server bepaald:

  • welke services actief zijn;
  • welke poorten noodzakelijk zijn;
  • vanaf welke netwerken toegang nodig is;
  • of een service publiek of uitsluitend intern bereikbaar moet zijn.

๐ŸŒ Netwerkarchitectuur

Tulpencraft gebruikt een centrale Velocity Proxy als toegangspunt.

                         INTERNET
                            โ”‚
                            โ”‚ TCP 25565
                            โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚ Velocity Proxy  โ”‚
                    โ”‚   mc-proxy001   โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
                         Lobby
                             โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ–ผ            โ–ผ            โ–ผ
             Survival      Events      toekomst

De backendservers zijn niet bedoeld om rechtstreeks vanaf internet bereikbaar te zijn.

Dit betekent dat een speler niet rechtstreeks verbinding maakt met:

Survival
Lobby
Events

maar altijd via de netwerkarchitectuur van Tulpencraft.


๐Ÿ”ฅ Firewalld

De firewallservice wordt geleverd door firewalld.

Status controleren:

sudo firewall-cmd --state

Verwachte uitvoer:

running

De service kan worden gecontroleerd met:

sudo systemctl status firewalld

Ingeschakeld bij het opstarten:

sudo systemctl is-enabled firewalld

๐Ÿ—‚๏ธ Zones

Firewalld gebruikt zones om een vertrouwensniveau aan netwerkverbindingen te koppelen. Interfaces en bronnen kunnen aan een zone worden gekoppeld en binnen die zone worden services en poorten toegestaan.

De standaardzone kan worden bekeken met:

sudo firewall-cmd --get-default-zone

Actieve zones:

sudo firewall-cmd --get-active-zones

De configuratie van de actieve zone:

sudo firewall-cmd --list-all

Alle zones:

sudo firewall-cmd --list-all-zones

๐ŸŒ Public zone

Voor een server met een publiek netwerkinterface wordt doorgaans de public zone gebruikt.

Deze zone is bedoeld voor netwerken waarvan andere systemen niet automatisch worden vertrouwd. Alleen expliciet toegestane services en poorten worden beschikbaar gesteld.

Voor Tulpencraft is dit met name relevant voor de proxy.


๐Ÿšช Proxy-firewall

De Velocity Proxy vormt het publieke toegangspunt van het Minecraft-netwerk.

De belangrijkste publiek toegankelijke poort is:

PoortProtocolDoel
25565TCPMinecraft / Velocity

De poort wordt expliciet geopend:

sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
sudo firewall-cmd --reload

Controle:

sudo firewall-cmd --zone=public --list-ports

Verwacht onder andere:

25565/tcp

๐Ÿ” SSH

SSH is een beheerinterface en wordt niet beschouwd als een Minecraft-netwerkdienst.

Wanneer SSH publiek bereikbaar moet zijn, wordt de SSH-service expliciet toegestaan:

sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --reload

Controle:

sudo firewall-cmd --zone=public --list-services

SSH wordt daarnaast beschermd door de maatregelen beschreven in:

Server hardening

waaronder:

  • SSH-sleutels;
  • uitschakelen van directe root-login;
  • uitschakelen van wachtwoordauthenticatie;
  • Fail2Ban;
  • beperkte gebruikersrechten.

๐Ÿ  Backendservers

Backendservers zoals Survival en Events worden niet publiek aangeboden.

Het uitgangspunt is:

Internet
   โ”‚
   X
   โ”‚
Survival

maar:

Internet
   โ”‚
   โ–ผ
Velocity
   โ”‚
   โ–ผ
Survival

De firewall op een backendserver moet daarom geen algemene publieke Minecraft-poort openen.

De exacte interne netwerkregels zijn afhankelijk van de uiteindelijke netwerkconfiguratie van de Tulpencraft-infrastructuur.


๐Ÿ  Lobby

De lobby bevindt zich momenteel op dezelfde host als de proxy:

mc-proxy001
โ”‚
โ”œโ”€โ”€ Velocity
โ”‚
โ””โ”€โ”€ Lobby

Dit is onderdeel van de huidige kosten- en infrastructuurkeuze.

Omdat de lobby lokaal op dezelfde host draait als Velocity, hoeft de lobbypoort niet publiek beschikbaar te worden gesteld voor spelers.

De proxy communiceert lokaal met de lobby.


๐Ÿงฑ Survival

Survival draait als afzonderlijke VM op de huidige Proxmox-infrastructuur.

De server is niet bedoeld als publiek Minecraft-entrypoint.

De gewenste netwerkstroom is:

Speler
  โ”‚
  โ–ผ
Velocity
  โ”‚
  โ–ผ
Survival

Niet:

Speler
  โ”‚
  โ–ผ
Survival

De firewall en netwerkconfiguratie moeten deze architectuur ondersteunen.


๐ŸŽฎ Events

Voor toekomstige Events-servers geldt hetzelfde uitgangspunt.

Een Events-server wordt niet zelfstandig aan het internet blootgesteld wanneer dit niet noodzakelijk is.

De gewenste architectuur is:

Speler
  โ”‚
  โ–ผ
Velocity
  โ”‚
  โ–ผ
Events

Eventuele uitzonderingen moeten worden gedocumenteerd.


๐Ÿ“ฆ Services versus poorten

Firewalld ondersteunt zowel vooraf gedefinieerde services als losse poortdefinities.

Een service is een verzameling van bijbehorende netwerkregels, bijvoorbeeld SSH, HTTP of HTTPS.

Voor standaarddiensten heeft het daarom de voorkeur om een service te gebruiken:

sudo firewall-cmd --permanent --add-service=ssh

Voor applicaties zonder geschikte standaardservice kan een specifieke poort worden geopend:

sudo firewall-cmd --permanent --add-port=25565/tcp

Daarna:

sudo firewall-cmd --reload

โš ๏ธ Runtime versus permanent

Firewalld kent twee configuratielagen:

Een runtime-regel wordt direct actief, maar is niet automatisch blijvend na een reload of reboot.

Bijvoorbeeld:

sudo firewall-cmd --add-port=25565/tcp

Een permanente regel wordt opgeslagen in de firewallconfiguratie:

sudo firewall-cmd --permanent --add-port=25565/tcp

Daarna wordt de actieve configuratie opnieuw geladen:

sudo firewall-cmd --reload

Voor productieservers gebruiken we bij voorkeur permanente configuratie, zodat de firewallconfiguratie na een reboot behouden blijft.


๐Ÿ” Firewallconfiguratie controleren

Volledige configuratie:

sudo firewall-cmd --list-all

Alle actieve zones:

sudo firewall-cmd --list-all-zones

Openstaande services:

sudo firewall-cmd --list-services

Openstaande poorten:

sudo firewall-cmd --list-ports

Beschikbare services:

sudo firewall-cmd --get-services

De actieve interfaces:

sudo firewall-cmd --get-active-zones

Deze commando's behoren tot de belangrijkste controles tijdens de hardening van een nieuwe server.


๐Ÿ‘€ Luisterende poorten controleren

De firewallconfiguratie vertelt niet welke applicaties daadwerkelijk luisteren.

Daarom wordt ook gecontroleerd met:

sudo ss -tulpn

Dit maakt bijvoorbeeld zichtbaar:

Velocity
   โ””โ”€โ”€ 0.0.0.0:25565
 
SSH
   โ””โ”€โ”€ 0.0.0.0:22

Een belangrijke securitycontrole is daarom:

Welke poorten luisteren daadwerkelijk, en welke daarvan zijn via de firewall bereikbaar?

Een poort die niet nodig is, moet bij voorkeur helemaal niet door een applicatie worden geopend.


๐Ÿงช Nieuwe poort openen

Wanneer een nieuwe service een netwerkpoort nodig heeft, wordt eerst bepaald:

  1. waarom de poort nodig is;
  2. of de service publiek of intern moet zijn;
  3. welk protocol noodzakelijk is;
  4. vanaf welke bronnen toegang noodzakelijk is;
  5. of een bestaande firewalld-service gebruikt kan worden.

Daarna wordt de regel toegevoegd.

Bijvoorbeeld:

sudo firewall-cmd --permanent --zone=public --add-port=<PORT>/<PROTOCOL>
sudo firewall-cmd --reload

Daarna controleren:

sudo firewall-cmd --zone=public --list-all

๐Ÿ—‘๏ธ Poort verwijderen

Wanneer een dienst niet meer nodig is, wordt de firewallregel verwijderd.

Bijvoorbeeld:

sudo firewall-cmd --permanent --zone=public --remove-port=25565/tcp
sudo firewall-cmd --reload

Daarna:

sudo firewall-cmd --zone=public --list-ports

๐Ÿ”’ Bron-IP beperken

Niet iedere service hoeft vanaf het volledige internet bereikbaar te zijn.

Wanneer een service bijvoorbeeld uitsluitend vanaf een beheer-IP of intern netwerk bereikbaar moet zijn, kan firewalld hiervoor uitgebreidere regels gebruiken.

Hiervoor kunnen onder andere rich rules worden gebruikt. Firewalld ondersteunt hiermee bron- en bestemmingsadressen, logging en aanvullende voorwaarden.

Voorbeeldconcept:

Internet
   โ”‚
   X
   โ”‚
beheerpoort
 
Beheer-IP
   โ”‚
   โ–ผ
beheerpoort

Dit heeft de voorkeur boven een publiek toegankelijke beheerinterface wanneer de netwerkarchitectuur dit mogelijk maakt.


๐Ÿ“ Logging

Firewallgebeurtenissen kunnen onderdeel zijn van de algemene serverlogging.

De firewallservice:

sudo journalctl -u firewalld

Daarnaast kunnen kernel/netfilter-gerelateerde gebeurtenissen afhankelijk van de configuratie via het systeemlog beschikbaar zijn.

Firewalllogging wordt niet zonder reden maximaal aangezet.

Te uitgebreide logging kan zelf aanzienlijke hoeveelheden logdata produceren.


๐Ÿ›ก๏ธ Firewall en Fail2Ban

Firewalld en Fail2Ban vullen elkaar aan.

                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
Internet โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  firewalld   โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
                    SSH / services
                         โ”‚
                         โ–ผ
                    logbestanden
                         โ”‚
                         โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚ Fail2Ban โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                         โ–ผ
                   tijdelijke ban

Firewalld bepaalt welke netwerktoegang รผberhaupt mogelijk is.

Fail2Ban reageert vervolgens op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH.

Zie:

Server hardening

voor de volledige hardeningconfiguratie.


๐Ÿ”„ Wijzigingen documenteren

Firewallwijzigingen worden gedocumenteerd wanneer ze structureel onderdeel worden van de serverconfiguratie.

Bijvoorbeeld:

OnderdeelWaarde
Servermc-proxy001
Zonepublic
Poort25565/tcp
DienstVelocity
BereikPubliek
RedenMinecraft-ingangspunt
StatusActief

Hierdoor blijft duidelijk waarom een poort geopend is.


๐Ÿ“‹ Firewall-baseline

Een nieuwe Tulpencraft-server moet minimaal worden gecontroleerd op:

  • [ ] firewalld geรฏnstalleerd
  • [ ] firewalld actief
  • [ ] firewalld ingeschakeld bij boot
  • [ ] juiste zone vastgesteld
  • [ ] alleen noodzakelijke services toegestaan
  • [ ] alleen noodzakelijke poorten toegestaan
  • [ ] publieke en interne services onderscheiden
  • [ ] luisterende poorten gecontroleerd met ss
  • [ ] permanente configuratie gecontroleerd
  • [ ] firewallconfiguratie na reload gecontroleerd
  • [ ] SSH-toegang getest
  • [ ] Minecraft-netwerktoegang getest
  • [ ] backendservers niet onnodig publiek bereikbaar
  • [ ] firewallwijzigingen gedocumenteerd

๐ŸŒท Tulpencraft firewallbeleid

De firewall is geen vervanging voor een correcte netwerkarchitectuur.

Tulpencraft gebruikt daarom meerdere beveiligingslagen:

Internet
   โ”‚
   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Externe toegang     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      firewalld        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Velocity Proxy        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Backend servers       โ”‚
โ”‚ Lobby / Survival etc. โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Daarbovenop worden onder andere SELinux, SSH-hardening, Fail2Ban, beperkte gebruikersrechten en regelmatige updates toegepast.

Het uitgangspunt blijft:

Een service die niet bereikbaar hoeft te zijn, wordt niet bereikbaar gemaakt.


๐Ÿ”— Gerelateerde documentatie


Tulpencraft firewall baseline

De firewall wordt ingericht volgens het principe least exposure: alleen noodzakelijke netwerktoegang wordt toegestaan en backendservers worden niet rechtstreeks aan het publieke internet blootgesteld.

  • technische-infrastructuur/firewall.1787474464.txt.gz
  • Laatst gewijzigd: 2026/08/23 10:41
  • door rroethof