Files
ssh-jumphost/ansible/inventory/group_vars/all.yml
2026-09-02 20:30:44 +02:00

73 lines
3.8 KiB
YAML

---
# 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