OpenVPN autenticando no OpenLDAP via script

Publicado por Germano Mascarenhas em 30/06/2010

[ Hits: 18.158 ]

 


OpenVPN autenticando no OpenLDAP via script



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.

Segue o script comentado:

#!/bin/bash
# Autenticação OpenVPN - LDAP
# Germano Monteiro Mascarenhas - 18/06/2010
# germanomm@gmail.com


LOG=/var/log/ldap-auth.log

## Configuração Usuário e senha

# 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

Boa sorte!

Outras dicas deste autor

Como passar usuário e senha automaticamente no OpenVPN

Leitura recomendada

Instalando e configurando o Nginx com HTTPS

Tim-Web no Linux - Onda Communication MSA501HS USB

Alfresco: Gerenciando documentos digitais na Era da Informação

Via vn896 S3/VIA Graphics Chrome9 HC IGP com 3D rápido e fácil

Instalando o Mantis - uma poderosa ferramenta administrativa de conteúdo de funções de funcionários

  

Comentários
[1] Comentário enviado por fernandogobah em 22/04/2013 - 12:10h

Amigo os usuários pertecentes a este grupo discrimando, eles terão acesso a VPN ou serão bloqueados a conectar na VPN?

[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.

[3] Comentário enviado por tpjunior em 27/08/2014 - 15:27h

Cara, estou com o seguinte problema. Sabe oq pode ser?


Wed Aug 27 15:23:09 2014 us=158484 MULTI: multi_create_instance called
Wed Aug 27 15:23:09 2014 us=158578 191.0.0.0:1194 Re-using SSL/TLS context
Wed Aug 27 15:23:09 2014 us=158622 191.0.0.0:1194 LZO compression initialized
Wed Aug 27 15:23:09 2014 us=158838 191.0.0.0:1194 Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ]
Wed Aug 27 15:23:09 2014 us=158860 191.0.0.0:1194 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ]
Wed Aug 27 15:23:09 2014 us=158905 191.0.0.0:1194 Local Options String: 'V4,dev-type tap,link-mtu 1574,tun-mtu 1532,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
Wed Aug 27 15:23:09 2014 us=158925 191.0.0.0:1194 Expected Remote Options String: 'V4,dev-type tap,link-mtu 1574,tun-mtu 1532,proto UDPv4,comp-lzo,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
Wed Aug 27 15:23:09 2014 us=158974 191.0.0.0:1194 Local Options hash (VER=V4): 'f7df56b8'
Wed Aug 27 15:23:09 2014 us=158995 191.0.0.0:1194 Expected Remote Options hash (VER=V4): 'd79ca330'
Wed Aug 27 15:23:09 2014 us=159062 191.0.0.0:1194 TLS: Initial packet from [AF_INET]191.0.0.0:1194, sid=8c9321cf c85bfe88
Wed Aug 27 15:23:20 2014 us=991943 191.0.0.0:1194 VERIFY OK: depth=1, C=BR, ST=ES, L=Vitoria, O=MEUSITE, OU=changeme, CN=vpn.meusite.com.br, name=server, emailAddress=mail@host.domain
Wed Aug 27 15:23:20 2014 us=992163 191.0.0.0:1194 VERIFY OK: depth=0, C=BR, ST=ES, L=Vitoria, O=MEUSITE, OU=changeme, CN=vpn.meusite.com.br, name=client, emailAddress=mail@host.domain
ldap_bind: Invalid credentials (49)
/etc/openvpn/ldap-auth.sh: line 44: syntax error near unexpected token `|'
/etc/openvpn/ldap-auth.sh: line 44: `| grep "$ATRIBUTO"'
Wed Aug 27 15:23:21 2014 us=681644 191.0.0.0:1194 WARNING: Failed running command (--auth-user-pass-verify): external program exited with error status: 2
Wed Aug 27 15:23:21 2014 us=681724 191.0.0.0:1194 TLS Auth Error: Auth Username/Password verification failed for peer
Wed Aug 27 15:23:21 2014 us=909893 191.0.0.0:1194 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Wed Aug 27 15:23:21 2014 us=909950 191.0.0.0:1194 [vpn.meusite.com.br] Peer Connection Initiated with [AF_INET]191.0.0.0:1194
Wed Aug 27 15:23:23 2014 us=911291 191.0.0.0:1194 PUSH: Received control message: 'PUSH_REQUEST'
Wed Aug 27 15:23:23 2014 us=911334 191.0.0.0:1194 Delayed exit in 5 seconds
Wed Aug 27 15:23:23 2014 us=911368 191.0.0.0:1194 SENT CONTROL [vpn.meusite.com.br]: 'AUTH_FAILED' (status=1)
Wed Aug 27 15:23:28 2014 us=490637 191.0.0.0:1194 SIGTERM[soft,delayed-exit] received, client-instance exiting



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts