pfSense – OpenVPN mit FreeRADIUS und 2FA absichern

Ziel: Wenn du auf deiner pfSense auch den OpenVPN Server nutzt, dann zeigt dir diese Anleitung, wie du die Anmeldung an deinem OpenVPN Server mittels einer 2 Faktor Anmeldung (2FA) absichern kannst.

Was du hast: Natürlich eine laufende pfSense Firewall, sowie einen bereits eingerichteten und funktionierenden OpenVPN Server auf der pfSense.

Was du brauchst: Etwas Zeit und das FreeRADIUS Paket (welches du mit dem Paketmanager der pfSense installieren kannst), außerdem eine App für deinen mobilen Client (z.B. den Google Authenticator oder auch Authy) zur Erzeugung zeitabhängiger Einmal-Passworte.


Neben der reinen Firewall Funktion nutze ich auch die OpenVPN Funktion der pfSense. Bisher gelang dies immer per Anmeldung via Benutzername, Passwort und Zertifikat. Nun wollte ich zusätzlich eine Absicherung des VPN-Zuganges via FreeRADIUS ermöglichen, welcher eine 2-Faktor Authentifizierung nutzen soll. Es entsteht damit eine multifaktorielle Anmeldung, welche den Sicherheitsgrad deutlich erhöhen sollte. Du benötigst dann also zusätzlich zu Anmeldenamen und Passwort noch den 2. Faktor in Form eines Einmal-Passwortes, welches sich in festen Zeitabständen ändert.

Zur Übersicht das Vorgehen in drei Schritten:

  • Einrichten des OpenVPN Servers (z.B. nach dieser Anleitung). Die Schritte zur Einrichtung des VPN Servers werden hier nicht weiter erläutert.
  • FreeRADIUS installieren und konfigurieren.
  • Das „Zusammenfügen“ von OpenVPN Server und konfiguriertem FreeRADIUS Server.

Los geht’s!

Installation des FreeRADIUS Servers
Zunächst (so nicht bereits vorhanden) installierst du das Paket FreeRADIUS auf deiner pfSense. Dazu meldest du dich an deiner pfSense an, wechselst zum Paketmanager unter System > Package Manager. Hier wählst du den Reiter „Available Packages“ und installierst das benötigte FreeRADIUS Paket. Nach erfolgreicher Installation geht es weiter.

Konfigurieren des FreeRADIUS Servers
Du wechselst zur Konfigurationsseite unter Services > FreeRADIUS.
pfSense mit FreeRADIUS
Du musst die folgenden Arbeitsschritte durchführen:

  1. Angaben zum Interface
  2. zum Client
  3. Bekanntmachung des FreeRADIUS als Authentifizierungsstelle
  4. BenutzerIn in FreeRADIUS angeben
  5. Testen der Authentifizierung mit 2FA

1) Interface:
Du legst zunächst ein Interface an, auf welchem der FreeRADIUS Server auf Anmeldungen wartet. Wechsele dazu zu dem Reiter „Interfaces“: Hier musst du ein neues Interface hinzufügen mit den folgenden Einstellungen:

Interface IP 127.0.0.1
Port 1812 (FreeRADIUS Authentifizierung)
Interface Typ Authentifizierung
IP Version je nach Wunsch und Notwendigkeit Einrichtung, hier nur IPv4
Beschreibung nach eigenen Vorstellungen

pfSense und FreeRADIUS: Interfaces anlegen
OPTIONAL: Du kannst noch zusätzlich ein weiteres Interface eintragen zur Überwachung und Protokollierung der FreeRADIUS Anmeldungen:

Interface IP 127.0.0.1
Port 1813
Interface Typ Accounting
Rest siehe oben

Und speichern…!

2) NAS / Client anlegen
Du wechselst auf den Reiter „NAS / Client“ und öffnest mit dem „Add“ Symbol eine neue Seite. Hier machst du folgende Angaben:

Client IP 127.0.0.1
Client IP Version siehe oben, hier wieder IPv4
Client Name einen Namen für den FreeRADIUS Server, hier „FR_OpenVPN“
Client Shared Secret möglichst langes (maximal 31 Stellen) Geheimnis angeben (oder z.B. per Passwortgenerator anfertigen lassen und MERKEN!)
Protokoll auf UDP belassen (ja, auch wenn der OpenVPN Server TCP nutzen sollte)
Beschreibung nach eigenen Vorstellungen

Alles andere unverändert übernehmen oder ggf. nach eigenen Wünschen anpassen.
pfSense und FreeRADIUS: NAS/Client anlegen
Und wieder speichern…!

3) FreeRADIUS als Authentifizierungsserver bekannt machen
Du musst den frisch eingerichteten FreeRADIUS Server jetzt der pfSense als Authentifizierungsserver bekannt geben: Dazu wechselst du zu System > User Manager > Authentication Servers und fügst einen Eintrag mit „Add“ hinzu.
Es werden die folgenden Angaben gemacht:

Namen eintragen nach deinen Vorstellungen, z.B. „FreeRADIUS_OpenVPN“
Typ der Authentifizierung auf RADIUS setzen
Protokoll unbedingt PAP benutzen, sonst geht die anschließende 2FA nicht...
IP Adresse 127.0.0.1
Shared Secret hier eintragen, was du unter „NAS / Client“ als Shared Secret eingetragen hast
Service Authentifizierung (oder optional Authentifizierung und Accounting)
Port 1812 (und optional 1813)
Authentication Timeout ich habe den Standardwert 5 gelassen
RADIUS NAS IP hier habe ich aus der Auswahl LAN eingetragen

pfSense: FreeRADIUS als Authentifizierungsserver
Auch hier das Speichern nicht vergessen!

Weiter geht es jetzt wieder mit dem FreeRADIUS Server. Wechsele also zu Services > FreeRADIUS > User.

4) User anlegen
Als nächstes musst du einen Account für die BenutzerInnen anlegen, die sich mit Hilfe des FreeRADIUS Servers authentifizieren sollen. Dazu klickst du auf „Add“.
Die folgenden Einstellungen nimmst du nun vor:

Benutzername den bei der Einrichtung des OpenVPN Servers ausgewählten Usernamen eintragen
Password leer lassen (du nutzt ja später 2FA)
PasswordEncryption „Cleartext“ auswählen
One-Time Password Haken setzen
OTP Auth Methode Google Authenticator auswählen (auch wenn du später z.B. Authy nutzen möchtest!)
Init-Secret generieren per Knopf
PIN eigene PIN auswählen und MERKEN!

pfSense und FreeRADIUS: User anlegen
Die übrigen Einstellungen benötigst du an dieser Stelle nicht. Und natürlich... speichern!

Dieser Pin wird bei der zukünftigen Anmeldung am OpenVPN Server dann zusätzlich zum zweiten Faktor benötigt. Wenn du als Pin also „1111“ angibst, dann muss zur Anmeldung später neben dem Usernamen das Passwort „1111“ plus dem zeitabhängigen Einmalpasswort eingegeben werden. Zeigt die Authenticator-App auf dem Smartphone also „139 372“ erfolgt die Eingabe als „1111139372“.

Jetzt benötigst du noch das Geheimnis, welches auf deinem Smartphone z.B. dem Google Authenticator oder Authy bekannt gegeben werden muss. Du erzeugst dazu einen QR-Code mit dem Button „Generate QR Code“ und liest dann den angezeigten QR-Code mit deinem Smartphone in deine Authenticator-App ein.

5) 2FA Authentifizierung prüfen!!
Dieser Schritt ist WICHTIG! Du solltest unbedingt jetzt prüfen, ob die bisherige Einstellung und das Erzeugen des Secrets für die 2FA Anmeldung auch wirklich funktioniert hat:
Dazu unter Diagnostics > Authentication auswählen:

Authentication Server Den eben angelegten FreeRadius Server auswählen
Username Den eben angelegten Namen
Password Eure unter gewählte PIN plus der 6-stellige Authenticator-Code

Das sollte dann bestätigt werden mit einem „User XY authenticated successfully...
pfSense und FreeRADIUS: Anmeldung prüfen
Und jetzt, wenn soweit alles geklappt hat, „verbindest“ du den OpenVPN Server mit dem FreeRADIUS Server.

Zusammenfügen von FreeRADIUS und OpenVPN Server
Zunächst musst du in den OpenVPN Servereinstellungen Angaben zum FreeRADIUS Server machen. Dazu gehst du in die Einstellungen des OpenVPN Servers unter VPN > OpenVPN > Servers. Hier gibst du folgende Änderung ein:

Server Mode Remote Access (SSL/TLS+UserAuth)
Backend FreeRadius Server markieren

pfSense und FreeRADIUS: VPN Server anpassen 1
Unter den „Advanced Configurations“ kann / sollte noch die Eingabe „reneg-sec 0“ gemacht werden, so wird ein wiederholtes Abfragen der Authentifizierung alle 3600 Sekunden unterbunden. Da das Passwort mit 2FA ja alle 30 Sekunden neu generiert wird, müsstest du also sonst alle 3600 Sekunden eine neue Anmeldung vollziehen, was doch eher nerven würde. Das Speichern nicht vergessen.
pfSense und FreeRADIUS: VPN Server anpassen 2
Unter Services > FreeRadius > EAP wählst du unter „Default EAP TypeTLS aus.
pfSense und FreeRADIUS: EAP einrichten
Dann trägst du im Feld „Certificates for TLS“ das SSL CA Zertifikat ein, dass du für deinen OpenVPN Server ursprünglich eingerichtet hast. Ebenso den Eintrag unter SSL Server Zertifikat anpassen.
pfSense und FreeRADIUS: Zertifikate für TLS hinzufügen
Dann erneut speichern

Jetzt musst du noch das alte user certificate entfernen, welches du bei der Einrichtung des OpenVPN Servers angelegt hattest. Unter System > Certificates wird das alte OpenVPN Benutzerzertifikat entfernt. Anschließend ein neues Benutzerzertifikat anlegen und den jeweiligen BenutzerInnen zur Verfügung stellen:

Method Create Internal Certificate
Descriptive Name Eure Wahl
CA die CA angeben, die du im Setup nutzst
Key length empfohlen 4096 (je nach OpenVPN Konfiguration)
Digest Algorythm empfohlen sha512
Certificate Typ User Certificate
Common Name hier nach Wunsch…

Fast geschafft: Jetzt nur noch die neue OpenVPN Konfiguration exportieren. Diese enthält alle Änderungen zum neuen Setup mit einer Authentifizierung durch einen zweiten Faktor zur Einwahl auf deinen OpenVPN Server. Gehe zu VPN > OpenVPN > Client Export. Hier deinen angelegten VPN Client suchen, je nach Gerät die Datei exportieren, auf dem Gerät installieren, fertig!

Ich selber nutze auf einem Android Smartphone die App OpenVPN für Android. Ein Import der Konfiguration gelingt damit seit Jahren auf Anhieb, in der App selber können weitere Einstellungen (DNS Server, Internetzugang durch den VPN Tunnel usw.) vorgenommen werden.

Viel Spaß beim Ausprobieren! Bei Fragen, Anregungen und konstruktiver Kritik kannst du dich gerne im Forum melden!

---

Vielen Dank an den User the other für diese Anleitung!

Wenn Du Fragen zu dieser Anleitung hast, dann schau doch einfach mal bei uns im vorbei!