Technologieführer

OpenVPN mit LinOTP: Zwei-Faktor-Authentifizierung einrichten

5 min read Sicherheit Aktualisiert 02 Oct 2025
OpenVPN mit LinOTP: Zwei-Faktor-Authentifizierung
OpenVPN mit LinOTP: Zwei-Faktor-Authentifizierung

Diese Anleitung zeigt Schritt für Schritt, wie Sie OpenVPN so konfigurieren, dass sich Benutzer gegen einen LinOTP-Backend authentifizieren. Sie erreichen damit VPN-Verbindungen mit Zwei-Faktor-Authentifizierung (Client-Zertifikat + OTP). Enthalten: PAM-Integration, OpenVPN- und Client-Konfiguration, alternative Ansätze und Troubleshooting.

Einführung

In dieser Anleitung lernen Sie, wie OpenVPN Benutzer mithilfe von LinOTP authentifiziert. LinOTP verwaltet OTP-Token (One-Time Passwords) — etwa Hardware-Token, Apps auf Smartphones oder SMS/Email-basierte Token. Durch Kombination von Client-Zertifikat und OTP entsteht eine starke Zwei-Faktor-Authentifizierung.

Kurze Definition: LinOTP ist ein Open-Source-Back-End zur Verwaltung und Validierung von OTP-Tokens über Web-API oder PAM.

Wichtig: Diese Anleitung eignet sich sowohl für kleine Installationen als auch für Umgebungen mit vielen Nutzern und unterschiedlichen Token-Typen.

Übersicht der Schritte

  • LinOTP installieren und konfigurieren
  • PAM-Integration mit pam_py_linotp einrichten
  • OpenVPN so konfigurieren, dass PAM-Abfragen ausgeführt werden
  • Client-Konfiguration anpassen und testen

LinOTP einrichten

Zuerst installieren Sie LinOTP. Es gibt Debian/Ubuntu-Pakete oder Installation über PyPI für eine schnelle Demo-Umgebung. Wählen Sie die Methode, die zu Ihrer Produktions-/Testumgebung passt.

Hinweis: Sie können LinOTP und OpenVPN auf derselben Maschine betreiben, um Netzwerkkomplexität gering zu halten.

PAM für LinOTP konfigurieren

Es gibt mehrere Optionen, gegen LinOTP zu authentifizieren: Web-API, RADIUS oder PAM-Module. Für direkte Integration auf dem OpenVPN-Host ist PAM häufig die einfachste Wahl.

LinOTP stellt ein pam_linotp in C bereit, das in den Authentifizierungsmodulen enthalten ist. Wenn Sie jedoch das Kompilieren und zusätzliche Entwicklungs-Pakete vermeiden wollen, eignet sich das Python-basierte Modul pam_py_linotp.

Installieren Sie pam_py_linotp auf dem OpenVPN-Server:

Sie können das Archiv herunterladen, entpacken und installieren:

tar -ztf pam_py_linotp-0.1.tar.gz

cd pam_py_linotp-0.1/

sudo python setup.py install

Oder schneller mit pip:

sudo pip install pam_py_linotp

Alternativ können Sie die einzelne Python-Datei kopieren:

cd pam_py_linotp-0.1/
cp src/ pam_linotp.py /lib/security

Um dieses Python-PAM-Modul zu benutzen, benötigen Sie libpam-python. Installieren Sie es entsprechend Ihrer Distribution:

sudo apt-get install libpam-python

oder

yum install libpam-python

Damit PAM-Anfragen für mehrere Dienste einheitlich sind, legen wir eine stapelbare Authentifizierungsdatei an, z. B. common-linotp:

auth    [success=1 default=ignore]      pam_python.so /lib/security/pam_linotp.py \  
     debug url=https://localhost/validate/check  
auth    requisite           pam_deny.so  
auth    required            pam_permit.so  

Wichtig: Der erste Parameter nach pam_python.so ist das Python-Modul, das Sie installiert oder kopiert haben. Ersetzen Sie die URL durch die Adresse Ihres LinOTP-Servers. Wenn LinOTP auf demselben Host läuft, können Sie “localhost” verwenden. Passen Sie Protokoll (https/http) und Port entsprechend an.

Diese Datei (common-linotp) kann später in PAM-Definitionen wie /etc/pam.d/openvpn eingebunden werden.

OpenVPN mit PAM einrichten

Client-seitig erstellen oder bearbeiten Sie Ihre client.ovpn so:

client  
dev tun  
proto udp  
remote your.server.com 1194  
resolv-retry infinite  
nobind  
persist-key  
persist-tun  
ca ca.crt  
cert client.crt  
key client.key  
comp-lzo  
verb 3  
auth-user-pass  

Passen Sie Servername und Zertifikatdateien an.

Auf dem OpenVPN-Server bearbeiten Sie server.conf:

port 1194  
proto udp  
dev tun  
ca ca.crt  
cert server.crt  
key server.key  
dh dh2048.pem  
server 192.168.42.0 255.255.255.0  
ifconfig-pool-persist ipp.txt  
keepalive 10 120  
comp-lzo  
persist-key  
persist-tun  
status openvpn-status.log  
verb 3  
plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn  

Passen Sie Zertifikate und IP-Pool an Ihre Umgebung an.

Dann erstellen bzw. bearbeiten Sie /etc/pam.d/openvpn und fügen Sie Folgendes ein:

@include common-linotp 
session    sufficient pam_permit.so
account    sufficient  pam_permit.so  

Die session- und account-Zeilen nutzen pam_permit.so, damit keine lokalen Systemkonten für VPN-Benutzer auf dem OpenVPN-Server erforderlich sind. Die Authentifizierung erfolgt rein über LinOTP (und optional zusätzliche Prüfungen wie Client-Zertifikat).

Wenn ein Benutzer das korrekte OTP (und optional einen PIN) eingibt und das Client-Zertifikat gültig ist, wird die VPN-Verbindung hergestellt.

Wann diese Lösung nicht ideal ist

  • Wenn Sie bereits eine RADIUS-Infrastruktur haben, ist RADIUS-Integration oft skalierbarer.
  • Für sehr große Installationen mit mehreren Standorten kann ein dediziertes Authentifizierungs-Gateway sinnvoller sein.
  • Wenn Sie keine Möglichkeit haben, Python-PAM-Module zu installieren (z. B. restriktive Distributionen), sind alternative Wege nötig.

Alternative Ansätze

  • LinOTP über RADIUS betreiben: LinOTP kann RADIUS sprechen und so in bestehende RADIUS-basierte Umgebungen integriert werden.
  • Direkte Web-API-Anfragen aus einem eigenen Auth-Plugin von OpenVPN: Entwickeln Sie ein kleines Plugin, das die LinOTP-Validate-API nutzt.
  • Verwenden des nativen C pam_linotp, wenn Sie Performance oder strikte Systemintegration benötigen.

Minimal-Methode (Kurz-Checkliste)

  • LinOTP-Server installieren und erreichbar machen
  • pam_py_linotp installieren oder pam_linotp kopieren
  • libpam-python installieren
  • common-linotp anlegen und URL anpassen
  • OpenVPN server.conf plugin-Zeile setzen
  • /etc/pam.d/openvpn mit @include common-linotp versehen
  • Client-Konfiguration mit auth-user-pass aktivieren
  • Verbindung testen

Rollenspezifische Checkliste

  • Administrator (LinOTP): Benutzer und Token bereitstellen, API-Endpoint überwachen.
  • OpenVPN-Admin: PAM-Module installieren, OpenVPN-Konfiguration anpassen, Client-Zertifikate verwalten.
  • Endbenutzer: Client-Zertifikat, VPN-Client-Konfiguration, korrekte Eingabe von OTP/PIN.

Sicherheitsempfehlungen

  • Nutzen Sie HTTPS für die Kommunikation zwischen PAM-Modul und LinOTP-Server.
  • Absichern des LinOTP-Servers (Firewall, Zugangsbeschränkungen, regelmäßige Updates).
  • Mindest-Schlüsselgröße für DH und Zertifikate (z. B. dh2048.pem oder besser).
  • Logging so konfigurieren, dass keine sensiblen OTP-Werte in Klartext landen.
  • Überlegen Sie zusätzliche Härtungsmaßnahmen: SELinux/AppArmor-Profile, Beschränkung von Netzwerkzugriffen.

Troubleshooting (häufige Probleme)

  • Fehler beim Laden von pam_python.so: Stellen Sie sicher, dass libpam-python installiert ist und die Pfade korrekt sind.
  • Keine Verbindung: Prüfen Sie server.conf, Firewall/Port 1194, und dass das Plugin korrekt geladen wird.
  • OTP-Validierung schlägt fehl: Prüfen Sie LinOTP-Logs, API-URL, Zertifikate und Uhrzeiten (Zeitabweichungen bei Token können OTP-Fehler verursachen).
  • Client fragt nicht nach Benutzer/Passwort: Stellen Sie sicher, dass “auth-user-pass” in der .ovpn vorhanden ist.

Akzeptanzkriterien

  • Ein Client mit gültigem Client-Zertifikat und korrektem OTP stellt erfolgreich eine VPN-Verbindung her.
  • Ein Client ohne gültiges Zertifikat oder falschem OTP wird abgewiesen.
  • Keine lokalen Systemkonten müssen für VPN-Benutzer auf dem OpenVPN-Host angelegt werden.

Kurze Glossarzeile

  • OTP: Einmalpasswort, kurzlebiges Passwort für Zwei-Faktor-Authentifizierung.
  • PAM: Pluggable Authentication Modules, modulare Authentifizierungsschicht in Unix/Linux.
  • LinOTP: Back-End zur Verwaltung und Validierung von OTP-Tokens.

FAQ

Funktioniert das mit mobilen OTP-Apps wie Google Authenticator?

Ja. LinOTP unterstützt Zeitbasierte OTP (TOTP), die von mobilen Apps erzeugt werden.

Kann ich RADIUS statt PAM verwenden?

Ja. LinOTP kann in RADIUS-Setups integriert werden und ist eine gute Alternative für zentralisierte Authentifizierung.

Muss LinOTP und OpenVPN auf derselben Maschine laufen?

Nein. Es funktioniert auch verteilt; auf demselben Host reduziert es jedoch Netzwerkkomplexität.

Zusammenfassung

  • Diese Anleitung beschreibt die Integration von OpenVPN mit LinOTP über PAM (pam_py_linotp).
  • Vorteile: zentrale Verwaltung von OTPs, Kombination mit Client-Zertifikaten für starke Authentifizierung.
  • Alternativen wie RADIUS oder direkte API-Integrationen existieren und können je nach Umgebung besser passen.

Wichtig: Testen Sie Änderungen in einer Testumgebung, bevor Sie in Produktion gehen. Prüfen Sie Logs und Absicherung Ihres LinOTP- und OpenVPN-Servers regelmäßig.

Autor
Redaktion

Ähnliche Materialien

Internetgeschwindigkeit in Taskleiste anzeigen
Windows

Internetgeschwindigkeit in Taskleiste anzeigen

Festplattennutzung in Ubuntu mit Philesight anzeigen
Systemadministration

Festplattennutzung in Ubuntu mit Philesight anzeigen

So findest du gelikte Beiträge auf Instagram
Social Media

So findest du gelikte Beiträge auf Instagram

Facebook gehackt? Schnell handeln und sichern
Sicherheit

Facebook gehackt? Schnell handeln und sichern

Fehler 0x80070718 in Windows 10 beheben
Windows Support

Fehler 0x80070718 in Windows 10 beheben

CoinDCX: Kryptowährungen in Indien kaufen & verkaufen
Kryptowährung

CoinDCX: Kryptowährungen in Indien kaufen & verkaufen