technische-infrastructuur:firewall

Dit is een oude revisie van het document!


Firewall

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

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

De Tulpencraft-servers gebruiken firewalld als host-based firewall op Rocky Linux 10.

De firewall vormt een belangrijke beveiligingslaag tussen het Tulpencraft-netwerk, externe verbindingen en de verschillende interne diensten.

Het uitgangspunt is:

Alles wat niet expliciet noodzakelijk is, wordt geblokkeerd.

Backendservers zoals de lobby en gameservers zijn niet rechtstreeks vanaf internet bereikbaar. Spelers verbinden uitsluitend met de centrale Velocity Proxy.


De netwerkarchitectuur is opgebouwd rond een centrale proxy:

Internet
   โ”‚
   โ”‚ TCP 25565
   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Velocity Proxy    โ”‚
โ”‚   mc-proxy001       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚
          โ”‚ intern netwerk
          โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚        Lobby        โ”‚
โ”‚     mc-proxy001     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚
          โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Survival VM
          โ”‚
          โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Event servers
          โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Toekomstige gameservers

De lobby en proxy draaien momenteel vanwege de opbouwfase op dezelfde host.

De gameservers draaien als afzonderlijke VM's op de beschikbare Proxmox-infrastructuur.


Alleen diensten die daadwerkelijk vanaf internet bereikbaar moeten zijn, krijgen een open firewallpoort.

PoortProtocolDienstToegang
25565TCPVelocity ProxyPubliek
8192TCPVotifier / NuVotifierPubliek, indien gebruikt
24454UDPSimple Voice ChatPubliek, per server

De Minecraft-spelers verbinden uitsluitend met:

tulpencraft.nl:25565

Backend Minecraft-poorten worden niet publiek geopend.


Voor proximity voice chat wordt Simple Voice Chat gebruikt.

Simple Voice Chat gebruikt standaard:

24454/UDP

Deze poort moet bereikbaar zijn vanaf internet. De voice-chatcommunicatie gebruikt UDP en staat los van de normale Minecraft TCP-verbinding.

Voor iedere server waarop Simple Voice Chat wordt aangeboden, moet een eigen bereikbare UDP-poort worden gebruikt wanneer meerdere servers dezelfde host/IP delen.

Bijvoorbeeld:

ServerVoice chatPoort
SurvivalJa24454/UDP
EventsJa24455/UDP
Toekomstige gameserverJaeigen UDP-poort

De exacte poortindeling wordt vastgelegd zodra de betreffende gameservers worden ingericht.

Let op: Simple Voice Chat kan niet worden behandeld als gewone Minecraft TCP-traffic. Alleen TCP 25565 openen is onvoldoende voor voice chat.

De configuratie bevindt zich bij Paper doorgaans in:

plugins/voicechat/voicechat-server.properties

De standaardconfiguratie gebruikt poort 24454.


Voor toekomstige stemintegratie kan NuVotifier worden gebruikt.

De standaardpoort van NuVotifier is:

8192/TCP

NuVotifier luistert standaard op TCP-poort 8192, tenzij in de configuratie een andere poort wordt ingesteld.

Wanneer Votifier daadwerkelijk wordt geactiveerd, wordt alleen de daarvoor benodigde poort extern geopend.

Internet
   โ”‚
   โ””โ”€โ”€ TCP 8192
          โ”‚
          โ–ผ
      NuVotifier

De Votifier-poort mag niet zonder reden worden geopend wanneer de dienst niet actief is.

Het gebruikte Votifier-token wordt nooit in deze wiki opgeslagen.


De database wordt momenteel op dezelfde infrastructuur als de proxy/lobby gehost.

MySQL/MariaDB is een interne dienst en wordt niet publiek beschikbaar gesteld.

De standaardpoort:

3306/TCP

wordt daarom uitsluitend op het interne netwerk toegestaan.

Conceptueel:

Internet
   โ”‚
   โ”‚ โŒ TCP 3306
   โ–ผ
Firewall
   โ”‚
   โ”‚
   โ””โ”€โ”€ Intern netwerk โ”€โ”€โ–บ MySQL/MariaDB

Alleen systemen die daadwerkelijk gebruikmaken van de database mogen verbinding maken.

Bijvoorbeeld:

BronDoelPoortToegang
LobbyDatabase3306/TCPIntern
SurvivalDatabase3306/TCPIntern
EventsDatabase3306/TCPIntern
InternetDatabase3306/TCPGeblokkeerd

Wanneer de database in de toekomst naar een afzonderlijke VM wordt verplaatst, blijft hetzelfde beveiligingsprincipe gelden.


Backendservers luisteren uitsluitend op interne adressen.

Voorbeeld:

Velocity
   โ”‚
   โ”œโ”€โ”€ Lobby       :25566
   โ”œโ”€โ”€ Survival    :25567
   โ””โ”€โ”€ Events      :25568

Deze poorten worden niet op de publieke interface geopend.

De firewall moet ervoor zorgen dat een externe gebruiker niet rechtstreeks verbinding kan maken met bijvoorbeeld:

<SERVER_IP>:25567

De enige publiek bedoelde Minecraft-ingang is:

<SERVER_IP>:25565

SSH wordt gebruikt voor systeembeheer.

De SSH-poort wordt uitsluitend beschikbaar gesteld voor beheer en wordt niet gebruikt voor Minecraft-verkeer.

Wanneer mogelijk wordt SSH beperkt tot:

  • vertrouwde beheeradressen;
  • het interne netwerk;
  • VPN-beheer;
  • of andere expliciet toegestane beheerbronnen.

SSH gebruikt uitsluitend key-based authentication.

Root-login via SSH is uitgeschakeld.

Zie ook:


De firewall wordt beheerd met firewalld.

Basiscontrole:

sudo firewall-cmd --state

Actieve configuratie bekijken:

sudo firewall-cmd --list-all

Alle zones bekijken:

sudo firewall-cmd --get-active-zones

Beschikbare services:

sudo firewall-cmd --get-services

Een poort kan tijdelijk worden geopend met:

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

Dit is vooral nuttig voor testen.

Een tijdelijke wijziging blijft niet noodzakelijk behouden na een reload/restart.


Wanneer een poort definitief onderdeel van de infrastructuur wordt:

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

Daarna controleren:

sudo firewall-cmd --list-ports

Voor de standaard voice-chatpoort:

sudo firewall-cmd --permanent --add-port=24454/udp
sudo firewall-cmd --reload

Controleren:

sudo firewall-cmd --list-ports

Verwacht:

24454/udp

Wanneer NuVotifier actief wordt:

sudo firewall-cmd --permanent --add-port=8192/tcp
sudo firewall-cmd --reload

Daarna controleren:

sudo firewall-cmd --list-ports

MySQL moet niet met:

--add-port=3306/tcp

zonder verdere beperking publiek worden geopend.

Wanneer MySQL op een afzonderlijke VM staat, wordt toegang bij voorkeur beperkt tot het interne netwerk of specifieke bronadressen.

Bijvoorbeeld:

Lobby VM
   โ”‚
   โ”‚ TCP 3306
   โ–ผ
Database VM

De database accepteert vervolgens uitsluitend verbindingen vanuit bekende Tulpencraft-systemen.


De firewall volgt zoveel mogelijk het principe:

Internet
   โ”‚
   โ–ผ
[ FIREWALL ]
   โ”‚
   โ”œโ”€โ”€ TCP 25565  โ†’ Velocity
   โ”œโ”€โ”€ TCP 8192   โ†’ NuVotifier (indien actief)
   โ”œโ”€โ”€ UDP 24454  โ†’ Simple Voice Chat
   โ””โ”€โ”€ overige    โ†’ DROP

Interne communicatie wordt afzonderlijk toegestaan waar noodzakelijk.


Een belangrijk onderdeel van de beveiligingsarchitectuur is dat spelers nooit rechtstreeks met backendservers communiceren.

Niet toegestaan:

Internet โ”€โ”€โ–บ Survival
Internet โ”€โ”€โ–บ Lobby
Internet โ”€โ”€โ–บ Events
Internet โ”€โ”€โ–บ Database

Wel toegestaan:

Internet
   โ”‚
   โ–ผ
Velocity Proxy
   โ”‚
   โ–ผ
Lobby
   โ”‚
   โ”œโ”€โ”€โ–บ Survival
   โ”œโ”€โ”€โ–บ Events
   โ””โ”€โ”€โ–บ toekomstige servers

Hierdoor blijft de netwerkstructuur centraal beheersbaar.


Wanneer Tulpencraft verder groeit, kan de infrastructuur worden opgesplitst over meerdere VM's en/of fysieke nodes.

Een mogelijke toekomstige inrichting:

                    Internet
                       โ”‚
                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚    Proxy     โ”‚
                โ”‚   Velocity   โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ–ผ            โ–ผ            โ–ผ
       Lobby        Survival      Events
          โ”‚            โ”‚            โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ
                 Database VM

Elke VM krijgt daarbij uitsluitend de netwerktoegang die daadwerkelijk noodzakelijk is.


Iedere structurele firewallwijziging moet worden gedocumenteerd.

Bijvoorbeeld:

Datum:        2026-08-23
Server:       mc-proxy001
Poort:        24454/UDP
Dienst:       Simple Voice Chat
Reden:        Proximity voice chat
Toegang:      Publiek# 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.
 
---
 
## ๐ŸŽฏ Doel
 
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.
 
```text
                         INTERNET
                            โ”‚
                            โ”‚ TCP 25565
                            โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚ Velocity Proxy  โ”‚
                    โ”‚   mc-proxy001   โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
                         Lobby
                             โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ–ผ            โ–ผ            โ–ผ
             Survival      Events      toekoms# 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.
 
---
 
## ๐ŸŽฏ Doel
 
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.
 
```text
                         INTERNET
                            โ”‚
                            โ”‚ TCP 25565
                            โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚ Velocity Proxy  โ”‚
                    โ”‚   mc-proxy001   โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚
                             โ–ผ
                         Lobby
                             โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ–ผ            โ–ผ            โ–ผ
             Survival      Events      toekomst

De backendservers zijn niet bedoeld om rechtst# 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.

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

t

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

Dit betekent dat een speler niet rechtstreeks verbinding maakt met:

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

Hierdoor blijft inzichtelijk waarom een poort geopend is en kan ongebruikte toegang later worden verwijderd.

---

## Beveiligingsprincipes

De firewallconfiguratie van Tulpencraft volgt deze uitgangspunten:

1. **Default deny**
2. Alleen noodzakelijke poorten worden geopend.
3. Backendservers zijn niet publiek bereikbaar.
4. Databaseverkeer blijft intern.
5. Voice chat gebruikt uitsluitend de daarvoor bestemde UDP-poorten.
6. Votifier wordt alleen geopend wanneer deze dienst daadwerkelijk actief is.
7. Firewallwijzigingen worden gedocumenteerd.
8. Ongebruikte poorten worden verwijderd.
9. Publieke diensten worden zo veel mogelijk geconcentreerd op de proxy.
10. Interne diensten worden beperkt tot noodzakelijke bronadressen.

---

## Controle

Na wijzigingen moet worden gecontroleerd welke poorten daadwerkelijk luisteren:

```bash
sudo ss -tulpn

En welke poorten door firewalld zijn toegestaan:

sudo firewall-cmd --list-all

Ook moet worden gecontroleerd of een dienst daadwerkelijk alleen op het bedoelde adres luistert.

Bijvoorbeeld:

0.0.0.0:3306

is wezenlijk anders dan:

127.0.0.1:3306

of een specifiek intern IP-adres.


Belangrijk: een poort openen in firewalld betekent niet automatisch dat een dienst veilig of correct geconfigureerd is. De applicatie zelf moet eveneens correct worden gebonden aan het juiste netwerkinterface en correct worden beveiligd.

Het uitgangspunt is eenvoudig:

Alleen netwerkverkeer toestaan dat daadwerkelijk noodzakelijk is.

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


๐ŸŒ Netwerkarchitectuur

Tulpencraft gebruikt een centrale Velocity Proxy als toegangspunt tot het Minecraft-netwerk.

De gewenste netwerkarchitectuur is:

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

Spelers verbinden dus niet rechtstreeks met de backendservers.

De normale Minecraft-verbinding verloopt via:

Speler
   โ”‚
   โ–ผ
Velocity
   โ”‚
   โ–ผ
Lobby
   โ”‚
   โ–ผ
Game server

Ook voicechat wordt zoveel mogelijk via de proxyarchitectuur afgehandeld.


๐Ÿ”ฅ Firewalld

De host-firewall wordt verzorgd door firewalld.

Status controleren:

sudo firewall-cmd --state

Verwachte uitvoer:

running

Service controleren:

sudo systemctl status firewalld

Controleren of firewalld automatisch start:

sudo systemctl is-enabled firewalld

๐Ÿ—‚๏ธ Firewalld-zones

Firewalld werkt met zogenaamde zones.

Een zone bepaalt welk vertrouwensniveau aan een netwerkinterface of bron wordt gekoppeld en welke services en poorten daar toegestaan zijn.

De standaardzone:

sudo firewall-cmd --get-default-zone

Actieve zones:

sudo firewall-cmd --get-active-zones

Configuratie van de actieve zone:

sudo firewall-cmd --list-all

Alle zones:

sudo firewall-cmd --list-all-zones

Voor een publiek bereikbare Tulpencraft-proxy wordt doorgaans de public zone gebruikt.


๐ŸŒ Publiek netwerk

De publieke netwerkinterface van de proxy mag alleen de diensten aanbieden die daadwerkelijk vanaf internet noodzakelijk zijn.

Voor de huidige Tulpencraft-architectuur zijn dat in principe:

PoortProtocolFunctiePubliek
25565TCPMinecraft / VelocityJa
voicechatpoortUDPSimple Voice ChatJa
22TCPSSH-beheerAlleen indien noodzakelijk

De exacte voicechatpoort wordt verderop beschreven.


๐ŸŽฎ Minecraft / Velocity

De Minecraft-ingang van Tulpencraft is:

TCP 25565

Deze poort wordt door Velocity gebruikt.

Openen:

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

Controleren:

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

De poort moet alleen op het daadwerkelijke publieke toegangspunt worden geopend.

Backendservers krijgen niet automatisch een publiek toegankelijke 25565/tcp.


๐ŸŽ™๏ธ Simple Voice Chat

Tulpencraft wil Simple Voice Chat ondersteunen op Survival en toekomstige game-servers.

Simple Voice Chat biedt onder andere:

  • proximity voice chat;
  • push-to-talk;
  • voice activation;
  • configureerbare voice distance;
  • whispering;
  • individuele volumeregeling;
  • groepsgesprekken.

De client gebruikt hiervoor een aparte UDP-verbinding. De standaard serverpoort van Simple Voice Chat is 24454/UDP.


Omdat Tulpencraft gebruikmaakt van Velocity, wordt Simple Voice Chat niet per game-server afzonderlijk publiek aangeboden.

De officiรซle Simple Voice Chat-proxyconfiguratie ondersteunt Velocity en kan voicechatverkeer naar de juiste backendserver doorsturen. Daardoor is slechts รฉรฉn publieke UDP-poort op de proxy nodig.

De gewenste architectuur is:

                    INTERNET
                       โ”‚
                       โ”‚ UDP
                       โ–ผ
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚  Velocity Proxy   โ”‚
             โ”‚   Voice Proxy     โ”‚
             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ–ผ            โ–ผ            โ–ผ
       Survival      Events      toekomst
       Voice Chat    Voice Chat   Voice Chat

Hierdoor blijft het principe behouden dat backendservers niet zelfstandig publiek bereikbaar zijn.


๐Ÿ”Œ Voicechatpoort

De proxy kan voor Simple Voice Chat een eigen UDP-poort gebruiken.

De officiรซle proxyconfiguratie gebruikt standaard de Minecraft-proxypoort voor voicechat wanneer port=-1 is ingesteld. De poort kan echter expliciet worden ingesteld.

Voor Tulpencraft verdient een expliciete, gedocumenteerde UDP-poort de voorkeur.

Bijvoorbeeld:

UDP <VOICE_PORT>

De daadwerkelijke poort wordt vastgelegd zodra Simple Voice Chat op de Tulpencraft-proxy wordt geรฏmplementeerd.

De standaard backendpoort 24454/UDP moet dus niet automatisch als publieke poort op iedere Survival-, Events- of toekomstige game-server worden geopend.


๐Ÿงฑ Backend Voice Chat

Op iedere Minecraft-server waarop voicechat beschikbaar moet zijn, wordt de Simple Voice Chat serverplugin geรฏnstalleerd.

De officiรซle installatie vereist naast de serverplugin ook de Simple Voice Chat-proxyplugin wanneer de server achter Velocity draait.

De gewenste opbouw:

Velocity
โ””โ”€โ”€ Simple Voice Chat Proxy
 
Lobby
โ””โ”€โ”€ eventueel voicechat
 
Survival
โ””โ”€โ”€ Simple Voice Chat
 
Events
โ””โ”€โ”€ Simple Voice Chat
 
Toekomstige game-server
โ””โ”€โ”€ Simple Voice Chat

Voicechat wordt daarmee een netwerkfunctie van het volledige Tulpencraft-netwerk.


๐Ÿ”’ Backendservers niet publiek bereikbaar

Een belangrijk uitgangspunt van Tulpencraft is dat backendservers niet zelfstandig bereikbaar zijn.

Dus bijvoorbeeld:

Internet
   โ”‚
   X
   โ”‚
Survival:25565

is niet de gewenste situatie.

In plaats daarvan:

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

Voor voicechat geldt hetzelfde principe:

Internet
   โ”‚
   โ–ผ
Velocity UDP voice
   โ”‚
   โ–ผ
Survival Voice Chat

De Simple Voice Chat-proxy zorgt ervoor dat het verkeer naar de juiste backend wordt doorgestuurd.


๐Ÿ  Lobby

De lobby draait momenteel op dezelfde host als de Velocity Proxy:

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

Dit is onderdeel van de huidige infrastructuurkeuze.

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

De proxy communiceert lokaal met de lobby.


๐ŸŽฏ Survival

Survival draait als afzonderlijke VM binnen de Proxmox-infrastructuur.

De Survival-server wordt niet als zelfstandig publiek Minecraft-entrypoint aangeboden.

De gewenste verbinding:

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

Voicechat:

Speler
   โ”‚
   โ”‚ UDP
   โ–ผ
Velocity Voice Proxy
   โ”‚
   โ–ผ
Survival Voice Chat

De backend blijft daarmee achter de netwerkgrens van Tulpencraft.


๐ŸŽช Events

Voor Events geldt hetzelfde model als voor Survival.

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

en voor voice:

Speler
   โ”‚
   โ”‚ UDP
   โ–ผ
Velocity Voice Proxy
   โ”‚
   โ–ผ
Events Voice Chat

Een Events-server wordt niet rechtstreeks aan internet blootgesteld tenzij daar bewust een technische reden voor bestaat.


๐Ÿ” SSH

SSH is een beheerinterface en geen Minecraft-netwerkdienst.

Wanneer SSH publiek bereikbaar moet zijn:

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

Maar waar mogelijk wordt SSH beperkt tot de noodzakelijke beheeromgeving.

SSH wordt daarnaast beschermd door:

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

Zie:

Server hardening


๐Ÿ“ฆ Services versus poorten

Firewalld kan zowel vooraf gedefinieerde services als afzonderlijke poorten gebruiken.

Voor standaarddiensten heeft een service de voorkeur:

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

Voor applicaties zonder geschikte standaardservice:

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

Voor Simple Voice Chat:

sudo firewall-cmd --permanent --zone=public --add-port=<VOICE_PORT>/udp

Daarna:

sudo firewall-cmd --reload

โš ๏ธ Runtime en permanent

Firewalld kent een runtime- en permanente configuratie.

Een tijdelijke regel:

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

wordt direct actief, maar is niet noodzakelijk permanent.

Voor de productiesituatie wordt daarom de permanente configuratie gebruikt:

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

Na een wijziging moet altijd worden gecontroleerd of de regel daadwerkelijk actief is.


๐Ÿ” Firewall controleren

Volledige configuratie:

sudo firewall-cmd --list-all

Services:

sudo firewall-cmd --list-services

Poorten:

sudo firewall-cmd --list-ports

Actieve zones:

sudo firewall-cmd --get-active-zones

๐Ÿ‘€ Luisterende poorten

De firewallconfiguratie is slechts รฉรฉn kant van de controle.

Ook moet worden gecontroleerd welke processen daadwerkelijk luisteren:

sudo ss -tulpn

Hiermee kunnen bijvoorbeeld worden gevonden:

TCP 25565
UDP <VOICE_PORT>
TCP 22

Een poort die niet noodzakelijk is, moet bij voorkeur ook niet door een applicatie worden geopend.


๐ŸŽ™๏ธ UDP controleren

Simple Voice Chat gebruikt UDP.

Een algemene TCP-poorttest is daarom niet voldoende om voicechat te controleren.

De Simple Voice Chat-documentatie geeft aan dat UDP connectionless is en daarom niet met normale TCP-portchecks kan worden getest. De plugin beschikt hiervoor over een eigen testmogelijkheid.

In-game kan bijvoorbeeld worden gebruikt:

/voicechat test <PLAYERNAME>

Voor een proxy-opstelling kan daarnaast de voicechat-proxytest worden gebruikt:

/voicechatproxy ping <server>

De officiรซle documentatie beschrijft deze test voor het controleren van de verbinding tussen de proxy en een backendserver.


๐Ÿ›ก๏ธ Firewall en Fail2Ban

Firewalld en Fail2Ban hebben verschillende functies.

                 INTERNET
                     โ”‚
                     โ–ผ
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚  firewalld  โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
                toegestane
                 diensten
                     โ”‚
                     โ–ผ
               SSH / overige
                     โ”‚
                     โ–ผ
                logbestanden
                     โ”‚
                     โ–ผ
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚  Fail2Ban   โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚
                     โ–ผ
                tijdelijke
                  blokkade

Firewalld bepaalt welke netwerktoegang mogelijk is.

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


๐Ÿงฉ Firewall per servertype

De firewallconfiguratie wordt afgestemd op de functie van de server.

ServerMinecraft TCPVoice UDPPubliek bereikbaar
Velocity / Proxy25565centrale voicepoortJa
Lobbyinternvia proxy indien gebruiktNee
Survivalinternintern via voice proxyNee
Eventsinternintern via voice proxyNee
Toekomstige game-serverinternintern via voice proxyNee

SSH is hierbij een aparte beheerfunctie en wordt alleen opengesteld wanneer noodzakelijk.


๐Ÿšซ Geen onnodige poorten

De volgende aanpak wordt vermeden:

25565/tcp  โ†’ publiek
24454/udp  โ†’ publiek
25566/tcp  โ†’ publiek
25567/tcp  โ†’ publiek
25568/tcp  โ†’ publiek
...

De gewenste situatie is:

                 INTERNET
                    โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚                   โ”‚
      25565/TCP          VOICE/UDP
          โ”‚                   โ”‚
          โ–ผ                   โ–ผ
       Velocity          Voice Proxy
          โ”‚                   โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ–ผ
               Backendservers

Daarmee wordt het publieke aanvalsoppervlak beperkt.


๐Ÿงฑ Nieuwe netwerkdienst

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

  1. Waarom is de dienst nodig?
  2. Moet deze publiek bereikbaar zijn?
  3. Kan de dienst via Velocity worden aangeboden?
  4. Kan de dienst uitsluitend intern luisteren?
  5. Welke bronadressen moeten toegang krijgen?
  6. Welk protocol wordt gebruikt?
  7. Welke firewallregel is noodzakelijk?

Pas daarna wordt de firewall aangepast.


๐Ÿ—‘๏ธ Poort verwijderen

Wanneer een dienst wordt verwijderd, wordt ook de bijbehorende firewallregel verwijderd.

Bijvoorbeeld:

sudo firewall-cmd --permanent --zone=public --remove-port=<PORT>/tcp
sudo firewall-cmd --reload

Daarna:

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

Firewallregels mogen niet blijven bestaan zonder actieve reden.


๐Ÿ“ Firewallwijzigingen documenteren

Structurele wijzigingen worden gedocumenteerd.

Bijvoorbeeld:

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

Voor Simple Voice Chat:

OnderdeelWaarde
Servermc-proxy001
Zonepublic
Poort<VOICE_PORT>/udp
DienstSimple Voice Chat
BereikPubliek
BackendSurvival / Events / toekomstige servers
StatusGepland / Actief

๐Ÿ”„ Wijzigingen en onderhoud

Bij iedere wijziging aan de netwerkarchitectuur wordt gecontroleerd of de firewallconfiguratie nog overeenkomt met de gewenste situatie.

Dit geldt bijvoorbeeld bij:

  • nieuwe game-servers;
  • nieuwe plugins;
  • migratie naar een andere VM;
  • wijziging van IP-adressen;
  • invoering van Simple Voice Chat;
  • wijziging van Velocity;
  • verhuizing naar een andere Proxmox-node;
  • uitbreiding van monitoring;
  • nieuwe beheerinterfaces.

๐Ÿ“‹ Firewall-baseline

Iedere Tulpencraft-server wordt minimaal 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 diensten onderscheiden
  • [ ] luisterende poorten gecontroleerd met ss
  • [ ] permanente configuratie gecontroleerd
  • [ ] firewall na reload gecontroleerd
  • [ ] SSH-toegang getest
  • [ ] Minecraft-toegang getest
  • [ ] backendservers niet publiek bereikbaar
  • [ ] Simple Voice Chat UDP-configuratie gecontroleerd indien van toepassing
  • [ ] voicechat via de proxy getest indien van toepassing
  • [ ] firewallwijzigingen gedocumenteerd

๐Ÿ›ก๏ธ Tulpencraft securitymodel

De firewall is รฉรฉn onderdeel van de totale beveiligingsarchitectuur.

                    INTERNET
                       โ”‚
                       โ–ผ
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚  firewalld  โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚                   โ”‚
       TCP Minecraft         UDP Voice
             โ”‚                   โ”‚
             โ–ผ                   โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚       Velocity Proxy       โ”‚
        โ”‚        mc-proxy001         โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ”‚
                      โ–ผ
                    Lobby
                      โ”‚
           โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ–ผ          โ–ผ          โ–ผ
       Survival     Events    toekomst

Daarbovenop worden onder andere toegepast:

  • SELinux;
  • SSH-hardening;
  • Fail2Ban;
  • least privilege;
  • regelmatige updates;
  • logging;
  • monitoring;
  • beperkte netwerktoegang.

๐ŸŒท Uitgangspunt

Het Tulpencraft-firewallbeleid kan worden samengevat als:

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

De Velocity Proxy is het centrale toegangspunt.

Backendservers blijven achter de proxy en worden niet zelfstandig aan internet blootgesteld.

Voor Simple Voice Chat wordt dezelfde architectuur gevolgd: de voicechatfunctie wordt via de Velocity Proxy aangeboden, zodat meerdere game-servers gebruik kunnen maken van voicechat zonder iedere backend afzonderlijk publiek open te zetten. De officiรซle Simple Voice Chat-proxyondersteuning is hier specifiek voor ontworpen.


๐Ÿ”— Gerelateerde documentatie


Tulpencraft firewall baseline

De Tulpencraft-firewall volgt het principe least exposure. Alleen noodzakelijke netwerktoegang wordt toegestaan. De Velocity Proxy vormt het publieke Minecraft-toegangspunt en backendservers worden niet rechtstreeks aan het publieke internet blootgesteld.

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