Verschillen
Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
| Beide kanten vorige revisie Vorige revisie Volgende revisie | Vorige revisie | ||
| technische-infrastructuur:firewall [2026/08/23 10:43] – rroethof | technische-infrastructuur:firewall [2026/08/23 11:00] (huidige) – rroethof | ||
|---|---|---|---|
| Regel 1: | Regel 1: | ||
| - | # Firewall | + | # 🔥 Firewall |
| - | De Tulpencraft-servers gebruiken **firewalld** als host-based firewall. | + | De Tulpencraft-servers gebruiken **firewalld** als host-based firewall |
| - | De firewall vormt samen met de netwerkarchitectuur, | + | De firewall vormt een belangrijke beveiligingslaag tussen het Tulpencraft-netwerk, externe verbindingen |
| Het uitgangspunt is eenvoudig: | Het uitgangspunt is eenvoudig: | ||
| - | > **Alleen netwerkverkeer toestaan dat daadwerkelijk | + | > **Alles wat niet expliciet |
| - | Een service die lokaal draait, betekent | + | Backendservers zoals de lobby en gameservers zijn **niet rechtstreeks |
| --- | --- | ||
| - | # 🌐 Netwerkarchitectuur | + | ## 🌐 Firewallarchitectuur |
| - | Tulpencraft gebruikt een centrale **Velocity Proxy** als toegangspunt tot het Minecraft-netwerk. | + | De netwerkarchitectuur is opgebouwd rond een centrale proxy. |
| - | + | ||
| - | De gewenste | + | |
| ```text | ```text | ||
| | | ||
| + | │ | ||
| + | │ | ||
| + | TCP :25565 | ||
| + | │ | ||
| + | ▼ | ||
| + | ┌───────────────────┐ | ||
| + | │ Velocity Proxy │ | ||
| + | │ mc-proxy001 | ||
| + | └─────────┬─────────┘ | ||
| │ | │ | ||
| - | | + | |
| - | | + | ▼ |
| - | TCP 25565 UDP voice | + | ┌───────────────────┐ |
| - | | + | │ Lobby │ |
| - | | + | │ |
| - | ┌─────────────────────────────────┐ | + | └─────────┬─────────┘ |
| - | │ Velocity Proxy | + | │ |
| - | │ | + | ┌─────────────┼─────────────┐ |
| - | └────────────────┬────────────────┘ | + | │ |
| - | │ | + | ▼ |
| - | ▼ | + | Survival |
| - | | + | |
| - | │ | + | |
| - | ┌────────────┼────────────┐ | + | |
| - | ▼ ▼ ▼ | + | |
| - | | + | |
| ``` | ``` | ||
| - | Spelers verbinden dus niet rechtstreeks met de backendservers. | + | De lobby en proxy draaien momenteel vanwege |
| - | De normale Minecraft-verbinding verloopt via: | + | De gameservers draaien als afzonderlijke VM's op de beschikbare Proxmox-infrastructuur. |
| - | + | ||
| - | ```text | + | |
| - | Speler | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Lobby | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Game server | + | |
| - | ``` | + | |
| - | + | ||
| - | Ook voicechat wordt zoveel mogelijk via de proxyarchitectuur afgehandeld. | + | |
| --- | --- | ||
| - | # 🔥 Firewalld | + | ## 🚪 Externe poorten |
| - | De host-firewall wordt verzorgd door **firewalld**. | + | Alleen diensten die daadwerkelijk vanaf internet bereikbaar moeten zijn, krijgen een open firewallpoort. |
| - | Status controleren: | + | | Poort | Protocol | Dienst |
| + | | ------: | :------: | --------------------- | ---------------------- | | ||
| + | | `25565` | TCP | Velocity Proxy | Publiek | ||
| + | | `8192` | TCP | Votifier / NuVotifier | Publiek, indien actief | | ||
| + | | `24454` | UDP | Simple Voice Chat | Publiek, indien actief | | ||
| - | ```bash | + | De primaire Minecraft-ingang is: |
| - | sudo firewall-cmd --state | + | |
| - | ``` | + | |
| - | + | ||
| - | Verwachte uitvoer: | + | |
| ```text | ```text | ||
| - | running | + | tulpencraft.nl: |
| ``` | ``` | ||
| - | Service controleren: | + | Backend Minecraft-poorten worden niet publiek geopend. |
| - | + | ||
| - | ```bash | + | |
| - | sudo systemctl status firewalld | + | |
| - | ``` | + | |
| - | + | ||
| - | Controleren of firewalld automatisch start: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo systemctl is-enabled firewalld | + | |
| - | ``` | + | |
| --- | --- | ||
| - | # 🗂️ Firewalld-zones | + | ## 🎙️ Simple Voice Chat |
| - | Firewalld werkt met zogenaamde | + | Voor proximity voice chat wordt **Simple Voice Chat** gebruikt op Survival en toekomstige gameservers waarop voice chat wordt aangeboden. |
| - | Een zone bepaalt welk vertrouwensniveau aan een netwerkinterface of bron wordt gekoppeld en welke services en poorten daar toegestaan zijn. | + | Simple Voice Chat gebruikt standaard: |
| - | De standaardzone: | + | ```text |
| - | + | 24454/UDP | |
| - | ```bash | + | |
| - | sudo firewall-cmd --get-default-zone | + | |
| ``` | ``` | ||
| - | Actieve zones: | + | Deze poort moet vanaf internet bereikbaar zijn. Voice-chatcommunicatie gebruikt UDP en staat los van de normale Minecraft TCP-verbinding. |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --get-active-zones | + | Speler |
| + | │ | ||
| + | ├── TCP 25565 ──────► Velocity | ||
| + | │ | ||
| + | └── UDP 24454 ──────► Simple Voice Chat | ||
| ``` | ``` | ||
| - | Configuratie van de actieve zone: | + | Wanneer meerdere gameservers voice chat aanbieden en dezelfde publieke IP-adresruimte gebruiken, krijgt iedere server een eigen UDP-poort. |
| - | ```bash | + | Bijvoorbeeld: |
| - | sudo firewall-cmd --list-all | + | |
| - | ``` | + | |
| - | Alle zones: | + | | Server |
| + | | ---------------------- | :--------: | --------------: | ||
| + | | Survival | ||
| + | | Events | ||
| + | | Toekomstige gameserver | ✅ | eigen UDP-poort | | ||
| - | ```bash | + | De exacte poortindeling wordt vastgelegd zodra de betreffende gameservers worden ingericht. |
| - | sudo firewall-cmd --list-all-zones | + | |
| - | ``` | + | |
| - | Voor een publiek bereikbare Tulpencraft-proxy wordt doorgaans de `public` zone gebruikt. | + | De Simple Voice Chat-configuratie bevindt zich bij Paper doorgaans in: |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 🌍 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 | + | |
| - | | -------------: | + | |
| - | | `25565` | TCP | Minecraft / Velocity | Ja | | + | |
| - | | voicechatpoort | UDP | Simple Voice Chat | Ja | | + | |
| - | | `22` | TCP | SSH-beheer | + | |
| - | + | ||
| - | De exacte voicechatpoort wordt verderop beschreven. | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 🎮 Minecraft / Velocity | + | |
| - | + | ||
| - | De Minecraft-ingang van Tulpencraft is: | + | |
| ```text | ```text | ||
| - | TCP 25565 | + | plugins/ |
| ``` | ``` | ||
| - | Deze poort wordt door Velocity gebruikt. | + | > Alleen TCP `25565` |
| - | + | ||
| - | Openen: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp | + | |
| - | sudo firewall-cmd --reload | + | |
| - | ``` | + | |
| - | + | ||
| - | Controleren: | + | |
| - | + | ||
| - | ```bash | + | |
| - | 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 | + | ## 🗳️ Votifier / NuVotifier |
| - | Tulpencraft wil **Simple Voice Chat** ondersteunen op Survival en toekomstige game-servers. | + | Voor toekomstige stemintegratie kan **NuVotifier** worden gebruikt. |
| - | Simple Voice Chat biedt onder andere: | + | De standaardpoort |
| - | + | ||
| - | * 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 | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | ## 🔊 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 | + | |
| ```text | ```text | ||
| - | INTERNET | + | 8192/TCP |
| - | │ | + | |
| - | │ UDP | + | |
| - | ▼ | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | │ | + | |
| - | ┌────────────┼────────────┐ | + | |
| - | ▼ ▼ ▼ | + | |
| - | | + | |
| - | Voice Chat Voice Chat Voice Chat | + | |
| ``` | ``` | ||
| - | Hierdoor blijft het principe behouden dat backendservers niet zelfstandig publiek bereikbaar zijn. | + | Wanneer Votifier daadwerkelijk wordt geactiveerd, |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 🔌 Voicechatpoort | + | |
| - | + | ||
| - | De proxy kan voor Simple Voice Chat een eigen UDP-poort gebruiken. | + | |
| - | + | ||
| - | De officiële proxyconfiguratie gebruikt standaard | + | |
| - | + | ||
| - | Voor Tulpencraft verdient een **expliciete, | + | |
| - | + | ||
| - | Bijvoorbeeld: | + | |
| ```text | ```text | ||
| - | UDP < | + | Stemwebsite |
| + | │ | ||
| + | │ TCP 8192 | ||
| + | ▼ | ||
| + | ┌───────────────┐ | ||
| + | │ NuVotifier | ||
| + | └───────┬───────┘ | ||
| + | │ | ||
| + | ▼ | ||
| + | | ||
| ``` | ``` | ||
| - | De daadwerkelijke | + | De Votifier-poort wordt **niet geopend zolang |
| - | > De standaard backendpoort `24454/UDP` moet dus niet automatisch als publieke poort op iedere Survival-, Events- of toekomstige game-server worden geopend. | + | Het gebruikte Votifier-token wordt nooit in deze wiki opgeslagen. |
| --- | --- | ||
| - | # 🧱 Backend Voice Chat | + | ## 🗄️ MySQL / MariaDB |
| - | Op iedere Minecraft-server waarop voicechat beschikbaar moet zijn, wordt de Simple Voice Chat serverplugin geïnstalleerd. | + | De database is momenteel onderdeel van de interne infrastructuur en draait op `mc-proxy001`. |
| - | De officiële installatie vereist naast de serverplugin ook de Simple Voice Chat-proxyplugin wanneer de server achter Velocity draait. | + | MySQL/ |
| - | De gewenste opbouw: | + | De standaardpoort is: |
| ```text | ```text | ||
| - | Velocity | + | 3306/TCP |
| - | └── Simple Voice Chat Proxy | + | |
| - | + | ||
| - | Lobby | + | |
| - | └── eventueel voicechat | + | |
| - | + | ||
| - | Survival | + | |
| - | └── Simple Voice Chat | + | |
| - | + | ||
| - | Events | + | |
| - | └── Simple Voice Chat | + | |
| - | + | ||
| - | Toekomstige game-server | + | |
| - | └── Simple Voice Chat | + | |
| ``` | ``` | ||
| - | Voicechat | + | Deze poort wordt uitsluitend op het interne |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 🔒 Backendservers niet publiek bereikbaar | + | |
| - | + | ||
| - | Een belangrijk uitgangspunt van Tulpencraft is dat backendservers niet zelfstandig bereikbaar zijn. | + | |
| - | + | ||
| - | Dus bijvoorbeeld: | + | |
| ```text | ```text | ||
| - | Internet | + | INTERNET |
| - | | + | │ |
| - | X | + | │ ❌ TCP 3306 |
| - | | + | ▼ |
| - | Survival:25565 | + | |
| + | │ FIREWALL│ | ||
| + | └────┬────┘ | ||
| + | │ | ||
| + | │ ✅ intern | ||
| + | ▼ | ||
| + | ┌───────────────┐ | ||
| + | │ MySQL/ | ||
| + | │ | ||
| + | └───────────────┘ | ||
| ``` | ``` | ||
| - | is niet de gewenste situatie. | + | Alleen systemen die daadwerkelijk gebruikmaken van de database mogen verbinding maken. |
| - | In plaats daarvan: | + | Bijvoorbeeld: |
| - | ```text | + | | Bron | Doel |
| - | Internet | + | | -------- | -------- | ---------: | ------------- | |
| - | │ | + | | Lobby | Database | `3306/TCP` | Intern |
| - | ▼ | + | | Survival |
| - | Velocity:25565 | + | | Events |
| - | │ | + | | Internet | Database | `3306/TCP` | ❌ Geblokkeerd | |
| - | ▼ | + | |
| - | Survival | + | |
| - | ``` | + | |
| - | Voor voicechat geldt hetzelfde principe: | + | Wanneer |
| - | + | ||
| - | ```text | + | |
| - | Internet | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity UDP voice | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Survival Voice Chat | + | |
| - | ``` | + | |
| - | + | ||
| - | De Simple Voice Chat-proxy zorgt ervoor dat het verkeer naar de juiste backend | + | |
| --- | --- | ||
| - | # 🏠 Lobby | + | ## 🎮 Backend Minecraft-servers |
| - | De lobby draait momenteel | + | Backendservers luisteren uitsluitend |
| - | ```text | + | Bijvoorbeeld: |
| - | 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: | + | |
| ```text | ```text | ||
| - | Speler | ||
| - | │ | ||
| - | ▼ | ||
| Velocity | Velocity | ||
| │ | │ | ||
| - | ▼ | + | ├── Lobby : |
| - | Survival | + | ├── |
| + | | ||
| ``` | ``` | ||
| - | Voicechat: | + | Deze poorten worden **niet** op de publieke interface geopend. |
| - | ```text | + | Een speler mag bijvoorbeeld niet rechtstreeks verbinding maken met: |
| - | 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. | + | |
| ```text | ```text | ||
| - | Speler | + | < |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Events | + | |
| ``` | ``` | ||
| - | en voor voice: | + | De enige publiek bedoelde Minecraft-ingang is: |
| ```text | ```text | ||
| - | 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. | + | De proxy verzorgt vervolgens de verbinding naar de backendservers. |
| --- | --- | ||
| - | # 🔐 SSH | + | ## 🔐 SSH |
| - | SSH is een beheerinterface en geen Minecraft-netwerkdienst. | + | SSH wordt gebruikt voor systeembeheer. |
| - | Wanneer | + | SSH is uitsluitend bedoeld voor beheertoegang en wordt waar mogelijk beperkt tot vertrouwde beheerbronnen. |
| - | ```bash | + | Het uitgangspunt is: |
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | + | |
| - | sudo firewall-cmd --reload | + | |
| - | ``` | + | |
| - | Maar waar mogelijk wordt SSH beperkt tot de noodzakelijke beheeromgeving. | + | * geen onnodige publieke |
| + | * alleen beheer vanaf vertrouwde adressen of netwerken; | ||
| + | * SSH key-based authentication; | ||
| + | * root-login via SSH uitgeschakeld. | ||
| - | SSH wordt daarnaast beschermd door: | + | Zie ook: |
| - | * SSH-sleutels; | + | * [[technische-infrastructuur: |
| - | * geen directe root-login; | + | * [[technische-infrastructuur: |
| - | * geen wachtwoordauthenticatie; | + | |
| - | * Fail2Ban; | + | |
| - | * beperkte gebruikersrechten. | + | |
| - | + | ||
| - | Zie: | + | |
| - | + | ||
| - | [[technische-infrastructuur: | + | |
| --- | --- | ||
| - | # 📦 Services versus poorten | + | ## 🧱 firewalld |
| - | Firewalld kan zowel vooraf gedefinieerde services als afzonderlijke poorten gebruiken. | + | De host-firewall wordt beheerd met **firewalld**. |
| - | Voor standaarddiensten heeft een service de voorkeur: | + | De firewallstatus kan worden gecontroleerd met: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | + | sudo firewall-cmd --state |
| ``` | ``` | ||
| - | Voor applicaties zonder geschikte standaardservice: | + | De actieve configuratie bekijken: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --permanent | + | sudo firewall-cmd --list-all |
| ``` | ``` | ||
| - | Voor Simple Voice Chat: | + | Actieve zones bekijken: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --permanent | + | sudo firewall-cmd --get-active-zones |
| ``` | ``` | ||
| - | Daarna: | + | Beschikbare services bekijken: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --reload | + | sudo firewall-cmd --get-services |
| ``` | ``` | ||
| --- | --- | ||
| - | # ⚠️ Runtime en permanent | + | ## ➕ Poort tijdelijk openen |
| - | Firewalld kent een runtime- en permanente configuratie. | + | Een poort kan tijdelijk worden geopend met: |
| - | + | ||
| - | Een tijdelijke regel: | + | |
| ```bash | ```bash | ||
| Regel 462: | Regel 278: | ||
| ``` | ``` | ||
| - | wordt direct actief, maar is niet noodzakelijk permanent. | + | Dit is vooral bedoeld voor testen. |
| + | |||
| + | Een dergelijke wijziging wordt niet als permanente configuratie beschouwd. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ## 💾 Poort permanent openen | ||
| - | Voor de productiesituatie | + | Wanneer een poort definitief onderdeel van de infrastructuur |
| ```bash | ```bash | ||
| Regel 471: | Regel 293: | ||
| ``` | ``` | ||
| - | Na een wijziging moet altijd worden gecontroleerd of de regel daadwerkelijk actief is. | + | Daarna controleren: |
| + | |||
| + | ```bash | ||
| + | sudo firewall-cmd --list-ports | ||
| + | ``` | ||
| --- | --- | ||
| - | # 🔍 Firewall controleren | + | ## 🎙️ Simple Voice Chat openen |
| - | Volledige configuratie: | + | Voor de standaard voice-chatpoort: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --list-all | + | sudo firewall-cmd --permanent |
| + | sudo firewall-cmd --reload | ||
| ``` | ``` | ||
| - | Services: | + | Controleren: |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --list-services | + | |
| - | ``` | + | |
| - | + | ||
| - | Poorten: | + | |
| ```bash | ```bash | ||
| Regel 495: | Regel 316: | ||
| ``` | ``` | ||
| - | Actieve zones: | + | Verwacht: |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --get-active-zones | + | 24454/udp |
| ``` | ``` | ||
| --- | --- | ||
| - | # 👀 Luisterende poorten | + | ## 🗳️ Votifier openen |
| - | De firewallconfiguratie is slechts één kant van de controle. | + | Wanneer NuVotifier actief wordt: |
| - | + | ||
| - | Ook moet worden gecontroleerd welke processen daadwerkelijk luisteren: | + | |
| ```bash | ```bash | ||
| - | sudo ss -tulpn | + | sudo firewall-cmd --permanent --add-port=8192/ |
| + | sudo firewall-cmd --reload | ||
| ``` | ``` | ||
| - | Hiermee kunnen bijvoorbeeld worden gevonden: | + | Daarna controleren: |
| - | ```text | + | ```bash |
| - | TCP 25565 | + | sudo firewall-cmd --list-ports |
| - | UDP < | + | |
| - | TCP 22 | + | |
| ``` | ``` | ||
| - | Een poort die niet noodzakelijk is, moet bij voorkeur ook niet door een applicatie worden geopend. | + | De poort wordt verwijderd wanneer Votifier |
| --- | --- | ||
| - | # 🎙️ UDP controleren | + | ## 🗄️ MySQL intern toestaan |
| - | Simple Voice Chat gebruikt UDP. | + | MySQL mag **niet zomaar publiek worden geopend** met: |
| - | Een algemene TCP-poorttest is daarom niet voldoende om voicechat te controleren. | + | ```bash |
| + | sudo firewall-cmd --permanent --add-port=3306/ | ||
| + | ``` | ||
| - | 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. | + | Wanneer de database op een afzonderlijke VM staat, wordt toegang bij voorkeur beperkt tot het interne netwerk of specifieke bronadressen. |
| - | In-game kan bijvoorbeeld worden gebruikt: | + | Bijvoorbeeld: |
| ```text | ```text | ||
| - | /voicechat test < | + | Lobby VM |
| + | │ | ||
| + | │ TCP 3306 | ||
| + | ▼ | ||
| + | Database VM | ||
| ``` | ``` | ||
| - | Voor een proxy-opstelling kan daarnaast de voicechat-proxytest worden gebruikt: | + | De database accepteert uitsluitend verbindingen vanuit bekende Tulpencraft-systemen. |
| - | ```text | + | --- |
| - | / | + | |
| - | ``` | + | |
| - | De officiële documentatie beschrijft deze test voor het controleren van de verbinding tussen de proxy en een backendserver. | + | ## 🚫 Default-deny principe |
| - | --- | + | De firewall volgt zoveel mogelijk het **default-deny-principe**. |
| - | # 🛡️ Firewall en Fail2Ban | + | Conceptueel: |
| - | + | ||
| - | Firewalld en Fail2Ban hebben verschillende functies. | + | |
| ```text | ```text | ||
| - | INTERNET | + | INTERNET |
| - | | + | |
| - | | + | |
| - | ┌─────────────┐ | + | ┌────────────┐ |
| - | │ | + | │ |
| - | └──────┬──────┘ | + | └─────┬──────┘ |
| - | | + | │ |
| - | ▼ | + | ┌────────────┼────────────┐ |
| - | | + | |
| - | | + | ▼ ▼ |
| - | │ | + | TCP 25565 UDP 24454 TCP 8192 |
| - | ▼ | + | Velocity |
| - | SSH / overige | + | |
| - | │ | + | └────────────┴────────────┘ |
| - | | + | │ |
| - | | + | |
| - | | + | │ |
| - | ▼ | + | ▼ |
| - | ┌─────────────┐ | + | DROP |
| - | │ Fail2Ban | + | |
| - | └──────┬──────┘ | + | |
| - | | + | |
| - | ▼ | + | |
| - | | + | |
| - | | + | |
| ``` | ``` | ||
| - | Firewalld bepaalt welke netwerktoegang mogelijk | + | Alleen verkeer dat expliciet noodzakelijk |
| - | + | ||
| - | Fail2Ban reageert op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH. | + | |
| --- | --- | ||
| - | # 🧩 Firewall per servertype | + | ## 🛡️ Geen directe backendtoegang |
| - | + | ||
| - | De firewallconfiguratie wordt afgestemd op de functie van de server. | + | |
| - | + | ||
| - | | Server | + | |
| - | | --------------------------- | ------------: | + | |
| - | | **Velocity / Proxy** | + | |
| - | | **Lobby** | + | |
| - | | **Survival** | + | |
| - | | **Events** | + | |
| - | | **Toekomstige game-server** | intern | intern via voice proxy | Nee | | + | |
| - | + | ||
| - | SSH is hierbij een aparte beheerfunctie en wordt alleen opengesteld wanneer noodzakelijk. | + | |
| - | + | ||
| - | --- | + | |
| - | # 🚫 Geen onnodige poorten | + | Een belangrijk onderdeel van de beveiligingsarchitectuur is dat spelers nooit rechtstreeks met backendservers communiceren. |
| - | De volgende aanpak wordt vermeden: | + | Niet toegestaan: |
| ```text | ```text | ||
| - | 25565/ | + | Internet ──► Survival |
| - | 24454/ | + | Internet ──► Lobby |
| - | 25566/ | + | Internet ──► Events |
| - | 25567/ | + | Internet ──► Database |
| - | 25568/ | + | |
| - | ... | + | |
| ``` | ``` | ||
| - | De gewenste situatie is: | + | Wel toegestaan: |
| ```text | ```text | ||
| - | | + | Internet |
| - | │ | + | │ |
| - | | + | ▼ |
| - | | + | Velocity Proxy |
| - | 25565/ | + | │ |
| - | | + | ▼ |
| - | | + | Lobby |
| - | Velocity | + | │ |
| - | | + | ├──► Survival |
| - | └─────────┬─────────┘ | + | ├──► Events |
| - | ▼ | + | └──► toekomstige servers |
| - | | + | |
| ``` | ``` | ||
| - | Daarmee wordt het publieke aanvalsoppervlak beperkt. | + | Hierdoor blijft de netwerkstructuur centraal beheersbaar. |
| --- | --- | ||
| - | # 🧱 Nieuwe netwerkdienst | + | ## 🚀 Toekomstige infrastructuur |
| - | Wanneer | + | Wanneer |
| - | 1. Waarom is de dienst nodig? | + | Een mogelijke toekomstige inrichting: |
| - | 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 | + | ```text |
| + | | ||
| + | │ | ||
| + | ▼ | ||
| + | ┌────────────┐ | ||
| + | │ | ||
| + | │ Velocity | ||
| + | └─────┬──────┘ | ||
| + | │ | ||
| + | ┌─────────────┼─────────────┐ | ||
| + | ▼ | ||
| + | | ||
| + | │ | ||
| + | └─────────────┼─────────────┘ | ||
| + | │ | ||
| + | ▼ | ||
| + | | ||
| + | ``` | ||
| + | |||
| + | Elke VM krijgt daarbij uitsluitend de netwerktoegang die daadwerkelijk noodzakelijk is. | ||
| + | |||
| + | De exacte verdeling van VM's over Proxmox-nodes | ||
| --- | --- | ||
| - | # 🗑️ Poort verwijderen | + | ## 📝 Firewallwijzigingen documenteren |
| - | Wanneer een dienst wordt verwijderd, wordt ook de bijbehorende firewallregel verwijderd. | + | Iedere structurele firewallwijziging moet worden gedocumenteerd. |
| Bijvoorbeeld: | Bijvoorbeeld: | ||
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --permanent --zone=public --remove-port=< | + | Datum: |
| - | sudo firewall-cmd --reload | + | Server: |
| - | ``` | + | Poort: |
| - | + | Dienst: | |
| - | Daarna: | + | Reden: |
| - | + | Toegang: | |
| - | ```bash | + | |
| - | sudo firewall-cmd --zone=public --list-all | + | |
| ``` | ``` | ||
| - | Firewallregels mogen niet blijven bestaan zonder actieve reden. | + | Hierdoor blijft inzichtelijk waarom een poort geopend is en kan ongebruikte toegang later worden verwijderd. |
| --- | --- | ||
| - | # 📝 Firewallwijzigingen documenteren | + | ## 📋 Beveiligingsprincipes |
| - | Structurele wijzigingen worden gedocumenteerd. | + | De firewallconfiguratie van Tulpencraft volgt deze uitgangspunten: |
| - | Bijvoorbeeld: | + | 1. **Default deny** |
| - | + | 2. Alleen noodzakelijke poorten worden geopend. | |
| - | | Onderdeel | Waarde | + | 3. Backendservers zijn niet publiek bereikbaar. |
| - | | --------- | --------------------- | | + | 4. Databaseverkeer blijft intern. |
| - | | Server | + | 5. Voice chat gebruikt uitsluitend de daarvoor bestemde UDP-poorten. |
| - | | Zone | `public` | + | 6. Votifier wordt alleen geopend wanneer deze dienst daadwerkelijk actief is. |
| - | | Poort | `25565/ | + | 7. Firewallwijzigingen worden gedocumenteerd. |
| - | | Dienst | + | 8. Ongebruikte poorten worden verwijderd. |
| - | | Bereik | + | 9. Publieke diensten worden zo veel mogelijk geconcentreerd op de proxy. |
| - | | Reden | Minecraft-ingangspunt | | + | 10. Interne diensten worden beperkt tot noodzakelijke bronadressen. |
| - | | Status | + | |
| - | + | ||
| - | Voor Simple | + | |
| - | + | ||
| - | | Onderdeel | Waarde | + | |
| - | | --------- | --------------------------------------- | | + | |
| - | | Server | + | |
| - | | Zone | `public` | + | |
| - | | Poort | `< | + | |
| - | | Dienst | + | |
| - | | Bereik | + | |
| - | | Backend | + | |
| - | | Status | + | |
| --- | --- | ||
| - | # 🔄 Wijzigingen en onderhoud | + | ## 🔎 Controle |
| - | Bij iedere wijziging aan de netwerkarchitectuur wordt gecontroleerd | + | Na firewallwijzigingen moet worden |
| - | Dit geldt bijvoorbeeld bij: | + | ```bash |
| + | sudo ss -tulpn | ||
| + | ``` | ||
| - | * nieuwe game-servers; | + | En welke poorten door firewalld zijn toegestaan: |
| - | * 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. | + | |
| - | --- | + | ```bash |
| + | sudo firewall-cmd --list-all | ||
| + | ``` | ||
| - | # 📋 Firewall-baseline | + | Ook moet worden gecontroleerd of een dienst daadwerkelijk alleen op het bedoelde adres luistert. |
| - | Iedere Tulpencraft-server wordt minimaal gecontroleerd op: | + | Bijvoorbeeld: |
| - | * [ ] firewalld geïnstalleerd | + | ```text |
| - | * [ ] firewalld actief | + | 0.0.0.0: |
| - | * [ ] 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 wezenlijk anders dan: |
| ```text | ```text | ||
| - | INTERNET | + | 127.0.0.1: |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌─────────────┐ | + | |
| - | │ firewalld | + | |
| - | └──────┬──────┘ | + | |
| - | │ | + | |
| - | | + | |
| - | | + | |
| - | TCP Minecraft | + | |
| - | | + | |
| - | | + | |
| - | ┌────────────────────────────┐ | + | |
| - | │ | + | |
| - | │ mc-proxy001 | + | |
| - | └─────────────┬──────────────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Lobby | + | |
| - | │ | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| ``` | ``` | ||
| - | Daarbovenop worden onder andere toegepast: | + | of een specifiek intern IP-adres. |
| - | + | ||
| - | * SELinux; | + | |
| - | * SSH-hardening; | + | |
| - | * Fail2Ban; | + | |
| - | * least privilege; | + | |
| - | * regelmatige updates; | + | |
| - | * logging; | + | |
| - | * monitoring; | + | |
| - | * beperkte netwerktoegang. | + | |
| --- | --- | ||
| - | # 🌷 Uitgangspunt | + | ## ⚠️ Belangrijk |
| - | Het Tulpencraft-firewallbeleid kan worden samengevat als: | + | Een poort openen in firewalld betekent niet automatisch dat een dienst veilig of correct geconfigureerd is. |
| - | > **Een service die niet publiek bereikbaar hoeft te zijn, wordt niet publiek bereikbaar gemaakt.** | + | De applicatie zelf moet eveneens correct worden geconfigureerd en indien mogelijk uitsluitend op het noodzakelijke netwerkinterface luisteren. |
| - | De Velocity Proxy is het centrale toegangspunt. | + | De firewall |
| - | 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 | ||
| - | |||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| * [[technische-infrastructuur: | * [[technische-infrastructuur: | ||
| * [[technische-infrastructuur: | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | + | * [[technische-infrastructuur: |
| * [[technische-infrastructuur: | * [[technische-infrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[plugins: | ||
| - | |||
| - | --- | ||
| - | |||
| - | > **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. | ||