OpenVPN mit LinOTP: Zwei-Faktor-Authentifizierung einrichten
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.
Ähnliche Materialien

Internetgeschwindigkeit in Taskleiste anzeigen
Festplattennutzung in Ubuntu mit Philesight anzeigen

So findest du gelikte Beiträge auf Instagram

Facebook gehackt? Schnell handeln und sichern

Fehler 0x80070718 in Windows 10 beheben
