OpenVPN autenticando no OpenLDAP via script

Publicado por Germano Mascarenhas em 30/06/2010

[ Hits: 18.557 ]

 


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

Configurando dois monitores em uma única placa de vídeo no Ubuntu 9.10

Acesso remoto no Insigne 5.0 por SSH

Experiência com Sistemas para Servidor NAS Free

Utilizando MSMTP para enviar e-mail com subject pela linha de comando

Configurando Wireless Atheros AR5212 no Fedora 4

  

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