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.
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:
| Poort | Protocol | Functie | Publiek |
|---|---|---|---|
25565 | TCP | Minecraft / Velocity | Ja |
| voicechatpoort | UDP | Simple Voice Chat | Ja |
22 | TCP | SSH-beheer | Alleen 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.
๐ Voicechat via Velocity
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/UDPmoet 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:
๐ฆ 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.
| Server | Minecraft TCP | Voice UDP | Publiek bereikbaar |
|---|---|---|---|
| Velocity / Proxy | 25565 | centrale voicepoort | Ja |
| Lobby | intern | via proxy indien gebruikt | Nee |
| Survival | intern | intern via voice proxy | Nee |
| Events | intern | intern via voice proxy | Nee |
| Toekomstige game-server | intern | intern via voice proxy | Nee |
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:
- Waarom is de dienst nodig?
- Moet deze publiek bereikbaar zijn?
- Kan de dienst via Velocity worden aangeboden?
- Kan de dienst uitsluitend intern luisteren?
- Welke bronadressen moeten toegang krijgen?
- Welk protocol wordt gebruikt?
- 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:
| Onderdeel | Waarde |
|---|---|
| Server | mc-proxy001 |
| Zone | public |
| Poort | 25565/tcp |
| Dienst | Velocity |
| Bereik | Publiek |
| Reden | Minecraft-ingangspunt |
| Status | Actief |
Voor Simple Voice Chat:
| Onderdeel | Waarde |
|---|---|
| Server | mc-proxy001 |
| Zone | public |
| Poort | <VOICE_PORT>/udp |
| Dienst | Simple Voice Chat |
| Bereik | Publiek |
| Backend | Survival / Events / toekomstige servers |
| Status | Gepland / 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.