ProHoster > Blog > administración > Configuración de autenticación en la red L2TP usando Rutoken EDS 2.0 y Rutoken PKI
Configuración de autenticación en la red L2TP usando Rutoken EDS 2.0 y Rutoken PKI
Problemas
Recientemente, muchos no sabían lo que era trabajar desde casa. La pandemia ha cambiado drásticamente la situación en el mundo, todos han comenzado a adaptarse a las circunstancias actuales, es decir, al hecho de que salir de casa se ha vuelto simplemente inseguro. Y muchos tuvieron que organizar rápidamente el trabajo desde casa para sus empleados.
Sin embargo, la falta de un enfoque competente a la hora de elegir soluciones para el trabajo a distancia puede provocar pérdidas irreversibles. Las contraseñas de los usuarios pueden ser robadas, lo que permitirá que un atacante se conecte sin control a la red y a los recursos de TI de la empresa.
Es por eso que ahora ha aumentado la necesidad de crear redes VPN corporativas confiables. te contaré sobre confiable, seguro и simple en el uso de una red VPN.
Funciona según el esquema IPsec/L2TP, que utiliza claves no recuperables y certificados almacenados en tokens para autenticar a los clientes y también transmite datos a través de la red en forma cifrada.
Como soporte de demostración para la configuración se utilizó un servidor con CentOS 7 (dirección: centos.vpn.server.ad) y un cliente con Ubuntu 20.04, así como un cliente con Windows 10.
Descripción del sistema
La VPN funcionará según el esquema IPSec + L2TP + PPP. Protocolo Protocolo punto a punto (PPP) opera en la capa de enlace de datos del modelo OSI y proporciona autenticación de usuario y cifrado de los datos transmitidos. Sus datos están encapsulados en los datos del protocolo L2TP, que en realidad garantiza la creación de una conexión en la red VPN, pero no proporciona autenticación ni cifrado.
Los datos L2TP están encapsulados en IPSec, que también proporciona autenticación y cifrado, pero a diferencia de PPP, la autenticación y el cifrado se producen a nivel de dispositivo, no a nivel de usuario.
Esta función le permite autenticar usuarios solo desde ciertos dispositivos. Usaremos el protocolo IPSec tal como está y permitiremos la autenticación de usuarios desde cualquier dispositivo.
La autenticación de usuarios mediante tarjetas inteligentes se realizará a nivel de protocolo PPP utilizando el protocolo EAP-TLS.
Puede encontrar información más detallada sobre el funcionamiento de este circuito en este artículo.
¿Por qué este esquema cumple con los tres requisitos de una buena red VPN?
La fiabilidad de este esquema ha sido probada por el tiempo. Se ha utilizado para implementar redes VPN desde el año 2000.
La autenticación segura del usuario la proporciona el protocolo PPP. Implementación estándar del protocolo PPP desarrollado por Paul Mackerras no proporciona un nivel suficiente de seguridad, porque Para la autenticación, en el mejor de los casos, se utiliza la autenticación mediante un nombre de usuario y una contraseña. Todos sabemos que una contraseña de inicio de sesión puede ser espiada, adivinada o robada. Sin embargo, desde hace mucho tiempo el desarrollador Jan Just Keijser в su implementación Este protocolo corrigió este problema y agregó la capacidad de utilizar protocolos basados en cifrado asimétrico, como EAP-TLS, para la autenticación. Además, añadió la posibilidad de utilizar tarjetas inteligentes para la autenticación, lo que hizo que el sistema fuera más seguro.
Actualmente, se están llevando a cabo negociaciones activas para fusionar estos dos proyectos y puede estar seguro de que tarde o temprano esto sucederá de todos modos. Por ejemplo, una versión parcheada de PPP ha estado en los repositorios de Fedora durante mucho tiempo y utiliza protocolos seguros para la autenticación.
Hasta hace poco, esta red sólo podía ser utilizada por usuarios de Windows, pero nuestros colegas de la Universidad Estatal de Moscú Vasily Shokov y Alexander Smirnov descubrieron antiguo proyecto de cliente L2TP para Linux y lo modificó. Juntos, solucionamos muchos errores y deficiencias en el trabajo del cliente, simplificamos la instalación y configuración del sistema, incluso cuando lo construimos desde el código fuente. Los más significativos de ellos son:
Se corrigieron problemas de compatibilidad del cliente antiguo con la interfaz de las nuevas versiones de openssl y qt.
Se eliminó pppd para que no pasara el PIN del token a través de un archivo temporal.
Se corrigió el inicio incorrecto del programa de solicitud de contraseña a través de la interfaz gráfica. Esto se hizo instalando el entorno correcto para el servicio xl2tpd.
La compilación del demonio L2tpIpsecVpn ahora se lleva a cabo junto con la compilación del propio cliente, lo que simplifica el proceso de compilación y configuración.
Para facilitar el desarrollo, el sistema Azure Pipelines está conectado para probar la corrección de la compilación.
Se agregó la capacidad de forzar la degradación. nivel de seguridad en el contexto de openssl. Esto es útil para soportar correctamente nuevos sistemas operativos donde el nivel de seguridad estándar está establecido en 2, con redes VPN que utilizan certificados que no cumplen con los requisitos de seguridad de este nivel. Esta opción será útil para trabajar con redes VPN antiguas existentes.
Este cliente admite el uso de tarjetas inteligentes para la autenticación y también oculta en la medida de lo posible todas las dificultades y dificultades de configurar este esquema en Linux, lo que hace que la configuración del cliente sea lo más simple y rápida posible.
Por supuesto, para una conexión conveniente entre PPP y la GUI del cliente, no fue posible sin ediciones adicionales en cada uno de los proyectos, pero aún así se minimizaron y redujeron al mínimo:
Reparado error en el orden de carga de la configuración e inicialización del contexto openssl. Este error no nos permitía cargar nada del archivo de configuración local /etc/ppp/openssl.cnf excepto información sobre los motores openssl para trabajar con tarjetas inteligentes, lo cual era un serio inconveniente si, por ejemplo, además de la información sobre los motores, queríamos establecer algo más. Por ejemplo, corrija el nivel de seguridad al establecer una conexión.
Ahora puedes empezar a configurar.
Ajuste del servidor
Instalemos todos los paquetes necesarios.
Instalación de strongswan (IPsec)
Primero que nada, configuremos el firewall para que funcione con ipsec.
Después de la instalación, debe configurar strongswan (una de las implementaciones de IPSec). Para hacer esto, edite el archivo. /etc/strongswan/ipsec.conf :
También estableceremos una contraseña de inicio de sesión común. La contraseña compartida debe ser conocida por todos los participantes de la red para la autenticación. Evidentemente este método no es fiable porque esta contraseña puede llegar a ser fácilmente conocida por personas a las que no queremos proporcionar acceso a la red.
Sin embargo, incluso este hecho no afectará la seguridad de la red, porque El cifrado de datos básico y la autenticación del usuario se realiza mediante el protocolo PPP. Pero para ser justos, vale la pena señalar que strongswan admite tecnologías de autenticación más seguras, por ejemplo, el uso de claves privadas. Strongswan también tiene la capacidad de proporcionar autenticación mediante tarjetas inteligentes, pero hasta ahora solo se admite una gama limitada de dispositivos y, por lo tanto, la autenticación mediante tokens Rutoken y tarjetas inteligentes sigue siendo difícil. Establezcamos una contraseña general a través de un archivo. /etc/strongswan/ipsec.secrets:
[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes
[lns default]
exclusive = no
; определяет статический адрес сервера в виртуальной сети
local ip = 100.10.10.1
; задает диапазон виртуальных адресов
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; данную опцию можно отключить после успешной настройки сети
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; указывает адрес сервера в сети
name = centos.vpn.server.ad
Emitimos el certificado raíz y el certificado del servidor:
#директория с сертификатами пользователей, УЦ и сервера
sudo mkdir /etc/ppp/certs
#директория с закрытыми ключами сервера и УЦ
sudo mkdir /etc/ppp/keys
#запрещаем любой доступ к этой дирректории кроме администатора
sudo chmod 0600 /etc/ppp/keys/
#генерируем ключ и выписываем сертификат УЦ
sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"
#генерируем ключ и выписываем сертификат сервера
sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial
Por lo tanto, hemos terminado con la configuración básica del servidor. El resto de la configuración del servidor implica agregar nuevos clientes.
Agregar un nuevo cliente
Para agregar un nuevo cliente a la red, debe agregar su certificado a la lista de confiables para este cliente.
Si un usuario quiere convertirse en miembro de una red VPN, crea un par de claves y una solicitud de certificado para este cliente. Si el usuario es de confianza, entonces se puede firmar esta aplicación y el certificado resultante se puede escribir en el directorio de certificados:
NOTA
Para evitar confusiones, es mejor que: el nombre común, el nombre del archivo del certificado y el nombre de usuario sean únicos.
También vale la pena comprobar que el nombre del usuario que estamos agregando no aparece en ningún otro archivo de autenticación, de lo contrario habrá problemas con la forma en que se autentica el usuario.
El mismo certificado debe devolverse al usuario.
Generando un par de claves y un certificado
Para una autenticación exitosa, el cliente debe:
generar un par de claves;
tener un certificado raíz de CA;
tener un certificado para su par de claves firmado por la CA raíz.
para cliente en Linux
Primero, generemos un par de claves en el token y creemos una aplicación para el certificado:
Envíe la aplicación client.req que aparece a la CA. Una vez que reciba un certificado para su par de claves, escríbalo en un token con la misma identificación que la clave:
para clientes Windows y Linux (método más universal)
Este método es más universal porque le permite generar una clave y un certificado que los usuarios de Windows y Linux reconocerán con éxito, pero requiere una máquina con Windows para llevar a cabo el procedimiento de generación de claves.
Antes de generar solicitudes e importar certificados, debe agregar el certificado raíz de la red VPN a la lista de los confiables. Para ello ábrelo y en la ventana que se abre selecciona la opción “Instalar certificado”:
En la ventana que se abre, seleccione instalar un certificado para el usuario local:
Instalemos el certificado en el almacén de certificados raíz confiable de la CA:
Después de todas estas acciones, estamos de acuerdo con todos los demás puntos. El sistema ahora está configurado.
Creemos un archivo cert.tmp con el siguiente contenido:
Después de esto, generaremos un par de claves y crearemos una solicitud para el certificado. Para hacer esto, abra powershell e ingrese el siguiente comando:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Envíe la aplicación client.req creada a su CA y espere a que se reciba el certificado client.pem. Puede escribirse en un token y agregarse al almacén de certificados de Windows mediante el siguiente comando:
certreq.exe -accept .client.pem
Vale la pena señalar que se pueden reproducir acciones similares utilizando la interfaz gráfica del programa mmc, pero este método requiere más tiempo y es menos programable.
Configurando el cliente Ubuntu
NOTA
Actualmente, configurar un cliente en Linux lleva bastante tiempo, porque... Requiere construir programas separados desde la fuente. Intentaremos asegurarnos de que todos los cambios se incluyan en los repositorios oficiales en un futuro próximo.
Para garantizar la conexión a nivel IPSec con el servidor, se utilizan el paquete strongswan y el demonio xl2tp. Para simplificar la conexión a la red mediante tarjetas inteligentes, utilizaremos el paquete l2tp-ipsec-vpn, que proporciona un shell gráfico para una configuración de conexión simplificada.
Empecemos a montar los elementos paso a paso, pero antes instalaremos todos los paquetes necesarios para que la VPN funcione directamente:
sudo apt-get install xl2tpd strongswan libp11-3
Instalación de software para trabajar con tokens
Instale la última biblioteca librtpkcs11ecp.so desde сайта, también bibliotecas para trabajar con tarjetas inteligentes:
sudo apt-get -y install git make gcc libssl-dev
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install
Instalación del cliente L2tpIpsecVpn
Por el momento, el cliente también debe compilarse a partir del código fuente. Esto se hace usando la siguiente secuencia de comandos:
sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
cd l2tp-ipsec-vpn
make -j4
sudo make install
Configurando el cliente L2tpIpsecVpn
Inicie el cliente instalado:
Después del lanzamiento, debería abrirse el subprograma L2tpIpsecVPN. Haga clic derecho sobre él y configure la conexión:
Para trabajar con tokens, en primer lugar indicamos la ruta al motor opensc del motor OpenSSL y a la biblioteca PKCS#11. Para hacer esto, abra la pestaña "Preferencias" para configurar los parámetros de openssl:
.
Cerremos la ventana de configuración de OpenSSL y pasemos a configurar la red. Agreguemos una nueva red haciendo clic en el botón Agregar... en el panel de configuración e ingresemos el nombre de la red:
Después de esto, esta red estará disponible en el panel de configuración. Haga doble clic derecho en la nueva red para configurarla. En la primera pestaña debe realizar la configuración de IPsec. Configuremos la dirección del servidor y la clave pública:
Después de esto, vamos a la pestaña de configuración de PPP e indicamos allí el nombre de usuario con el que queremos acceder a la red:
Después de esto, abra la pestaña Propiedades y especifique la ruta a la clave, el certificado del cliente y la CA:
Cerremos esta pestaña y realicemos la configuración final; para hacer esto, abra la pestaña "Configuración de IP" y marque la casilla junto a la opción "Obtener la dirección del servidor DNS automáticamente":
Esta opción permitirá al cliente recibir una dirección IP personal dentro de la red desde el servidor.
Después de todas las configuraciones, cierre todas las pestañas y reinicie el cliente:
Conectándose a la red
Después de la configuración, puede conectarse a la red. Para ello abrimos la pestaña del subprograma y seleccionamos la red a la que queremos conectarnos:
Durante el proceso de establecimiento de conexión, el cliente nos solicitará que introduzcamos el código PIN de Rutoken:
Si aparece una notificación en la barra de estado de que la conexión se ha establecido exitosamente, significa que la configuración fue exitosa:
De lo contrario, vale la pena averiguar por qué no se estableció la conexión. Para hacer esto, debe mirar el registro del programa seleccionando el comando "Información de conexión" en el subprograma:
Configurar el cliente de Windows
Configurar un cliente en Windows es mucho más fácil que en Linux, porque... Todo el software necesario ya está integrado en el sistema.
Configuración del sistema
Instalaremos todos los controladores necesarios para trabajar con Rutokens descargándolos desde de. sitio.
Importación de un certificado raíz para autenticación
Descargue el certificado raíz del servidor e instálelo en el sistema. Para ello ábrelo y en la ventana que se abre selecciona la opción “Instalar certificado”:
En la ventana que se abre, seleccione instalar un certificado para el usuario local. Si desea que el certificado esté disponible para todos los usuarios de la computadora, debe optar por instalar el certificado en la computadora local:
Instalemos el certificado en el almacén de certificados raíz confiable de la CA:
Después de todas estas acciones, estamos de acuerdo con todos los demás puntos. El sistema ahora está configurado.
Configurar una conexión VPN
Para configurar una conexión VPN, vaya al panel de control y seleccione la opción para crear una nueva conexión.
En la ventana emergente, seleccione la opción para crear una conexión para conectarse a su lugar de trabajo:
En la siguiente ventana, seleccione una conexión VPN:
e ingrese los detalles de la conexión VPN, y también especifique la opción de usar una tarjeta inteligente:
La configuración aún no está completa. Sólo queda especificar la clave compartida para el protocolo IPsec, para ello vaya a la pestaña “Configuración de conexión de red” y luego vaya a la pestaña “Propiedades para esta conexión”:
En la ventana que se abre, vaya a la pestaña "Seguridad", especifique "Red L2TP/IPsec" como tipo de red y seleccione "Configuración avanzada":
En la ventana que se abre, especifique la clave IPsec compartida:
Подключение
Después de completar la configuración, puede intentar conectarse a la red:
Durante el proceso de conexión, se nos pedirá que introduzcamos el código PIN del token:
Hemos configurado una red VPN segura y nos hemos asegurado de que no sea difícil.
Agradecimientos
Me gustaría agradecer una vez más a nuestros colegas Vasily Shokov y Alexander Smirnov por el trabajo que han realizado juntos para simplificar la creación de conexiones VPN para clientes Linux.