Serveur d'autorisation Ă  deux facteurs LinOTP

image

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, ssh. Le serveur fonctionnera en bundle: LinOTP + FreeRadius.

Pourquoi en avons-nous besoin?
Il s'agit d'une solution totalement gratuite et pratique, au sein de son réseau, indépendante des prestataires 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 (configuration LinOTP-> configuration du fournisseur-> fournisseur SMS), génÚre des codes pour les applications mobiles comme Google Autentificator et bien plus encore. Je pense que c'est plus pratique que le service considéré dans l' article .

Ce serveur fonctionne trÚs bien avec Cisco ASA, serveur OpenVPN, Apache2, et en effet avec presque tout ce qui prend en charge l'authentification via un serveur RADIUS (par exemple, pour SSH dans le centre de données).

Il faut:

1) Debian 8 (jessie) - Obligatoire! (l'installation d'essai sur debian 9 est décrite à la fin de l'article)

Début:

Installer Debian 8.

Ajouter un référentiel LinOTP:

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

Ajouter des clés:

 # gpg --search-keys 913DFF12F86258E5 

Parfois avec une installation «propre», aprÚs avoir exécuté cette commande, Debian émet:

 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. Rien à craindre. Exécutez à nouveau la commande.
Posée par Debiana:

 gpg:  "913DFF12F86258E5"  hkp  keys.gnupg.net (1) LSE LinOTP2 Packaging <linotp2@lsexperts.de> 2048 bit RSA key F86258E5, : 2010-05-10 Keys 1-1 of 1 for "913DFF12F86258E5".  , N)   Q) > 

Réponse: 1

Suivant:

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

 # apt-get update 

Installez mysql. En théorie, vous pouvez utiliser un serveur SQL différent, mais pour plus de 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 le lien . Au mĂȘme endroit, vous pouvez trouver 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 
(Vérifier à nouveau les mises à jour ne fera pas de mal)
Installez LinOTP et les modules complé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: "YourPassword"
Générer un certificat auto-signé?: Oui
Utiliser MySQL?: Oui
OĂč se trouve la base de donnĂ©es: localhost
Créez la base de données LinOTP (nom de la base de données) sur le serveur: LinOTP2
Créez un utilisateur distinct pour la base de données: LinOTP2
Nous définissons le mot de passe de l'utilisateur: "YourPassword"
Dois-je crĂ©er une base maintenant? (quelque chose comme "Êtes-vous sĂ»r de vouloir ..."): oui
Saisissez le mot de passe racine MySQL créé lors de son installation: «YourPassword»
C'est fait.

(facultatif, vous ne pouvez pas définir)

 # apt-get install linotp-adminclient-cli 

(facultatif, vous ne pouvez pas définir)

 # apt-get install libpam-linotp 

Et donc notre interface Web Linotp est désormais disponible à l'adresse suivante:

 "<b>https</b>: //IP_/manage" 

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

Maintenant, la chose la plus importante! Lancez FreeRadius et liez-le Ă  Linotp.

Installez FreeRadius et le module LinOTP

 # apt-get install freeradius linotp-freeradius-perl 

client de sauvegarde et configurations de rayon d'utilisateurs.

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

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

Créez un fichier client vide:

 # touch /etc/freeradius/clients.conf 

Nous Ă©ditons notre nouveau fichier de configuration (une configuration de sauvegarde peut ĂȘtre utilisĂ©e comme exemple)

 # nano /etc/freeradius/clients.conf 

 client 192.168.188.0/24 { secret = passwd #     } 

Ensuite, créez le fichier utilisateurs:

 # touch /etc/freeradius/users 

Nous éditons le fichier, en indiquant le rayon 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 écrire le chemin du script linotp perl dans le paramÚtre du module:

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

.....
Ensuite, nous créons un fichier dans lequel nous disons à partir duquel (domaine, base de données ou fichier) prendre les données.

 # touch /etc/linotp2/rlm_perl.ini 

 # nano /etc/linotp2/rlm_perl.ini 

 URL=https://IP__LinOTP_(192.168.XX)/validate/simplecheck REALM=webusers1c RESCONF=LocalUser Debug=True SSL_CHECK=False 

Ici, je m'attarderai un peu plus, car c'est important:

Description complĂšte du fichier 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 = rearm1
# Le nom du groupe juzverej créé dans le webmord LinOTP.
RESCONF = flat_file
#optional: commentez si tout semble bien fonctionner
Debug = True
#optional: utilisez-le si vous avez des certificats auto-signés, sinon commentez (SSL si nous créons notre certificat et que nous 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 la config dedans (n'éditez rien de maniÚre inappropriée):

 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 USER\REALM 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 } 

Ensuite, faites un lien sim:

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

Personnellement, je tue les sites de rayon 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 à la face Web et réfléchissons-y plus en détail:
Dans le coin supérieur droit, cliquez sur LinOTP Config -> UserIdResolvers -> New
Choisissez ce que nous voulons: LDAP (AD win, LDAP samba), ou SQL, ou utilisateurs Flatfile locaux.

Remplissez les champs obligatoires.

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

Toutes ces données sont nécessaires à freeRadius dans le fichier /etc/linotp2/rlm_perl.ini, comme je l'ai écrit ci-dessus, donc si vous ne l'avez pas modifié, faites-le maintenant.

Tout le serveur est configuré.

Ajout:

Installer LinOTP sur Debian 9 (Merci Ă  prikhodkov )
# Ajoutez le référentiel LinOTP à /etc/apt/sources.list.d/linotp.list et mettez à jour les navets:

echo "deb linotp.org/apt/debian stretch linotp"> /etc/apt/sources.list.d/linotp.list
mise Ă  jour apt-get
apt-get install dirmngr
apt-key adv --recv-keys 913DFF12F86258E5

# Installez et configurez le serveur mysql en gros:

apt-get install mysql-server

# Installer les packages linotp et freeradius

apt-get install linotp linotp-adminclient-cli python-ldap freeradius python-passlib python-bcrypt git libio-all-lwp-perl libconfig-file-perl libtry-tiny-perl
# Créer des liens symboliques vers des fichiers de configuration freeradius

ln -s /etc/freeradius/3.0/sites-available / etc / freeradius / sites-available
ln -s /etc/freeradius/3.0/sites-enabled / etc / freeradius / sites-enabled
ln -s /etc/freeradius/3.0/clients.conf /etc/freeradius/clients.conf
ln -s /etc/freeradius/3.0/users / etc / freeradius / users

# Installez le module linotp-auth-freeradius-perl

git clone github.com/LinOTP/linotp-auth-freeradius-perl
cd linotp-auth-freeradius-perl /
cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

# Nous apportons le fichier de configuration freeradius pour linotp Ă  ce formulaire

cat / etc / freeradius / sites-enabled / linotp

linotp serveur {
écoute {
ipaddr = *
port = 1812
type = auth
}
écoute {
ipaddr = *
port = 1813
type = acct
}
autoriser {
prétraiter
mettre Ă  jour {
& contrĂŽle: Type d'authentification: = Perl
}
}
authentifier {
Type d'authentification Perl {
perl
}
}
comptabilité {
unix
}
}
# Dans les sites activés pour freeradius, nous ne laissons que linotp

ls / etc / freeradius / sites-enabled
linotp

# Ajouter des hĂŽtes Ă  partir desquels nous autorisons les connexions sur freeradius

cat /etc/freeradius/clients.conf

hĂŽte client1 {
ipaddr = IP_1
masque de réseau = 32
secret = 'SECRET_1'
}
client hĂŽte2 {
ipaddr = IP_2
masque de réseau = 32
secret = 'SECRET_2'
}
# En tant que base d'utilisateurs, nous utilisons le connecteur Perl

cat / etc / freeradius / users

DEFAUT Type d'authentification: = perl
}

chat /etc/freeradius/3.0/mods-available/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authentifier
func_authorize = autoriser

}
# Dans le répertoire mods-activé, créez des liens symboliques à partir du répertoire mods-disponible pour le module perl et supprimez eap

ln -s /etc/freeradius/3.0/mods-available/perl /etc/freeradius/3.0/mods-enabled/perl
rm /etc/freeradius/3.0/mods-enabled/eap

# Créer une clé d'audit pour exécuter linotp

linotp-create-auditkeys -f linotp.ini
# Nous créons une config du connecteur pour vérifier le DD arrivant dans le rayon

cat /etc/linotp2/rlm_perl.ini

URL = https: // IP_LINOTP_SRV / validate / simplecheck
REALM = royaume
RESCONF = LocalUser
Debug = True
SSL_CHECK = Faux

Je vais laisser ci-dessous quelques liens sur la configuration des 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 autre serveur de gĂ©nĂ©ration de jetons y est utilisĂ©, mais les paramĂštres de l'ASA lui-mĂȘme sont les mĂȘmes).

VPN avec authentification Ă  deux facteurs

Configuration de l'authentification à deux facteurs dans ssh (LinOTP y est également utilisé) - merci à l'auteur. Vous pouvez également y trouver 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 a mĂȘme son propre module spĂ©cial sur github ), par exemple, si vous souhaitez crĂ©er une section sĂ©curisĂ©e pour les employĂ©s de l'entreprise sur votre site Web d'entreprise.
FAIT IMPORTANT! NE cochez PAS la case "Google autenteficator" pour utiliser Google Authenticator! Le code QR ne peut pas ĂȘtre lu alors ... (fait Ă©trange)

Pour écrire l'article, des informations ont été utilisées à partir des articles suivants:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Merci aux auteurs.

Source: https://habr.com/ru/post/fr462523/


All Articles