Serveur d'authentification à deux facteurs LinOTP

Serveur d'authentification à deux facteurs LinOTP

Aujourd'hui, je souhaite partager comment configurer un serveur d'authentification à deux facteurs pour protéger un réseau d'entreprise, des sites, des services, ssh. Le serveur exécutera la combinaison suivante : LinOTP + FreeRadius.

Pourquoi en avons-nous besoin?
Il s'agit d'une solution entièrement gratuite et pratique, au sein de son propre réseau, indépendante des fournisseurs tiers.

Ce service est très pratique, assez visuel, contrairement à d'autres produits open source, et prend également en charge un grand nombre de fonctions et de politiques (par exemple, login+mot de passe+(PIN+OTPToken)). Grâce à l'API, il s'intègre aux services d'envoi de SMS (LinOTP Config->Provider Config->SMS Provider), génère des codes pour les applications mobiles telles que Google Authentificator et bien plus encore. Je pense que c'est plus pratique que le service discuté dans article.

Ce serveur fonctionne parfaitement avec Cisco ASA, le serveur OpenVPN, Apache2, et en général avec presque tout ce qui prend en charge l'authentification via un serveur RADIUS (Par exemple, pour SSH dans le data center).

nécessite:

1) Debian 8 (Jessie) - Nécessaire! (l'installation d'essai sur Debian 9 est décrite à la fin de l'article)

Accueil:

Installation de Debian 8.

Ajoutez le référentiel LinOTP :

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

Ajout de clés :

# gpg --search-keys 913DFF12F86258E5

Parfois lors d'une installation « propre », après avoir exécuté cette commande, Debian affiche :

gpg: создан каталог `/root/.gnupg'
gpg: создан новый файл настроек `/root/.gnupg/gpg.conf'
gpg: ВНИМАНИЕ: параметры в `/root/.gnupg/gpg.conf' еще не активны при этом запуске
gpg: создана таблица ключей `/root/.gnupg/secring.gpg'
gpg: создана таблица ключей `/root/.gnupg/pubring.gpg'
gpg: не заданы серверы ключей (используйте --keyserver)
gpg: сбой при поиске на сервере ключей: плохой URI

Il s'agit de la configuration initiale de gnupg. C'est bon. Exécutez simplement à nouveau la commande.
À la question de Debian :

gpg: поиск "913DFF12F86258E5" на hkp сервере keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, создан: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  Введите числа, N) Следующий или Q) Выход>

Nous répondons : 1

Suivant:

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

# apt-get update

Installez MySQL. En théorie, vous pouvez utiliser un autre serveur SQL, mais par souci de simplicité, je l'utiliserai comme recommandé pour LinOTP.

(des informations supplémentaires, y compris la reconfiguration de la base de données LinOTP, peuvent être trouvées dans la documentation officielle de lien. Vous y trouverez également la commande : dpkg-reconfigure linotp pour modifier les paramètres si vous avez déjà installé mysql).

# apt-get install mysql-server

# apt-get update

(ça ne ferait pas de mal de vérifier à nouveau les mises à jour)
Installez LinOTP et les modules supplémentaires :

# apt-get install linotp

Nous répondons aux questions de l'installateur :
Utiliser Apache2 : oui
Créez un mot de passe pour l'administrateur Linotp : "Votre mot de passe"
Générer un certificat auto-signé ? : oui
Utiliser MySQL ? : oui
Où se trouve la base de données : localhost
Créez une base de données LinOTP (nom de la base) sur le serveur : LinOTP2
Créez un utilisateur distinct pour la base de données : LinOTP2
Nous définissons un mot de passe pour l'utilisateur : « Votre mot de passe »
Dois-je créer une base de données maintenant ? (quelque chose comme « Êtes-vous sûr de vouloir... ») : oui
Entrez le mot de passe root MySQL que vous avez créé lors de l'installation : « YourPassword »
Terminé.

(facultatif, vous n'êtes pas obligé de l'installer)

# apt-get install linotp-adminclient-cli 

(facultatif, vous n'êtes pas obligé de l'installer)

# apt-get install libpam-linotp  

Notre interface web Linotp est donc désormais disponible sur :

"<b>https</b>: //IP_сервера/manage"

Je parlerai des paramètres de l'interface Web un peu plus tard.

Maintenant, le plus important ! Nous élevons FreeRadius et le lions à Linotp.

Installez FreeRadius et le module pour travailler avec LinOTP

# apt-get install freeradius linotp-freeradius-perl

sauvegardez les configurations du rayon client et utilisateurs.

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

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

Créez une fiche client vide :

# touch /etc/freeradius/clients.conf

Modification de notre nouveau fichier de configuration (la configuration sauvegardée peut être utilisée comme exemple)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Créez ensuite un fichier utilisateurs :

# touch /etc/freeradius/users

Nous éditons le fichier en indiquant à radius que nous utiliserons Perl pour l'authentification.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Ensuite, éditez le fichier /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Nous devons spécifier le chemin d'accès au script Perl Linotp dans le paramètre module :

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

.....
Ensuite, nous créons un fichier dans lequel nous disons de quel (domaine, base de données ou fichier) extraire les données.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_вашего_LinOTP_сервера(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Je vais entrer un peu plus dans les détails ici car c'est important :

Description complète du dossier avec commentaires :
#IP du serveur linOTP (adresse IP de notre serveur LinOTP)
URL=https://172.17.14.103/validate/simplecheck
#Notre espace que nous allons créer dans l'interface web LinOTP.)
REALM=réarmer1
#Nom du groupe d'utilisateurs créé dans la muselière Web LinOTP.
RESCONF=fichier_plat
#optionnel : commentez si tout semble bien fonctionner
Débogage = Vrai
#optionnel : utilisez ceci si vous avez des certificats auto-signés, sinon commentez (SSL si nous créons notre propre certificat et voulons le vérifier)
SSL_CHECK=Faux

Ensuite, créez le fichier /etc/freeradius/sites-available/linotp

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

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

Et copiez-y la configuration (pas besoin de modifier quoi que ce soit) :

authorize {
#normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
#  If you are using multiple kinds of realms, you probably
#  want to set "ignore_null = yes" for all of them.
#  Otherwise, when the first style of realm doesn't match,
#  the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
#  Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentification to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}

Nous allons ensuite créer un lien SIM :

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

Personnellement, je tue les sites Radius par défaut, mais si vous en avez besoin, vous pouvez soit modifier leur configuration, soit les désactiver.

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

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

# service freeradius reload

Revenons maintenant au Web et examinons-le un peu plus en détail :
Dans le coin supérieur droit, cliquez sur LinOTP Config -> UserIdResolvers -> New.
Nous choisissons ce que nous voulons : LDAP (AD win, LDAP samba), ou SQL, ou utilisateurs locaux du système Flatfile.

Remplissez les champs obligatoires.

Ensuite, nous créons des REALMS :
Dans le coin supérieur droit, cliquez sur LinOTP Config -> Realms -> New.
et donnez un nom à nos REALMS, et cliquez également sur les UserIdResolvers précédemment créés.

FreeRadius a besoin de toutes ces données dans le fichier /etc/linotp2/rlm_perl.ini, comme je l'ai écrit ci-dessus, donc si vous ne l'avez pas modifié à ce moment-là, faites-le maintenant.

Le serveur est tout configuré.

Supplément:

Configuration de LinOTP sur Debian 9:

Установка:

# 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

(par défaut, dans Debian 9 mysql (mariaDB) ne propose pas de définir un mot de passe root, bien sûr vous pouvez le laisser vide, mais si vous lisez l'actualité, cela conduit très souvent à des « échecs épiques », nous allons donc le définir de toute façon)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('тут_пароль') 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

Collez le code (envoyé par JuriM, merci à lui pour ça !) :

serveur linotp {
écouter {
adresseipad = *
port=1812
type = authentification
}
écouter {
adresseipad = *
port=1813
type = compte
}
autoriser {
prétraiter
mise à jour {
&control:Auth-Type := Perl
}
}
authentifier {
Perl de type d'authentification {
perl
}
}
comptabilité {
unix
}
}

Éditez /etc/freeradius/3.0/mods-enabled/perl

perle {
nom de fichier = /usr/share/linotp/radius_linotp.pm
func_authenticate = authentifier
func_authorize = autoriser
}

Malheureusement, dans Debian 9, la bibliothèque radius_linotp.pm n'est pas installée à partir des référentiels, nous la prendrons donc depuis 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

modifions maintenant /etc/freeradius/3.0/clients.conf

serveurs clients {
adresse IP = 192.168.188.0/24
secret = votre mot de passe
}

Corrigeons maintenant nano /etc/linotp2/rlm_perl.ini

On y colle le même code que lors de l'installation sur debian 8 (décrit ci-dessus)

tout est conforme à l'idée. (pas encore testé)

Je laisse ci-dessous quelques liens sur la mise en place de systèmes qui doivent le plus souvent être protégés par une authentification à deux facteurs :
Configuration de l'authentification à deux facteurs dans Apache2

Configuration avec Cisco ASA(un serveur de génération de jetons différent y est utilisé, mais les paramètres de l'ASA lui-même sont les mêmes).

VPN avec authentification à deux facteurs

réglage authentification à deux facteurs en ssh (LinOTP y est également utilisé) - merci à l'auteur. Vous y trouverez également des informations intéressantes sur la configuration des politiques LiOTP.

De plus, les cms de nombreux sites prennent en charge l'authentification à deux facteurs (pour WordPress, LinOTP possède même son propre module spécial pour github), par exemple, si vous souhaitez créer une section protégée sur votre site Web d'entreprise pour les employés de l'entreprise.
FAIT IMPORTANT ! NE cochez PAS la case « Google autenteficator » pour utiliser Google Authenticator ! Le QR code n'est donc pas lisible... (fait étrange)

Pour rédiger cet article, les informations des articles suivants ont été utilisées :
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Merci aux auteurs.

Source: habr.com

Ajouter un commentaire