binarybear
Goto Top

OpenVPN: Login der Benutzer mit dem passenden Zertifikat

Hallo,

derzeit sieht mein OpenVPN-Setup so aus, dass der Nutzer ein Zertifikat vorweisen muss und sich zusätzlich mit seinem Benutzernamen und Passwort am PAM (Debian) identifizieren muss.
Allerdings ist es möglich das Zertifikat auf den Namen "lennart" mit dem PAM-Benutzer "paul" zu verwenden.

Gibt es hier eine Möglichkeit das einzuschränken?
Auch habe ich bisher keine Möglichkeit gefunden hier nur Benutzer einer bestimmten Gruppe zuzulassen, "openvpnusers" zum Beispiel. Muss das über PAM erfolgen oder in der Konfig?
Ich verwende keinen OpenVPN Access Server, sondern folgende server-conf:

port ...
proto udp
dev ...
ca ...ca.crt
cert...vpn.crt
key ...vpn.key
dh ...dh-ovpn.pem
server ...

ifconfig-pool-persist ...openvpn-ipp.txt

push "redirect-gateway def1 bypass-dhcp"  
push "dhcp-option DNS ...  
push "dhcp-option DNS ...  
topology subnet
**plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn**
client-to-client
duplicate-cn
keepalive 10 120
cipher ...
auth ...
tls-version-min 1.2
persist-key
persist-tun
explicit-exit-notify 1

Meine PAM-Config für OpenVPN sieht dann so aus:

auth    required        pam_unix.so    shadow    nodelay
account required        pam_unix.so

Content-Key: 379286

Url: https://administrator.de/contentid/379286

Printed on: April 18, 2024 at 03:04 o'clock

Member: aqui
aqui Jul 05, 2018 updated at 17:30:02 (UTC)
Goto Top
Allerdings ist es möglich das Zertifikat auf den Namen "lennart" mit dem PAM-Benutzer "paul" zu verwenden.
Hast du es versäumt User spezifische Zertifikate zu erzeugen ?? Normalerweise ist sowas unmöglich mit User Zertifikaten.
Das ist ja gerade der Witz bei User basierten Zertifikaten das die Nutzer spezifisch sind.
Ansonsten wären sie ja überflüssig, dann kannst du 1 Zertifikat nehmen und das auf 100 User kopieren und gut ist.
Das würde ja das gesamte Prinzip von Zertifikaten völlig konterkarieren. Leuchtet dir sicher auch ein.
Member: IrunGoldstein
IrunGoldstein Jul 05, 2018 at 17:44:42 (UTC)
Goto Top
Hi Binary,

in deiner conf ist das duplicate-cn einkommentiert dieses raus nehmen oder auskommentieren dann werden auch die einzelnen Zertifikate geprüft.


Siehe:

# Uncomment this directive if multiple clients 
# might connect with the same certificate/key 
# files or common names. This is recommended
 # only for testing purposes. For production use,
 # each client should have its own certificate/key
 # pair. 
# 
# IF YOU HAVE NOT GENERATED INDIVIDUAL 
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT, 
# EACH HAVING ITS OWN UNIQUE "COMMON NAME", # UNCOMMENT THIS LINE OUT.   
;duplicate-cn

Grüße
Member: BinaryBear
BinaryBear Jul 05, 2018 at 18:16:46 (UTC)
Goto Top
Das scheint nicht die Lösung zu sein...
Es verhindert zwar, dass ich mich mit einem Zertifikat gleichzeitig an zwei Geräten anmelden kann, aber ich kann weiterhin das Zertifikat vom Lennart nehmen und mich als "Paul" anmelden...

Das Zertifikat habe ich damals mit EasyRSA gemacht, womit auch meine allgemeine interne CA läuft...
Zertifikat ist ausgestellt für Common Name "lennart", sollte doch so richtig sein, oder?
Member: BinaryBear
BinaryBear Jul 05, 2018 at 18:22:58 (UTC)
Goto Top
Aber gerade das geht..

Jeder Nutzer hat ja sein Zertifikat, jedoch finde ich es ein wenig witzlos, dass ich das dann auch kreuzweise verwenden kann...
Ich habe für einen Nutzer ein Cert erstellt und dann beim Ausprobieren aus Gewohnheit meine Daten eingetragen und mich gewundert, dass das geht..

Ich erwarte mir entsprechend ein "Wieso weißt Paul das Zertifikat vom Lennart vor? ABGELEHNT!" vor...
Fehlt bei der Easy-RSA-Generierung vielleicht irgendein Flag?

Ich habe stumpf "./build-key lennart" verwendet.

Weil so ist auch sämtliche Auth hinfällig, wenn sich auch andere Benutzer als die vorgesehenen dafür nutzen lassen... Da haben wir z.B. den imaginären Bernd, der soll nichts mit VPN machen, hat deswegen auch kein Zertifikat... Ist dann aber witzlos, wenn er sich via Paul's Zertifikat auch anmelden kann...

Daher auch die Frage, ob es eine Möglichkeit gibt das auf eine Gruppe zu beschränken, wie es z.B. bei OpenSSH mit "AllowGroups sshusers" geht...
Member: aqui
aqui Jul 05, 2018 at 18:55:09 (UTC)
Goto Top
Ist das Problem jetzt gelöst oder warum hast du es selber auf "Gelöst" geklickt ??
Member: NetzwerkDude
NetzwerkDude Jul 06, 2018 updated at 07:34:31 (UTC)
Goto Top
Ich hatte mal OpenVPN als Paket für pfSense laufen und da verhielt es sich genauso. Kann es leider nicht nachstellen da ich keinen Zugriff mehr auf das System habe.

Aber: vielleicht kannst du über ein selbstgebautes client-connect skript
https://community.openvpn.net/openvpn/wiki/Concepts-Authentication
einen abgleich zwischen cert und usernamen einbauen

edit:
sowas:
https://serverfault.com/questions/358855/how-to-prevent-users-from-shari ...
Member: aqui
aqui Jul 06, 2018 updated at 16:19:38 (UTC)
Goto Top
Ungewöhnlich auch das man sich an einen Unix Host nochmal authentisieren muss. Normal sollte man die Netzwerk Infrastruktur immer von sowas entkoppeln. Dazu gehören auch VPNs.
Wenn man auf der pfSense OVPN User Zertifikate mit Passwort Schutz einsetzt dann gibt es keinerlei Cross Login mit anderen Usern. Wenn dem so wäre würde es das gesamte Prinzip ja auch völlig konterkarieren wie schon gesagt.
Member: NetzwerkDude
NetzwerkDude Jul 06, 2018 updated at 16:43:01 (UTC)
Goto Top
Die frage is wo genau das passwort abgefragt wird: Ist das Zertifikat selbst passwortgeschützt, oder ist es ein passwortlolses mit zusätzlicher user/pass abfrage an der pfsense - im zweiten fall kann man es crossen
Member: BinaryBear
BinaryBear Jul 08, 2018 updated at 15:08:03 (UTC)
Goto Top
Zitat von @aqui:

Ist das Problem jetzt gelöst oder warum hast du es selber auf "Gelöst" geklickt ??
Gewollt habe ich das ganze nicht (als gelöst zu markieren), wahrscheinlich lag es an dem überarbeiteten Individuum vor dem Monitor...
Kann man das auch wieder "entlösen"?

Die frage is wo genau das passwort abgefragt wird
Grundsätzlich beides. Zum einen ist selbstredend das Cert auch geschützt, allerdings gibt es eben eine Authentifizierung gegen das PAM des Servers via User/Pass.
Kann man das wirklich nicht einschränken? Gerade in Firmenumgebungen stelle ich mir das sonst recht problematisch vor, dass man hier wirklich nur auf das Cert setzt und nicht auf einen Login.

Für mich privat ist es strenggenommen nicht so schlimm, da eigentlich niemand Zertifikats-Flohmarkt spielt...
Ansonsten würde ich für einen Produktivaufbau dann demnächst für jedes Gerät ein eigenes Cert generieren (z.B. für Lennart-Handy, Lennart-Laptop, Paul-Laptop, ...) und dann eben User/Pass fahren ohne, dass man die Zertifikate zuordnet...
Member: aqui
aqui Jul 08, 2018 at 17:21:07 (UTC)
Goto Top
Kann man das auch wieder "entlösen"?
Ja, indem man die FAQs liest !
How can I mark a post as solved?
Member: BinaryBear
BinaryBear Aug 09, 2019 at 20:51:46 (UTC)
Goto Top
Entsprechende Lösung gefunden:

https://serverfault.com/questions/358855/how-to-prevent-users-from-shari ...
Funktioniert mit AD-Anbindung dann auch recht brauchbar, wobei ich mittlerweile übergewechselt habe die Zertifikate auf Gerätename auszustellen, damit die Verbindung identifiziert werden kann.

ggf. nützt es ja noch jemandem..