LinOTP Zwei-Faktor-Authentifizierungsserver

LinOTP Zwei-Faktor-Authentifizierungsserver

Heute möchte ich teilen, wie man einen Zwei-Faktor-Authentifizierungsserver für den Schutz von Unternehmensnetzwerken, Websites, Diensten und 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 und intuitiv im Vergleich zu anderen Open-Source-Produkten. Er unterstützt zudem eine Vielzahl von Funktionen und Richtlinien (zum Beispiel Login + Passwort + (PIN + OTP-Token)). Er lässt sich über die API mit SMS-Versanddiensten integrieren (LinOTP Config -> Provider Config -> SMS Provider), generiert Codes für mobile Anwendungen wie Google Authenticator und vieles mehr. Ich finde, er ist benutzerfreundlicher als der in Betracht gezogene Dienst. Artikel.

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

Anforderungen:

1) Debian 8 (jessie) — Unbedingt! (Eine Testinstallation auf Debian 9 ist am Ende des Artikels beschrieben.)

Beginn:

Wir installieren Debian 8.

Wir fügen das LinOTP-Repo hinzu:

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

Wir fügen die Schlüssel hinzu:

# gpg --search-keys 913DFF12F86258E5

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

gpg: Verzeichnis `/root/.gnupg' erstellt
gpg: Neue Konfigurationsdatei `/root/.gnupg/gpg.conf' erstellt
gpg: WARNUNG: Die Parameter in `/root/.gnupg/gpg.conf' sind bei diesem Start noch nicht aktiv
gpg: Schlüsseltabelle `/root/.gnupg/secring.gpg' erstellt
gpg: Schlüsseltabelle `/root/.gnupg/pubring.gpg' erstellt
gpg: Es sind keine Schlüsselserver angegeben (benutzen Sie --keyserver)
gpg: Fehler beim Suchen auf dem Schlüsselserver: falscher URI

Dies ist die erste Konfiguration von gnupg. Keine Sorge. Führen Sie einfach den Befehl erneut aus.
Auf die Frage von Debian:

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

Wir antworten: 1

Weiter:

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

# apt-get update

Wir installieren MySQL. Theoretisch könnte man auch einen anderen SQL-Server verwenden, aber der Einfachheit halber werde ich ihn verwenden, da er für LinOTP empfohlen wird.

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

# apt-get install mysql-server

# apt-get update

(Es schadet nicht, die Updates erneut zu überprüfen)
Wir installieren LinOTP und zusätzliche Module:

# apt-get install linotp

Wir beantworten die Fragen des Installateurs:
Apache2 verwenden: ja
Wählen Sie ein Passwort für den admin LinOTP: „IhrPasswort“
Selbstsigniertes Zertifikat erstellen?: ja
MySQL verwenden?: ja
Wo befindet sich die Datenbank: localhost
Wir erstellen die Datenbank LinOTP (Datenbankname) auf dem Server: LinOTP2
Einen separaten Benutzer für die Datenbank erstellen: LinOTP2
Benutzerpasswort festlegen: „IhrPasswort“
Soll die Datenbank jetzt erstellt werden? (so etwas wie „Sind Sie sicher, dass Sie ...“): ja
Geben Sie das MySQL-Root-Passwort ein, das Sie bei der Installation festgelegt haben: „IhrPasswort“
Fertig.

(optional, kann weggelassen werden)

# apt-get install linotp-adminclient-cli 

(optional, kann weggelassen werden)

# apt-get install libpam-linotp  

So, unser Webinterface Linotp ist jetzt verfügbar unter der Adresse:

"<b>https<\/b>: \/\/IP_\u0441\u0435\u0440\u0432\u0435\u0440\u0430\/manage"

Über die Einstellungen im Webinterface werde ich später informieren.

Jetzt, das Wichtigste! Wir starten FreeRadius und verbinden es mit Linotp.

Installieren Sie FreeRadius und das Modul für die Zusammenarbeit mit LinOTP

# apt-get install freeradius linotp-freeradius-perl

Sichern Sie die Konfigurationen der Radius-Clients und -Benutzer.

# 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 Sie dann die Datei users:

# touch /etc/freeradius/users

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

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Bearbeiten Sie dann 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

…..
Nun erstellen wir eine Datei, in der wir angeben, aus welcher Quelle (Domain, Datenbank oder Datei) die Daten abgerufen werden 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 möchte ich etwas ausführlicher anhalten, da dies 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

Nun erstellen wir die Datei /etc/freeradius/sites-available/linotp

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

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

Und kopieren die Konfiguration hinein (nichts muss geändert werden):

authorize {
# normalisiert fehlerhafte Clientanfragen, bevor sie an andere Module weitergeleitet werden (siehe '/etc/freeradius/modules/preprocess')
preprocess
#  Wenn Sie mehrere Arten von Realms verwenden, möchten Sie wahrscheinlich
#  'ignore_null = yes' für alle von ihnen festlegen.
#  Andernfalls werden die anderen Stile nicht überprüft,
#  wenn der erste Stil nicht übereinstimmt.
# erlaubt eine Liste von Realms (siehe '/etc/freeradius/modules/realm')
IPASS
# versteht etwas wie USER@REALM und kann die Komponenten unterscheiden (siehe '/etc/freeradius/modules/realm')
suffix
# versteht USERREALM und kann die Komponenten unterscheiden (siehe '/etc/freeradius/modules/realm')
ntdomain
#  Liest die Datei 'users', um über spezielle Konfigurationen zu erfahren, die für
# bestimmte Benutzer gelten sollten (siehe '/etc/freeradius/modules/files')
files
# erlaubt es, die Authentifizierung ablaufen zu lassen (siehe '/etc/freeradius/modules/expiration')
expiration
# ermöglicht die Definition von gültigen Servicezeiten (siehe '/etc/freeradius/modules/logintime')
logintime
# Wir haben kein radius_shortname_map!
pap
}
#Hier wird das linotp Perl-Modul für die weitere Verarbeitung aufgerufen
authenticate {
perl
}

Jetzt erstellen wir einen Symlink:

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

Persönlich entferne ich die standardmäßigen Radius-Webseiten, aber wenn Sie sie benötigen, können Sie entweder deren 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 zur Web-Oberfläche und betrachten sie etwas genauer:
Oben rechts klicken wir auf LinOTP-Konfiguration -> UserIdResolvers -> Neu
Wählen Sie, was Sie möchten: LDAP (AD Win, LDAP Samba), SQL oder lokale Flatfile-Benutzer.

Füllen Sie die erforderlichen Felder aus.

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

Alle diese Daten werden von freeRadius in der Datei /etc/linotp2/rlm_perl.ini benötigt, worüber ich zuvor geschrieben habe. Wenn Sie sie also nicht bearbeitet haben, tun Sie das bitte jetzt.

Der Server ist konfiguriert.

Zusatz:

LinOTP-Installation 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 in mysql (MariaDB) nicht an, ein Passwort für den Root-Benutzer festzulegen. Natürlich können Sie es leer lassen, aber wenn Sie die Nachrichten lesen, führt das sehr oft zu "epischen Fehlern". Daher werden wir es doch 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

Fügen Sie den Code ein (übermittelt 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
}
}

Bearbeiten von /etc/freeradius/3.0/mods-enabled/perl

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

Leider kann die Bibliothek radius_linotp.pm in Debian 9 nicht aus den Repositories installiert werden, daher 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 passen wir /etc/freeradius/3.0/clients.conf an.

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

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

Fügen Sie denselben Code ein, der auch bei der Installation auf Debian 8 verwendet wurde (oben beschrieben).

Theoretisch ist das alles. (noch nicht getestet)

Ich werde unten einige Links zur Konfiguration von Systemen hinterlassen, die häufig mit Zwei-Faktor-Authentifizierung gesichert werden müssen:
Einrichtung der Zwei-Faktor-Authentifizierung in Apache2

Einrichtung mit Cisco ASA(dort wird ein anderer Token-Generator-Server verwendet, aber die Konfiguration der ASA ist dieselbe).

VPN mit Zwei-Faktor-Authentifizierung

Konfiguration Zwei-Faktor-Authentifizierung in SSH (dort wird ebenfalls LinOTP verwendet) – danke an den Autor. Dort finden Sie auch interessante Informationen zur Konfiguration von LiOTP-Richtlinien.

Viele CMS von Websites unterstützen ebenfalls die Zwei-Faktor-Authentifizierung. (Für WordPress gibt es sogar ein spezielles Modul von LinOTP auf github), zum Beispiel, wenn Sie einen gesicherten Bereich für die Mitarbeiter Ihres Unternehmens auf Ihrer Unternehmenswebsite erstellen möchten.
WICHTIGER HINWEIS! Aktivieren Sie das Kontrollkästchen «Google Authentifikator» nicht für die Nutzung des Google Authentifikators! Der QR-Code wird dann nicht erkannt… (seltsame Tatsache)

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

Vielen Dank an die Autoren.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster