O OpenVPN pode autenticar com LDAP ou PAM, por exemplo, usando os plugins próprios ou através de um script de checagem, o que lhe dá asas para fazer e usar autenticações.
Nesse caso vamos usar autenticação no LDAP com ou sem restrição de grupo.
Vamos coletar o usuário e senha via arquivo (auth-user-pass-verify /script via-file). Isso se dá por conta de que o OpenVPN passa como parâmetro para o script o arquivo com usuário e senha que o usuário digitar.
Criando o script de autenticação
Crie o arquivo /usr/lib/openvpn/ldap-auth.sh com permissão de execução.
# LDAP_SRV com o prefixo... ldap://IP_DO_LDAP
LDAP_SRV="ldap://x.x.x.x"
# BASEDN_USUARIO Base DN onde o usuário está.
BASEDN_USUARIO="ou=Users,dc=exemplo,dc=com,dc=br"
## Configuração Grupo
# GRUPO para restringir o acesso para um determinado grupo do ldap.
# GRUPO=sim ou GRUPO=nao
GRUPO=sim
# Grupo que usuário deverá estar.
BASEDN_GRUPO="cn=openvpn,ou=Groups,dc=exemplo,dc=com,dc=br"
ATRIBUTO=memberUid
# Captura Usuário e Senha (onde $1 é o arquivo que o próprio openvpn cria.)
password=`tail -n1 $1`
username=`head -n1 $1`
## Autenticação
if /usr/bin/ldapwhoami -x -H $LDAP_SRV -D "uid=$username,$BASEDN_USUARIO" -w $password |grep "uid=$username"
then
ASTATUS="OK"
else
ASTATUS="Permissao Negada"
fi
echo Status Autenticacao: $ASTATUS >> $LOG
## Autenticação no Grupo
if [ $GRUPO = "sim" ]
then
if /usr/bin/ldapsearch -x -H $LDAP_SRV -b "$BASEDN_GRUPO" -D "uid=$username,$BASEDN_USUARIO" -w $password "($ATRIBUTO=$username)"
|grep "$ATRIBUTO:"
then
GSTATUS="OK"
else
GSTATUS="Permissao Negada"
fi
echo Status Grupo : $GSTATUS >> $LOG
[ $ASTATUS = "OK" ] && [ $GSTATUS = "OK" ] && echo "Autenticado com sucesso." >> $LOG && exit 0 || exit 1
else
[ $ASTATUS = "OK" ] && echo "Autenticado com sucesso." >> $LOG && exit 0 || exit 1
fi
Configurando OpenVPN - Servidor para usar o script
Arquivo de configuração do servidor /etc/openvpn/exemplo-server.conf:
port 5000
proto tcp
dev tap0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/servidor.crt
key /etc/openvpn/keys/servidor.key
dh /etc/openvpn/keys/dh1024.pem
server 10.10.1.0 255.255.255.0
push "route 192.168.0.0 255.255.255.0 10.10.1.1"
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DOMAIN exemplo.local"
keepalive 10 120
client-to-client
comp-lzo
persist-key
persist-tun
verb 3
# Linha que chama o script para autenticar.
auth-user-pass-verify /usr/lib/openvpn/ldap-auth.sh via-file
Configurando OpenVPN - Cliente para passar usuário e senha
remote vpnserver.exemplo.com.br
proto tcp
port 5000
client
dev tap
persist-key
persist-tun
ca ca.crt
cert cert-cliente.crt
key cert-cliente.key
comp-lzo
verb 3
auth-nocache
auth-user-pass
[2] Comentário enviado por germanomm em 22/04/2013 - 12:53h
São os usuários que poderão se conectar à VPN.
No caso ai foi criado um grupo "openvpn" no LDAP ontem contem os usuários que podem conectar, pois apenas bloquear os que não podem dificulta a gerencia e o controle.