Verwenden alternativer Authentifizierungsmethoden

OpenVPN 2.0 und höher enthalten eine Funktion, die es dem OpenVPN-Server ermöglicht, einen Benutzernamen und ein Kennwort von einem verbindenden Client sicher abzurufen und diese Informationen als Grundlage für die Authentifizierung des Clients zu verwenden.

Um diese Authentifizierungsmethode zu verwenden, fügen Sie zuerst die Direktive auth-user-pass zur Clientkonfiguration hinzu. Der OpenVPN-Client wird angewiesen, den Benutzer nach einem Benutzernamen / Passwort abzufragen und es über den sicheren TLS-Kanal an den Server weiterzuleiten.

Konfigurieren Sie als Nächstes den Server für die Verwendung eines Authentifizierungs-Plugins, bei dem es sich um ein Skript, ein freigegebenes Objekt oder eine DLL handeln kann. Der OpenVPN-Server ruft das Plugin jedes Mal auf, wenn ein VPN-Client versucht, eine Verbindung herzustellen, und übergibt ihm den auf dem Client eingegebenen Benutzernamen / das Kennwort. Das Authentifizierungs-Plugin kann steuern, ob der OpenVPN-Server dem Client die Verbindung ermöglicht oder nicht, indem ein Fehler (1) oder ein Erfolg (0) zurückgegeben wird.

Verwenden von Skript-Plugins

Skript-Plugins können durch Hinzufügen der Direktive auth-user-pass-verify zur serverseitigen Konfigurationsdatei verwendet werden. Beispielsweise:

auth-user-pass-verify auth-pam.pl via-file

wird die auth-pam.pl perl-Skript zur Authentifizierung des Benutzernamens / Kennworts von verbindenden Clients. Weitere Informationen finden Sie in der Beschreibung von auth-user-pass-verify auf der Handbuchseite.

Die auth-pam.pl script ist in der OpenVPN-Quelldateiverteilung im sample-scriptssubdirectory enthalten. Es authentifiziert Benutzer auf einem Linux-Server mithilfe eines PAM-Authentifizierungsmoduls, das wiederum eine Shadow-Passwort-, RADIUS- oder LDAP-Authentifizierung implementieren kann. auth-pam.pl ist in erster Linie für Demonstrationszwecke gedacht. Verwenden Sie für die reale PAM-Authentifizierung das unten beschriebene openvpn-auth-pamshared-Objekt-Plugin.

Verwenden von Shared Object- oder DLL-Plugins

Shared Object- oder DLL-Plugins sind normalerweise kompilierte C-Module, die zur Laufzeit vom OpenVPN-Server geladen werden. Wenn Sie beispielsweise ein RPM-basiertes OpenVPN-Paket unter Linux verwenden, sollte das openvpn-auth-pam-Plugin bereits erstellt sein. Um es zu verwenden, fügen Sie dies der serverseitigen Konfigurationsdatei hinzu:

plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login

Dadurch wird der OpenVPN-Server angewiesen, den von Clients mithilfe des loginPAM-Moduls eingegebenen Benutzernamen / das Kennwort zu validieren.

Für den realen Produktionseinsatz ist es besser, das openvpn-auth-pam-Plugin zu verwenden, da es mehrere Vorteile gegenüber dem auth-pam.pl skript:

  • Das Shared Object openvpn-auth-pam Plugin verwendet ein Split-Privilege-Ausführungsmodell für eine bessere Sicherheit. Dies bedeutet, dass der OpenVPN-Server mit reduzierten Berechtigungen ausgeführt werden kann, indem die Direktiven user nobody, group nobody und chroot verwendet werden, und sich weiterhin mit der nur für root lesbaren Shadow-Passwortdatei authentifizieren kann.
  • OpenVPN kann den Benutzernamen / das Passwort über den virtuellen Speicher an ein Plugin übergeben, anstatt über eine Datei oder die Umgebung, was für die lokale Sicherheit auf dem Servercomputer besser ist.
  • C-kompilierte Plugin-Module laufen im Allgemeinen schneller als Skripte.

Wenn Sie weitere Informationen zur Entwicklung eigener Plugins für die Verwendung mit OpenVPN wünschen, lesen Sie die README-Dateien im Plugin-Unterverzeichnis der OpenVPN-Quelldistribution.

Um das openvpn-auth-pam-Plugin unter Linux zu erstellen, kopieren Sie die CD in das plugin/auth-pam-Verzeichnis in der OpenVPN-Quelldistribution und führen Sie make aus.

Verwenden der Benutzername- / Kennwortauthentifizierung als einzige Form der Clientauthentifizierung

Standardmäßig aktiviert die Verwendung von auth-user-pass-verify oder eines Plugins zur Überprüfung von Benutzername und Kennwort auf dem Server die doppelte Authentifizierung, wobei sowohl das Clientzertifikat als auch die Benutzername- / Kennwortauthentifizierung erfolgreich sein müssen, damit der Client authentifiziert werden kann.

Aus Sicherheitsgründen wird zwar davon abgeraten, es ist jedoch auch möglich, die Verwendung von Clientzertifikaten zu deaktivieren und nur die Benutzername- / Kennwortauthentifizierung zu erzwingen. Auf dem Server:

client-cert-not-required

Solche Konfigurationen sollten in der Regel auch:

username-as-common-name

dadurch wird der Server angewiesen, den Benutzernamen für Indizierungszwecke zu verwenden, da er den allgemeinen Namen eines Clients verwenden würde, der sich über ein Client-Zertifikat authentifiziert hat.

Beachten Sie, dass client-cert-not-required ein Serverzertifikat nicht überflüssig macht, sodass ein Client, der eine Verbindung zu einem Server herstellt, der client-cert-not-required verwendet, möglicherweise die Direktiven cert und key aus der Clientkonfigurationsdatei entfernt, nicht jedoch die Direktive ca, da der Client das Serverzertifikat überprüfen muss.



+