Inhoud

๐Ÿ”ฅ 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 eenvoudig:

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.


๐ŸŒ Firewallarchitectuur

De netwerkarchitectuur is opgebouwd rond een centrale proxy.

                         INTERNET
                             โ”‚
                             โ”‚
                     TCP :25565
                             โ”‚
                             โ–ผ
                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                  โ”‚  Velocity Proxy   โ”‚
                  โ”‚    mc-proxy001    โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ”‚ intern netwerk
                            โ–ผ
                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                  โ”‚       Lobby       โ”‚
                  โ”‚     mc-proxy001   โ”‚
                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ”‚             โ”‚             โ”‚
              โ–ผ             โ–ผ             โ–ผ
          Survival        Events      toekomstige
             VM             VM        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.


๐Ÿšช Externe poorten

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

PoortProtocolDienstToegang
25565TCPVelocity ProxyPubliek
8192TCPVotifier / NuVotifierPubliek, indien actief
24454UDPSimple Voice ChatPubliek, indien actief

De primaire Minecraft-ingang is:

tulpencraft.nl:25565

Backend Minecraft-poorten worden niet publiek geopend.


๐ŸŽ™๏ธ Simple Voice Chat

Voor proximity voice chat wordt Simple Voice Chat gebruikt op Survival en toekomstige gameservers waarop voice chat wordt aangeboden.

Simple Voice Chat gebruikt standaard:

24454/UDP

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

Speler
  โ”‚
  โ”œโ”€โ”€ TCP 25565 โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Velocity
  โ”‚
  โ””โ”€โ”€ UDP 24454 โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Simple Voice Chat

Wanneer meerdere gameservers voice chat aanbieden en dezelfde publieke IP-adresruimte gebruiken, krijgt iedere server een eigen UDP-poort.

Bijvoorbeeld:

ServerVoice chatPoort
Survivalโœ…24454/UDP
Eventsโœ…24455/UDP
Toekomstige gameserverโœ…eigen UDP-poort

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

De Simple Voice Chat-configuratie bevindt zich bij Paper doorgaans in:

plugins/voicechat/voicechat-server.properties

Alleen TCP 25565 openen is onvoldoende voor Simple Voice Chat. De benodigde UDP-poort moet eveneens bereikbaar zijn.


๐Ÿ—ณ๏ธ Votifier / NuVotifier

Voor toekomstige stemintegratie kan NuVotifier worden gebruikt.

De standaardpoort van NuVotifier is:

8192/TCP

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

Stemwebsite
     โ”‚
     โ”‚ TCP 8192
     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  NuVotifier   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚
        โ–ผ
   Minecraft server

De Votifier-poort wordt niet geopend zolang de dienst niet actief is.

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


๐Ÿ—„๏ธ MySQL / MariaDB

De database is momenteel onderdeel van de interne infrastructuur en draait op mc-proxy001.

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

De standaardpoort is:

3306/TCP

Deze poort wordt uitsluitend op het interne netwerk toegestaan.

              INTERNET
                  โ”‚
                  โ”‚ โŒ TCP 3306
                  โ–ผ
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚ FIREWALLโ”‚
             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
                  โ”‚
                  โ”‚ โœ… intern
                  โ–ผ
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚ MySQL/MariaDBโ”‚
          โ”‚    :3306      โ”‚
          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

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

Bijvoorbeeld:

BronDoelPoortToegang
LobbyDatabase3306/TCPIntern
SurvivalDatabase3306/TCPIntern
EventsDatabase3306/TCPIntern
InternetDatabase3306/TCPโŒ Geblokkeerd

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


๐ŸŽฎ Backend Minecraft-servers

Backendservers luisteren uitsluitend op interne adressen.

Bijvoorbeeld:

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

Deze poorten worden niet op de publieke interface geopend.

Een speler mag bijvoorbeeld niet rechtstreeks verbinding maken met:

<SERVER_IP>:25567

De enige publiek bedoelde Minecraft-ingang is:

<SERVER_IP>:25565

De proxy verzorgt vervolgens de verbinding naar de backendservers.


๐Ÿ” SSH

SSH wordt gebruikt voor systeembeheer.

SSH is uitsluitend bedoeld voor beheertoegang en wordt waar mogelijk beperkt tot vertrouwde beheerbronnen.

Het uitgangspunt is:

Zie ook:


๐Ÿงฑ firewalld

De host-firewall wordt beheerd met firewalld.

De firewallstatus kan worden gecontroleerd met:

sudo firewall-cmd --state

De actieve configuratie bekijken:

sudo firewall-cmd --list-all

Actieve zones bekijken:

sudo firewall-cmd --get-active-zones

Beschikbare services bekijken:

sudo firewall-cmd --get-services

โž• Poort tijdelijk openen

Een poort kan tijdelijk worden geopend met:

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

Dit is vooral bedoeld voor testen.

Een dergelijke wijziging wordt niet als permanente configuratie beschouwd.


๐Ÿ’พ Poort permanent openen

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

๐ŸŽ™๏ธ Simple Voice Chat openen

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

๐Ÿ—ณ๏ธ Votifier openen

Wanneer NuVotifier actief wordt:

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

Daarna controleren:

sudo firewall-cmd --list-ports

De poort wordt verwijderd wanneer Votifier niet langer wordt gebruikt.


๐Ÿ—„๏ธ MySQL intern toestaan

MySQL mag niet zomaar publiek worden geopend met:

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

Wanneer de database 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 uitsluitend verbindingen vanuit bekende Tulpencraft-systemen.


๐Ÿšซ Default-deny principe

De firewall volgt zoveel mogelijk het default-deny-principe.

Conceptueel:

                       INTERNET
                           โ”‚
                           โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  FIREWALL  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ”‚            โ”‚            โ”‚
             โ–ผ            โ–ผ            โ–ผ
        TCP 25565     UDP 24454    TCP 8192
         Velocity     Voice Chat    Votifier
             โ”‚            โ”‚            โ”‚
             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
                    overige traffic
                          โ”‚
                          โ–ผ
                        DROP

Alleen verkeer dat expliciet noodzakelijk is, wordt toegestaan.


๐Ÿ›ก๏ธ Geen directe backendtoegang

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.


๐Ÿš€ Toekomstige infrastructuur

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.

De exacte verdeling van VM's over Proxmox-nodes wordt afhankelijk van de benodigde resources en de groei van Tulpencraft bepaald.


๐Ÿ“ Firewallwijzigingen documenteren

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

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 firewallwijzigingen moet worden gecontroleerd welke poorten daadwerkelijk luisteren:

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 geconfigureerd en indien mogelijk uitsluitend op het noodzakelijke netwerkinterface luisteren.

De firewall is daarom รฉรฉn onderdeel van de totale beveiliging van Tulpencraft, naast onder andere: