--- # Gemeinsame Variablen. Umgebungsspezifische Werte in # jumphost_with_nginx.yml / jumphost_no_nginx.yml ueberschreiben # (oder direkt hier anpassen, wenn nur eine Umgebung existiert). jumphost_app_user: jumphost jumphost_app_group: jumphost jumphost_home: /opt/jumphost jumphost_data_dir: /var/lib/jumphost jumphost_venv: "{{ jumphost_home }}/venv" jumphost_repo_src: "{{ playbook_dir }}/.." # Projekt-Root (enthaelt app/, static/, templates/) jumphost_listen_uds: /run/jumphost/app.sock jumphost_app_port: 8443 # nur relevant wenn enable_nginx_proxy: false guacd_port: 4822 # --- nginx / TLS ------------------------------------------------------------ enable_nginx_proxy: true tls_mode: internal_pki # internal_pki | external_reverse_proxy | acme_public # Nur fuer tls_mode: external_reverse_proxy relevant: external_reverse_proxy_cidr: "10.10.5.0/24" internal_hop_plaintext_accepted: false # bewusste Ausnahme, siehe Konzept 7.2a # Nur fuer tls_mode: acme_public relevant: acme_domain: "jumphost.example.com" acme_email: "admin@example.com" # --- Firewall ---------------------------------------------------------------- ssh_admin_access_cidr: "10.10.1.0/24" # Management-Netz fuer SSH-Zugriff AUF den Jumphost selbst # Netze der Zielsysteme (fuer ausgehende Regeln der Output-Chain, siehe # ansible/roles/firewall_nftables/templates/jumphost.nft.j2). War bislang # 10.20.0.0/16 -- die tatsaechlichen RDP-/SSH-Ziele liegen in 10.0.0.0/8 # (Befund B5, Umsetzungsauftrag_Sonnet5.md Teil A.3): stand die Adresse # ausserhalb dieses Bereichs, wurden guacds ausgehende RDP-Pakete von der # Output-Chain (policy drop) still verworfen -- kein Reject, kein Log -- # und der Benutzer sah nur "Server timeout" statt eines erklaerbaren # Fehlers. An das tatsaechliche Zielnetz anpassen, falls es abweicht. target_networks: - "10.0.0.0/8" # --- Login-Rate-Limiting (E8, Umsetzungsauftrag Teil E) ---------------------- # Drei unabhaengige Bremsen, alle IP-basiert (siehe app/security/rate_limit.py, # app/config.py login_rate_limit_*): App-Rate-Limiter (JUMPHOST_LOGIN_RATE_ # LIMIT_MAX_EVENTS/_WINDOW_S), dieses nginx-limit_req und die fail2ban- # Schwelle unten. ACHTUNG: greifen pro Quell-IP -- sitzen mehrere interne # Benutzer hinter derselben NAT-Adresse (typischer Buerofall), teilen sie # sich dieses Budget, und ein paar Tippfehler beliebiger Kollegen koennen # die ganze Gruppe aussperren. Der kontenbezogene Lockout # (JUMPHOST_MAX_FAILED_LOGINS) bleibt davon unberuehrt und ist die # eigentliche scharfe Bremse. Bewusst an die erwartete Umgebung anpassen # (z.B. hier anheben und/oder bekannte interne Netze in der Firewall-Regel # gesondert behandeln) und die Entscheidung im Betriebshandbuch festhalten # -- NICHT ungeprueft mit den unten stehenden Standardwerten produktiv gehen, # wenn mehrere Benutzer hinter derselben Adresse sitzen koennen. jumphost_login_rate_limit: "10r/m" # nginx limit_req_zone rate= jumphost_fail2ban_maxretry: 8 # fail2ban [jumphost-login] maxretry # --- Obergrenzen gleichzeitiger Sitzungen (E.4, Umsetzungsauftrag Teil E) ---- # jumphost_uvicorn_limit_concurrency ist die AEUSSERSTE Bremse (uvicorn lehnt # neue Verbindungen ab, bevor die Anwendung ueberhaupt beteiligt ist) und # sollte daher spuerbar UEBER JUMPHOST_MAX_SESSIONS_GLOBAL liegen (siehe # app/config.py) -- sie deckt zusaetzlich kurzlebige HTTP-Anfragen # (Katalog, Dateitransfer, Adminbereich) mit ab, nicht nur WS-Sitzungen. # jumphost_limit_nofile mit Marge fuer: 2x Sockets je Sitzung + guacd- # Verbindung (RDP) + Aufzeichnungsdatei + normale Prozess-FDs. jumphost_uvicorn_limit_concurrency: 150 jumphost_uvicorn_backlog: 100 jumphost_limit_nofile: 4096 # --- Backup -------------------------------------------------------------------- backup_dir: /var/backups/jumphost backup_retention_days: 30