Verschillen
Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
| Beide kanten vorige revisie Vorige revisie | |||
| technische-infrastructuur:firewall [2026/08/23 10:59] – 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 op Rocky Linux 10. | + | De Tulpencraft-servers gebruiken **firewalld** als host-based firewall op **Rocky Linux 10**. |
| De firewall vormt een belangrijke beveiligingslaag tussen het Tulpencraft-netwerk, | De firewall vormt een belangrijke beveiligingslaag tussen het Tulpencraft-netwerk, | ||
| - | Het uitgangspunt is: | + | Het uitgangspunt is eenvoudig: |
| > **Alles wat niet expliciet noodzakelijk is, wordt geblokkeerd.** | > **Alles wat niet expliciet noodzakelijk is, wordt geblokkeerd.** | ||
| Regel 13: | Regel 13: | ||
| --- | --- | ||
| - | ## Firewallarchitectuur | + | ## 🌐 Firewallarchitectuur |
| - | De netwerkarchitectuur is opgebouwd rond een centrale proxy: | + | De netwerkarchitectuur is opgebouwd rond een centrale proxy. |
| ```text | ```text | ||
| - | Internet | + | |
| - | | + | |
| - | | + | |
| - | | + | TCP :25565 |
| - | ┌─────────────────────┐ | + | │ |
| - | │ | + | ▼ |
| - | │ | + | ┌───────────────────┐ |
| - | └─────────┬───────────┘ | + | │ Velocity Proxy |
| - | │ | + | │ mc-proxy001 |
| - | │ intern netwerk | + | └─────────┬─────────┘ |
| - | ▼ | + | │ |
| - | ┌─────────────────────┐ | + | │ intern netwerk |
| - | │ Lobby │ | + | ▼ |
| - | │ | + | ┌───────────────────┐ |
| - | └─────────┬───────────┘ | + | │ |
| - | │ | + | │ |
| - | ├──────────► Survival VM | + | └─────────┬─────────┘ |
| - | │ | + | │ |
| - | ├──────────► Event servers | + | ┌─────────────┼─────────────┐ |
| - | │ | + | │ |
| - | └──────────► Toekomstige | + | ▼ |
| + | Survival | ||
| + | | ||
| ``` | ``` | ||
| Regel 47: | Regel 49: | ||
| --- | --- | ||
| - | ## Externe poorten | + | ## 🚪 Externe poorten |
| Alleen diensten die daadwerkelijk vanaf internet bereikbaar moeten zijn, krijgen een open firewallpoort. | Alleen diensten die daadwerkelijk vanaf internet bereikbaar moeten zijn, krijgen een open firewallpoort. | ||
| - | ### Minecraft | + | | Poort | Protocol | Dienst |
| - | + | | ------: | :------: | --------------------- | ---------------------- | | |
| - | | Poort | Protocol | Dienst | + | | `25565` | TCP | Velocity Proxy | Publiek |
| - | | ------: | :------: | --------------------- | ------------------------ | | + | | `8192` | TCP | Votifier / NuVotifier | Publiek, indien |
| - | | `25565` | TCP | Velocity Proxy | Publiek | + | | `24454` | UDP | Simple Voice Chat | Publiek, |
| - | | `8192` | TCP | Votifier / NuVotifier | Publiek, indien | + | |
| - | | `24454` | UDP | Simple Voice Chat | Publiek, | + | |
| - | De Minecraft-spelers verbinden uitsluitend met: | + | De primaire |
| ```text | ```text | ||
| Regel 69: | Regel 69: | ||
| --- | --- | ||
| - | ## Simple Voice Chat | + | ## 🎙️ |
| - | Voor proximity voice chat wordt **Simple Voice Chat** gebruikt. | + | Voor proximity voice chat wordt **Simple Voice Chat** gebruikt |
| Simple Voice Chat gebruikt standaard: | Simple Voice Chat gebruikt standaard: | ||
| Regel 79: | Regel 79: | ||
| ``` | ``` | ||
| - | Deze poort moet bereikbaar zijn vanaf internet. | + | Deze poort moet vanaf internet |
| - | Voor iedere server waarop | + | ```text |
| + | Speler | ||
| + | │ | ||
| + | ├── TCP 25565 ──────► Velocity | ||
| + | │ | ||
| + | └── UDP 24454 ──────► | ||
| + | ``` | ||
| + | |||
| + | Wanneer meerdere gameservers voice chat aanbieden en dezelfde publieke IP-adresruimte gebruiken, krijgt iedere server | ||
| Bijvoorbeeld: | Bijvoorbeeld: | ||
| | Server | | Server | ||
| - | | ---------------------- | ---------- | --------------: | + | | ---------------------- | :--------: | --------------: |
| - | | Survival | + | | Survival |
| - | | Events | + | | Events |
| - | | Toekomstige gameserver | Ja | eigen UDP-poort | | + | | Toekomstige gameserver | |
| De exacte poortindeling wordt vastgelegd zodra de betreffende gameservers worden ingericht. | 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 Simple Voice Chat-configuratie bevindt zich bij Paper doorgaans in: |
| - | + | ||
| - | De configuratie bevindt zich bij Paper doorgaans in: | + | |
| ```text | ```text | ||
| Regel 101: | Regel 107: | ||
| ``` | ``` | ||
| - | De standaardconfiguratie gebruikt poort `24454`. | + | > 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. | Voor toekomstige stemintegratie kan **NuVotifier** worden gebruikt. | ||
| Regel 114: | Regel 120: | ||
| 8192/TCP | 8192/TCP | ||
| ``` | ``` | ||
| - | |||
| - | NuVotifier luistert standaard op TCP-poort `8192`, tenzij in de configuratie een andere poort wordt ingesteld. | ||
| Wanneer Votifier daadwerkelijk wordt geactiveerd, | Wanneer Votifier daadwerkelijk wordt geactiveerd, | ||
| ```text | ```text | ||
| - | Internet | + | Stemwebsite |
| - | | + | |
| - | | + | │ TCP 8192 |
| - | │ | + | ▼ |
| - | ▼ | + | ┌───────────────┐ |
| - | | + | │ NuVotifier |
| + | └───────┬───────┘ | ||
| + | │ | ||
| + | ▼ | ||
| + | Minecraft server | ||
| ``` | ``` | ||
| - | De Votifier-poort | + | De Votifier-poort |
| Het gebruikte Votifier-token wordt nooit in deze wiki opgeslagen. | Het gebruikte Votifier-token wordt nooit in deze wiki opgeslagen. | ||
| Regel 134: | Regel 142: | ||
| --- | --- | ||
| - | ## MySQL / MariaDB | + | ## 🗄️ |
| - | De database | + | De database |
| MySQL/ | MySQL/ | ||
| - | De standaardpoort: | + | De standaardpoort |
| ```text | ```text | ||
| Regel 146: | Regel 154: | ||
| ``` | ``` | ||
| - | wordt daarom | + | Deze poort wordt uitsluitend op het interne netwerk toegestaan. |
| - | + | ||
| - | Conceptueel: | + | |
| ```text | ```text | ||
| - | Internet | + | INTERNET |
| - | | + | │ |
| - | | + | │ ❌ TCP 3306 |
| - | | + | ▼ |
| - | Firewall | + | ┌─────────┐ |
| - | | + | |
| - | │ | + | |
| - | | + | │ |
| + | │ ✅ intern | ||
| + | ▼ | ||
| + | ┌───────────────┐ | ||
| + | │ MySQL/ | ||
| + | │ :3306 │ | ||
| + | └───────────────┘ | ||
| ``` | ``` | ||
| Regel 165: | Regel 177: | ||
| Bijvoorbeeld: | Bijvoorbeeld: | ||
| - | | Bron | Doel | + | | Bron | Doel |
| - | | -------- | -------- | ---------: | --------------- | | + | | -------- | -------- | ---------: | ------------- | |
| - | | Lobby | Database | `3306/TCP` | Intern | + | | Lobby | Database | `3306/TCP` | Intern |
| - | | Survival | Database | `3306/TCP` | Intern | + | | Survival | Database | `3306/TCP` | Intern |
| - | | Events | + | | Events |
| - | | Internet | Database | `3306/TCP` | **Geblokkeerd** | | + | | Internet | Database | `3306/TCP` | ❌ Geblokkeerd | |
| Wanneer de database in de toekomst naar een afzonderlijke VM wordt verplaatst, blijft hetzelfde beveiligingsprincipe gelden. | Wanneer de database in de toekomst naar een afzonderlijke VM wordt verplaatst, blijft hetzelfde beveiligingsprincipe gelden. | ||
| Regel 176: | Regel 188: | ||
| --- | --- | ||
| - | ## Backend Minecraft-servers | + | ## 🎮 Backend Minecraft-servers |
| Backendservers luisteren uitsluitend op interne adressen. | Backendservers luisteren uitsluitend op interne adressen. | ||
| - | Voorbeeld: | + | Bijvoorbeeld: |
| ```text | ```text | ||
| Regel 192: | Regel 204: | ||
| Deze poorten worden **niet** op de publieke interface geopend. | Deze poorten worden **niet** op de publieke interface geopend. | ||
| - | De firewall moet ervoor zorgen dat een externe gebruiker | + | Een speler mag bijvoorbeeld |
| ```text | ```text | ||
| Regel 203: | Regel 215: | ||
| < | < | ||
| ``` | ``` | ||
| + | |||
| + | De proxy verzorgt vervolgens de verbinding naar de backendservers. | ||
| --- | --- | ||
| - | ## SSH | + | ## 🔐 SSH |
| SSH wordt gebruikt voor systeembeheer. | SSH wordt gebruikt voor systeembeheer. | ||
| - | De SSH-poort wordt uitsluitend | + | SSH is uitsluitend |
| - | Wanneer mogelijk wordt SSH beperkt tot: | + | Het uitgangspunt is: |
| - | * vertrouwde beheeradressen; | + | * geen onnodige publieke SSH-toegang; |
| - | * het interne netwerk; | + | * alleen |
| - | * VPN-beheer; | + | * SSH key-based authentication; |
| - | * of andere expliciet toegestane beheerbronnen. | + | * root-login via SSH uitgeschakeld. |
| - | + | ||
| - | SSH gebruikt uitsluitend | + | |
| - | + | ||
| - | Root-login via SSH is uitgeschakeld. | + | |
| Zie ook: | Zie ook: | ||
| - | * [[technische-infrastructuur|Server hardening]] | + | * [[technische-infrastructuur: |
| - | * [[technische-infrastructuur|SELinux]] | + | * [[technische-infrastructuur:selinux|SELinux]] |
| --- | --- | ||
| - | ## firewalld | + | ## 🧱 firewalld |
| - | De firewall wordt beheerd met **firewalld**. | + | De host-firewall wordt beheerd met **firewalld**. |
| - | Basiscontrole: | + | De firewallstatus kan worden gecontroleerd met: |
| ```bash | ```bash | ||
| Regel 240: | Regel 250: | ||
| ``` | ``` | ||
| - | Actieve | + | De actieve |
| ```bash | ```bash | ||
| Regel 246: | Regel 256: | ||
| ``` | ``` | ||
| - | Alle zones bekijken: | + | Actieve |
| ```bash | ```bash | ||
| Regel 252: | Regel 262: | ||
| ``` | ``` | ||
| - | Beschikbare services: | + | Beschikbare services |
| ```bash | ```bash | ||
| Regel 260: | Regel 270: | ||
| --- | --- | ||
| - | ## Poort tijdelijk openen | + | ## ➕ Poort tijdelijk openen |
| Een poort kan tijdelijk worden geopend met: | Een poort kan tijdelijk worden geopend met: | ||
| Regel 268: | Regel 278: | ||
| ``` | ``` | ||
| - | Dit is vooral | + | Dit is vooral |
| - | Een tijdelijke | + | Een dergelijke |
| --- | --- | ||
| - | ## Poort permanent openen | + | ## 💾 Poort permanent openen |
| Wanneer een poort definitief onderdeel van de infrastructuur wordt: | Wanneer een poort definitief onderdeel van de infrastructuur wordt: | ||
| Regel 291: | Regel 301: | ||
| --- | --- | ||
| - | ## Voorbeeld: | + | ## 🎙️ |
| Voor de standaard voice-chatpoort: | Voor de standaard voice-chatpoort: | ||
| Regel 314: | Regel 324: | ||
| --- | --- | ||
| - | ## Voorbeeld: | + | ## 🗳️ |
| Wanneer NuVotifier actief wordt: | Wanneer NuVotifier actief wordt: | ||
| Regel 328: | Regel 338: | ||
| sudo firewall-cmd --list-ports | sudo firewall-cmd --list-ports | ||
| ``` | ``` | ||
| + | |||
| + | De poort wordt verwijderd wanneer Votifier niet langer wordt gebruikt. | ||
| --- | --- | ||
| - | ## MySQL intern toestaan | + | ## 🗄️ |
| - | MySQL moet niet met: | + | MySQL mag **niet zomaar publiek worden geopend** |
| ```bash | ```bash | ||
| - | --add-port=3306/ | + | sudo firewall-cmd --permanent |
| ``` | ``` | ||
| - | zonder verdere beperking publiek worden geopend. | + | Wanneer |
| - | + | ||
| - | Wanneer | + | |
| Bijvoorbeeld: | Bijvoorbeeld: | ||
| Regel 347: | Regel 357: | ||
| ```text | ```text | ||
| Lobby VM | Lobby VM | ||
| - | │ | + | |
| - | | + | │ TCP 3306 |
| - | | + | ▼ |
| Database VM | Database VM | ||
| ``` | ``` | ||
| - | De database accepteert | + | De database accepteert uitsluitend verbindingen vanuit bekende Tulpencraft-systemen. |
| --- | --- | ||
| - | ## Default-deny principe | + | ## 🚫 Default-deny principe |
| - | De firewall volgt zoveel mogelijk het principe: | + | De firewall volgt zoveel mogelijk het **default-deny-principe**. |
| + | |||
| + | Conceptueel: | ||
| ```text | ```text | ||
| - | Internet | + | |
| - | | + | |
| - | | + | |
| - | [ FIREWALL ] | + | |
| - | | + | |
| - | ├── | + | └─────┬──────┘ |
| - | ├── | + | │ |
| - | ├── UDP 24454 → Simple | + | ┌────────────┼────────────┐ |
| - | | + | |
| + | | ||
| + | TCP 25565 UDP 24454 TCP 8192 | ||
| + | | ||
| + | | ||
| + | | ||
| + | │ | ||
| + | | ||
| + | │ | ||
| + | ▼ | ||
| + | | ||
| ``` | ``` | ||
| - | Interne communicatie | + | 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. | Een belangrijk onderdeel van de beveiligingsarchitectuur is dat spelers nooit rechtstreeks met backendservers communiceren. | ||
| Regel 394: | Regel 416: | ||
| ```text | ```text | ||
| Internet | Internet | ||
| - | │ | + | |
| - | | + | ▼ |
| Velocity Proxy | Velocity Proxy | ||
| - | │ | + | |
| - | | + | ▼ |
| Lobby | Lobby | ||
| - | │ | + | |
| - | | + | ├──► Survival |
| - | | + | ├──► Events |
| - | | + | └──► toekomstige servers |
| ``` | ``` | ||
| Regel 410: | Regel 432: | ||
| --- | --- | ||
| - | ## Toekomstige infrastructuur | + | ## 🚀 Toekomstige infrastructuur |
| Wanneer Tulpencraft verder groeit, kan de infrastructuur worden opgesplitst over meerdere VM's en/of fysieke nodes. | Wanneer Tulpencraft verder groeit, kan de infrastructuur worden opgesplitst over meerdere VM's en/of fysieke nodes. | ||
| Een mogelijke toekomstige inrichting: | Een mogelijke toekomstige inrichting: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌──────────────┐ | ||
| - | │ Proxy │ | ||
| - | │ | ||
| - | └──────┬───────┘ | ||
| - | │ | ||
| - | ┌────────────┼────────────┐ | ||
| - | ▼ ▼ ▼ | ||
| - | | ||
| - | │ │ │ | ||
| - | └────────────┼────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Elke VM krijgt daarbij uitsluitend de netwerktoegang die daadwerkelijk noodzakelijk is. | ||
| - | |||
| - | --- | ||
| - | |||
| - | ## Firewallwijzigingen documenteren | ||
| - | |||
| - | Iedere structurele firewallwijziging moet worden gedocumenteerd. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ````text | ||
| - | Datum: | ||
| - | Server: | ||
| - | Poort: | ||
| - | Dienst: | ||
| - | Reden: | ||
| - | Toegang: | ||
| - | |||
| - | 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, | ||
| - | |||
| - | --- | ||
| - | |||
| - | ## 🎯 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 | ```text | ||
| | | ||
| - | │ | ||
| - | │ TCP 25565 | ||
| - | ▼ | ||
| - | ┌─────────────────┐ | ||
| - | │ Velocity Proxy │ | ||
| - | │ | ||
| - | └────────┬────────┘ | ||
| │ | │ | ||
| ▼ | ▼ | ||
| - | | + | |
| - | │ | + | │ |
| - | | + | │ Velocity |
| - | ▼ ▼ ▼ | + | └─────┬──────┘ |
| - | | + | |
| - | + | ||
| - | 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, | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | ## 🎯 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 | + | |
| - | | + | |
| │ | │ | ||
| - | │ TCP 25565 | + | |
| - | ▼ | + | |
| - | | + | |
| - | │ Velocity Proxy │ | + | |
| - | │ | + | |
| - | └────────┬────────┘ | + | |
| - | │ | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | ┌────────────┼────────────┐ | + | |
| - | ▼ ▼ ▼ | + | |
| - | | + | |
| - | ``` | + | |
| - | + | ||
| - | 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, | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | ## 🎯 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 | + | |
| - | | + | |
| │ | │ | ||
| - | │ TCP 25565 | ||
| ▼ | ▼ | ||
| - | ┌─────────────────┐ | + | |
| - | │ Velocity Proxy │ | + | |
| - | │ | + | |
| - | └────────┬────────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | | + | |
| - | │ | + | |
| - | ┌────────────┼────────────┐ | + | |
| - | ▼ ▼ ▼ | + | |
| - | | + | |
| ``` | ``` | ||
| - | De backendservers zijn niet bedoeld om rechtstreeks vanaf internet bereikbaar te zijn. | + | Elke VM krijgt daarbij uitsluitend de netwerktoegang die daadwerkelijk noodzakelijk is. |
| - | Dit betekent dat een speler niet rechtstreeks verbinding maakt met: | + | De exacte verdeling van VM's over Proxmox-nodes wordt afhankelijk van de benodigde resources en de groei van Tulpencraft |
| - | + | ||
| - | ```text | + | |
| - | Survival | + | |
| - | Lobby | + | |
| - | Events | + | |
| - | ``` | + | |
| - | + | ||
| - | maar altijd via de netwerkarchitectuur | + | |
| --- | --- | ||
| - | # 🔥 Firewalld | + | ## 📝 Firewallwijzigingen documenteren |
| - | De firewallservice wordt geleverd door `firewalld`. | + | Iedere structurele firewallwijziging |
| - | + | ||
| - | Status controleren: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --state | + | |
| - | ``` | + | |
| - | + | ||
| - | Verwachte uitvoer: | + | |
| - | + | ||
| - | ```text | + | |
| - | running | + | |
| - | ``` | + | |
| - | + | ||
| - | De service kan worden gecontroleerd met: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo systemctl status firewalld | + | |
| - | ``` | + | |
| - | + | ||
| - | Ingeschakeld bij het opstarten: | + | |
| - | + | ||
| - | ```bash | + | |
| - | 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: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --get-default-zone | + | |
| - | ``` | + | |
| - | + | ||
| - | Actieve zones: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --get-active-zones | + | |
| - | ``` | + | |
| - | + | ||
| - | De configuratie van de actieve zone: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --list-all | + | |
| - | ``` | + | |
| - | + | ||
| - | Alle zones: | + | |
| - | + | ||
| - | ```bash | + | |
| - | 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: | + | |
| - | + | ||
| - | | Poort | Protocol | Doel | | + | |
| - | | ------: | -------- | -------------------- | | + | |
| - | | `25565` | TCP | Minecraft / Velocity | | + | |
| - | + | ||
| - | De poort wordt expliciet geopend: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --zone=public --add-port=25565/ | + | |
| - | sudo firewall-cmd --reload | + | |
| - | ``` | + | |
| - | + | ||
| - | Controle: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --zone=public --list-ports | + | |
| - | ``` | + | |
| - | + | ||
| - | Verwacht onder andere: | + | |
| - | + | ||
| - | ```text | + | |
| - | 25565/tcp | + | |
| - | ``` | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 🔐 SSH | + | |
| - | + | ||
| - | SSH is een beheerinterface en wordt niet beschouwd als een Minecraft-netwerkdienst. | + | |
| - | + | ||
| - | Wanneer SSH publiek bereikbaar | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | + | |
| - | sudo firewall-cmd --reload | + | |
| - | ``` | + | |
| - | + | ||
| - | Controle: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --zone=public --list-services | + | |
| - | ``` | + | |
| - | + | ||
| - | SSH wordt daarnaast beschermd door de maatregelen beschreven in: | + | |
| - | + | ||
| - | [[technische-infrastructuur: | + | |
| - | + | ||
| - | 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: | + | |
| - | + | ||
| - | ```text | + | |
| - | Internet | + | |
| - | │ | + | |
| - | X | + | |
| - | │ | + | |
| - | Survival | + | |
| - | ``` | + | |
| - | + | ||
| - | maar: | + | |
| - | + | ||
| - | ```text | + | |
| - | 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: | + | |
| - | + | ||
| - | ```text | + | |
| - | 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: | + | |
| - | + | ||
| - | ```text | + | |
| - | Speler | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Survival | + | |
| - | ``` | + | |
| - | + | ||
| - | Niet: | + | |
| - | + | ||
| - | ```text | + | |
| - | 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: | + | |
| - | + | ||
| - | ```text | + | |
| - | Speler | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Events | + | |
| - | ``` | + | |
| - | + | ||
| - | Eventuele uitzonderingen moeten | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 📦 Services versus poorten | + | |
| - | + | ||
| - | Firewalld ondersteunt zowel vooraf gedefinieerde services als losse poortdefinities. | + | |
| - | + | ||
| - | Een service is een verzameling van bijbehorende netwerkregels, | + | |
| - | + | ||
| - | Voor standaarddiensten heeft het daarom de voorkeur om een service te gebruiken: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --add-service=ssh | + | |
| - | ``` | + | |
| - | + | ||
| - | Voor applicaties zonder geschikte standaardservice kan een specifieke poort worden geopend: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --add-port=25565/ | + | |
| - | ``` | + | |
| - | + | ||
| - | Daarna: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --reload | + | |
| - | ``` | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # ⚠️ Runtime versus permanent | + | |
| - | + | ||
| - | Firewalld kent twee configuratielagen: | + | |
| - | + | ||
| - | ### Runtime | + | |
| - | + | ||
| - | Een runtime-regel wordt direct actief, maar is niet automatisch blijvend na een reload of reboot. | + | |
| Bijvoorbeeld: | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | ### Permanent | ||
| - | |||
| - | Een permanente regel wordt opgeslagen in de firewallconfiguratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | Daarna wordt de actieve configuratie opnieuw geladen: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Voor productieservers gebruiken we bij voorkeur **permanente configuratie**, | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔍 Firewallconfiguratie controleren | ||
| - | |||
| - | Volledige configuratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all | ||
| - | ``` | ||
| - | |||
| - | Alle actieve zones: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all-zones | ||
| - | ``` | ||
| - | |||
| - | Openstaande services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-services | ||
| - | ``` | ||
| - | |||
| - | Openstaande poorten: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-ports | ||
| - | ``` | ||
| - | |||
| - | Beschikbare services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-services | ||
| - | ``` | ||
| - | |||
| - | De actieve interfaces: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | ||
| - | ``` | ||
| - | |||
| - | Deze commando' | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 👀 Luisterende poorten controleren | ||
| - | |||
| - | De firewallconfiguratie vertelt niet welke applicaties daadwerkelijk luisteren. | ||
| - | |||
| - | Daarom wordt ook gecontroleerd met: | ||
| - | |||
| - | ```bash | ||
| - | sudo ss -tulpn | ||
| - | ``` | ||
| - | |||
| - | Dit maakt bijvoorbeeld zichtbaar: | ||
| ```text | ```text | ||
| - | Velocity | + | Datum: |
| - | └── 0.0.0.0:25565 | + | Server: mc-proxy001 |
| - | + | Poort: | |
| - | SSH | + | Dienst: |
| - | └── 0.0.0.0:22 | + | Reden: |
| + | Toegang: | ||
| ``` | ``` | ||
| - | |||
| - | Een belangrijke securitycontrole is daarom: | ||
| - | |||
| - | > **Welke poorten luisteren daadwerkelijk, | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-port=< | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna controleren: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-all | ||
| - | ``` | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🗑️ Poort verwijderen | ||
| - | |||
| - | Wanneer een dienst niet meer nodig is, wordt de firewallregel verwijderd. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --remove-port=25565/ | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna: | ||
| - | |||
| - | ```bash | ||
| - | 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, | ||
| - | |||
| - | Voorbeeldconcept: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo journalctl -u firewalld | ||
| - | ``` | ||
| - | |||
| - | Daarnaast kunnen kernel/ | ||
| - | |||
| - | 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. | ||
| - | |||
| - | ```text | ||
| - | ┌──────────────┐ | ||
| - | Internet ────────►│ | ||
| - | └──────┬───────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | SSH / services | ||
| - | │ | ||
| - | ▼ | ||
| - | logbestanden | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌──────────┐ | ||
| - | │ Fail2Ban │ | ||
| - | └────┬─────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Firewalld bepaalt welke netwerktoegang überhaupt mogelijk is. | ||
| - | |||
| - | Fail2Ban reageert vervolgens op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH. | ||
| - | |||
| - | Zie: | ||
| - | |||
| - | [[technische-infrastructuur: | ||
| - | |||
| - | voor de volledige hardeningconfiguratie. | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔄 Wijzigingen documenteren | ||
| - | |||
| - | Firewallwijzigingen worden gedocumenteerd wanneer ze structureel onderdeel worden van de serverconfiguratie. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | | Onderdeel | Waarde | ||
| - | | --------- | --------------------- | | ||
| - | | Server | ||
| - | | Zone | `public` | ||
| - | | Poort | `25565/ | ||
| - | | Dienst | ||
| - | | Bereik | ||
| - | | Reden | Minecraft-ingangspunt | | ||
| - | | Status | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ firewalld | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Velocity Proxy │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Backend servers | ||
| - | │ Lobby / Survival etc. │ | ||
| - | └───────────────────────┘ | ||
| - | ``` | ||
| - | |||
| - | Daarbovenop worden onder andere **SELinux**, | ||
| - | |||
| - | Het uitgangspunt blijft: | ||
| - | |||
| - | > **Een service die niet bereikbaar hoeft te zijn, wordt niet bereikbaar gemaakt.** | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔗 Gerelateerde documentatie | ||
| - | |||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | |||
| - | --- | ||
| - | |||
| - | > **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: | ||
| - | |||
| - | ```text | ||
| - | Survival | ||
| - | Lobby | ||
| - | Events | ||
| - | ``` | ||
| - | |||
| - | maar altijd via de netwerkarchitectuur van Tulpencraft. | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔥 Firewalld | ||
| - | |||
| - | De firewallservice wordt geleverd door `firewalld`. | ||
| - | |||
| - | Status controleren: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --state | ||
| - | ``` | ||
| - | |||
| - | Verwachte uitvoer: | ||
| - | |||
| - | ```text | ||
| - | running | ||
| - | ``` | ||
| - | |||
| - | De service kan worden gecontroleerd met: | ||
| - | |||
| - | ```bash | ||
| - | sudo systemctl status firewalld | ||
| - | ``` | ||
| - | |||
| - | Ingeschakeld bij het opstarten: | ||
| - | |||
| - | ```bash | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-default-zone | ||
| - | ``` | ||
| - | |||
| - | Actieve zones: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | ||
| - | ``` | ||
| - | |||
| - | De configuratie van de actieve zone: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all | ||
| - | ``` | ||
| - | |||
| - | Alle zones: | ||
| - | |||
| - | ```bash | ||
| - | 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: | ||
| - | |||
| - | | Poort | Protocol | Doel | | ||
| - | | ------: | -------- | -------------------- | | ||
| - | | `25565` | TCP | Minecraft / Velocity | | ||
| - | |||
| - | De poort wordt expliciet geopend: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-port=25565/ | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Controle: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-ports | ||
| - | ``` | ||
| - | |||
| - | Verwacht onder andere: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Controle: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-services | ||
| - | ``` | ||
| - | |||
| - | SSH wordt daarnaast beschermd door de maatregelen beschreven in: | ||
| - | |||
| - | [[technische-infrastructuur: | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | X | ||
| - | │ | ||
| - | Survival | ||
| - | ``` | ||
| - | |||
| - | maar: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Speler | ||
| - | │ | ||
| - | ▼ | ||
| - | Velocity | ||
| - | │ | ||
| - | ▼ | ||
| - | Survival | ||
| - | ``` | ||
| - | |||
| - | Niet: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | 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, | ||
| - | |||
| - | Voor standaarddiensten heeft het daarom de voorkeur om een service te gebruiken: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-service=ssh | ||
| - | ``` | ||
| - | |||
| - | Voor applicaties zonder geschikte standaardservice kan een specifieke poort worden geopend: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | Daarna: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | --- | ||
| - | |||
| - | # ⚠️ Runtime versus permanent | ||
| - | |||
| - | Firewalld kent twee configuratielagen: | ||
| - | |||
| - | ### Runtime | ||
| - | |||
| - | Een runtime-regel wordt direct actief, maar is niet automatisch blijvend na een reload of reboot. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | ### Permanent | ||
| - | |||
| - | Een permanente regel wordt opgeslagen in de firewallconfiguratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | Daarna wordt de actieve configuratie opnieuw geladen: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Voor productieservers gebruiken we bij voorkeur **permanente configuratie**, | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔍 Firewallconfiguratie controleren | ||
| - | |||
| - | Volledige configuratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all | ||
| - | ``` | ||
| - | |||
| - | Alle actieve zones: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all-zones | ||
| - | ``` | ||
| - | |||
| - | Openstaande services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-services | ||
| - | ``` | ||
| - | |||
| - | Openstaande poorten: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-ports | ||
| - | ``` | ||
| - | |||
| - | Beschikbare services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-services | ||
| - | ``` | ||
| - | |||
| - | De actieve interfaces: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | ||
| - | ``` | ||
| - | |||
| - | Deze commando' | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 👀 Luisterende poorten controleren | ||
| - | |||
| - | De firewallconfiguratie vertelt niet welke applicaties daadwerkelijk luisteren. | ||
| - | |||
| - | Daarom wordt ook gecontroleerd met: | ||
| - | |||
| - | ```bash | ||
| - | sudo ss -tulpn | ||
| - | ``` | ||
| - | |||
| - | Dit maakt bijvoorbeeld zichtbaar: | ||
| - | |||
| - | ```text | ||
| - | Velocity | ||
| - | | ||
| - | |||
| - | SSH | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Een belangrijke securitycontrole is daarom: | ||
| - | |||
| - | > **Welke poorten luisteren daadwerkelijk, | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-port=< | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna controleren: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-all | ||
| - | ``` | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🗑️ Poort verwijderen | ||
| - | |||
| - | Wanneer een dienst niet meer nodig is, wordt de firewallregel verwijderd. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --remove-port=25565/ | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna: | ||
| - | |||
| - | ```bash | ||
| - | 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, | ||
| - | |||
| - | Voorbeeldconcept: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo journalctl -u firewalld | ||
| - | ``` | ||
| - | |||
| - | Daarnaast kunnen kernel/ | ||
| - | |||
| - | 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. | ||
| - | |||
| - | ```text | ||
| - | ┌──────────────┐ | ||
| - | Internet ────────►│ | ||
| - | └──────┬───────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | SSH / services | ||
| - | │ | ||
| - | ▼ | ||
| - | logbestanden | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌──────────┐ | ||
| - | │ Fail2Ban │ | ||
| - | └────┬─────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Firewalld bepaalt welke netwerktoegang überhaupt mogelijk is. | ||
| - | |||
| - | Fail2Ban reageert vervolgens op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH. | ||
| - | |||
| - | Zie: | ||
| - | |||
| - | [[technische-infrastructuur: | ||
| - | |||
| - | voor de volledige hardeningconfiguratie. | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔄 Wijzigingen documenteren | ||
| - | |||
| - | Firewallwijzigingen worden gedocumenteerd wanneer ze structureel onderdeel worden van de serverconfiguratie. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | | Onderdeel | Waarde | ||
| - | | --------- | --------------------- | | ||
| - | | Server | ||
| - | | Zone | `public` | ||
| - | | Poort | `25565/ | ||
| - | | Dienst | ||
| - | | Bereik | ||
| - | | Reden | Minecraft-ingangspunt | | ||
| - | | Status | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ firewalld | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Velocity Proxy │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Backend servers | ||
| - | │ Lobby / Survival etc. │ | ||
| - | └───────────────────────┘ | ||
| - | ``` | ||
| - | |||
| - | Daarbovenop worden onder andere **SELinux**, | ||
| - | |||
| - | Het uitgangspunt blijft: | ||
| - | |||
| - | > **Een service die niet bereikbaar hoeft te zijn, wordt niet bereikbaar gemaakt.** | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔗 Gerelateerde documentatie | ||
| - | |||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | |||
| - | --- | ||
| - | |||
| - | > **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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --state | ||
| - | ``` | ||
| - | |||
| - | Verwachte uitvoer: | ||
| - | |||
| - | ```text | ||
| - | running | ||
| - | ``` | ||
| - | |||
| - | De service kan worden gecontroleerd met: | ||
| - | |||
| - | ```bash | ||
| - | sudo systemctl status firewalld | ||
| - | ``` | ||
| - | |||
| - | Ingeschakeld bij het opstarten: | ||
| - | |||
| - | ```bash | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-default-zone | ||
| - | ``` | ||
| - | |||
| - | Actieve zones: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | ||
| - | ``` | ||
| - | |||
| - | De configuratie van de actieve zone: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all | ||
| - | ``` | ||
| - | |||
| - | Alle zones: | ||
| - | |||
| - | ```bash | ||
| - | 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: | ||
| - | |||
| - | | Poort | Protocol | Doel | | ||
| - | | ------: | -------- | -------------------- | | ||
| - | | `25565` | TCP | Minecraft / Velocity | | ||
| - | |||
| - | De poort wordt expliciet geopend: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-port=25565/ | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Controle: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-ports | ||
| - | ``` | ||
| - | |||
| - | Verwacht onder andere: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Controle: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-services | ||
| - | ``` | ||
| - | |||
| - | SSH wordt daarnaast beschermd door de maatregelen beschreven in: | ||
| - | |||
| - | [[technische-infrastructuur: | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | X | ||
| - | │ | ||
| - | Survival | ||
| - | ``` | ||
| - | |||
| - | maar: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Speler | ||
| - | │ | ||
| - | ▼ | ||
| - | Velocity | ||
| - | │ | ||
| - | ▼ | ||
| - | Survival | ||
| - | ``` | ||
| - | |||
| - | Niet: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | 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, | ||
| - | |||
| - | Voor standaarddiensten heeft het daarom de voorkeur om een service te gebruiken: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-service=ssh | ||
| - | ``` | ||
| - | |||
| - | Voor applicaties zonder geschikte standaardservice kan een specifieke poort worden geopend: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | Daarna: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | --- | ||
| - | |||
| - | # ⚠️ Runtime versus permanent | ||
| - | |||
| - | Firewalld kent twee configuratielagen: | ||
| - | |||
| - | ### Runtime | ||
| - | |||
| - | Een runtime-regel wordt direct actief, maar is niet automatisch blijvend na een reload of reboot. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | ### Permanent | ||
| - | |||
| - | Een permanente regel wordt opgeslagen in de firewallconfiguratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --add-port=25565/ | ||
| - | ``` | ||
| - | |||
| - | Daarna wordt de actieve configuratie opnieuw geladen: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Voor productieservers gebruiken we bij voorkeur **permanente configuratie**, | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔍 Firewallconfiguratie controleren | ||
| - | |||
| - | Volledige configuratie: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all | ||
| - | ``` | ||
| - | |||
| - | Alle actieve zones: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-all-zones | ||
| - | ``` | ||
| - | |||
| - | Openstaande services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-services | ||
| - | ``` | ||
| - | |||
| - | Openstaande poorten: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --list-ports | ||
| - | ``` | ||
| - | |||
| - | Beschikbare services: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-services | ||
| - | ``` | ||
| - | |||
| - | De actieve interfaces: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | ||
| - | ``` | ||
| - | |||
| - | Deze commando' | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 👀 Luisterende poorten controleren | ||
| - | |||
| - | De firewallconfiguratie vertelt niet welke applicaties daadwerkelijk luisteren. | ||
| - | |||
| - | Daarom wordt ook gecontroleerd met: | ||
| - | |||
| - | ```bash | ||
| - | sudo ss -tulpn | ||
| - | ``` | ||
| - | |||
| - | Dit maakt bijvoorbeeld zichtbaar: | ||
| - | |||
| - | ```text | ||
| - | Velocity | ||
| - | | ||
| - | |||
| - | SSH | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Een belangrijke securitycontrole is daarom: | ||
| - | |||
| - | > **Welke poorten luisteren daadwerkelijk, | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --add-port=< | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna controleren: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --zone=public --list-all | ||
| - | ``` | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🗑️ Poort verwijderen | ||
| - | |||
| - | Wanneer een dienst niet meer nodig is, wordt de firewallregel verwijderd. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | ```bash | ||
| - | sudo firewall-cmd --permanent --zone=public --remove-port=25565/ | ||
| - | sudo firewall-cmd --reload | ||
| - | ``` | ||
| - | |||
| - | Daarna: | ||
| - | |||
| - | ```bash | ||
| - | 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, | ||
| - | |||
| - | Voorbeeldconcept: | ||
| - | |||
| - | ```text | ||
| - | 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: | ||
| - | |||
| - | ```bash | ||
| - | sudo journalctl -u firewalld | ||
| - | ``` | ||
| - | |||
| - | Daarnaast kunnen kernel/ | ||
| - | |||
| - | 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. | ||
| - | |||
| - | ```text | ||
| - | ┌──────────────┐ | ||
| - | Internet ────────►│ | ||
| - | └──────┬───────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | SSH / services | ||
| - | │ | ||
| - | ▼ | ||
| - | logbestanden | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌──────────┐ | ||
| - | │ Fail2Ban │ | ||
| - | └────┬─────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | | ||
| - | ``` | ||
| - | |||
| - | Firewalld bepaalt welke netwerktoegang überhaupt mogelijk is. | ||
| - | |||
| - | Fail2Ban reageert vervolgens op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH. | ||
| - | |||
| - | Zie: | ||
| - | |||
| - | [[technische-infrastructuur: | ||
| - | |||
| - | voor de volledige hardeningconfiguratie. | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔄 Wijzigingen documenteren | ||
| - | |||
| - | Firewallwijzigingen worden gedocumenteerd wanneer ze structureel onderdeel worden van de serverconfiguratie. | ||
| - | |||
| - | Bijvoorbeeld: | ||
| - | |||
| - | | Onderdeel | Waarde | ||
| - | | --------- | --------------------- | | ||
| - | | Server | ||
| - | | Zone | `public` | ||
| - | | Poort | `25565/ | ||
| - | | Dienst | ||
| - | | Bereik | ||
| - | | Reden | Minecraft-ingangspunt | | ||
| - | | Status | ||
| - | |||
| - | 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: | ||
| - | |||
| - | ```text | ||
| - | Internet | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ firewalld | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Velocity Proxy │ | ||
| - | └──────────┬────────────┘ | ||
| - | │ | ||
| - | ▼ | ||
| - | ┌───────────────────────┐ | ||
| - | │ Backend servers | ||
| - | │ Lobby / Survival etc. │ | ||
| - | └───────────────────────┘ | ||
| - | ``` | ||
| - | |||
| - | Daarbovenop worden onder andere **SELinux**, | ||
| - | |||
| - | Het uitgangspunt blijft: | ||
| - | |||
| - | > **Een service die niet bereikbaar hoeft te zijn, wordt niet bereikbaar gemaakt.** | ||
| - | |||
| - | --- | ||
| - | |||
| - | # 🔗 Gerelateerde documentatie | ||
| - | |||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[technische-infrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | * [[serverinfrastructuur: | ||
| - | |||
| - | --- | ||
| - | |||
| - | > **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. | Hierdoor blijft inzichtelijk waarom een poort geopend is en kan ongebruikte toegang later worden verwijderd. | ||
| Regel 2420: | Regel 482: | ||
| --- | --- | ||
| - | ## Beveiligingsprincipes | + | ## 📋 Beveiligingsprincipes |
| De firewallconfiguratie van Tulpencraft volgt deze uitgangspunten: | De firewallconfiguratie van Tulpencraft volgt deze uitgangspunten: | ||
| Regel 2437: | Regel 499: | ||
| --- | --- | ||
| - | ## Controle | + | ## 🔎 Controle |
| - | Na wijzigingen | + | Na firewallwijzigingen |
| ```bash | ```bash | ||
| Regel 2469: | Regel 531: | ||
| --- | --- | ||
| - | > **Belangrijk:** een poort openen in firewalld betekent niet automatisch dat een dienst veilig of correct geconfigureerd is. De applicatie zelf moet eveneens correct worden | + | ## ⚠️ |
| + | |||
| + | Een poort openen in firewalld betekent niet automatisch dat een dienst veilig of correct geconfigureerd is. | ||
| + | |||
| + | De applicatie zelf moet eveneens correct worden | ||
| + | |||
| + | De firewall is daarom één onderdeel van de totale beveiliging van Tulpencraft, | ||
| + | |||
| + | * [[technische-infrastructuur: | ||
| + | * [[technische-infrastructuur: | ||
| + | * [[technische-infrastructuur: | ||
| + | * [[technische-infrastructuur: | ||