Servidor de autenticación de dos factores LinOTP

Servidor de autenticación de dos factores LinOTP

Hoy quiero compartir cómo configurar un servidor de autenticación de dos factores para proteger su red corporativa, sitios web, servicios, ssh. El servidor ejecutará la siguiente combinación: LinOTP + FreeRadius.

¿Por qué lo necesitamos?
Esta es una solución conveniente y completamente gratuita, dentro de su propia red, independiente de terceros proveedores.

Este servicio es muy conveniente, bastante visual, a diferencia de otros productos de código abierto, y también admite una gran cantidad de funciones y políticas (por ejemplo, inicio de sesión+contraseña+(PIN+OTPToken)). A través de la API, se integra con servicios de envío de SMS (LinOTP Config->Provider Config->SMS Provider), genera códigos para aplicaciones móviles como Google Authentificator y mucho más. Creo que es más conveniente que el servicio comentado en статье.

Este servidor funciona perfectamente con Cisco ASA, servidor OpenVPN, Apache2 y en general con casi todo lo que admita autenticación a través de un servidor RADIUS (por ejemplo, para SSH en el centro de datos).

Se requiere:

1) Debian 8 (jessie) - Asegúrese! (La instalación de prueba en Debian 9 se describe al final del artículo)

Inicio:

Instalación de Debian 8.

Agregue el repositorio LinOTP:

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

Añadiendo claves:

# gpg --search-keys 913DFF12F86258E5

A veces, durante una instalación "limpia", después de ejecutar este comando, Debian muestra:

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

Esta es la configuración inicial de gnupg. Está bien. Simplemente ejecute el comando nuevamente.
A la pregunta 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) Выход>

Respondemos: 1

Siguiente:

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

# apt-get update

Instale MySQL. En teoría, puedes usar otro servidor SQL, pero por simplicidad lo usaré como se recomienda para LinOTP.

(Se puede encontrar información adicional, incluida la reconfiguración de la base de datos LinOTP, en la documentación oficial de enlace. Allí también podrás encontrar el comando: dpkg-reconfigure linotp para cambiar parámetros si ya tienes instalado mysql).

# apt-get install mysql-server

# apt-get update

(no estaría de más volver a comprobar las actualizaciones)
Instale LinOTP y módulos adicionales:

# apt-get install linotp

Respondemos a las dudas del instalador:
Utilice Apache2: sí
Crea una contraseña para el administrador Linotp: “Tu contraseña”
¿Generar certificado autofirmado?: sí
¿Usar MySQL?: sí
Dónde está ubicada la base de datos: localhost
Cree una base de datos LinOTP (nombre base) en el servidor: LinOTP2
Cree un usuario separado para la base de datos: LinOTP2
Establecemos una contraseña para el usuario: “Su Contraseña”
¿Debería crear una base de datos ahora? (algo como "¿Estás seguro de que quieres..."): sí
Ingresa la contraseña root de MySQL que creaste al instalarlo: “TuContraseña”
Finalizar.

(opcional, no es necesario instalarlo)

# apt-get install linotp-adminclient-cli 

(opcional, no es necesario instalarlo)

# apt-get install libpam-linotp  

Y así nuestra interfaz web Linotp ya está disponible en:

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

Hablaré sobre la configuración en la interfaz web un poco más adelante.

¡Ahora lo más importante! Levantamos FreeRadius y lo vinculamos con Linotp.

Instale FreeRadius y el módulo para trabajar con LinOTP

# apt-get install freeradius linotp-freeradius-perl

Haga una copia de seguridad de las configuraciones de radio del cliente y de los usuarios.

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

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

Cree un archivo de cliente vacío:

# touch /etc/freeradius/clients.conf

Editando nuestro nuevo archivo de configuración (la configuración respaldada se puede usar como ejemplo)

# nano /etc/freeradius/clients.conf

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

A continuación, cree un archivo de usuarios:

# touch /etc/freeradius/users

Editamos el archivo y le indicamos a Radius que usaremos Perl para la autenticación.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

A continuación, edite el archivo /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Necesitamos especificar la ruta al script perl linotp en el parámetro del módulo:

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

.....
A continuación, creamos un archivo en el que decimos de qué (dominio, base de datos o archivo) tomar los datos.

# 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

Entraré un poco más en detalle aquí porque es importante:

Descripción completa del archivo con comentarios:
#IP del servidor linOTP (dirección IP de nuestro servidor LinOTP)
URL=https://172.17.14.103/validar/simplecheck
#Nuestra área que crearemos en la interfaz web de LinOTP.)
REINO=rearme1
#Nombre del grupo de usuarios que se crea en el bozal web LinOTP.
RESCONF=archivo_plano
#opcional: comenta si todo parece funcionar bien
Depurar=Verdadero
#opcional: use esto si tiene certificados autofirmados, de lo contrario comente (SSL si creamos nuestro propio certificado y queremos verificarlo)
SSL_CHECK=Falso

A continuación, cree el archivo /etc/freeradius/sites-available/linotp

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

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

Y copie la configuración en él (no es necesario editar nada):

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
}

A continuación crearemos un enlace SIM:

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

Personalmente, elimino los sitios Radius predeterminados, pero si los necesitas, puedes editar su configuración o desactivarlos.

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

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

# service freeradius reload

Ahora volvamos a la cara web y veámosla con un poco más de detalle:
En la esquina superior derecha, haga clic en LinOTP Config -> UserIdResolvers -> Nuevo
Elegimos lo que queremos: LDAP (AD win, LDAP samba), o SQL, o usuarios locales del sistema Flatfile.

Complete los campos requeridos.

A continuación creamos REINOS:
En la esquina superior derecha, haga clic en Configuración LinOTP -> Realms -> Nuevo.
y darle un nombre a nuestros REALMS, y también hacer clic en los UserIdResolvers creados anteriormente.

FreeRadius necesita todos estos datos en el archivo /etc/linotp2/rlm_perl.ini, como escribí anteriormente, así que si no lo editaste entonces, hazlo ahora.

El servidor está todo configurado.

Suplemento:

Configurar LinOTP en Debian 9:

Instalación:

# 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

(De forma predeterminada, en Debian 9, mysql (mariaDB) no ofrece establecer una contraseña de root; por supuesto, puede dejarla vacía, pero si lee las noticias, esto muy a menudo conduce a "fallos épicos", por lo que la configuraremos de todos modos)

# 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

Pega el código (enviado por JuriM, ¡gracias a él por eso!):

servidor linotp {
escuchar {
direcciónip = *
port = 1812
tipo = autenticación
}
escuchar {
direcciónip = *
port = 1813
tipo = cuenta
}
autorizar {
preprocesar
actualizar {
&control:Tipo de autenticación := Perl
}
}
autenticar {
Perl de tipo de autenticación {
perl
}
}
contabilidad {
UNIX
}
}

Editar /etc/freeradius/3.0/mods-enabled/perl

perlas {
nombre de archivo = /usr/share/linotp/radius_linotp.pm
func_authenticate = autenticar
func_authorize = autorizar
}

Desafortunadamente, en Debian 9 la biblioteca radio_linotp.pm no se instala desde los repositorios, por lo que la tomaremos desde 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

ahora editemos /etc/freeradius/3.0/clients.conf

servidores de cliente {
direcciónip = 192.168.188.0/24
secreto = tu contraseña
}

Ahora corrijamos nano /etc/linotp2/rlm_perl.ini

Pegamos allí el mismo código que cuando instalamos en Debian 8 (descrito anteriormente)

Eso es todo según la idea. (aún no probado)

Dejaré a continuación algunos enlaces sobre cómo configurar sistemas que con mayor frecuencia necesitan estar protegidos con autenticación de dos factores:
Configurar la autenticación de dos factores en Apache2

Configuración con Cisco ASA(Allí se utiliza un servidor de generación de token diferente, pero la configuración del ASA en sí es la misma).

VPN con autenticación de dos factores

Ajuste autenticación de dos factores en ssh (LinOTP también se usa allí) - gracias al autor. Allí también puede encontrar cosas interesantes sobre cómo configurar políticas LiOTP.

Además, los cms de muchos sitios admiten la autenticación de dos factores (para WordPress, LinOTP incluso tiene su propio módulo especial para gitHub), por ejemplo, si quieres crear una sección protegida en tu web corporativa para los empleados de la empresa.
¡DATO IMPORTANTE! ¡NO marque la casilla "Autenficador de Google" para utilizar Google Authenticator! El código QR no es legible entonces... (hecho extraño)

Para redactar este artículo se utilizó información de los siguientes artículos:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Gracias a los autores.

Fuente: habr.com

Añadir un comentario