objetivo

Fazer o freeradius autenticar no LDAP.

Permitir que clientes windows consigam se autenticar em rede WIFI com 802.1x

Suporte EAP, PEAP, TLS, TTLS e OPENSSL deve ser ativado no freeradius.

Aqui vamos explicar como fazer isso usando o pacote do lenny e recriando ele e depois usando o pacote do backports.

especialistas envolvidos

coredump
gutocarvalho
dcsobral
hygo

instalação do freeradius 2.0.x lenny

Versão lenny-2.0.4+dfsg-6

O pacote do freeradius no lenny não vem com certas coisas ativadas, ssl e eap são algumas destas coisas, vamos acertar isso no pacote diretamente.

ajustando o sources.list

deb http://ftp.br.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.br.debian.org/debian/ lenny main non-free contrib

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

não se esqueça de atualizar os índices de pacotes

# aptitude update

recriando o pacote

Bem agora que temos nosso sources.lista ajustado, vamos ao trabalho de fato.

Para empacotarmos algo no debian precisaremos dos seguintes pacotes (segundo o debian maintainers guide).

aptitude install build-essential file patch perl autoconf automake dh-make debhelper devscripts gnupg fakeroot gpc xutils lintian debian-policy developers-reference

e para recriarmos o pacote freeradius precisamos atender a todas as suas dependências para uma nova compilação

aptitude build-dep freeradius

agora vamos para o home do root

cd /root
apt-get source freeradius
cd freeradius-2.0.4+dfsg
cd debian

edite o arquivo control, veja o Build-Depends, adicione libssl-dev ao final das dependencias, como fiz abaixo

Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, libpcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev, libssl-dev

depois edite o arquivo rules

altere

--without-rlm_eap_tls \
--without-rlm_eap_ttls \
--without-rlm_eap_peap \

--without-openssl \

para

--with-rlm_eap_tls \
--with-rlm_eap_ttls \
--with-rlm_eap_peap \

--with-openssl \

comente a linha 180, do início do laço até o final do laço

#for pkg in ${pkgs} ; do \
#  if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \
#    echo "$$pkg links to openssl" ;\
#    exit 1 ;\
#  fi ;\
#done

assinando a modificação do pacote

primeiro exporte as seguintes vars

export DEBFULLNAME="Guto Carvalho"
export DEBEMAIL="gutocarvalho@gmail.com"
export EMAIL=$DEBMAIL
export EDITOR="vim"

agora vamos criar uma nova entrada no changelog

cd debian/
dch -n

observe que ele adicionou uma nova versão, vamos corrigir isso

freeradius (2.0.4+dfsg-6.1) unstable; urgency=low

  * Non-maintainer upload.
  *

 -- Guto Carvalho <gutocarvalho@gmail.com>  Tue, 09 Nov 2010 14:24:45 -0500

para

freeradius (2.0.4+dfsg-6+empresa-1) unstable; urgency=low

  * modificação de pacote para empresa

 -- Guto Carvalho <gutocarvalho@gmail.com>  Tue, 09 Nov 2010 14:24:45 -0500

feche o arquivo

inserindo agora as modificações no changelog via comando dch

dch Alteracao no rules para compilar com EAP, PEAP, TLS, TTLS e OPENSSL
dch Alteracao no control para inserir a dependencia libssl-dev
dch Alteracao no rules, comentando laco da linha 180 que impedia compilacao correta

agora verifique

dch -e

veja o resultado

freeradius (2.0.4+dfsg-6+empresa-1) unstable; urgency=low

  * Modificação de pacote para EMPRESA
  * Alteracao no rules para compilar com EAP, PEAP, TLS, TTLS e OPENSSL
  * Alteracao no control para inserir a dependencia libssl-dev
  * Alteracao no rules, comentando laco da linha 180 que impedia
    compilacao correta

 -- Guto Carvalho <gutocarvalho@gmail.com>  Tue, 09 Nov 2010 14:28:20 -0500

belezaaaa, e como mudamos a versão +empresa-1 o apt não vai atualizar esse pacote automaticamente, se tiver versão nova precisaremos fazer esse processo novamente e atualizar a versao manualente.

Agora vamos gerar o novo pacote.

cd ..
dpkg-buildpackage -b

instalando os pacotes

# dpkg -i libfreeradius2_2.0.4+dfsg-6+empresa-1_i386.deb
# dpkg -i freeradius-utils_2.0.4+dfsg-6+empresa-1_i386.deb
# dpkg -i freeradius-common_2.0.4+dfsg-6+empresa-1_all.deb
# dpkg -i freeradius_2.0.4+dfsg-6+empresa-1_i386.deb
# dpkg -i freeradius-ldap_2.0.4+dfsg-6+empresa-1_i386.deb

criando certificados

Veja a wikipage para criar seus certificados, após fazê-lo, coloque-os em

/etc/freeradius/certs

configure os seguintes parametros no eap.conf

certdir = ${confdir}/certs
cadir = ${confdir}/certs
...
private_key_file = ${certdir}/radius.key
certificate_file = ${certdir}/radius.pem
CA_file = ${cadir}/ca.pem
...
dh_file = ${certdir}/dh
random_file = ${certdir}/random

configurando arquivos

Abaixo vamos alterar trechos do arquivos de configuração do freeradius, altera só que estamos pedindo

client.conf

client 10.61.15.2 {
        secret      = wirelessv2k
        shortname   = wi2k
        nastype     = other 
}
  
client 10.61.15.3 {
        secret      = wirelessv2k
        shortname   = wiv2k
        nastype     = other
}

10.61.x.x são os IPs dos APs

radiusd.conf

configure a conexão ldap

ldap {
              server = "ldap.empresa"
              basedn = "ou=Usuarios,dc=empresa,dc=local"
              filter = "(uid=%{mschap:User-Name:-%{User-Name}})"
 }

habilite o ntdomain_hack na seção mschap

mschap {
      ...
      with_ntdomain_hack = yes
      ...
      }

eap.conf

na seção eap defina

default_eap_type=peap

na seção peap defina

copy_requests_to_tunnel=yes
use_tunneled_reply=yes

radiusd.conf

Procure por

proxy_requests  = yes
$INCLUDE proxy.conf

E altere para

proxy_requests  = no
#$INCLUDE proxy.conf

sites-enabled/default

Na seção Authorize comente as linhas:

unix
files

Descomente:

ldap

Na seção Authentication comente a linha:

unix

Descomente:

 Auth-Type LDAP {
        ldap
 }
 

sites-enabled/inner-tunnel

Na seção Authorize comente as linhas:

unix
files

Descomente:

ldap

Na seção Authentication comente a linha:

unix

Descomente o trecho:

 Auth-Type LDAP {
        ldap
 }

Comente a linha:

Proxy-To-Realms=LOCAL

instalando o freeradius 2.1.x lenny-backports

O pacote do backports é bem mais novo e empacotado por um DD, no processo anterior la garantia soy yo, por isso prefira o backports ;)

No Freeradius 2.1 algumas configurações mudam um pouquinho, vamos ao passo-a-passo para essa versão.

freeradius 2.1.10+dfsg-1~bpo50+1
http://packages.debian.org/lenny-backports/freeradius

ajustando o sources.list

deb http://ftp.br.debian.org/debian/ lenny main non-free contrib

deb http://security.debian.org/ lenny/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

deb http://backports.debian.org/debian-backports lenny-backports main

agora atualize os índices

# aptitude update

instalando o pacote

bora instalar o pacote

# aptitude install -t lenny-backports freeradius freeradius-ldap

criando certificados

Veja a wikipage

https://wiki/criando_raiz_certificadora

para criar seus certificados, após fazê-lo, coloque-os em

/etc/freeradius/certs

configure os seguintes parametros no eap.conf ( de acordo com os certs que voce criou )

private_key_file = ${certdir}/radius.key
certificate_file = ${certdir}/radius.pem
CA_file = ${cadir}/ca.pem

configurando arquivos

client.conf

Ao final do arquivo adicione

client 10.61.15.2 {
        secret      = wirelessv2k
        shortname   = wi2k
        nastype     = other 
}
  
client 10.61.15.3 {
        secret      = wirelessv2k
        shortname   = wiv2k
        nastype     = other
}

modules/ldap

configure a conexão ldap

ldap {
              server = "ldap.empresa"
              basedn = "ou=Usuarios,dc=empresa,dc=local"
              filter = "(uid=%{mschap:User-Name:-%{User-Name}})"
 }

modules/mschap

habilite o ntdomain_hack na seção mschap

mschap {
      ...
      with_ntdomain_hack = yes
      ...
      }

eap.conf

na seção eap { defina

default_eap_type=peap

na seção peap { defina

copy_requests_to_tunnel=yes
use_tunneled_reply=yes

radiusd.conf

Procure por

proxy_requests  = yes
$INCLUDE proxy.conf

E altere para

proxy_requests  = no
#$INCLUDE proxy.conf

sites-enabled/default

Na seção Authorize comente as linhas:

unix
files

Descomente:

ldap

Na seção Authentication comente a linha:

unix

Descomente:

 Auth-Type LDAP {
        ldap
 }
 

sites-enabled/inner-tunnel

Na seção Authorize comente as linhas:

unix
files

Descomente:

ldap

Na seção Authentication comente a linha:

unix

Descomente o trecho:

 Auth-Type LDAP {
        ldap
 }

Comente o trecho dentro de authorize

    update control {
           Proxy-To-Realm := LOCAL
    }

rodando o freeradius

Rodando em modo debug e salvando o fluxo em um arquivo

# freeradius -X -f -s | tee debug.freeradius

Rodando normalmente

# /etc/init.d/freeradius start

logs do freeradius

vendo logs do freeradius

Habilite isso na seção logs do radiusd.conf para acompanhar a autenticacao do usuarios

auth = yes
auth_badpass = yes
auth_goodpass = yes

Vendo os logs

# tail -f /var/log/freeradius/radius.log

problemas conhecidos

windows não consegue se conectar

Se o windows está tentando validar a conexão/certificado e não sai disso faça o seguinte.



freeradius_autenticando_em_ldap_com_peap_e_ttls.txt · Last modified: 2011/01/04 00:20 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0