Zwei-Faktor-Authentifizierungsserver LinOTP

Zwei-Faktor-Authentifizierungsserver LinOTP

Heute möchte ich teilen, wie man einen Zwei-Faktor-Authentifizierungsserver zur Sicherung des Unternehmensnetzwerks, von Websites, Diensten, SSH einrichtet. Auf dem Server wird die Kombination LinOTP + FreeRadius betrieben.

Warum brauchen wir das?
Es ist eine völlig kostenlose, benutzerfreundliche Lösung innerhalb Ihres Netzwerks, die nicht von Drittanbietern abhängig ist.

Dieser Dienst ist sehr benutzerfreundlich, übersichtlich und bietet im Gegensatz zu anderen Open-Source-Produkten eine Vielzahl von Funktionen und Richtlinien (z. B. Login + Passwort + (PIN + OTP-Token)). Er lässt sich über die API mit SMS-Versanddiensten integrieren (LinOTP-Konfiguration -> Anbieter-Konfiguration -> SMS-Anbieter), generiert Codes für mobile Anwendungen wie Google Authenticator und vieles mehr. Ich finde ihn benutzerfreundlicher als den Dienst, der in Betracht gezogen wird. Artikel.

Dieser Server funktioniert hervorragend mit Cisco ASA, OpenVPN-Servern, Apache2 und generell praktisch mit allem, was die Authentifizierung über RADIUS-Server unterstützt (z. B. für SSH im Rechenzentrum).

Erforderlich:

1) Debian 8 (jessie) — Unbedingt! (Die Testinstallation auf Debian 9 wird am Ende des Artikels beschrieben)

Anfang:

Wir installieren Debian 8.

Fügen Sie das LinOTP-Repository hinzu:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Fügen Sie die Schlüssel hinzu:

# gpg --search-keys 913DFF12F86258E5

Manchmal gibt Debian nach einer 'sauberen' Installation nach Ausführung dieses Befehls aus:

gpg: Verzeichnis `\/root\/.gnupg' erstellt
gpg: Neue Konfigurationsdatei `\/root\/.gnupg\/gpg.conf' erstellt
gpg: HINWEIS: Optionen in `\/root\/.gnupg\/gpg.conf' sind bei diesem Start noch nicht aktiv
gpg: Schlüsselring `\/root\/.gnupg\/secring.gpg' erstellt
gpg: Schlüsselring `\/root\/.gnupg\/pubring.gpg' erstellt
gpg: Keine Schlüsselserver angegeben (verwenden Sie --keyserver)
gpg: Fehler beim Suchen auf dem Schlüsselserver: Ungültige URI

Das ist die anfängliche Konfiguration von gnupg. Keine Sorge. Führen Sie den Befehl einfach erneut aus.
Auf die Frage von Debian:

gpg: Suche nach "913DFF12F86258E5" auf dem hkp-Server keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  2048-Bit-RSA-Schlüssel F86258E5, erstellt: 2010-05-10
Schlüssel 1-1 von 1 für "913DFF12F86258E5". Geben Sie die Zahlen ein, N) Nächster oder Q) Beenden>

Antworten wir mit: 1

Weiter:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Wir installieren MySQL. Theoretisch kann man auch einen anderen SQL-Server verwenden, aber ich werde der Einfachheit halber den für LinOTP empfohlenen verwenden.

(Zusätzliche Informationen, einschließlich über die Neukonfiguration der LinOTP-Datenbank, finden Sie in der offiziellen Dokumentation zu dem Link. Dort finden Sie auch den Befehl: dpkg-reconfigure linotp, um die Parameter zu ändern, wenn Sie bereits MySQL installiert haben).

# apt-get install mysql-server

# apt-get update

(Eine zusätzliche Überprüfung auf Updates schadet nicht)
Wir installieren LinOTP und zusätzliche Module:

# apt-get install linotp

Beantworten Sie die Fragen des Installationsprogramms:
Apache2 verwenden: ja
Erstellen Sie ein Passwort für admin Linotp: „IhrPasswort“
Selbstsigniertes Zertifikat generieren?: ja
MySQL verwenden?: ja
Wo befindet sich die Datenbank: localhost
Erstellen wir die LinOTP-Datenbank (Datenbankname) auf dem Server: LinOTP2
Einen separaten Nutzer für die Datenbank erstellen: LinOTP2
Passwort für den Nutzer festlegen: „IhrPasswort“
Soll die Datenbank jetzt erstellt werden? (etwas wie „Sind Sie sicher, dass Sie …“): ja
Geben Sie das root-Passwort von MySQL ein, das Sie bei der Installation festgelegt haben: „IhrPasswort“
Fertig.

(optional, kann auch weggelassen werden)

# apt-get install linotp-adminclient-cli 

(optional, kann auch weggelassen werden)

# apt-get install libpam-linotp  

So, unser web-interface Linotp ist jetzt unter folgender Adresse verfügbar:

"<b>https<\/b>: \\\/IP_Server\\\/manage"

Über die Einstellungen im Web-Interface werde ich später noch sprechen.

Jetzt, das Wichtigste! Wir starten FreeRadius und verknüpfen es mit Linotp.

Installieren Sie FreeRadius und das Modul zur Arbeit mit LinOTP

# apt-get install freeradius linotp-freeradius-perl

Wir sichern die Konfigurationen von client und Users des Radius.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Erstellen Sie eine leere Client-Datei:

# touch /etc/freeradius/clients.conf

Bearbeiten Sie unsere neue Konfigurationsdatei (die gesicherte Konfiguration kann als Beispiel verwendet werden)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # Passwort für die Verbindung der Clients
}

Erstellen wir nun die Datei users:

# touch /etc/freeradius/users

Bearbeiten Sie die Datei und sagen Sie dem Radius, dass wir Perl für die Authentifizierung verwenden werden.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Bearbeiten Sie nun die Datei /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Wir müssen den Pfad zum Perl-Skript linotp im Parameter module angeben:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
Erstellen Sie nun eine Datei, in der wir angeben, aus welcher (Domain, Datenbank oder Datei) die Daten stammen sollen.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP Ihres LinOTP-Servers(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Hier werde ich etwas ausführlicher darauf eingehen, da es wichtig ist:

Vollständige Beschreibung der Datei mit Kommentaren:
#IP of the linotp server (IP адрес нашего LinOTP сервера)
URL=https://172.17.14.103/validate/simplecheck
#Наша область которую мы создадим в веб интерфейсе LinOTP.)
REALM=rearm1
#Имя группы юзверей которая создается в вебморде LinOTP.
RESCONF=flat_file
#optional: comment out if everything seems to work fine
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out (SSL если мы создаем свой сертификат и хотим его проверять)
SSL_CHECK=False

Erstellen wir nun die Datei /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

Und kopieren Sie die Konfiguration hinein (nichts muss bearbeitet werden):

authorize {
# normalisiert fehlerhafte Client-Anfragen, bevor sie an andere Module weitergeleitet werden (siehe '/etc/freeradius/modules/preprocess')
preprocess
#  Wenn Sie mehrere Arten von Realms verwenden, möchten Sie wahrscheinlich
#  für alle "ignore_null = yes" setzen.
#  Andernfalls, wenn der erste Realm nicht übereinstimmt,
#  werden die anderen Stile nicht überprüft.
# erlaubt eine Liste von Realms (siehe '/etc/freeradius/modules/realm')
IPASS
# versteht etwas wie USER@REALM und kann die Komponenten trennen (siehe '/etc/freeradius/modules/realm')
suffix
# versteht USERREALM und kann die Komponenten trennen (siehe '/etc/freeradius/modules/realm')
ntdomain
#  Lesen Sie die 'users'-Datei, um mehr über spezielle Konfigurationen zu erfahren, die für
# bestimmte Nutzer angewendet werden sollten (siehe '/etc/freeradius/modules/files')
files
# erlaubt es, die Authentifizierung ablaufen zu lassen (siehe '/etc/freeradius/modules/expiration')
expiration
# erlaubt die Definition gültiger Nutzungszeiten (siehe '/etc/freeradius/modules/logintime')
logintime
# Wir haben keine radius_shortname_map!
pap
}
# hier wird das linotp Perl-Modul für die weitere Verarbeitung aufgerufen
authenticate {
perl
}

Erstellen wir nun einen Symlink:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

Ich persönlich lösche die Standard-Radius-Webseiten, aber wenn Sie sie benötigen, können Sie entweder ihre Konfiguration bearbeiten oder sie deaktivieren.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Kommen wir nun zurück zum Web-Interface und betrachten wir es etwas genauer:
Oben rechts klicken wir auf LinOTP Config -> UserIdResolvers -> Neu
Wählen Sie, was Sie wollen: LDAP (AD Win, LDAP Samba) oder SQL oder lokale Benutzern im Flatfile-System.

Füllen Sie die erforderlichen Felder aus.

Dann erstellen wir REALMS:
Oben rechts klicken wir auf LinOTP Config -> Realms -> Neu.
und geben unserem REALM einen Namen und klicken auf den zuvor erstellten UserIdResolvers.

Alle diese Daten werden von freeRadius in der Datei /etc/linotp2/rlm_perl.ini benötigt, wie ich oben geschrieben habe. Wenn Sie diese also nicht bearbeitet haben, tun Sie es jetzt.

Der Server ist jetzt konfiguriert.

Zusatz:

Konfiguration von LinOTP auf Debian 9:

Installation:

# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list 
# apt-get install dirmngr

# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update

# apt-get install mysql-server

(standardmäßig bietet Debian 9 mysql (mariaDB) nicht an, ein Passwort für root festzulegen; natürlich können Sie es auch leer lassen, aber wenn Sie die Nachrichten lesen, führt dies oft zu "epic fails", daher werden wir es dennoch festlegen)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('hier_passwort') WHERE User = 'root';
exit
# apt-get install linotp
# apt-get install linotp-adminclient-cli
# apt-get install python-ldap
# apt install freeradius
# nano /etc/freeradius/3.0/sites-enabled/linotp

Wir fügen den Code ein (gesendet von JuriM, vielen Dank dafür!):

server linotp {
listen {
ipaddr = *
port = 1812
type = auth
}
listen {
ipaddr = *
port = 1813
type = acct
}
authorize {
preprocess
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
perl
}
}
accounting {
unix
}
}

Wir bearbeiten /etc/freeradius/3.0/mods-enabled/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

Leider wird in Debian 9 die Bibliothek radius_linotp.pm nicht aus den Repositories installiert, also nehmen wir sie von GitHub.

# apt install git
# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl
# cd linotp-auth-freeradius-perl/
# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

Jetzt bearbeiten wir /etc/freeradius/3.0/clients.conf

client servers {
ipaddr = 192.168.188.0/24
secret = IhrPasswort
}

Jetzt korrigieren wir nano /etc/linotp2/rlm_perl.ini

Wir fügen denselben Code ein, den wir bei der Installation auf Debian 8 verwendet haben (oben beschrieben)

Das sollte es eigentlich gewesen sein. (bislang nicht getestet)

Ich lasse unten einige Links zur Konfiguration von Systemen, die häufig durch Zwei-Faktor-Authentifizierung geschützt werden müssen:
Konfiguration der Zwei-Faktor-Authentifizierung in Apache2

Konfiguration mit Cisco ASA(dort wird ein anderer Token-Generator-Server verwendet, aber die Einstellungen der ASA sind dieselben).

VPN mit Zwei-Faktor-Authentifizierung

Einstellungen Zwei-Faktor-Authentifizierung in ssh (dort wird ebenfalls LinOTP verwendet) – Dank an den Autor. Dort finden Sie auch interessante Informationen zur Konfiguration der LiOTP-Politiken.

Auch viele CMS unterstützen die Zwei-Faktor-Authentifizierung (für WordPress hat LinOTP sogar ein spezielles Modul auf github), zum Beispiel, wenn Sie einen geschützten Bereich für die Mitarbeiter Ihres Unternehmens auf Ihrer Unternehmenswebsite einrichten möchten.
WICHTIGER HINWEIS! Aktivieren Sie nicht das Kontrollkästchen «Google authenticator» zur Verwendung des Google Authentifikators! Der QR-Code wird dann nicht gelesen... (seltsame Tatsache)

Für den Artikel wurden Informationen aus den folgenden Artikeln verwendet:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Danke an die Autoren.

Quelle: habr.com

60GB SSD 8Gb DDR4