Eu tenho um sistema OpenVPN funcional no Ubuntu 12.04 e gostaria de adicionar o Google Authenticator para segurança extra.
Esta é a minha configuração atual do openvpn:
dev tun
proto udp
port 1096
ca ubuserv04-ca.crt
cert ubuserv04.crt
key ubuserv04.key
dh dh1024.pem
server 10.10.0.0 255.255.255.0
push "redirect-gateway def1"
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
float
log-append /var/log/openvpn-otp-1096-status.log
(Esta é apenas uma configuração de teste, eu sei que devo mudar alguns aspectos, mas isso funciona por enquanto.)
No cliente, tenho:
dev tun
client
proto udp
remote my.server.fqdn 1096
resolv-retry infinite
ca ubuserv04-ca.crt
cert user1.crt
key user1.key
verb 3
A configuração acima funciona bem: sem erros, rápido, estável.
Já experimentei vários howtos para ativar o Google Authenticator, mas acabo sempre solucionando problemas secundários nesses artigos. Não quero autenticar o banco de dados de usuário / senha local do servidor, apenas o sistema que já possuo e o Google Authenticator.
Eu tenho o Google Authenticator em execução; Eu instalei-o usando o apt-get install libpam-google-authenticator e usei-o antes para autenticar sessões ssh. Isso funcionou bem, mas eu já desabilitei isso porque é apenas um servidor de teste e esse teste em particular foi concluído.
Por favor, seja específico. Eu sei que devo adicionar um plugin à configuração do ovpn do meu servidor e que devo adicionar algo ao /etc/pam.d/openvpn mas o que exatamente?
Qualquer ajuda seria muito apreciada!
/ informação extra
Eu segui este artigo: link
Em vez de compilar a partir da fonte, instalei o Google Authenticator com o apt-get install libpam-google-authenticator.
Eu também li, mas não usei neste caso, estes artigos: link e link . E eu li sobre o PAM, como sugerido;)
Agora, aqui estão alguns desenvolvimentos interessantes.
/etc/pam.d/openvpn tem isso:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so
account requisite pam_deny.so
account required pam_permit.so
auth required pam_google_authenticator.so
De acordo com o howto, copiei o original de /etc/pam.d/common-account e adicionei a última linha.
Agora, se eu comentar a última linha, a conexão OpenVPN será bem-sucedida. Se a última linha não estiver comentado, o /var/log/auth.log registra isso:
PAM unable to dlopen(pam_google_authenticator.so): /lib/security/pam_google_authenticator.so: undefined symbol: pam_get_item
PAM adding faulty module: pam_google_authenticator.so
e /var/log/openvpn-otp-1096.log registram isso:
PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib/openvpn/openvpn-auth-pam.so
TLS Auth Error: Auth Username/Password verification failed for peer
e-using SSL/TLS context
AUTH-PAM: BACKGROUND: user 'martin' failed to authenticate: Module is unknown
O problema parece estar entre o PAM e o Google Authenticator.
O Google lista problemas com outros plug-ins, mas não consigo encontrar informações sobre o Google Authenticator especificamente.