Verschillen
Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
| Volgende revisie | Vorige revisie | ||
| technische-infrastructuur:firewall [2026/08/23 10:41] – aangemaakt 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 |
| - | Firewalld beheert netwerktoegang via zogenaamde **zones**, services, poorten en aanvullende regels. | + | De firewall vormt een belangrijke beveiligingslaag |
| - | De firewall vormt samen met de netwerkarchitectuur, | + | Het uitgangspunt is eenvoudig: |
| - | --- | + | > **Alles wat niet expliciet |
| - | + | ||
| - | ## 🎯 Doel | + | |
| - | + | ||
| - | Het uitgangspunt voor de Tulpencraft-firewall is: | + | |
| - | + | ||
| - | > **Alleen netwerkverkeer toestaan dat daadwerkelijk | + | |
| - | + | ||
| - | Een service die lokaal draait, betekent niet automatisch dat deze vanaf het netwerk bereikbaar moet zijn. | + | |
| - | + | ||
| - | Daarom wordt per server bepaald: | + | |
| - | * welke services actief | + | Backendservers zoals de lobby en gameservers |
| - | * welke poorten noodzakelijk zijn; | + | |
| - | * vanaf welke netwerken toegang nodig is; | + | |
| - | * of een service publiek of uitsluitend | + | |
| --- | --- | ||
| - | # 🌐 Netwerkarchitectuur | + | ## 🌐 Firewallarchitectuur |
| - | Tulpencraft gebruikt | + | De netwerkarchitectuur is opgebouwd rond een centrale |
| ```text | ```text | ||
| | | ||
| + | │ | ||
| + | │ | ||
| + | TCP :25565 | ||
| + | │ | ||
| + | ▼ | ||
| + | ┌───────────────────┐ | ||
| + | │ Velocity Proxy │ | ||
| + | │ mc-proxy001 | ||
| + | └─────────┬─────────┘ | ||
| │ | │ | ||
| - | │ TCP 25565 | + | │ intern netwerk |
| ▼ | ▼ | ||
| - | | + | |
| - | │ Velocity Proxy | + | │ Lobby │ |
| - | │ | + | │ |
| - | └────────┬────────┘ | + | └─────────┬─────────┘ |
| - | | + | │ |
| - | ▼ | + | ┌─────────────┼─────────────┐ |
| - | | + | |
| - | │ | + | |
| - | | + | Survival |
| - | ▼ ▼ ▼ | + | |
| - | | + | |
| ``` | ``` | ||
| - | De backendservers zijn niet bedoeld om rechtstreeks vanaf internet bereikbaar te zijn. | + | De lobby en proxy draaien momenteel vanwege de opbouwfase op dezelfde host. |
| - | Dit betekent dat een speler niet rechtstreeks verbinding maakt met: | + | De gameservers draaien als afzonderlijke VM's op de beschikbare Proxmox-infrastructuur. |
| - | + | ||
| - | ```text | + | |
| - | Survival | + | |
| - | Lobby | + | |
| - | Events | + | |
| - | ``` | + | |
| - | + | ||
| - | maar altijd via de netwerkarchitectuur van Tulpencraft. | + | |
| --- | --- | ||
| - | # 🔥 Firewalld | + | ## 🚪 Externe poorten |
| - | De firewallservice wordt geleverd 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: |
| ``` | ``` | ||
| - | De service kan worden gecontroleerd met: | + | Backend Minecraft-poorten worden niet publiek geopend. |
| - | + | ||
| - | ```bash | + | |
| - | sudo systemctl status firewalld | + | |
| - | ``` | + | |
| - | + | ||
| - | Ingeschakeld bij het opstarten: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo systemctl is-enabled firewalld | + | |
| - | ``` | + | |
| --- | --- | ||
| - | # 🗂️ Zones | + | ## 🎙️ Simple Voice Chat |
| - | Firewalld gebruikt | + | Voor proximity voice chat wordt **Simple Voice Chat** gebruikt op Survival |
| - | De standaardzone kan worden bekeken met: | + | Simple Voice Chat gebruikt standaard: |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --get-default-zone | + | 24454/UDP |
| ``` | ``` | ||
| - | 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 | ||
| ``` | ``` | ||
| - | De 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 | + | |
| - | ``` | + | |
| - | --- | + | De Simple Voice Chat-configuratie bevindt zich bij Paper doorgaans in: |
| - | # 🌍 Public zone | + | ```text |
| + | plugins/ | ||
| + | ``` | ||
| - | Voor een server met een publiek netwerkinterface wordt doorgaans de `public` zone gebruikt. | + | > Alleen TCP `25565` openen |
| - | + | ||
| - | Deze zone is bedoeld | + | |
| - | + | ||
| - | Voor Tulpencraft is dit met name relevant voor de proxy. | + | |
| --- | --- | ||
| - | # 🚪 Proxy-firewall | + | ## 🗳️ Votifier / NuVotifier |
| - | De Velocity Proxy vormt het publieke toegangspunt van het Minecraft-netwerk. | + | Voor toekomstige stemintegratie kan **NuVotifier** worden gebruikt. |
| - | De belangrijkste publiek toegankelijke poort is: | + | De standaardpoort van NuVotifier |
| - | | Poort | Protocol | Doel | | + | ```text |
| - | | ------: | -------- | -------------------- | | + | 8192/TCP |
| - | | `25565` | TCP | Minecraft / Velocity | | + | |
| - | + | ||
| - | De poort wordt expliciet geopend: | + | |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp | + | |
| - | sudo firewall-cmd --reload | + | |
| ``` | ``` | ||
| - | Controle: | + | Wanneer Votifier daadwerkelijk wordt geactiveerd, |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --zone=public --list-ports | + | Stemwebsite |
| + | │ | ||
| + | │ TCP 8192 | ||
| + | ▼ | ||
| + | ┌───────────────┐ | ||
| + | │ NuVotifier | ||
| + | └───────┬───────┘ | ||
| + | │ | ||
| + | ▼ | ||
| + | | ||
| ``` | ``` | ||
| - | Verwacht onder andere: | + | De Votifier-poort wordt **niet geopend zolang de dienst niet actief is**. |
| - | ```text | + | Het gebruikte Votifier-token wordt nooit in deze wiki opgeslagen. |
| - | 25565/tcp | + | |
| - | ``` | + | |
| --- | --- | ||
| - | # 🔐 SSH | + | ## 🗄️ MySQL / MariaDB |
| - | SSH is een beheerinterface | + | De database |
| - | Wanneer SSH publiek bereikbaar moet zijn, wordt de SSH-service expliciet toegestaan: | + | MySQL/ |
| - | ```bash | + | De standaardpoort is: |
| - | sudo firewall-cmd --permanent --zone=public --add-service=ssh | + | |
| - | sudo firewall-cmd --reload | + | ```text |
| + | 3306/TCP | ||
| ``` | ``` | ||
| - | Controle: | + | Deze poort wordt uitsluitend op het interne netwerk toegestaan. |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --zone=public --list-services | + | |
| + | │ | ||
| + | │ ❌ TCP 3306 | ||
| + | ▼ | ||
| + | | ||
| + | │ FIREWALL│ | ||
| + | | ||
| + | │ | ||
| + | │ ✅ intern | ||
| + | ▼ | ||
| + | ┌───────────────┐ | ||
| + | │ MySQL/ | ||
| + | │ :3306 │ | ||
| + | └───────────────┘ | ||
| ``` | ``` | ||
| - | SSH wordt daarnaast beschermd door de maatregelen beschreven in: | + | Alleen systemen die daadwerkelijk gebruikmaken van de database mogen verbinding maken. |
| - | [[technische-infrastructuur:server-hardening|Server hardening]] | + | Bijvoorbeeld: |
| - | waaronder: | + | | Bron | Doel |
| + | | -------- | -------- | ---------: | ------------- | | ||
| + | | Lobby | Database | `3306/TCP` | Intern | ||
| + | | Survival | Database | `3306/TCP` | Intern | ||
| + | | Events | ||
| + | | Internet | Database | `3306/TCP` | ❌ Geblokkeerd | | ||
| - | * SSH-sleutels; | + | Wanneer de database in de toekomst naar een afzonderlijke VM wordt verplaatst, blijft hetzelfde beveiligingsprincipe gelden. |
| - | * uitschakelen van directe root-login; | + | |
| - | * uitschakelen van wachtwoordauthenticatie; | + | |
| - | * Fail2Ban; | + | |
| - | * beperkte gebruikersrechten. | + | |
| --- | --- | ||
| - | # 🏠 Backendservers | + | ## 🎮 Backend Minecraft-servers |
| - | Backendservers | + | Backendservers |
| - | Het uitgangspunt is: | + | Bijvoorbeeld: |
| ```text | ```text | ||
| - | Internet | + | Velocity |
| - | │ | + | |
| - | X | + | |
| │ | │ | ||
| - | Survival | + | |
| + | | ||
| + | | ||
| ``` | ``` | ||
| - | maar: | + | Deze poorten worden **niet** op de publieke interface geopend. |
| + | |||
| + | Een speler mag bijvoorbeeld niet rechtstreeks verbinding maken met: | ||
| ```text | ```text | ||
| - | Internet | + | < |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Survival | + | |
| ``` | ``` | ||
| - | De firewall op een backendserver moet daarom geen algemene publieke | + | De enige publiek bedoelde |
| - | + | ||
| - | 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 | ```text | ||
| - | mc-proxy001 | + | < |
| - | │ | + | |
| - | ├── Velocity | + | |
| - | │ | + | |
| - | └── Lobby | + | |
| ``` | ``` | ||
| - | Dit is onderdeel van de huidige kosten- en infrastructuurkeuze. | + | De proxy verzorgt vervolgens de verbinding naar de backendservers. |
| - | + | ||
| - | 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 | + | ## 🔐 SSH |
| - | Survival draait als afzonderlijke VM op de huidige Proxmox-infrastructuur. | + | SSH wordt gebruikt voor systeembeheer. |
| - | De server | + | SSH is uitsluitend |
| - | De gewenste netwerkstroom | + | Het uitgangspunt |
| - | ```text | + | * geen onnodige publieke SSH-toegang; |
| - | Speler | + | * alleen beheer vanaf vertrouwde adressen of netwerken; |
| - | │ | + | * SSH key-based authentication; |
| - | ▼ | + | * root-login via SSH uitgeschakeld. |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Survival | + | |
| - | ``` | + | |
| - | Niet: | + | Zie ook: |
| - | ```text | + | * [[technische-infrastructuur: |
| - | Speler | + | * [[technische-infrastructuur: |
| - | │ | + | |
| - | ▼ | + | |
| - | Survival | + | |
| - | ``` | + | |
| - | + | ||
| - | De firewall en netwerkconfiguratie moeten deze architectuur ondersteunen. | + | |
| --- | --- | ||
| - | # 🎮 Events | + | ## 🧱 firewalld |
| - | Voor toekomstige Events-servers geldt hetzelfde uitgangspunt. | + | De host-firewall wordt beheerd met **firewalld**. |
| - | Een Events-server wordt niet zelfstandig aan het internet blootgesteld wanneer dit niet noodzakelijk is. | + | De firewallstatus kan worden gecontroleerd met: |
| - | De gewenste architectuur is: | + | ```bash |
| - | + | sudo firewall-cmd --state | |
| - | ```text | + | |
| - | Speler | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Velocity | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | Events | + | |
| ``` | ``` | ||
| - | Eventuele uitzonderingen moeten worden gedocumenteerd. | + | De actieve configuratie bekijken: |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | # 📦 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 | ```bash | ||
| - | sudo firewall-cmd --permanent | + | sudo firewall-cmd --list-all |
| ``` | ``` | ||
| - | Voor applicaties zonder geschikte standaardservice kan een specifieke poort worden geopend: | + | 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 versus permanent | + | ## ➕ Poort tijdelijk openen |
| - | Firewalld kent twee configuratielagen: | + | Een poort kan tijdelijk worden geopend met: |
| - | + | ||
| - | ### Runtime | + | |
| - | + | ||
| - | Een runtime-regel wordt direct actief, maar is niet automatisch blijvend na een reload of reboot. | + | |
| - | + | ||
| - | Bijvoorbeeld: | + | |
| ```bash | ```bash | ||
| Regel 339: | Regel 278: | ||
| ``` | ``` | ||
| - | ### Permanent | + | Dit is vooral bedoeld voor testen. |
| - | Een permanente regel wordt opgeslagen in de firewallconfiguratie: | + | Een dergelijke wijziging |
| + | |||
| + | --- | ||
| + | |||
| + | ## 💾 Poort permanent openen | ||
| + | |||
| + | Wanneer een poort definitief onderdeel van de infrastructuur wordt: | ||
| ```bash | ```bash | ||
| sudo firewall-cmd --permanent --add-port=25565/ | sudo firewall-cmd --permanent --add-port=25565/ | ||
| + | sudo firewall-cmd --reload | ||
| ``` | ``` | ||
| - | Daarna | + | Daarna |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --reload | + | sudo firewall-cmd --list-ports |
| ``` | ``` | ||
| - | |||
| - | Voor productieservers gebruiken we bij voorkeur **permanente configuratie**, | ||
| --- | --- | ||
| - | # 🔍 Firewallconfiguratie 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 | ||
| ``` | ``` | ||
| - | Alle actieve zones: | + | Controleren: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --list-all-zones | + | sudo firewall-cmd --list-ports |
| ``` | ``` | ||
| - | Openstaande services: | + | Verwacht: |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --list-services | + | 24454/udp |
| ``` | ``` | ||
| - | Openstaande poorten: | + | --- |
| - | ```bash | + | ## 🗳️ Votifier openen |
| - | sudo firewall-cmd --list-ports | + | |
| - | ``` | + | |
| - | Beschikbare services: | + | Wanneer NuVotifier actief wordt: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --get-services | + | sudo firewall-cmd --permanent |
| + | sudo firewall-cmd --reload | ||
| ``` | ``` | ||
| - | De actieve interfaces: | + | Daarna controleren: |
| ```bash | ```bash | ||
| - | sudo firewall-cmd --get-active-zones | + | sudo firewall-cmd --list-ports |
| ``` | ``` | ||
| - | Deze commando' | + | De poort wordt verwijderd wanneer Votifier niet langer wordt gebruikt. |
| --- | --- | ||
| - | # 👀 Luisterende poorten controleren | + | ## 🗄️ MySQL intern toestaan |
| - | De firewallconfiguratie vertelt | + | MySQL mag **niet zomaar publiek worden geopend** |
| - | + | ||
| - | Daarom wordt ook gecontroleerd | + | |
| ```bash | ```bash | ||
| - | sudo ss -tulpn | + | sudo firewall-cmd --permanent --add-port=3306/ |
| ``` | ``` | ||
| - | Dit maakt bijvoorbeeld zichtbaar: | + | Wanneer de database op een afzonderlijke VM staat, wordt toegang bij voorkeur beperkt tot het interne netwerk of specifieke bronadressen. |
| + | |||
| + | Bijvoorbeeld: | ||
| ```text | ```text | ||
| - | Velocity | + | Lobby VM |
| - | └── 0.0.0.0: | + | │ |
| - | + | │ TCP 3306 | |
| - | SSH | + | ▼ |
| - | └── 0.0.0.0:22 | + | Database VM |
| ``` | ``` | ||
| - | Een belangrijke securitycontrole is daarom: | + | De database accepteert uitsluitend verbindingen vanuit bekende Tulpencraft-systemen. |
| - | + | ||
| - | > **Welke poorten luisteren daadwerkelijk, | + | |
| - | + | ||
| - | Een poort die niet nodig is, moet bij voorkeur helemaal niet door een applicatie worden geopend. | + | |
| --- | --- | ||
| - | # 🧪 Nieuwe poort openen | + | ## 🚫 Default-deny principe |
| - | Wanneer een nieuwe service een netwerkpoort nodig heeft, wordt eerst bepaald: | + | De firewall volgt zoveel mogelijk het **default-deny-principe**. |
| - | 1. waarom de poort nodig is; | + | Conceptueel: |
| - | 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. | + | ```text |
| - | + | INTERNET | |
| - | Bijvoorbeeld: | + | │ |
| - | + | ▼ | |
| - | ```bash | + | |
| - | sudo firewall-cmd --permanent --zone=public --add-port=< | + | │ FIREWALL |
| - | sudo firewall-cmd --reload | + | └─────┬──────┘ |
| + | │ | ||
| + | | ||
| + | | ||
| + | | ||
| + | TCP 25565 UDP 24454 TCP 8192 | ||
| + | | ||
| + | | ||
| + | | ||
| + | │ | ||
| + | overige traffic | ||
| + | │ | ||
| + | ▼ | ||
| + | DROP | ||
| ``` | ``` | ||
| - | Daarna controleren: | + | Alleen verkeer dat expliciet noodzakelijk is, wordt toegestaan. |
| - | + | ||
| - | ```bash | + | |
| - | sudo firewall-cmd --zone=public --list-all | + | |
| - | ``` | + | |
| --- | --- | ||
| - | # 🗑️ Poort verwijderen | + | ## 🛡️ Geen directe backendtoegang |
| - | Wanneer een dienst niet meer nodig is, wordt de firewallregel verwijderd. | + | Een belangrijk onderdeel van de beveiligingsarchitectuur is dat spelers nooit rechtstreeks met backendservers communiceren. |
| - | Bijvoorbeeld: | + | Niet toegestaan: |
| - | ```bash | + | ```text |
| - | sudo firewall-cmd --permanent --zone=public --remove-port=25565/ | + | Internet ──► Survival |
| - | sudo firewall-cmd --reload | + | Internet ──► Lobby |
| + | Internet ──► Events | ||
| + | Internet ──► Database | ||
| ``` | ``` | ||
| - | Daarna: | + | Wel toegestaan: |
| - | + | ||
| - | ```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 | ```text | ||
| Internet | Internet | ||
| - | │ | + | |
| - | X | + | ▼ |
| - | | + | Velocity Proxy |
| - | beheerpoort | + | |
| - | + | ▼ | |
| - | Beheer-IP | + | Lobby |
| - | │ | + | │ |
| - | ▼ | + | |
| - | beheerpoort | + | |
| + | └──► toekomstige servers | ||
| ``` | ``` | ||
| - | Dit heeft de voorkeur boven een publiek toegankelijke beheerinterface wanneer de netwerkarchitectuur dit mogelijk maakt. | + | Hierdoor blijft |
| --- | --- | ||
| - | # 📝 Logging | + | ## 🚀 Toekomstige infrastructuur |
| - | Firewallgebeurtenissen kunnen onderdeel zijn van de algemene serverlogging. | + | Wanneer Tulpencraft verder groeit, kan de infrastructuur worden opgesplitst over meerdere VM's en/of fysieke nodes. |
| - | De firewallservice: | + | Een mogelijke toekomstige inrichting: |
| - | ```bash | + | ```text |
| - | sudo journalctl -u firewalld | + | INTERNET |
| + | │ | ||
| + | ▼ | ||
| + | ┌────────────┐ | ||
| + | │ | ||
| + | │ Velocity | ||
| + | └─────┬──────┘ | ||
| + | │ | ||
| + | ┌─────────────┼─────────────┐ | ||
| + | ▼ | ||
| + | | ||
| + | │ | ||
| + | └─────────────┼─────────────┘ | ||
| + | │ | ||
| + | ▼ | ||
| + | | ||
| ``` | ``` | ||
| - | Daarnaast kunnen kernel/ | + | Elke VM krijgt daarbij uitsluitend |
| - | Firewalllogging | + | De exacte verdeling van VM's over Proxmox-nodes |
| - | + | ||
| - | Te uitgebreide logging kan zelf aanzienlijke hoeveelheden logdata produceren. | + | |
| --- | --- | ||
| - | # 🛡️ Firewall en Fail2Ban | + | ## 📝 Firewallwijzigingen documenteren |
| - | Firewalld en Fail2Ban vullen elkaar aan. | + | Iedere structurele firewallwijziging moet worden gedocumenteerd. |
| + | |||
| + | Bijvoorbeeld: | ||
| ```text | ```text | ||
| - | ┌──────────────┐ | + | Datum: |
| - | Internet ────────►│ | + | Server: |
| - | | + | Poort: |
| - | │ | + | Dienst: |
| - | ▼ | + | Reden: |
| - | SSH / services | + | Toegang: |
| - | │ | + | |
| - | ▼ | + | |
| - | logbestanden | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌──────────┐ | + | |
| - | │ Fail2Ban │ | + | |
| - | └────┬─────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | tijdelijke ban | + | |
| ``` | ``` | ||
| - | Firewalld bepaalt welke netwerktoegang überhaupt mogelijk | + | Hierdoor blijft inzichtelijk waarom een poort geopend |
| - | + | ||
| - | Fail2Ban reageert vervolgens op herhaaldelijk ongewenst gedrag, bijvoorbeeld brute-forcepogingen op SSH. | + | |
| - | + | ||
| - | Zie: | + | |
| - | + | ||
| - | [[technische-infrastructuur: | + | |
| - | + | ||
| - | voor de volledige hardeningconfiguratie. | + | |
| --- | --- | ||
| - | # 🔄 Wijzigingen documenteren | + | ## 📋 Beveiligingsprincipes |
| - | Firewallwijzigingen worden gedocumenteerd wanneer ze structureel onderdeel worden | + | De firewallconfiguratie |
| - | 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 | + | |
| - | + | ||
| - | Hierdoor blijft duidelijk waarom een poort geopend is. | + | |
| --- | --- | ||
| - | # 📋 Firewall-baseline | + | ## 🔎 Controle |
| - | Een nieuwe Tulpencraft-server | + | Na firewallwijzigingen |
| - | * [ ] firewalld geïnstalleerd | + | ```bash |
| - | * [ ] firewalld actief | + | sudo ss -tulpn |
| - | * [ ] 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 | + | |
| - | --- | + | En welke poorten door firewalld zijn toegestaan: |
| - | # 🌷 Tulpencraft firewallbeleid | + | ```bash |
| + | sudo firewall-cmd --list-all | ||
| + | ``` | ||
| - | De firewall is geen vervanging voor een correcte netwerkarchitectuur. | + | Ook moet worden gecontroleerd of een dienst daadwerkelijk alleen op het bedoelde adres luistert. |
| - | Tulpencraft gebruikt daarom meerdere beveiligingslagen: | + | Bijvoorbeeld: |
| ```text | ```text | ||
| - | Internet | + | 0.0.0.0:3306 |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌───────────────────────┐ | + | |
| - | │ | + | |
| - | └──────────┬────────────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌───────────────────────┐ | + | |
| - | │ firewalld | + | |
| - | └──────────┬────────────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌───────────────────────┐ | + | |
| - | │ Velocity Proxy │ | + | |
| - | └──────────┬────────────┘ | + | |
| - | │ | + | |
| - | ▼ | + | |
| - | ┌───────────────────────┐ | + | |
| - | │ Backend servers | + | |
| - | │ Lobby / Survival etc. │ | + | |
| - | └───────────────────────┘ | + | |
| ``` | ``` | ||
| - | Daarbovenop worden onder andere **SELinux**, | + | is wezenlijk anders dan: |
| - | Het uitgangspunt blijft: | + | ```text |
| + | 127.0.0.1:3306 | ||
| + | ``` | ||
| - | > **Een service die niet bereikbaar hoeft te zijn, wordt niet bereikbaar gemaakt.** | + | of een specifiek intern IP-adres. |
| --- | --- | ||
| - | # 🔗 Gerelateerde documentatie | + | ## ⚠️ Belangrijk |
| + | |||
| + | Een poort openen in firewalld betekent niet automatisch dat een dienst veilig of correct geconfigureerd is. | ||
| + | |||
| + | De applicatie zelf moet eveneens correct worden geconfigureerd en indien mogelijk uitsluitend op het noodzakelijke netwerkinterface luisteren. | ||
| + | |||
| + | De firewall is daarom één onderdeel van de totale beveiliging van Tulpencraft, | ||
| - | * [[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: | ||
| - | |||
| - | --- | ||
| - | |||
| - | > **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. | ||