Como configurar o método de autenticação múltipla do OpenVPN?

2

Eu uso o mfa para se conectar ao OpenVPN. Existe agora um requisito do cliente que eles querem se conectar ao OpenVPN através de um clique com um arquivo .bat ou .cmd. Eu encontrei uma solução para conexão automática ao OpenVPN com o nome de usuário e senha. No entanto, para fazer isso, tive que desabilitar o mfa no arquivo de configuração pam.

Existe alguma maneira de manter os dois métodos de autenticação? Um usuário específico pode ter o perfil de login automático, enquanto outros usuários ainda precisariam usar o mfa para efetuar login?

Minha configuração está abaixo:

client
dev tun
proto udp
remote xx.xx.xx.xxx Protocol
nobind
resolv-retry infinite
persist-key
persist-tun
auth-user-pass pass.txt
auth-nocache
ca ca.crt
cert user.crt
key user.key
comp-lzo
verb 4
tls-auth ta.key 1
cipher AES-256-CBC
remote-cert-tls server
keepalive 5 300
reneg-sec 36000

e server.conf:

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/xxxx.crt
cert /etc/openvpn/easy-rsa/2.0/keys/xxxx.crt
key /etc/openvpn/easy-rsa/2.0/keys/xxxx.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/xxxx.pem
server xx.xx.xx.xx 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.16.5.0 255.255.255.0"
push "route 192.16.6.0 255.255.255.0"
push "route 192.16.7.0 255.255.255.0"
push "route 192.16.8.0 255.255.255.0"
push "dhcp-option DNS 132.196.243.9"
push "dhcp-option DNS 8.8.8.8"
keepalive 5 300
reneg-sec 36000
tls-auth /etc/openvpn/easy-rsa/2.0/keys/xxxx.key 0 # This file is secret
cipher AES-256-CBC   # AES
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 5
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn #  This is my authentication plugin. I want to use another one along with it.
    
por salman.isha 12.01.2016 / 06:01

1 resposta

2

O OpenVPN 2.0 e posteriores incluem um recurso que permite que o servidor OpenVPN obtenha com segurança um nome de usuário e senha de um cliente de conexão e use essas informações como base para autenticar o cliente.

Para usar este método de autenticação, adicione primeiro a diretiva auth-user-pass à configuração do cliente. Ele direcionará o cliente OpenVPN a consultar o usuário em busca de um nome de usuário / senha, passando-o ao servidor pelo canal TLS seguro.

Em seguida, configure o servidor para usar um plug-in de autenticação, que pode ser um script, um objeto compartilhado ou uma DLL. O servidor OpenVPN chamará o plug-in toda vez que um cliente VPN tentar se conectar, passando o nome de usuário / senha digitado no cliente. O plugin de autenticação pode controlar se o servidor OpenVPN permite ou não que o cliente se conecte retornando um valor de falha (1) ou sucesso (0).

Usando plug-ins de script

Os plug-ins de script podem ser usados adicionando-se a diretiva auth-user-pass-verify ao arquivo de configuração do lado do servidor. Por exemplo:

auth-user-pass-verify auth-pam.pl via-file usará o script auth-pam.pl perl para autenticar o nome de usuário / senha dos clientes de conexão. Veja a descrição de auth-user-pass-verify na página de manual para mais informações.

O script auth-pam.pl está incluído na distribuição do arquivo de origem do OpenVPN no subdiretório amostra-scripts . Ele autenticará os usuários em um servidor Linux usando um módulo de autenticação PAM, que poderia, por sua vez, implementar a senha de sombra, o RADIUS ou a autenticação LDAP. auth-pam.pl é destinado principalmente para fins de demonstração. Para autenticação PAM do mundo real, use o plug-in de objeto compartilhado openvpn-auth-pam descrito abaixo.

Usando o objeto compartilhado ou os plug-ins de DLL

Objetos compartilhados ou plugins DLL são geralmente módulos C compilados que são carregados pelo servidor OpenVPN em tempo de execução. Por exemplo, se você estiver usando um pacote OpenVPN baseado em RPM no Linux, o openvpn-auth-pam plugin já deve ter sido construído. Para usá-lo, adicione isso ao arquivo de configuração do lado do servidor:

plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login Isso dirá ao servidor OpenVPN para validar o nome de usuário / senha digitado pelos clientes usando o módulo login PAM.

Para uso em produção no mundo real, é melhor usar o openvpn-auth-pam plugin, porque ele tem várias vantagens sobre o script auth-pam.pl :

O plug-in openvpn-auth-pam do objeto compartilhado usa um modelo de execução de privilégio dividido para melhor segurança. Isso significa que o servidor OpenVPN pode ser executado com privilégios reduzidos usando as diretivas user nobody, group nobody e chroot, e ainda será capaz de autenticar com base no arquivo de senhas shadow somente legível à raiz. O OpenVPN pode passar o nome de usuário / senha para um plug-in via memória virtual, em vez de por meio de um arquivo ou ambiente, o que é melhor para a segurança local na máquina do servidor. Módulos de plug-in compilados em C geralmente são executados mais rápido que scripts. Se você quiser mais informações sobre o desenvolvimento de seus próprios plug-ins para uso com o OpenVPN, consulte os arquivos README no subdiretório plugin da distribuição de origem do OpenVPN.

Para construir o plug-in openvpn-auth-pam no Linux, vá para o diretório plugin / auth-pam na distribuição de origem do OpenVPN e execute make.

Usando a autenticação de nome de usuário / senha como a única forma de autenticação do cliente

Por padrão, usar auth-user-pass-verify ou um plug-in de nome de usuário / verificação de senha no servidor ativará a autenticação dupla, exigindo que a autenticação de certificado de cliente e nome de usuário / senha seja bem-sucedida para que o cliente seja autenticado.

Embora seja desencorajado de uma perspectiva de segurança, também é possível desabilitar o uso de certificados de cliente e forçar apenas a autenticação de nome de usuário / senha. No servidor:

client-cert-not-required Essas configurações geralmente também devem ser definidas:

username-as-common-name que dirá ao servidor para usar o nome de usuário para propósitos de indexação, pois usaria o Nome Comum de um cliente que estava autenticando por meio de um certificado de cliente.

Observe que client-cert-not-required não elimina a necessidade de um certificado de servidor, portanto, um cliente se conectando a um servidor que usa client-cert-required pode remover as diretivas cert e key do arquivo de configuração do cliente , mas não a diretiva ca, porque é necessário que o cliente verifique o certificado do servidor.

    
por 12.01.2016 / 06:45