Según esta publicación , common_name
no puede ser falsificado por el usuario.
Agregue esto a openvpn server.conf
script-security 2
# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env
/etc/openvpn/scripts/check_cn_on_connect.sh
contiene
#!/bin/bash
# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
echo "$(date +%Y%m%d-%H%M%S) DENIED username=$username cert=$common_name" >> /var/log/openvpn-access.log
exit 1
fi
echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log
exit 0
Actualizar
Esto es para OpenVPN 2.1.4. En 2.2.0 han agregado muchas variables nuevas que puede ver env >> /tmp/env
, donde una de estas nuevas variables es la huella digital / número de serie de los certificados.
auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-env
para obtener el nombre de usuario del usuario. ¿Sabes si también puedo obtener la identificación del certificado que está usando el usuario? Si es así, entonces puedo escribir un script de Perl que verifique un archivo yaml con identificaciones cert certificadas.No soy un profesional de seguridad, soy estricto con la seguridad. Su pregunta llega precisamente al núcleo de la seguridad de TI: la confianza. Como lo veo, uno nunca debe suponer que se puede confiar en Bob. Claro, Bob podría ser un tipo realmente agradable y confiable. Ha trabajado en su empresa durante más de 20 años. Sin embargo, la persona "Bob" es completamente irrelevante en su infraestructura de TI.
Bob usa 'relevos' arbitrarios que permiten el acceso. Los relés pueden ser cualquier cosa: una contraseña, certificado, token de hardware, escaneo de iris, ADN. Son claves que permiten el acceso a su sistema. Si su pregunta es sobre verificar la identidad de la persona que está usando una clave, la única respuesta honesta probablemente sea que tendrá que estar en la misma habitación. En todos los demás casos, creo que no debes asegurarte de que Bob realmente es Bob y que actualmente no está retenido a punta de pistola mientras obtienes su acceso. Entonces, en su plan de diseño de infraestructura de TI, lo lógico es no referirse a "Bob": una entidad obtuvo acceso a su sitio.
Debido a que solo puede saber realmente que 'una entidad' obtuvo acceso con una llave que le pasó en el pasado, la perspectiva adecuada probablemente sea limitar el número de puertas que la llave puede abrir. Cuantas más llaves pases, menos puertas abrirán.
OpenVPN también tiene una opción para permitir solo una conexión concurrente por clave. Entonces, si Alice inicia sesión con la clave de Bob mientras Bob ya está adentro, a Alice se le niega el acceso. Desafortunadamente, esto también significa que Bob no puede iniciar sesión cuando Alice inicia sesión con la clave de Bob. Por lo tanto, debe configurar su sistema para informarle de intentos de inicio de sesión simultáneos desde múltiples IP de origen. Y comience ambos cuando ocurra alguna violación, por lo que Bob tendrá que marcar para pedir ayuda.
El punto es: no te asegures de cosas de las que no puedes estar seguro y tenlo en cuenta al diseñar tu plan de seguridad. Suponga que siempre hay una persona más inteligente, muy por delante de usted, que no puede esperar para demostrar que está equivocado ... solo 'por el lulz'. :-)
fuente