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 .ovpn
arquivos usados no lado do cliente?
Consultei https://github.com/evgeny-gridasov/openvpn-otp , mas ainda é necessário configurar o Google Authenticator.
openvpn
google-authenticator
Animesh
fonte
fonte
Respostas:
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:
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:
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:
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
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.
fonte
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
fonte