
Aujourd'hui, je veux partager comment configurer un serveur d'authentification à deux facteurs pour protéger le réseau d'entreprise, les sites, les services et SSH. Le serveur fonctionnera avec l'ensemble : LinOTP + FreeRadius.
Pourquoi en avons-nous besoin ?
C'est une solution entièrement gratuite et pratique, à l'intérieur de votre réseau, sans dépendre de fournisseurs tiers.
Ce service est très pratique, assez clair, contrairement à d'autres produits open source, et prend en charge un grand nombre de fonctionnalités et de politiques (par exemple, login + mot de passe + (PIN + OTPToken)). Il s'intègre avec des services d'envoi de SMS via API (LinOTP Config->Provider Config->SMS Provider), génère des codes pour des applications mobiles comme Google Authenticator et bien d'autres. Je le trouve plus pratique que le service discuté dans .
Ce serveur fonctionne parfaitement avec Cisco ASA, un serveur OpenVPN, Apache2, et en fait pratiquement tout ce qui prend en charge l'authentification via un serveur RADIUS (par exemple pour SSH dans un centre de données).
Exigences :
1) Debian 8 (jessie) — Absolument ! (l'installation d'essai sur Debian 9 est décrite à la fin de l'article)
Début :
Installons Debian 8.
Ajoutons le dépôt LinOTP :
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listAjoutons les clés :
# gpg --search-keys 913DFF12F86258E5Parfois, lors d'une installation « propre », après avoir exécuté cette commande, Debian affiche :
gpg: répertoire créé `\/root\/.gnupg'\ngpg: nouveau fichier de configuration créé `\/root\/.gnupg\/gpg.conf'\ngpg: ATTENTION : les paramètres dans `\/root\/.gnupg\/gpg.conf' ne sont pas encore actifs lors de cette exécution\ngpg: table de clés créée `\/root\/.gnupg\/secring.gpg'\ngpg: table de clés créée `\/root\/.gnupg\/pubring.gpg'\ngpg: pas de serveurs de clés définis (utilisez --keyserver)\ngpg: échec de la recherche sur le serveur de clés : URI mauvais
C'est la configuration initiale de gnupg. Rien de grave. Il suffit d'exécuter la commande encore une fois.
À la question de Debian :
gpg: recherche "913DFF12F86258E5" sur le serveur hkp keys.gnupg.net\n(1)\tLSE LinOTP2 Packaging \n\t clé RSA 2048 bits F86258E5, créée : 2010-05-10\nClés 1-1 de 1 pour "913DFF12F86258E5". Entrez les chiffres, N) Suivant ou Q) Quitter>Répondons : 1
Suivant :
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInstallons MySQL. En théorie, il est possible d'utiliser un autre serveur SQL, mais pour la simplicité, je vais l'utiliser, comme recommandé pour LinOTP.
(des informations supplémentaires, y compris sur la reconfiguration de la base de données LinOTP, peuvent être trouvées dans la documentation officielle sur . Là, vous pouvez également trouver la commande : dpkg-reconfigure linotp pour changer les paramètres si vous avez déjà installé MySQL).
# apt-get install mysql-server# apt-get update (vérifier à nouveau les mises à jour ne fait pas de mal)
Installons LinOTP et les modules complémentaires :
# apt-get install linotp Répondons aux questions de l'installateur :
Utiliser Apache2 : oui
Choisissez un mot de passe pour l'admin LinOTP : « VotreMotDePasse »
Générer un certificat auto-signé ?: oui
Utiliser MySQL ?: oui
Où se trouve la base de données : localhost
Créons la base LinOTP (nom de la base) sur le serveur : LinOTP2
Créons un utilisateur distinct pour la base de données : LinOTP2
Définissons le mot de passe pour l'utilisateur : «VotreMotDePasse»
Créer la base maintenant ? (quelque chose comme “Êtes-vous sûr que vous voulez …”) : oui
Entrez le mot de passe root de MySQL que nous avons créé lors de son installation : «VotreMotDePasse»
C'est fait.
(optionnel, peut ne pas être installé)
# apt-get install linotp-adminclient-cli (optionnel, peut ne pas être installé)
# apt-get install libpam-linotp Et donc notre interface web Linotp est maintenant accessible à l'adresse :
"<b>https<\/b>: \\\/\\\/IP_serveur\\\/manage"Je parlerai des paramètres dans l'interface web un peu plus tard.
Maintenant, le plus important ! Démarrons FreeRadius et le lier à Linotp.
Installons FreeRadius et le module de travail avec LinOTP
# apt-get install freeradius linotp-freeradius-perlsauvegardons les configs clients et Users du radius.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldCréons un fichier client vide :
# touch /etc/freeradius/clients.confÉditons notre nouveau fichier de config (la config sauvegardée peut être utilisée comme exemple)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # mot de passe pour se connecter aux clients
}Ensuite, créons le fichier users :
# touch /etc/freeradius/usersÉditons le fichier, indiquant au radius que nous utiliserons Perl pour l'authentification.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlEnsuite, modifions le fichier /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlNous devons indiquer le chemin vers le script Perl linotp dans le paramètre module :
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Ensuite, créons un fichier dans lequel nous indiquerons de quelle (domaine, base ou fichier) nous tirerons les données.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_de_votre_serveur_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseJe vais m'arrêter un peu plus longtemps ici, car c'est important :
Description complète du fichier avec des commentaires :
#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
Ensuite, créons le fichier /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpEt copions-y la config (il n'y a rien à modifier) :
authorize {
# normalise la demande de client malformée avant de la transmettre à d'autres modules (voir '/etc/freeradius/modules/preprocess')
preprocess
# Si vous utilisez plusieurs types de réalisations, vous voudrez probablement
# définir "ignore_null = yes" pour tous.
# Sinon, lorsque le premier style de domaine ne correspond pas,
# les autres styles ne seront pas vérifiés.
# permet une liste de domaine (voir '/etc/freeradius/modules/realm')
IPASS
# comprend quelque chose comme USER@REALM et peut distinguer les composants (voir '/etc/freeradius/modules/realm')
suffix
# comprend USERREALM et peut distinguer les composants (voir '/etc/freeradius/modules/realm')
ntdomain
# Lisez le fichier 'users' pour en savoir plus sur les configurations spéciales à appliquer aux
# certains utilisateurs (voir '/etc/freeradius/modules/files')
files
# permet de laisser l'authentification expirer (voir '/etc/freeradius/modules/expiration')
expiration
# permet de définir des temps de service valides (voir '/etc/freeradius/modules/logintime')
logintime
# Nous n'avons pas de radius_shortname_map !
pap
}
# ici le module perl linotp est appelé pour un traitement ultérieur
authenticate {
perl
}Ensuite, faisons un lien symbolique :
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledPersonnellement, je supprime les sites par défaut de FreeRadius, 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 à l'interface web et examinons-la un peu plus en détail :
Dans le coin supérieur droit, cliquez sur LinOTP Config -> UserIdResolvers -> Nouveau
Choisissez ce que vous voulez : LDAP (AD win, LDAP samba), SQL ou utilisateurs locaux du système Flatfile.
Remplissez les champs requis.
Ensuite, créons des REALMS :
Dans le coin supérieur droit, cliquez sur LinOTP Config -> Realms -> Nouveau.
Et donnez un nom à notre REALM, puis cliquez sur le UserIdResolvers créé précédemment.
Toutes ces informations sont nécessaires à FreeRadius dans le fichier /etc/linotp2/rlm_perl.ini, comme je l'ai mentionné plus haut, donc si vous ne l'avez pas modifié à ce moment-là, faites-le maintenant.
Le serveur est configuré.
La vulnérabilité a été confirmée dans de nombreuses images officielles Docker, y compris les images couchbase, elasticsearch, flink, solr, storm, etc.
Configuration de LinOTP sur 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(par défaut, sous Debian 9, mysql (mariaDB) ne propose pas d'installer un mot de passe pour l'utilisateur root, bien sûr vous pouvez le laisser vide, mais si vous suivez l'actualité, cela mène souvent à des 'échecs épiques', donc nous allons tout de même l'installer)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('votre_mot_de_passe') 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/linotpInsérez le code (envoyé par JuriM, merci à lui !) :
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 {
implémentations unix
}
}
Modifiez /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Malheureusement, sous Debian 9, la bibliothèque radius_linotp.pm n'est pas installable depuis les dépôts, donc nous allons la prendre sur 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.pmMaintenant, modifions /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = votre_mot_de_passe
}
Maintenant, modifions nano /etc/linotp2/rlm_perl.ini
Insérez-y le même code que lors de l'installation sur Debian 8 (décrit ci-dessus)
En théorie, c'est tout. (Pas encore testé)
Je vais laisser ci-dessous quelques liens sur la configuration des systèmes qui nécessitent souvent une authentification à deux facteurs :
Configuration de l'authentification à deux facteurs dans
(là, un autre serveur de génération de jetons est utilisé, mais les paramètres de l'ASA sont les mêmes).
Configuration (Là aussi, LinOTP est utilisé) — merci à l'auteur. Vous y trouverez également des choses intéressantes sur la configuration des politiques LiOTP.
De plus, de nombreux CMS de sites supportent l'authentification à deux facteurs (pour WordPress, LinOTP a même son propre module sur ), par exemple, si vous souhaitez créer une section sécurisée pour les employés de votre entreprise sur votre site d'entreprise.
FAIT IMPORTANT ! NE cochez pas la case « Google authenticator » pour utiliser l'authentificateur Google ! Le QR code ne sera pas lisible alors… (fait étrange)
Pour la rédaction de l'article, les informations suivantes ont été utilisées :
Merci aux auteurs.
Source : habr.com
