Como ativar a autenticação de dois fatores usando o Google Authenticator para acesso openVPN baseado em arquivo .ovpn?

9

Eu tenho uma configuração openVPN onde os usuários não possuem contas shell na máquina virtual Debian rodando openVPN. Os artigos que encontrei enquanto pesquisei no Google têm instruções sobre como configurar o Google Authenticator para um usuário clássico * nix (por exemplo, precisar executar o binário do autenticador no diretório pessoal do usuário).

Existe um documento explicando como integrar o Google Authenticator aos servidores openvpn que autenticam apenas com base nos arquivos .ovpn usados no lado do cliente?

Eu analisei o link , mas ainda é necessário configurar o Google Authenticator.

    
por Animesh 26.10.2015 / 23:20

1 resposta

2

Não. Claro que você não pode fazer isso. Isso derrotaria o propósito do 2FA. Seu servidor deve ter uma maneira de verificar as credenciais do usuário, e essa informação não deve ser enviada pela rede (ou seja, você não pode usar somente o arquivo client.ovpn).

Embora não seja necessário criar usuários unix, é necessário permitir que seus usuários instalem seus códigos de verificação no servidor. Você pode usar o sftp com usuários virtuais usando seu certificado já emitido, https com autorização do lado do cliente (mútua), CIFS (samba) ou boa extensão antiga com extensão TLS ou qualquer outra maneira que informe ao servidor os códigos de verificação criados pelos usuários . O canal de comunicação deve ser seguro (criptografado || local).

Naturalmente, se seus usuários fizerem upload de seus próprios arquivos, você não poderá usar as credenciais baseadas em arquivo agregado usadas pelo openvpn-otp. Felizmente temos outra (e muito melhor) opção usando o excelente pam de módulo de segurança do linux.

Em primeiro lugar, você precisa coletar os arquivos de usuário criados pelo google-authenticator em um diretório por um dos métodos mencionados acima. No nosso caso, será / etc / google-auth.

Você deve impor um ID de usuário único para todos os arquivos aqui, porque você não tem usuários reais. Deixe ser openvpn . As permissões devem ser 0400 (-r --------). Pam não gosta de credenciais legíveis no mundo / grupo (certamente). Você pode facilmente impor isso com samba, apache, ftp ou, no pior dos casos, usando uma guia cron (não recomendado).

Para fins de teste, faça o seguinte:

mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth

Depois disso, você pede ao openvpn para autenticar contra a libpam, que possui seu próprio módulo google auth. Anexar isto ao seu arquivo do servidor openvpn:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn

Isso diz que usaremos o método de autenticação pam com o pam auth id openvpn .

Agora, crie a configuração pam para o openvpn. Edite /etc/pam.d/openvpn:

auth    requisite       /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER}  user=openvpn
account    required     pam_permit.so

Aqui dizemos que sem uma autenticação do google bem-sucedida falhamos imediatamente (requisito), estamos usando um arquivo secreto especial em vez do padrão $ HOME / .google_authenticator (secret =) e acessamos os arquivos como usuário openvpn, pois não há userid real associado aos nossos usuários. Na próxima linha, dizemos que permitimos que todos se conectem após a autenticação bem-sucedida. É claro que você deve implementar sua própria política de permissão aqui. Você pode controlar os usuários permitidos por arquivo, mysql db ou ldap com os respectivos módulos pam.

Anexe isso ao seu arquivo de cliente openvpn

   auth-user-pass
   auth-nocache
   reneg-sec 0

Usamos auth-user-pass para permitir que o cliente openvpn solicite nome de usuário e senha. Nós não gostamos de cache ("senha" está mudando) e re-negação periódica é ruim para nós pela mesma razão.

Depois disso, você deve conseguir se conectar sem o openvpn-otp. Por favor, considere este método muito mais flexível, já que você pode implementar regras muito complexas em arquivos de controle de pam, se desejar. Você pode ativar / desativar usuários com base em seu diretório mysql ou ldap sem tocar nesses certificados, por exemplo.

    
por 19.01.2017 / 15:09