
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 .
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.listAñadimos las claves:
# gpg --search-keys 913DFF12F86258E5A 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 updateInstalamos 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 . 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-perlhacemos 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.oldCreamos un archivo vacío para el cliente:
# touch /etc/freeradius/clients.confEditamos nuestro nuevo archivo de configuración (el archivo de backup se puede usar como ejemplo)
# nano /etc/freeradius/clients.confclient 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/usersEditamos el archivo, indicando al radio que usaremos perl para la autenticación.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlA continuación, editamos el archivo /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlNecesitamos 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.iniURL=https://IP_de_su_servidor_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseAquí 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/linotpY 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-enabledPersonalmente, 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 -puse 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/linotpInsertamos 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.pmahora 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
(ahí se utiliza otro servidor de generación de tokens, pero la configuración de la ASA es la misma).
Configuración (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 ), 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:
Gracias a los autores.
Fuente: habr.com
