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
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
# 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
réglage
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
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 :
Merci aux auteurs.
Source: habr.com