Der Bedarf, Remote-Zugriff auf die Unternehmensumgebung bereitzustellen, wird immer hÀufiger, egal ob es sich um eigene Benutzer oder Partner handelt, die Zugang zu einem bestimmten Server in Ihrer Organisation benötigen.
Zu diesem Zweck nutzen die meisten Unternehmen die sich bewÀhrte VPN-Technologie, die sich als sicherer Weg zur Bereitstellung von Zugriff auf lokale Ressourcen der Organisation etabliert hat.
Mein Unternehmen bildet da keine Ausnahme und wir verwenden diese Technologie, wie viele andere auch. Ebenso verwenden wir als Remote-Access-Gateway â Cisco ASA 55xx.
Mit der steigenden Anzahl entfernter Benutzer entsteht die Notwendigkeit, den Prozess der Vergabe von Anmeldedaten zu erleichtern. Gleichzeitig darf dies jedoch nicht auf Kosten der Sicherheit geschehen.
Wir haben fĂŒr uns eine Lösung in der Anwendung der Zwei-Faktor-Authentifizierung fĂŒr die Verbindung ĂŒber Cisco SSL gefunden, VPN, unter Verwendung von Einmalpasswörtern. Dieser Beitrag beschreibt, wie man eine solche Lösung mit minimalem Zeitaufwand und null Kosten fĂŒr die notwendige Software einrichtet (unter der Voraussetzung, dass Cisco ASA bereits in Ihrer Infrastruktur vorhanden ist).
Der Markt bietet zahlreiche fertige Lösungen zur Generierung von Einmalpasswörtern, die eine Vielzahl von Möglichkeiten zur Beschaffung anbieten, sei es durch den Versand des Passworts per SMS oder die Verwendung von Token, sowohl Hardware- als auch Software-Token (zum Beispiel auf einem Mobiltelefon). Doch der Drang zur Kostensenkung und das Bestreben, Geld fĂŒr den Arbeitgeber zu sparen, haben mich in der aktuellen Krise dazu gebracht, eine kostenlose Möglichkeit zu finden, um einen Dienst zur Generierung von Einmalpasswörtern zu realisieren. Dieser ist, trotz seiner Kostenfreiheit, kommerziellen Lösungen kaum unterlegen (hier sei erwĂ€hnt, dass dieses Produkt auch eine kommerzielle Version hat, aber wir haben ja vereinbart, dass unsere Ausgaben null betragen werden).
Also, wir benötigen:
â Ein Linux-Image mit einem integrierten Set von Werkzeugen â multiOTP, FreeRADIUS und nginx, fĂŒr den Zugriff auf den Server ĂŒber das Web (http://download.multiotp.net/ â ich habe ein fertiges Image fĂŒr VMware verwendet)
â Einen Active Directory-Server
â Eigentlich Cisco ASA (ich benutze der Einfachheit halber ASDM)
â Ein beliebiger Software-Token, der den TOTP-Mechanismus unterstĂŒtzt (zum Beispiel verwende ich Google Authenticator, aber auch FreeOTP ist geeignet)
Ich werde nicht ins Detail ĂŒber die Erstellung des Images eingehen. Am Ende erhalten Sie Debian Linux mit bereits installiertem multiOTP und FreeRADIUS, die zur Zusammenarbeit konfiguriert sind, sowie eine Web-OberflĂ€che zur Verwaltung von OTP.
Schritt 1. System initiieren und an Ihr Netzwerk anpassen
StandardmĂ€Ăig kommt das System mit den Zugangsdaten root root. Ich denke, jeder hat verstanden, dass es ratsam wĂ€re, das Passwort des Benutzers root nach dem ersten Login zu Ă€ndern. Ebenso mĂŒssen die Netzwerkeinstellungen geĂ€ndert werden (standardmĂ€Ăig ist dies â192.168.1.44â mit Gateway â192.168.1.1â). Danach kann das System neu gestartet werden.
In Active Directory erstellen wir einen Benutzer otp, mit dem Passwort MySuperPassword.
Schritt 2. Verbindung einrichten und Active Directory-Benutzer importieren
Dazu benötigen wir Zugang zur Konsole und die Datei multiotp.php, mit deren Hilfe wir die Verbindungseinstellungen zur Active Directory konfigurieren.
Wir navigieren in das Verzeichnis /usr/local/bin/multiotp/ und nacheinander die folgenden Befehle ausfĂŒhren:
.\/multiotp.php -config default-request-prefix-pin=0Bestimmt, ob ein zusÀtzlicher (permanenter) Pin bei der Eingabe eines Einmal-Pins erforderlich ist (0 oder 1)
.\/multiotp.php -config default-request-ldap-pwd=0Bestimmt, ob das Eingeben des Domain-Passworts bei der Eingabe eines Einmal-Pins erforderlich ist (0 oder 1)
.\/multiotp.php -config ldap-server-type=1Gibt den Typ des LDAP-Servers an (0 = regulÀrer LDAP-Server, in unserem Fall 1 = Active Directory)
.\/multiotp.php -config ldap-cn-identifier="sAMAccountName"Gibt an, in welchem Format der Benutzername dargestellt werden soll (dieser Wert gibt nur den Namen ohne Domain aus)
.\/multiotp.php -config ldap-group-cn-identifier="sAMAccountName"Das Gleiche, jedoch fĂŒr Gruppen
.\/multiotp.php -config ldap-group-attribute="memberOf"Gibt die Methode zur Bestimmung der Gruppenmitgliedschaft des Benutzers an
.\/multiotp.php -config ldap-ssl=1Soll eine sichere Verbindung zum LDAP-Server verwendet werden (natĂŒrlich â ja!)
.\/multiotp.php -config ldap-port=636Port fĂŒr die Verbindung zum LDAP-Server
.\/multiotp.php -config ldap-domain-controllers=adSRV.domain.localAdresse Ihres Active Directory-Servers
.\/multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"Gibt an, wo die Suche nach Benutzern im Domain beginnen soll
.\/multiotp.php -config ldap-bind-dn="otp@domain.local"Gibt den Benutzer an, der Rechte zum Suchen in der Active Directory hat
.\/multiotp.php -config ldap-server-password="MySuperPassword"Gibt das Passwort des Benutzers fĂŒr die Verbindung zur Active Directory an
.\/multiotp.php -config ldap-network-timeout=10Setzt das Timeout fĂŒr die Verbindung zur Active Directory
.\/multiotp.php -config ldap-time-limit=30Setzt die Zeitbegrenzung fĂŒr den Importvorgang der Benutzer
.\/multiotp.php -config ldap-activated=1Aktivieren Sie die Verbindungskonfiguration zu Active Directory
.\/multiotp.php -debug -display-log -ldap-users-syncImportieren von Benutzern aus Active Directory
Schritt 3. QR-Code fĂŒr das Token generieren
Hier ist alles ganz einfach. Ăffnen Sie die WeboberflĂ€che des OTP-Servers im Browser, melden Sie sich an (vergessen Sie nicht, das sich standardmĂ€Ăig festgelegte Admin-Passwort zu Ă€ndern!) und klicken Sie auf die SchaltflĂ€che âDruckenâ:

Das Ergebnis dieser Aktion wird eine Seite sein, die zwei QR-Codes enthÀlt. Wir ignorieren den ersten von ihnen (trotz der ansprechenden Aufschrift Google Authenticator / Authenticator / 2 Steps Authenticator) und scannen wieder den zweiten Code in den Software-Token auf dem Telefon:

(ja, ich habe den QR-Code absichtlich unlesbar gemacht).
Nach diesen Schritten wird in Ihrer App alle dreiĂig Sekunden ein sechsstelliger Code generiert.
Zur Sicherheit können Sie eine ĂberprĂŒfung im selben Interface durchfĂŒhren:

Indem Sie den Benutzernamen und das Einmalpasswort aus der App auf dem Telefon eingeben. Haben Sie eine positive RĂŒckmeldung erhalten? Dann machen wir weiter.
Schritt 4. Konfigurieren und testen Sie die Funktionsweise von FreeRADIUS
Wie ich bereits erwĂ€hnt habe â multiOTP ist bereits fĂŒr die Arbeit mit FreeRADIUS eingerichtet, wir mĂŒssen nur Tests durchfĂŒhren und die Informationen ĂŒber unseren VPN-Gateway in die Konfigurationsdatei von FreeRADIUS einfĂŒgen.
Kehren Sie zur Konsole des Servers zurĂŒck, in das Verzeichnis /usr/local/bin/multiotp/, geben Sie ein:
.\/multiotp.php -config debug=1\n.\/multiotp.php -config display-log=1Dadurch wird eine detailliertere Protokollierung aktiviert.
In der Konfigurationsdatei der FreeRADIUS-Clients (/etc/freeradius/clinets.conf) kommentieren Sie alle Zeilen aus, die sich auf localhost beziehen und fĂŒgen Sie zwei EintrĂ€ge hinzu:
client localhost {\n ipaddr = 127.0.0.1\n secret = testing321\n require_message_authenticator = no\n}â fĂŒr den Test
client 192.168.1.254\/32 {\n shortname = CiscoASA\n secret = ConnectToRADIUSSecret\n}â fĂŒr unser VPN-Gateway.
Starten Sie FreeRADIUS neu und versuchen Sie, sich anzumelden:
radtest username 100110 localhost 1812 testing321wo username = Benutzername, 100110 = Passwort, das uns von der App auf dem Telefon gegeben wurde, localhost = Adresse des RADIUS-Servers, 1812 â Port des RADIUS-Servers, testing321 â Passwort des RADIUS-Server-Clients (das wir in der Konfiguration angegeben haben).
Das Ergebnis dieses Befehls wird eine Ausgabe sein, die ungefÀhr folgenden Inhalt hat:
Sending Access-Request of id 44 to 127.0.0.1 port 1812\n User-Name = "username"\n User-Password = "100110"\n NAS-IP-Address = 127.0.1.1\n NAS-Port = 1812\n Message-Authenticator = 0x00000000000000000000000000000000\nrad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20Jetzt mĂŒssen wir sicherstellen, dass der Benutzer die Authentifizierung erfolgreich durchlaufen hat. Dazu schauen wir in das Protokoll von multiotp:
tail /var/log/multiotp/multiotp.logUnd wenn der letzte Eintrag dort lautet:
2016-09-01 08:58:17 notice username User OK: Benutzer username hat sich erfolgreich von 127.0.0.1 angemeldet.
2016-09-01 08:58:17 debug Debug Debug: 0 OK: Token von 127.0.0.1 akzeptiert.Dann war alles erfolgreich, und wir können
Schritt 5. Konfiguration von Cisco ASA
Nehmen wir an, dass wir bereits eine konfigurierte Gruppe und Richtlinien fĂŒr den Zugriff ĂŒber SSL VPN haben, die mit Active Directory verbunden ist, und wir mĂŒssen die Zwei-Faktor-Authentifizierung fĂŒr dieses Profil hinzufĂŒgen.
1. Neue Gruppe hinzufĂŒgen Server AAA:

2. FĂŒgen Sie unseren multiOTP-Server zur Gruppe hinzu:

3. Bearbeiten Sie das Verbindungsprofil, indem Sie die Gruppe der Active Directory-Server als primÀren Authentifizierungsserver festlegen:

4. Auf dem Tab Erweitert -> Authentifizierung WĂ€hlen Sie ebenfalls die Gruppe der Active Directory-Server:

5. Auf dem Tab Erweitert -> SekundĂ€r Bei der Authentifizierung wĂ€hlen wir die erstellte Gruppe der Server, in der der multiOTP-Server registriert ist. Beachten Sie, dass der Sitzung Benutzername aus der primĂ€ren AAA-Servergruppe ĂŒbernommen wird:

Einstellungen anwenden und
Schritt 6, der letzte
ĂberprĂŒfen Sie, ob unsere Zwei-Faktor-Authentifizierung fĂŒr SSL VPN funktioniert:

VoilĂ ! Bei der Verbindung ĂŒber den Cisco AnyConnect VPN-Client wird ebenfalls nach dem zweiten, einmaligen Passwort gefragt.
Ich hoffe, dass dieser Artikel jemandem hilft und dass er Anregungen gibt, wie man diesen kostenlos OTP-Server fĂŒr andere Aufgaben nutzen kann. Teilen Sie Ihre Gedanken in den Kommentaren mit, wenn Sie möchten.
Quelle: habr.com
