OpenVPN (Instances) mit TOTP funktioniert nicht korrekt... oder?!

Started by Navigator, November 20, 2024, 02:38:32 PM

Previous topic - Next topic
Hallo zusammen,

m.E. funktioniert OpenVPN mit Benutzer-Authentifizierung TOTP nicht korrekt. Vielleicht mache ich aber ja auch einen Gedankenfehler. Dann wäre ich sehr dankbar für Hilfe.

Folgende Situation:

Ich wollte meine OpenVPN Server (legacy) Einstellungen umstellen auf die Instances. Soweit klappt das auch und man kann einen Tunnel zumindest schon mal aufbauen. Dieser bricht jedoch nach ca. 30-40 Sekunden ab mit dem Hinweis

2024-11-20T14:16:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2024-11-20T14:16:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'

Nach einigem Testen bin ich dann auf die Einstellungen Renegotiate time und Auth Token Lifetime gekommen. Laut der Hilfebeschreibung muss man die Renegotiate time auf "0" setzen wenn man ein One Time Password nutzt, was ja auch Sinn macht. Setzt man dies aber auf "0" wir im Feld "Auth Token Lifetime" ein Wert ungleich Null erwartet. Gibt man jedoch einen Wert > 0 ein kann man die Config nicht speichern mit dem Hinweis "A token lifetime requires a non zero Renegotiate time." Gibt mal den Wert "0" ein, kann man zwar speichern aber der OpenVPN Service lässt sich nicht mehr starten.

Ich habe mal etwas herumgetestet und kann nun eine "vermeintlich" konstante VPN Verbindung mit einer Benutzer-Authentifizierung mit Benutzername+Passwort+TOTP herstellen. Ich habe lediglich bei Auth Token Lifetime den Wert "0" stehen. Ich habe das "vermeintlich" aber in Anführungsstriche gesetzt, weil der VPN alle ca 60 Sekunden auch den o.g. Hinweis wirft und die VPN Verbindung kurz unterbricht aber sich danach sofort wieder reconnected. Das ist aber doch auch nicht richtig.

Wie eingangs geschrieben, vielleicht mache ich ja auch einen Gedankenfehler, aber irgendwie wirkt das auf mich gerade nicht richtig. Ich switche erstmal wieder auf OpenVPN (legacy) zurück. Vielleicht hat ja jemand einen Tip für mich.

Danke und viele Grüße

Hallo,

bin gerade dabei, ebenfalls einen OpenVPN Server mit TOTP so zu konfigurieren, dass er nutzerfreundlich zu verwenden ist, allerdings im Legacy Mode.
Den Sinn von Instances habe ich bislang noch nicht verstanden. Vielleicht kann es jemand hier erklären.
Ich vermute aber, dass Legacy mittelfristig aus OPNsense verbannt werden soll. Bei den Advanced Options gibt es ja jetzt schon den Hinweis, dass das Feld künftig entfernt wird, weil unsicher. Meiner Meinung müsste da OPNsense aber zuvor häufig benötige Optionen in die GUI einbauen, was dieser wohl aber unübersichtlich machen würde.
Ich verstehe dann aber nicht, weswegen man sich an der Möglichkeit, weitere OpenVPN Optionen angeben zu können, stört. Da kommt ohnehin nur hin, wer Administrator ist oder von diesem entsprechend privilegiert wurde. Ich vermute, dass gar nicht die Sicherheit der Knackpunkt ist, sondern dass man in diesen Optionen jede Menge falsch machen kann, was in der GUI nicht überprüft wird und dann der Server nicht startest. Wie du selbst erfahren hast, akzeptiert aber auch die GUI solche Fehlangaben.
Da hätten die Entwickler noch eine Menge zu tun. Aber das ist eine andere Geschichte.

Bei der Suche nach einer brauchbaren Konfiguration für TOTP bin ich auf dein Post gestoßen. Die Dokumentation verrät leider nicht alle nötigen Schritte, daher war ich gezwungen zu recherchieren.

Mit den beiden von dir erwähnten Parametern, "Renegotiate time" und "Auth Token Lifetime" musste ich mich auch auseinander setzen, weil der Client jeweils nach eine Stunde wieder das PW und einen neuen TOTP Token haben wollte. Diese Parameter sind hierbei auch wichtig.

Ja, "Renegotiate time" auf 0 gesetzt, deaktiviert die Renegotiation, doch steht da auch, dass man die entsprechende Einstellung auch am Client machen muss, aber nicht wie. Im Client Konfig Export findet sich auch keine Zeile dazu, wenn es im Server auf 0 steht. Ohne dieser Einstellung wurde nach wie vor jede Stunde (Standardwert) am Client dennoch erneut das Passwort und der Token abgefragt.

So hatte ich mich damit weiter beschäftigt und die Empfehlung gefunden, die Renegotiation aktiv zu belassen und für "Auth Token Lifetime" einen sehr hohen Wert von vielen Stunden zu setzen. Ich habe 12 Stunden genommen. Damit steht die Verbindung nun seit mehr als 2 Stunden.
Aber wie erwähnt, das ist ein Legacy Server, falls das einen Unterschied macht.

Zu den Optionen, die hast du vermutlich nicht richtig verstanden, sind aber auch nicht in OPNsense ordentlich erklärt.
Mit einem Wert für "Auth Token Lifetime" generiert der Server bei Verbindungsherstellung einen Session-Token, den er an den Client schickt. Mit diesem wird dann die Renegotiation nach der in "Renegotiate time" gesetzten Zeit durchgeführt. Der Client benötigt dafür also keinen frischen TOTP PIN. Und "Auth Token Lifetime" gibt die Gültigkeitsdauer des Session-Tokens an, sollte also länger als eine übliche Session sein.
Renegotiation zu deaktivieren wird aus Sicherheitsgründen nicht empfohlen.

Wäre nett, wenn diese Info in die Dokumentation einfließen würde.
Und auch fehlt in der Client Konfiguration (Client Export) die Option für TOTP, so dass der Client getrennte Felder für die beiden Werte anbietet.

Vielleicht bist du ja gewillt, es mit den neuen Erkenntnissen nochmals zu versuchen.

Grüße

Hallo viragomann,

erst einmal Sorry für die verspätete Antwort.

Habe das jetzt nochmal getestet mit einer neuen Testinstanz. Der alte OpenVPN Server (legacy) läuft super stabil ohne jegliche Abbrüche. Wenn ich nun die OpenVPN Instances aufbaue und dann teste, kommt wieder immer nach genau 60 Sekunden der Abbruch.

2025-02-02T11:50:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:50:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:50:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
...
...
...
2025-02-02T11:49:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:49:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:49:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
...
...
...
2025-02-02T11:48:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:48:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:48:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
...
...
...
2025-02-02T11:47:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:47:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:47:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx

Habe jetzt auch Deine empfohlene Einstellung in der "Auth Token Lifetime" vorgenommen (auf 43200 gesetzt, also auch 12 Stunden). Trotzdem gleiches Verhalten.

Das muss meiner Meinung nach irgendwas in der OPNsense bzw. dem OpenVPN selbst sein. Ich verfolge gerade mal, parallel wo ich hier die Antwort tippe, das Log von OpenVPN und diese "Client disconnected" Meldungen kommen auch jetzt, wo mein Testclient gar nicht verbunden ist. Was fehlt sind natürlich die dazwischen liegenden Connects eines Client.

2025-02-02T11:57:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:57:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:57:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx   
2025-02-02T11:56:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:56:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:56:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
2025-02-02T11:55:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:55:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:55:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
2025-02-02T11:54:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:54:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:54:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx

Aber ich habe keine Idee, woran das liegen könnte.

Viele Grüße

Quote from: Navigator on February 02, 2025, 12:02:37 PM2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:53:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: Client disconnected   
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: CMD 'status 3'   
2025-02-02T11:52:00   Notice   openvpn_server2   MANAGEMENT: Client connected from /var/etc/openvpn/instance-xxxxxxxxxx

Hallo,

soweit ich weiß, sind diese Logs normal. Ich weiß aber jetzt nicht das Intervall. Müsste ich nachsehen.
Ist der Log Verbosity Level auf Standard (1) gesetzt?

Ergibt sich darauf irgendein Problem?
Ist die Verbindung nach wie vor nicht stabil?

Moin,

Das Hauptproblem mit TOTP ist, dass die Clients dieses nicht vorsehen:

Wenn man TOTP macht, wird der User nach Benutzer / Passwort gefragt.
Normal erwartet man danach die Abfrage vom TOTP Code.
Das passiert aber nicht!
Man muss im Passwort-Feld das Passwort, gefolgt vom TOTP Code eingeben BSP.: Password081596.
Damit ist Passwort speichern und "nur" TOTP aktuell eingeben nicht möglich.

Ein Workaround ist es das Passwort auf etwas "gemeinsames" zu setzen BSP.: @081596, wobei @ das Passwort wäre.
Finde ich nicht schön, aber funktioniert.
VMW / PMX / PFS / OPS

Quote from: trixter on February 03, 2025, 11:34:31 AMDas Hauptproblem mit TOTP ist, dass die Clients dieses nicht vorsehen:
Das stimmt so nicht. Es ist in entsprechende Clients sehr wohl eingebaut. Es muss aber in der Konfiguration auch aktiviert werden, aber diese Info fehlt in der OPNsense Dokumentation ebenso, wie oben angemerkt, wie im Client Export.

Baut man die Zeile
Quotestatic-challenge "Time-based one-time password:" 1
in die Client Konfig ein, zeigt sich der OpenVPN GUI Client auf Windows bei der Anmeldung wie im Screenshot. Der Text innerhalb der Anführungszeichen kann individuell gesetzt werden.
Benutzername und Passwort können dabei gespeichert werden, dann muss nur das TOTP bei jeder Anmeldung neu eingegeben werden.
Das scheint mir komfortabel genug.

Wünschenswert wäre, dass der Client Export diesen Eintrag automatisch setzt, wenn eine Konfig für einen TOTP-aktivierten Server exportiert wird. Aktuell muss mein die Zeile manuell bei "Custom config" einfügen.

Grüße

Danke - da habe ich wieder mal was dazu gelernt.

Das sollte vielleicht wirklich mit in die entsprechende Doku.
VMW / PMX / PFS / OPS


Danke!

Meine Aussage bezüglich des Fehlens in der Doku bezog sich auf den Zeitpunkt meines oberen Posts. Da bin ich die Doku durchgegangen und fand die Erwähnung noch nicht.
Schön aber, dass mittlerweile darauf hingewiesen wird.

Noch schöner wäre es, wenn der Client Export die Zeile gleich automatisch setzen würde. Vielleicht lässt sich das auch noch einrichten.

Wenn wir hier nun schon die Vollständigkeit der Dokumentation diskutieren, will ich noch hinzufügen, dass auch die Option "Auth Token Lifetime" da keine Erwähnung findet. Das gilt auch noch heute.
Ohne dies explizit auf einen entsprechenden Wert zu setzen, wird die VPN jeweils nach einer Stunde beendet und man sieht sich gezwungen, ein neues TOTP einzugeben zu müssen.
Ist auch nicht gerade komfortabel. Bei OpenVPN mit TOTP sehe ich diese Einstellung daher als essentiell.

Auch die Option "Renegotiate time" könnte in diesem Zusammenhang erklärt werden.

Quote from: viragomann on February 03, 2025, 04:27:09 PMWenn wir hier nun schon die Vollständigkeit der Dokumentation diskutieren, will ich noch hinzufügen, dass auch die Option "Auth Token Lifetime" da keine Erwähnung findet. Das gilt auch noch heute.
Ohne dies explizit auf einen entsprechenden Wert zu setzen, wird die VPN jeweils nach einer Stunde beendet und man sieht sich gezwungen, ein neues TOTP einzugeben zu müssen.
Ist auch nicht gerade komfortabel. Bei OpenVPN mit TOTP sehe ich diese Einstellung daher als essentiell.

Auch die Option "Renegotiate time" könnte in diesem Zusammenhang erklärt werden.


Dem Wunsch schließe ich mich an.

Außerdem betrachte ich die Doku auf Github eher als Doku für Beta-Stadium.

Für Produktiv sollte die Doku auf de Webseiten gelten - ist aber vielleicht bloß meine Meinung.
VMW / PMX / PFS / OPS

Ich hatte mich an die offizielle Doku gehalten: https://docs.opnsense.org/manual/how-tos/sslvpn_client.html

Auch da ist mittlerweile das von Monviech erwähnte "static-challenge" nun schon eingeflossen. Vor 2 Wochen fehlte es wohl noch.
Allerdings fehlen nach wie vor die anderen o.g. Optionen.

Habe vor ca 2 Jahren angefangen mit TOTP zu spielen.

Dann im Anschluss wurde die OpenVPN Config auf die Instance umgestellt.
Dabei habe ich ebenfalls festgestellt, dass "Renegotiate time" wohl Probleme macht - weil die Verbindung dann immer unterbrochen wird - Stündlich..

Habe diese dann auf 43200 (12 Std) gestellt - das missfällt mir zwar (andere Hersteller bekommen das unterbrechungsfrei hin, die liegen dann bei 30-60 Minuten).

Das scheint das Problem zwischenzeitlich zu beheben.

"Auth Token Lifetime" finde ich missverständlich, da mit Token auch der TOTP Key bezeichnet wird - das habe ich in dem Kontext noch nicht getestet.
VMW / PMX / PFS / OPS

Quote from: trixter on February 03, 2025, 07:37:04 PM"Auth Token Lifetime" finde ich missverständlich, da mit Token auch der TOTP Key bezeichnet wird - das habe ich in dem Kontext noch nicht getestet.
Naja, der Term Token wird sehr verbreitet verwendet, wenn es um die Autorisierung einer Session geht.
Hier hat er mit dem TOTP nichts zu tun.

Ich hatte die beiden Optionen so verstanden, aber das klingt auch plausibel und funktioniert bei mir:

"Renegotiate time" ist die Zeit, nach welcher der Handshake quasi aufgefrischt wird. Der Client verwendet dazu die gecachten Authentifizierungsdaten, also Benutzername und Passwort.
Im Fall von TOTP schließt das Passwort jedoch den Token mit ein, weshalb dieser bei jeder Renegotiation eingegeben werden müsste. Wenn du diese auf 12 Stunden setzt, ist das erst eben nach 12 Stunden, vorausgesetzt, es ist auch am Client so gesetzt.
So sollte es aber nicht gemacht werden. Häufigere Renegotiations machen durchaus Sinn im Hinblick auf die Sicherheit.

Dafür gibt es nun "Auth Token Lifetime". Das ist zwar ein Zeitwert, aber erst das explizite Setzen dieser Option veranlasst den Server dem Client einen Authentication Token beim Verbindungsaufbau zu übermitteln. Diesen verwendet der Client dann, um die Renegotiation durchzuführen.
Das hat bei TOTP den Vorteil, dass der Token für die Dauer der "Auth Token Lifetime" nicht bei jeder Renegotiation eingegeben werden muss.

Daher sind meine Einstellungen:
"Renegotiate time" nicht gesetzt, also Standardwert 3600
"Auth Token Lifetime" 43200

Somit macht der Client zwar jede Stunde Renegotiation, doch die Verbindung hält einen Arbeitstag ohne Zutun durch.

Ja, noch was: Das clientseitige Caching des Passworts darf nicht deaktiviert sein. Sonst vergisst er den Auth-Token und er müsste neu übertragen werden, was eine erneute Authentifizierung mit Passwort und TOTP erfordern würde. Eine entsprechende Option gibt es im Client Export.

Quote from: viragomann on February 03, 2025, 08:43:16 PMJa, noch was: Das clientseitige Caching des Passworts darf nicht deaktiviert sein. Sonst vergisst er den Auth-Token und er müsste neu übertragen werden, was eine erneute Authentifizierung mit Passwort und TOTP erfordern würde. Eine entsprechende Option gibt es im Client Export.

Das gibt glaube ich beim Tunnelaufbau immer eine Warnmeldung ?

Finde es auch Legitim wenn die User Benutzer / Passwort abgespeichert haben (idealer Weise im Passwortsafe) und "nur" den TOTP eingeben müssen - das gibt sonst wieder gejammer, dass alles soooo kompliziert für die Nutzer ist ;)
VMW / PMX / PFS / OPS