diff --git a/README.md b/README.md index ea634ab..0e4b01b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,192 @@ -# Backend-Join-Guard +# BackendJoinGuard +![Plugin](https://img.shields.io/badge/Plugin-BackendJoinGuard-0B63CE?style=for-the-badge) +![Platform](https://img.shields.io/badge/Platform-Paper%20%2F%20Spigot-D48700?style=for-the-badge) +![Mode](https://img.shields.io/badge/Mode-Standalone%20or%20StatusAPI%20Sync-6F42C1?style=for-the-badge) + +BackendJoinGuard blockiert direkte Joins auf Backend-Servern und erlaubt nur Verbindungen vom Proxy. + +Wichtig: +- Dieses Plugin kommt auf jeden Backend-Server. +- Es kommt nicht auf den Proxy. +- Es kann komplett eigenständig genutzt werden. +- Optional kann es seine Regeln zentral von StatusAPI beziehen. + +## Zweck + +BackendJoinGuard verhindert, dass Spieler einen Unterserver direkt betreten und damit den Proxy-Schutz umgehen. + +Das Plugin prüft beim Login die Quell-IP des Spielers. +Nur erlaubte Proxy-IPs oder CIDR-Netze dürfen durchgelassen werden. +Alle anderen Verbindungen werden direkt vor dem Join geblockt. + +## Betriebsarten + +### Standalone + +BackendJoinGuard nutzt nur seine eigene config.yml. +Das ist sinnvoll, wenn du keinen zentralen Sync willst oder das Plugin unabhängig von StatusAPI betreiben möchtest. + +### StatusAPI Sync + +BackendJoinGuard lädt seine Schutzregeln regelmäßig von StatusAPI. +Wenn der Sync ausfällt, bleiben die lokalen Werte aus der config.yml als Fallback erhalten. + +## Installation + +1. Die JAR in den plugins-Ordner jedes Backend-Servers kopieren. +2. Server starten, damit die config.yml erzeugt wird. +3. Konfiguration anpassen. +4. Server neu starten oder /backendguard reload ausführen. + +## Konfiguration + +Datei: config.yml + +### Lokale Guard-Werte + +- enforcement-enabled + Aktiviert oder deaktiviert den Direktjoin-Schutz. + +- log-blocked-attempts + Loggt geblockte Direktjoin-Versuche in die Konsole. + +- kick-message + Nachricht für geblockte Spieler. + +- allowed-proxy-ips + Liste exakter Proxy-IPs. + +- allowed-proxy-cidrs + Liste erlaubter Netze im CIDR-Format. + +Beispiel: + +```yml +enforcement-enabled: true +log-blocked-attempts: true +kick-message: "&cBitte verbinde dich nur ueber den Proxy-Server." + +allowed-proxy-ips: + - "127.0.0.1" + - "::1" + - "185.123.45.67" + +allowed-proxy-cidrs: + - "10.0.0.0/24" +``` + +### StatusAPI Sync + +Konfigurationsblock: + +```yml +statusapi-sync: + enabled: true + base-url: "http://127.0.0.1:9191" + endpoint-path: "/network/backendguard/config" + api-key: "DEIN_SYNC_KEY" + interval-seconds: 60 + log-sync-errors: true +``` + +Bedeutung: + +- enabled + Aktiviert den zentralen Abruf über StatusAPI. + +- base-url + Basis-URL deiner StatusAPI auf dem Proxy. + +- endpoint-path + Standard-Endpunkt für den Guard-Sync. + +- api-key + Optionaler Schutz für den Sync-Endpunkt. + Muss identisch zu backendguard.sync.api_key in StatusAPI sein. + +- interval-seconds + Wie oft BackendJoinGuard die Regeln neu abruft. + +- log-sync-errors + Loggt Sync-Probleme in die Backend-Konsole. + +## Passende StatusAPI-Konfiguration + +Wenn du den Sync-Modus nutzen willst, pflegst du die zentralen Werte in StatusAPI über network-guard.properties. + +Relevante Schlüssel: + +```properties +backendguard.enforcement_enabled=true +backendguard.log_blocked_attempts=true +backendguard.kick_message=&cBitte verbinde dich nur ueber den Proxy-Server. +backendguard.allowed_proxy_ips=127.0.0.1,::1,185.123.45.67 +backendguard.allowed_proxy_cidrs=10.0.0.0/24 +backendguard.sync.api_key=DEIN_SYNC_KEY +``` + +## Beispiele + +### Alles auf einer Maschine + +Nutze in der Regel: + +- allowed-proxy-ips: 127.0.0.1, ::1 +- base-url: http://127.0.0.1:9191 + +### Proxy auf einem anderen Host + +Nutze die echte Proxy-IP: + +- allowed-proxy-ips: 185.123.45.67 +- base-url: http://185.123.45.67:9191 + +### Internes Netzwerk + +Nutze interne IP oder CIDR: + +- allowed-proxy-ips: 10.0.0.10 +- allowed-proxy-cidrs: 10.0.0.0/24 +- base-url: http://10.0.0.10:9191 + +## Befehl + +| Command | Beschreibung | +|---|---| +| /backendguard reload | Lädt die Config neu und startet bei aktivem Sync sofort einen neuen Abruf | + +## Permission + +| Permission | Beschreibung | +|---|---| +| backendguard.admin | Darf BackendJoinGuard verwalten | + +## Funktionsweise + +BackendJoinGuard prüft beim PreLogin die IP-Adresse des Clients. + +- Erlaubte Proxy-IP: Join erlaubt +- Erlaubtes CIDR-Netz: Join erlaubt +- Alles andere: Join wird direkt geblockt + +## Troubleshooting + +### Spieler werden trotz Proxy geblockt + +- Prüfe, ob wirklich die Proxy-IP in allowed-proxy-ips eingetragen ist. +- Prüfe bei mehreren Netzsegmenten, ob ein CIDR-Eintrag sinnvoller ist. +- Prüfe, ob Velocity/Bungee korrekt als vorgeschalteter Proxy arbeitet. + +### Sync mit StatusAPI funktioniert nicht + +- Prüfe base-url. +- Prüfe, ob StatusAPI auf dem konfigurierten Port erreichbar ist. +- Prüfe, ob api-key identisch zu backendguard.sync.api_key ist. +- Prüfe die Backend-Konsole bei aktiviertem log-sync-errors. + +### Standalone oder Sync? + +- Wenn du maximale Einfachheit willst: Standalone. +- Wenn du zentrale Verwaltung willst: StatusAPI Sync. +- Wenn StatusAPI ausfällt, bleiben im Sync-Modus die lokalen Werte als Absicherung bestehen. \ No newline at end of file