umbau 1.3.2

This commit is contained in:
2026-09-03 10:34:01 +02:00
parent b2c72de069
commit 0728a9af27
7 changed files with 392 additions and 53 deletions

View File

@ -0,0 +1,30 @@
# /etc/guacamole/guacd.conf -- von Ansible verwaltet (Rolle "guacd").
#
# WICHTIG, zweimal falsch gemacht am 3.9.: guacd.conf ist eine INI-Datei mit
# FESTEN Abschnitten, und jeder Parameter gehoert in genau einen davon.
# guacd bricht bei einem Parameter im falschen Abschnitt den START ab
# ("Parse error at line N, column 1: Invalid parameter or section name") --
# der Dienst laeuft dann gar nicht mehr.
#
# [daemon] pid_file, log_level
# [server] bind_host, bind_port
# [ssl] server_certificate, server_key
#
# "log_level" gehoert also unter [daemon], NICHT unter [server]. Und es heisst
# "log_level" -- "max_log_level" gibt es nicht (das war der zweite Fehlversuch).
#
# Deshalb jetzt eine vollstaendige Vorlage statt einzelner lineinfile-Eintraege:
# lineinfile haengt eine Zeile ans DATEIENDE, also in den zuletzt geoeffneten
# Abschnitt, ohne den Zusammenhang zu kennen. Fuer eine abschnittsbasierte
# Konfigurationsdatei ist das die falsche Werkzeugwahl.
[daemon]
# trace | debug | info | warning | error
# "info" protokolliert bereits "Certificate validation bypassed" bzw.
# "... failed" -- die entscheidende Unterscheidung bei RDP-Fehler 519.
# Fuer den konkreten FreeRDP-/OpenSSL-Fehler voruebergehend "debug".
log_level = {{ guacd_log_level }}
[server]
bind_host = 127.0.0.1
bind_port = {{ guacd_port }}

View File

@ -7,6 +7,16 @@
[Service]
User=guacd
Group=guacd
{% if guacd_tls_seclevel | string | length > 0 %}
# OpenSSL-Sicherheitsstufe fuer FreeRDP erzwingen (Befund 3.9.). FreeRDP setzt
# sie selbst (Vorgabe 1) und ueberschreibt damit jede OPENSSL_CONF-Vorgabe;
# guacamole-server reicht die zustaendige FreeRDP-Option nicht durch. Die
# Zwischenschicht greift NUR in diesem Prozess und nur, solange
# JUMPHOST_GUACD_TLS_SECLEVEL gesetzt ist -- ausfuehrliche Begruendung im
# Kopfkommentar von roles/guacd/files/guacd_tls_seclevel_shim.c.
Environment=LD_PRELOAD=/usr/local/lib/jumphost/guacd-tls-seclevel-shim.so
Environment=JUMPHOST_GUACD_TLS_SECLEVEL={{ guacd_tls_seclevel }}
{% endif %}
{% if guacd_tls_legacy_compat %}
# TLS-Kompatibilitaet fuer die Strecke guacd -> Windows-Ziel (Live-Test 3.9.).
# Setzt die OpenSSL-Vorgaben NUR fuer diesen Prozess; systemweit bleibt

View File

@ -15,6 +15,14 @@
# diesem Fall irrefuehrend; die Hosteinstellung "Zertifikat ignorieren"
# kann daran folglich nichts aendern.
#
# Gemessener Fall (jumphost-97 -> 10.0.0.12, 3.9.): der Handshake gelingt erst
# ab Sicherheitsstufe 0; Stufe 1 UND 2 scheitern beide gleich mit einem TCP-RST
# der Gegenstelle. Das deutet auf die signature_algorithms-Erweiterung: OpenSSL
# 3.0 bietet ab Stufe 1 kein SHA-1 mehr als Signaturverfahren an, und das Ziel
# kann den ServerKeyExchange offenbar nicht anders signieren. Nicht das
# ZERTIFIKAT ist das Problem -- dessen Signatur prueft bei ignore-cert ohnehin
# niemand (eigens gegengeprueft).
#
# ABWAEGUNG (bewusst zu treffen, deshalb standardmaessig AUS):
# Diese Datei senkt die TLS-Anforderungen fuer die Strecke
# Jumphost -> Windows-Ziel. Die Strecke Browser -> Jumphost ist davon nicht
@ -22,6 +30,9 @@
# vertretbar; die saubere Loesung bleibt, TLS 1.2 auf dem Windows-Ziel zu
# aktivieren. Nur so weit lockern wie noetig -- guacd_tls_min_protocol und
# guacd_tls_security_level einzeln nachziehen, statt pauschal auf TLSv1/0.
# Auch bei SECLEVEL=0 schliesst 'DEFAULT' weiterhin NULL- und anonyme Cipher
# aus -- eine ungeschuetzte Verbindung wird dadurch also nicht moeglich.
# Zusammen mit MinProtocol=MaxProtocol=TLSv1.2 bleibt die Lockerung eng.
openssl_conf = default_conf
@ -37,6 +48,16 @@ MinProtocol = {{ guacd_tls_min_protocol }}
MaxProtocol = {{ guacd_tls_max_protocol }}
{% endif %}
CipherString = DEFAULT@SECLEVEL={{ guacd_tls_security_level }}
{% if guacd_tls_signature_algorithms | default('', true) | length > 0 %}
# Explizite Liste der angebotenen Signaturverfahren. Gemessen am 3.9.:
# die Cipher-Liste ist auf allen Sicherheitsstufen IDENTISCH
# (openssl ciphers -s 'DEFAULT@SECLEVEL=0|1|2' -> jeweils dieselben 30),
# der Unterschied liegt also in der signature_algorithms-Erweiterung:
# OpenSSL 3.0 bietet SHA-1 ab Stufe 1 nicht mehr an. Achtung -- die
# Sicherheitsstufe filtert diese Liste NACHTRAEGLICH nochmals, ohne
# guacd_tls_security_level: 0 bleibt SHA-1 also trotzdem draussen.
SignatureAlgorithms = {{ guacd_tls_signature_algorithms }}
{% endif %}
{% if guacd_tls_unsafe_legacy_renegotiation %}
# Manche aeltere Windows-/SCHANNEL-Staende koennen die in OpenSSL 3
# standardmaessig abgeschaltete unsichere Neuverhandlung verlangen.