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 la red corporativa, sitios, servicios y SSH. En el servidor funcionará la combinación: LinOTP + FreeRadius.

¿Por qué lo necesitamos?
Es una solución completamente gratuita y conveniente, dentro de su propia red, sin depender de proveedores externos.

Este servicio es bastante conveniente, es bastante claro, a diferencia de otros productos de código abierto, y también soporta una gran cantidad de funciones y políticas (por ejemplo, login + 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 Authenticator y mucho más. Creo que es más cómodo que el servicio considerado en el artículo.

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

Requisitos:

1 ) Debian 8 (jessie) — ¡Obligatorio! (la instalación de prueba en Debian 9 se describe al final del artículo)

Inicio:

Instalamos Debian 8.

Añadimos el repositorio de LinOTP:

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

Añadimos las claves:

# gpg --search-keys 913DFF12F86258E5

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

gpg: directorio creado `/root/.gnupg'
gpg: nuevo archivo de configuración creado `/root/.gnupg/gpg.conf'
gpg: ATENCIÓN: los parámetros en `/root/.gnupg/gpg.conf' aún no están activos en esta ejecución
gpg: tabla de claves creada `/root/.gnupg/secring.gpg'
gpg: tabla de claves creada `/root/.gnupg/pubring.gpg'
gpg: no se han definidos servidores de claves (utilice --keyserver)
gpg: error al buscar en el servidor de claves: URI no válido

Esta es la configuración inicial de gnupg. No es grave. Simplemente ejecute el comando nuevamente.
Ante la pregunta de Debian:

gpg: buscando "913DFF12F86258E5" en el servidor hkp keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  clave RSA de 2048 bits F86258E5, creada: 2010-05-10
Claves 1-1 de 1 para "913DFF12F86258E5". Ingrese números, N) Siguiente o Q) Salir>

Respondemos: 1

Siguiente:

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

# apt-get update

Instalamos MySQL. En teoría, se puede usar otro servidor SQL, pero yo utilizaré este por simplicidad, como es recomendado para LinOTP.

(información adicional, incluida sobre la reconfiguración de la base de datos LinOTP, se puede encontrar en la documentación oficial en el enlace. Allí también se puede encontrar el comando: dpkg-reconfigure linotp para cambiar los parámetros si ya instaló MySQL).

# apt-get install mysql-server

# apt-get update

(verificar las actualizaciones nuevamente no hará daño)
Instalamos LinOTP y complementos:

# apt-get install linotp

Respondemos a las preguntas del instalador:
¿Usar Apache2?: sí
Crea una contraseña para admin Linotp: «SuContraseña»
¿Generar un certificado autofirmado?: sí
¿Usar MySQL?: sí
¿Dónde se encuentra la base de datos?: localhost
Creando la base LinOTP (nombre de la base) en el servidor: LinOTP2
Creando un usuario separado para la base de datos: LinOTP2
Asignar la contraseña al usuario: «SuContraseña»
¿Crear la base ahora? (algo como “¿Está seguro de que quiere …?”): sí
Introducimos la contraseña root de MySQL que creamos durante la instalación: «SuContraseña»
Listo.

(opcional, no es necesario instalar)

# apt-get install linotp-adminclient-cli 

(opcional, no es necesario instalar)

# apt-get install libpam-linotp  

Y así, nuestra interfaz web de Linotp ahora está disponible en la dirección:

"<b>https<\/b>: \/\/IP_servidor\/manage"

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

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

Instalamos FreeRadius y el módulo de trabajo con LinOTP

# apt-get install freeradius linotp-freeradius-perl

hacemos un backup de las configuraciones de client y Users del radio.

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

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

Creamos un archivo vacío para el cliente:

# touch /etc/freeradius/clients.conf

Editamos nuestro nuevo archivo de configuración (el archivo de backup se puede usar como ejemplo)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # contraseña para la conexión de los clientes
}

A continuación, creamos el archivo users:

# touch /etc/freeradius/users

Editamos el archivo, indicando al radio que usaremos perl para la autenticación.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

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

# nano /etc/freeradius/modules/perl

Necesitamos especificar la ruta al script perl linotp en el parámetro module:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
A continuación, creamos un archivo en el que indicamos de dónde obtener los datos (de dominio, base o archivo).

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

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

Aquí me detendré un poco más, ya que esto es importante:

Descripción completa del archivo con comentarios:
#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

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

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

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

Y copiaremos la configuración en él (no hay necesidad de modificar nada):

authorize {
#normaliza solicitudes de cliente mal formadas antes de ser entregadas a otros módulos (ver '/etc/freeradius/modules/preprocess')
preprocess
#  Si está utilizando múltiples tipos de realms, probablemente
#  desee configurar "ignore_null = yes" para todos ellos.
#  De lo contrario, cuando el primer estilo de realm no coincida,
#  no se comprobarán los otros estilos.
# permite una lista de realms (ver '/etc/freeradius/modules/realm')
IPASS
# entiende algo como USER@REALM y puede diferenciar los componentes (ver '/etc/freeradius/modules/realm')
suffix
# entiende USERREALM y puede diferenciar los componentes (ver '/etc/freeradius/modules/realm')
ntdomain
#  Lea el archivo 'users' para aprender sobre configuraciones especiales que deben aplicarse para
# ciertos usuarios (ver '/etc/freeradius/modules/files')
files
# permite que la autenticación expire (ver '/etc/freeradius/modules/expiration')
expiration
# permite definir tiempos de servicio válidos (ver '/etc/freeradius/modules/logintime')
logintime
# No tenemos radius_shortname_map!
pap
}
#aquí se llama al módulo perl de linotp para un procesamiento posterior
authenticate {
perl
}

A continuación, haremos un enlace simbólico:

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

Personalmente, elimino los sitios predeterminados de Radius, 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 interfaz web y la examinaremos con un poco más de detalle:
En la esquina superior derecha, hacemos clic en LinOTP Config -> UserIdResolvers -> Nuevo
Elegimos lo que queremos: LDAP (AD win, LDAP samba), o SQL, o usuarios locales del sistema Flatfile.

Llenamos los campos requeridos.

A continuación, creamos REALMS:
En la esquina superior derecha, hacemos clic en LinOTP Config -> Realms -> Nuevo.
y le damos un nombre a nuestro REALMS, así como hacemos clic en el UserIdResolvers que creamos anteriormente.

Todos estos datos son necesarios para freeRadius en el archivo /etc/linotp2/rlm_perl.ini, como mencioné anteriormente, así que si no lo editaste en ese momento, hazlo ahora.

Todo el servidor está configurado.

Adición:

Configuración de 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

(por defecto, en Debian 9 mysql (mariaDB) no ofrece establecer la contraseña de root, por supuesto, puedes dejarlo vacío, pero si lees las noticias, esto a menudo lleva a "epic fails", así que lo configuraremos)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('tu_contraseña_aquí') 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

Insertamos el código (enviado por JuriM, ¡gracias!):

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 {
unix
}
}

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

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

Lamentablemente, en debian 9 la biblioteca radius_linotp.pm no se instala desde los repositorios, así que la obtendremos de 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 modificamos /etc/freeradius/3.0/clients.conf

client servers {
ipaddr = 192.168.188.0/24
secret = tu_contraseña
}

ahora modificamos nano /etc/linotp2/rlm_perl.ini

Insertamos allí el mismo código que durante la instalación en debian 8 (descrito arriba)

en teoría, eso es todo. (aún no probado)

Dejaré abajo algunos enlaces para configurar sistemas que a menudo requieren protección con autenticación de dos factores:
Configuración de autenticación de dos factores en Apache2

Configuración con Cisco ASA(ahí se utiliza otro servidor de generación de tokens, pero la configuración de la ASA es la misma).

VPN con autenticación de dos factores

Configuración de autenticación de dos factores en ssh (ahí también se utiliza LinOTP) — gracias al autor. Allí también puedes encontrar cosas interesantes sobre la configuración de políticas de LiOTP.

Además, los CMS de muchos sitios admiten la autenticación de dos factores (para WordPress, LinOTP incluso tiene su propio módulo en github), por ejemplo, si desea crear una sección segura para empleados en su sitio web corporativo.
¡HECHO IMPORTANTE! ¡NO marque la casilla «Google autenteficator» para usar el autenticador de Google! El código QR no se lee entonces… (un hecho extraño)

Para redactar el 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

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster