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

11

Eu tenho uma configuração openVPN em que os usuários não têm contas shell na VM Debian executando o openVPN. Os artigos que encontrei durante a pesquisa no Google têm instruções para configurar o Google Authenticator para um usuário clássico * nix (é necessário executar o binário do Authenticator no diretório inicial do usuário, por exemplo).

Existe um documento explicando como integrar o Google Authenticator aos servidores openvpn que são autenticados com base apenas nos .ovpnarquivos usados ​​no lado do cliente?

Consultei https://github.com/evgeny-gridasov/openvpn-otp , mas ainda é necessário configurar o Google Authenticator.

Animesh
fonte
O problema é a inscrição do autenticador do google ou a necessidade de digitar uma senha?
Cornelinux 9/03/16

Respostas:

4

Não. Claro que você não pode fazer isso. Isso derrotaria o próprio objetivo do 2FA. Seu servidor deve ter uma maneira de verificar as credenciais do usuário, e essas informações não devem ser enviadas pela rede (por exemplo, você não pode usar apenas o arquivo client.ovpn).

Embora você não precise necessariamente criar usuários unix, você deve permitir que eles instalem seus códigos de verificação no servidor. Você pode usar o sftp com usuários virtuais usando o certificado já emitido, https com autorização (mútua) do cliente, CIFS (samba) ou ftp antigo com extensão TLS ou qualquer outra maneira que permita ao servidor conhecer 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 agregadas usadas pelo openvpn-otp. Felizmente, temos outra opção (e muito melhor) usando o excelente módulo de segurança linux pam.

Primeiro, você deve 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 aplicar um único ID de usuário a todos os arquivos aqui, porque você não possui usuários reais. Que seja openvpn . As permissões devem ser 0400 (-r --------). Pam não gosta de credenciais legíveis por mundo / grupo (certamente). Você pode facilmente aplicar isso com samba, apache, ftp ou, na pior das hipóteses, 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 se autenticar na libpam, que possui seu próprio módulo de autenticação do google. Anexe isso ao seu arquivo de 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 do 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 bem-sucedida do Google, 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á um ID de usuário real associado com nossos usuários. Na próxima linha, apenas dizemos que permitimos que todos se conectem após uma autenticação bem-sucedida. É claro que você deve implementar sua própria política de permissão aqui. Você pode controlar 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ão gostamos de cache (a "senha" está mudando) e a renegociação periódica é ruim para nós pelo mesmo motivo.

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

goteguru
fonte
1

Instalação: Servidor OpenVPN com 2FA (Google Authenticator) no Ubuntu Server 18.04.4 LTS para Raspberry Pi Hardware: Raspberry Pi 3 Modelo B + Rev 1.3

  • você precisa fazer login com um usuário linux sem configuração de login 2FA ativa (no meu caso, algum usuário)
  • insira os seguintes comandos
sudo apt install libqrencode3 libpam-google-authenticator
google-authenticator
sudo mv /home/someuser/.google_authenticator /etc/google-auth/someuser
sudo chown -R root /etc/google-auth
  • adicione o seguinte arquivo ao seu arquivo de configuração openvpn (no meu caso /etc/openvpn/server/server.conf)
plugin /usr/lib/aarch64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so  openvpn
  • crie o arquivo /etc/pam.d/openvpn e preencha-o com o seguinte conteúdo
# Google Authenticator
auth    requisite       /lib/aarch64-linux-gnu/security/pam_google_authenticator.so secret=/etc/google-auth/someuser user=root
account    required     pam_permit.so
  • adicione as 3 linhas a seguir ao seu arquivo de cliente openvpn
auth-user-pass
auth-nocache
reneg-sec 0
  • reinicie o serviço openvpn e execute um teste
systemctl restart openvpn@server
  • Quando a conexão com o cliente OpenVPN (no Windows 10), você obtém um login adicional (Usuário: someuser / Senha: 'OTP do Google Authenticator')
Wolfgang Reidlinger
fonte