Cómo usar Google Authenticator con el servidor OpenVPN en Ubuntu 12.04

9

Tengo un sistema OpenVPN que funciona en Ubuntu 12.04 y me gustaría agregar Google Authenticator para mayor seguridad.

Esta es mi configuración actual de openvpn:

Dev Tun
proto udp
puerto 1096
ca ubuserv04-ca.crt
cert ubuserv04.crt
clave ubuserv04.key
dh dh1024.pem
servidor 10.10.0.0 255.255.255.0
presione "redirect-gateway def1"
empujar "ruta 192.168.0.0 255.255.255.0"
presione "dhcp-option DNS 8.8.8.8"
presione "dhcp-option DNS 8.8.4.4"
flotador
log-append /var/log/openvpn-otp-1096-status.log

(Esto es solo una configuración de prueba, sé que debería cambiar ciertos aspectos, pero esto funciona por ahora).

En el cliente tengo:

Dev Tun
cliente
proto udp
remoto my.server.fqdn 1096
resolv-retry infinite
ca ubuserv04-ca.crt
cert user1.crt
clave usuario1.clave
verbo 3

La configuración anterior funciona bien: sin errores, rápida, estable.

He intentado varios procedimientos para ejecutar Google Authenticator, pero siempre termino solucionando problemas secundarios en esos artículos. No quiero autenticarme en la base de datos de usuario / contraseña local del servidor, solo el sistema que ya tengo instalado más Google Authenticator.

Tengo Google Authenticator ejecutándose; Lo instalé usando apt-get install libpam-google-authenticator y lo he usado antes para autenticar sesiones ssh. Eso funcionó bien, pero ahora lo he deshabilitado porque es solo un servidor de prueba y esa prueba en particular se terminó.

Por favor sea especifico. Sé que debo agregar un complemento a la configuración ovpn de mi servidor y que debo agregar algo a /etc/pam.d/openvpn, pero ¿qué es exactamente?

Cualquier ayuda sería muy apreciada!

/Información extra

He seguido este artículo: http://www.howtoforge.com/securing-openvpn-with-a-one-time-password-otp-on-ubuntu En lugar de compilar desde la fuente, he instalado Google Authenticator con apt -Instale libpam-google-authenticator. También he leído, pero no utilizado en este caso, estos artículos: http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ y http : //zcentric.com/2012/10/09/google-authenticator-with-openvpn-for-2-factor-auth/ . Y he leído sobre PAM, como se sugiere;)

Ahora, aquí hay algunos desarrollos interesantes.

/etc/pam.d/openvpn tiene esto:

cuenta [éxito = 2 new_authtok_reqd = hecho predeterminado = ignorar] pam_unix.so 
cuenta [éxito = 1 new_authtok_reqd = hecho predeterminado = ignorar] pam_winbind.so 
cuenta requerida pam_deny.so
cuenta requerida pam_permit.so
se requiere autenticación pam_google_authenticator.so

Según el tutorial, copié el original de /etc/pam.d/common-account y agregué la última línea. Ahora, si comento la última línea, la conexión OpenVPN tiene éxito. Sin embargo, si la última línea no está comentada, /var/log/auth.log registra esto:

PAM no se puede abrir (pam_google_authenticator.so): /lib/security/pam_google_authenticator.so: símbolo indefinido: pam_get_item
PAM que agrega un módulo defectuoso: pam_google_authenticator.so

y /var/log/openvpn-otp-1096.log registra esto:

PLUGIN_CALL: la función del complemento PLUGIN_AUTH_USER_PASS_VERIFY falló con el estado 1: /usr/lib/openvpn/openvpn-auth-pam.so
Error de autenticación TLS: error de autenticación de nombre de usuario / contraseña para el igual
Uso de contexto SSL / TLS
AUTH-PAM: ANTECEDENTES: el usuario 'martin' no pudo autenticarse: el módulo es desconocido

El problema parece estar entre PAM y Google Authenticator.

Google enumera problemas con otros complementos, pero realmente no puedo encontrar información sobre Google Authenticator específicamente.

Horquilla
fuente
"He intentado varios procedimientos para que Google Authenticator se ejecute" ¿Podrías vincularlos a algunos de ellos? Es bastante vago lo que has probado exactamente y sería triste si otros usuarios presentan enfoques que ya has probado. Por cierto, libpam-google-authenticatores para autenticar usando Google Authenticator en PAM. Esto no sirve de nada en OpenVPN ya que está utilizando certificados allí. Le sugiero que lea sobre qué es PAM: comprenderá que no tiene nada que ver con OpenVPN en su caso.
gertvdijk
@ "Esto no sirve de nada en OpenVPN ya que está usando certificados allí". Está bien. Puede usar certificados y una contraseña única de Google Authenticator a través de PAM como el segundo factor para la autenticación en OpenVPN.
Maldita Terminal
Agregar información adicional a la pregunta original. No estoy seguro si estoy haciendo esto bien ...
Forkbeard
@gertvdijk: entiendo que es redundante, pero me gustaría usar ambos certificados y una contraseña de un solo uso. Me parece más seguro que usar cualquiera de los dos métodos individualmente.
Forkbeard
Hm, parece ser un error en Google Authenticator. Construirlo con LDFLAGS = "- lpam" debería ayudar, pero no estoy seguro de cómo hacerlo, el ejemplo en Howtoforge (enlace en la pregunta original) no funciona, la url devuelve un 404.
Forkbeard

Respuestas:

2

Ok, Google es mi amigo.

Hice esto:

# apt-get purge libpam-google-authenticator
# descargar https://code.google.com/p/google-authenticator/downloads/list
# apt-get install libpam-dev

Agregue esto a Makefile, justo después de la licencia:

LDFLAGS = "- lpam"

Entonces

# hacer
# make install
# service openvpn restart

Además, asegúrese de que /home/username/.google_authenticator no tenga ningún derecho, excepto derechos de lectura para el usuario que lo va a usar.

Ahora necesito ingresar mi nombre de usuario que es mi nombre de usuario local en el servidor (mi cuenta shell) como mi nombre de usuario OpenVPN y el código de 6 dígitos de Google Authenticator como contraseña.

Ahora funciona.

Gracias por su tiempo a todos :)

(¿Cómo puedo marcar esta publicación como resuelta? ¿Acabo de editar el título del tema?)

Horquilla
fuente
2

Si solo desea autenticación OTP para OpenVPN, hay un complemento OTP OpenVPN nativo disponible. Es compatible con las claves secretas de Google Authenticator. Todos los secretos se almacenan en un solo archivo de texto y no hay necesidad de configurar PAM o crear directorios de usuarios.

Compruébalo: https://github.com/evgeny-gridasov/openvpn-otp

egridasov
fuente
Gracias por su respuesta, egridasov. Como tengo una configuración que funciona ahora, no lo voy a probar, pero podría probarlo en otro sistema. El reneg-sec 0 bit que encuentro particularmente útil, me había estado rompiendo la cabeza sobre cómo hacer que la conexión no se cayera después de 3600 segundos
Forkbeard