Como usar o Google Authenticator com o servidor OpenVPN no Ubuntu 12.04

9

Eu tenho um sistema OpenVPN em funcionamento no Ubuntu 12.04 e gostaria de adicionar o Google Authenticator para segurança extra.

Esta é minha configuração atual do openvpn:

dev tun
proto udp
porta 1096
ca ubuserv04-ca.crt
cert ubuserv04.crt
chave ubuserv04.key
dh dh1024.pem
servidor 10.10.0.0 255.255.255.0
pressione "redirecionar-gateway def1"
pressione "rota 192.168.0.0 255.255.255.0"
pressione "dhcp-option DNS 8.8.8.8"
pressione "dhcp-option DNS 8.8.4.4"
flutuador
log-append /var/log/openvpn-otp-1096-status.log

(Esta é apenas uma configuração de teste, eu sei que devo alterar certos aspectos, mas isso funciona por enquanto.)

No cliente eu tenho:

dev tun
cliente
proto udp
remote my.server.fqdn 1096
resolver-repetir infinito
ca ubuserv04-ca.crt
cert user1.crt
chave user1.key
verbo 3

A configuração acima funciona bem: sem erros, rápido, estável.

Eu tentei várias instruções para obter o Google Authenticator em execução, mas sempre acabo solucionando problemas secundários nesses artigos. Não quero me autenticar no banco de dados de usuário / senha local do servidor, apenas no sistema que já possuo e no Google Authenticator.

Eu tenho o Google Authenticator em execução; Eu o instalei usando o apt-get install libpam-google-authenticator e o usei antes para autenticar sessões ssh. Isso funcionou bem, mas agora desativei isso porque é apenas um servidor de teste e esse teste específico foi concluído.

Por favor, seja específico. Eu sei que devo adicionar um plug-in à configuração 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

Segui este artigo: http://www.howtoforge.com/securing-openvpn-with-a-one-time-password-otp-on-ubuntu Em vez de compilar a partir da fonte, instalei o Google Authenticator com o apt -get instale o libpam-google-authenticator. Também li, mas não usei neste caso, estes artigos: http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ e http : //zcentric.com/2012/10/09/google-authenticator-with-openvpn-for-2-factor-auth/ . E eu li o PAM, como sugerido;)

Agora, aqui estão alguns desenvolvimentos interessantes.

/etc/pam.d/openvpn tem isso:

conta [sucesso = 2 new_authtok_reqd = feito padrão = ignorar] pam_unix.so 
conta [sucesso = 1 new_authtok_reqd = feito padrão = ignorar] pam_winbind.so 
requisito da conta pam_deny.so
conta necessária pam_permit.so
autenticação necessária pam_google_authenticator.so

Conforme 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 for comentada, no entanto, /var/log/auth.log registra isso:

O PAM não pode dlopen (pam_google_authenticator.so): /lib/security/pam_google_authenticator.so: símbolo indefinido: pam_get_item
PAM adicionando módulo defeituoso: pam_google_authenticator.so

e /var/log/openvpn-otp-1096.log registra isso:

PLUGIN_CALL: a função do plug-in PLUGIN_AUTH_USER_PASS_VERIFY falhou com o status 1: /usr/lib/openvpn/openvpn-auth-pam.so
Erro de autenticação TLS: falha na verificação de nome de usuário / senha de autenticação para pares
e-usando o contexto SSL / TLS
AUTH-PAM: BACKGROUND: o usuário 'martin' falhou ao autenticar: o módulo é desconhecido

O problema parece estar entre o PAM e o Google Authenticator.

O Google lista problemas com outros plugins, mas não consigo encontrar informações sobre o Google Authenticator especificamente.

Forkbeard
fonte
"Eu tentei vários howtos para colocar o Google Authenticator em execução" Você poderia criar um link para alguns deles? É bastante vago o que você tentou exatamente e seria triste se outros usuários apresentassem abordagens que você já tentou. A propósito, libpam-google-authenticatoré para autenticar usando o Google Authenticator no PAM. Isso não é útil no OpenVPN, pois você está usando certificados lá. Eu sugiro que você leia sobre o que é o PAM - você entenderá que ele não tem nada a ver com o OpenVPN no seu caso.
gertvdijk
@ "Isso não é útil no OpenVPN, pois você está usando certificados lá." Isso está ok. Você pode usar certificados e uma senha de uso único do Google Authenticator via PAM como o segundo fator para autenticação no OpenVPN.
Damn Terminal
Adicionando informações extras à pergunta original. Não tenho certeza se estou fazendo a coisa certa ...
Forkbeard
@gertvdijk: Entendo que isso é redundante, mas eu gostaria de usar os dois certificados e uma senha de uso único. Parece-me mais seguro do que usar qualquer um dos métodos individualmente.
Forkbeard
Hum, parece ser um bug no Google Authenticator. Construí-lo com LDFLAGS = "- lpam" deve ajudar, mas não tenho certeza de como fazer isso; o exemplo no Howtoforge (link na pergunta original) não funciona, o URL retorna 404.
Forkbeard

Respostas:

2

Ok, o Google é meu amigo.

Eu fiz isso:

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

Adicione isso ao Makefile, logo após a licença:

LDFLAGS = "- lpam"

Então

# faço
# make install
# service openvpn restart

Além disso, verifique se /home/username/.google_authenticator não tem direitos, exceto direitos de leitura para o usuário que o usará.

Agora, preciso digitar meu nome de usuário, que é o meu nome de usuário local no servidor (minha conta shell) como meu nome de usuário OpenVPN e o código de 6 dígitos do Google Authenticator como senha.

Agora funciona.

Obrigado a todos por seu tempo :)

(Como posso marcar esta postagem como resolvida? Acabo de editar o título do tópico?)

Forkbeard
fonte
2

Se você deseja apenas autenticação OTP para OpenVPN, existe um plug-in OTP OpenVPN nativo disponível. É compatível com as chaves secretas do Google Authenticator. Todos os segredos são armazenados em um único arquivo de texto e não há necessidade de configurar o PAM ou criar diretórios do usuário.

Confira: https://github.com/evgeny-gridasov/openvpn-otp

egridasov
fonte
Obrigado pela sua resposta, egridasov. Como agora tenho uma configuração de trabalho, não vou tentar, mas posso tentar em outro sistema. O reneg-sec 0 mordeu eu acho particularmente útil, eu tinha sido quebrando a cabeça sobre como obter a conexão para não deixar cair após 3600 segundos
Forkbeard