configuracion free radius ubuntu

26
1º Parte: INSTALACIÓN Y CONFIGURACIÓN DE UN SERVIDOR EN UN MÁQUINA VIRTUAL Introducción Para crear nuestro servidor partimos de un ordenador con una Ubuntu 9.10 Karmic Koala instalada y vamos a virtualizar el servidor linux que correrá freeradius y openldap. Para ello nos bajamos de la página de vmware el último vmware player que tengan disponible: http://downloads.vmware.com/d/info/desktop_downloads/vmware_player/ 3_0 Una vez descargado ejecutamos el script de instalación con “sudo sh ./nombredelfichero.bundle” y el solo se instalará. Cuando haya terminado, lo abrimos y elegimos crear una “máquina virtual nueva”, y al preguntarnos desde donde, le pasamos la dirección de la iso con el servidor (lo tenemos que descargar previamente de un repositorio, por ejemplo http://releases.ubuntu.com/9.10/ubuntu-9.10- server-i386.iso). Seleccionamos un tamaño de 10 ó 15 GB para no tener que preocuparnos por el espacio (además, lo asignará dinámicamente según lo vaya necesitando, así que mientras no instalemos muchos paquetes se podrá copiar la imagen en un pen drive sin mucho problema) y customizamos el hardware disponible. Se le quita la disquetera, se le asigna 256MB de RAM y se intenta instalar, aunque es posible que nada más

Upload: juan-carlos-pineda-redondo

Post on 27-Jun-2015

4.223 views

Category:

Documents


1 download

TRANSCRIPT

1 Parte: INSTALACIN Y CONFIGURACIN DE UN SERVIDOR EN UN MQUINA VIRTUAL Introduccin Para crear nuestro servidor partimos de un ordenador con una Ubuntu 9.10 Karmic Koala instalada y vamos a virtualizar el servidor linux que correr freeradius y openldap. Para ello nos bajamos de la pgina de vmware el ltimo vmware player que tengan disponible: http://downloads.vmware.com/d/info/desktop_downloads/vmware_player/3_0 Una vez descargado ejecutamos el script de instalacin con sudo sh ./nombredelfichero.bundle y el solo se instalar. Cuando haya terminado, lo abrimos y elegimos crear una mquina virtual nueva, y al preguntarnos desde donde, le pasamos la direccin de la iso con el servidor (lo tenemos que descargar previamente de un repositorio, por ejemplo http://releases.ubuntu.com/9.10/ubuntu-9.10-server-i386.iso). Seleccionamos un tamao de 10 15 GB para no tener que preocuparnos por el espacio (adems, lo asignar dinmicamente segn lo vaya necesitando, as que mientras no instalemos muchos paquetes se podr copiar la imagen en un pen drive sin mucho problema) y customizamos el hardware disponible. Se le quita la disquetera, se le asigna 256MB de RAM y se intenta instalar, aunque es posible que nada ms empezar la instalacin no consiga resolver el DHCP para obtener una direccin IP, y en ese caso tengamos que crear una mquina nueva cambiando la configuracin de red a NAT/Bridge. Una vez instalado, tenemos nuestro servidor virtualizado aunque con lo bsico: sin entorno grfico, probablemente con el teclado desconfigurado, y al que le faltan muchos paquetes. Empezamos solucionando el tema del teclado, instalamos el gdm (el , que necesitamos para escribir lo siguiente en la lnea de comando, puede que est en la tecla ?): sudo apt-get install ubuntu-gdm-themes gdm-themes ubuntume-gdm-themes gdm y luego le pasamos las fuentes para hacer que est en castellano: sudo apt-get install language-pack-es language-pack-es-base language-packgnome-es language-pack-gnome-es-base language-selector language-support-es xinit Una vez instalado, o bien arrancamos el gdm (gdm) o bien reiniciamos y el sistema solo arrancar el modo grfico (sudo reboot). Al arrancar, nos pide de manera grfica usuario y contrasea, se los damos e inicia el escritorio. Nos vamos arriba a System Preferences Keyboard Layouts y probablemente aparecer US si no ha detectado el teclado espaol. Le damos a add y aadimos uno con distribucin espaola (language spanish, spain). Lo marcamos como teclado por defecto, y lo probamos abajo. Debera

funcionar correctamente; para casos ms complejos como teclados inalmbricos o con caractersticas especiales, puede que sea ms difcil de configurar. Una vez tenemos el sistema en castellano y reconociendo el teclado correctamente, empezamos con la instalacin de los paquetes necesarios para gestionar los servidores. Primero instalamos una terminal para gnome, para poder trabajar en modo consola con facilidad: sudo apt-get install gnome-terminal gnome-terminal-data Cuando est instalada, podemos lanzarla desde Aplicaciones Preferencias Terminal. Abrimos una terminal y tecleamos tasksel para que nos abra un gestor de paquetes que nos pregunte qu cosas queremos instalar. Marcamos LAMP y OPENSSH (bajando hasta la opcin que queremos, y pulsando barra espaciadora para marcar/desmarcar, y terminamos con enter) y empezar a descargar paquetes automticamente; durante la instalacin preguntar una contrasea para MySQL, podemos ponerle howard sin comillas, por ejemplo. No importa mucho, porque luego, a la hora de manejar los datos, trabajaremos sobre un directorio ldap en lugar de la base de datos mysql. Dejamos que la instalacin termine, y configuramos para utilizar el navegador web Mozilla firefox. Para ello editamos el fichero sources.list (sudo nano /etc/apt/sources.list) y al final aadimos la siguiente lnea, para buscar paquetes en un repositorio ms: deb http://ppa.launchpad.net/mozillateam/firefox-stable/ubuntu karmic main Actualizamos los repositorios con: sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get autoremove y nos dir que se retienen una serie de paquetes: bind9-host dnsutils libbind9-50 libdns50 libisc50 libisccc50 libisccfg50 liblwres50 linux-generic-pae linux-headers-generic-pae linux-image-generic-pae Y que instalaremos otros: sudo apt-get install bind9-host dnsutils libbind9-50 libdns50 libisc50 libisccc50 libisccfg50 liblwres50 linux-generic-pae linux-headers-generic-pae linux-image-genericpae Aceptamos y dejamos que se instalen los paquetes, y cuando haya finalizado, instalamos el Firefox: sudo apt-get install firefox-3.6 Puede ser que mientras tanto Gnome al arrancar nos de un fallo diciendo que hay un problema con un applet. No tiene importancia, pero es una ventana molesta al arrancar el sistema; podemos corregirlo instalando el siguiente paquete: sudo apt-get install indicator-applet-session Continuamos instalando el escritorio remoto de la siguiente manera: sudo apt-get install vino Para comprobar que podemos conectarnos por escritorio remoto, deberemos activar "Sistema Preferencias Escritorio Remoto": True: Permitir a otros usuarios ver mi escritorio True: Permitir a otros usuarios controlar su escritorio False: Debe confirmar cada acceso a este equipo True: Requerir que el usuario introduzca una contrasea. Ejemplo: olivia True: Configurar la red automticamente para aceptar conexiones

True: Mostrar solo un icono cuando hay alguien conectado Desde un Pc-Remoto, deberemos utilizar VnC View (Windows) e introducir la IP del Servidor al que nos queremos conectar. Si queremos hacerlo con Ubuntu/Linux, hay otros programas disponibles, aunque generalmente nos conectaremos por SSH. Instalamos JAVA tambin por si lo necesitamos despus: sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get autoremove sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-plugin sun-java6-fonts y reiniciamos para arrancar con GNOME, igual que antes: sudo reboot Hasta aqu tenemos el sistema algo ms preparado que justo despus de la instalacin, pero todava nos faltan paquetes por instalar. Instalamos las libreras para hacer que freeradius y ldap funcionen correctamente de la siguiente manera: su - root sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get autoremove apt-get install debhelper libltdl3-dev libpam0g-dev libmysqlclient15-dev buildessential libgdbm-dev libldap2-dev libsasl2-dev libiodbc2-dev libkrb5-dev snmp autotoolsdev dpatch libperl-dev libtool dpkg-dev libpq-dev libsnmp-dev libssl-dev apt-get install binutils-doc dh-make curl debian-keyring debian-maintainers g++multilib g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg gcc-multilib manpages-dev autoconf automake1.9 flex bison gdb gcc-doc gcc-4.4-multilib libmudflap0-4.4-dev gcc-4.4locales libgcc1-dbg libgomp1-dbg libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7 gettextdoc glibc-doc krb5-doc krb5-user libtool-doc mysql-doc-5.0 postgresql-doc-8.4 lm-sensors libstdc++6-4.4-doc automaken gfortran fortran95-compiler gcj libmail-box-perl Puede ser que en esta segunda tanda de paquetes, el instalador nos avise diciendo que algunos ficheros se encuentran en paquetes con otro nombre, o que hay paquetes que han cambiado de nombre. En ese caso nos har unas recomendaciones de cambio de algunos paquetes a instalar, las aceptamos y seguimos adelante. Dependiendo de los paquetes recomendados, saltar (o no) una ventana de configuracin de Kerberos; pulsamos enter y la instalacin prosigue automticamente. Y para terminar de preparar el sistema nos falta editar el fichero /etc/hosts. Al igual que antes, sudo nano /etc/hosts y comentamos las siguientes lneas: #::1 localhost ip6-localhost ip6-loopback #fe00::0 ip6-localnet #ff00::0 ip6-mcastprefix #ff02::1 ip6-allnodes #ff02::2 ip6-allrouters #ff02::3 ip6-allhosts Y agregamos las siguiente lneas (dependiendo de como se llame nuestro pc, si por ejemplo se llama ubuntu rellenamos como a continuacin). Y hacemos lo mismo con la direccin IP, vemos cual tiene nuestra mquina asignada (haciendo ifconfig en un terminal, en el apartado eth0, o como se llame nuestro interfaz de red, sern 4 nmeros menores de 256 y separados por 3 puntos): 127.0.0.1 localhost home.com 192.168.27.248 ubuntu home.com

Nuestra IP ubuntu home.com Hasta aqu ya tendramos una parte configurada, a continuacin veremos cmo configurar el freeradius y ldap para que los usuarios puedan loguearse en la red inalmbrica. Instalando freeradius Ahora que ya tenemos preparado el sistema, empezamos instalando los paquetes correspondientes al servidor RADIUS freeradius. Para ello: sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get autoremove sudo apt-get install freeradius freeradius-mysql freeradius-dialupadmin Con esto estara instalado el servidor, para comprobar que funciona podemos hacer una prueba arrancndolo en modo debug. Para ello primero lo paramos haciendo como root (prececiendo el comando de sudo como hemos hecho hasta ahora, o habindonos logueado como root con su - root): /etc/init.d/freeradius stop Nos dir que ha parado correctamente el demonio: * Stopping FreeRADIUS daemon freeradius [ OK ] Y luego lo arrancamos de manera que nos muestre las trazas con: freeradius -X El servidor arranca y se queda a la espera, las ltimas lneas sern parecidas a: Listening on authentication address * port 1812 Listening on accounting address * port 1813 Listening on proxy address * port 1814 Ready to process requests. Ahora tenemos que abrir otra pestaa de la terminal en la que trabajamos (File Open tab) y podemos probar qu ocurre cuando un usuario trata de hacer login. Para ello usamos el comando: radtest ncalderon 1234561 127.0.0.1 1812 testing123 donde radtest es el comando que enva paquetes al servidor Radius mostrando la respuesta, las 2 siguientes palabras son el usuario y su password; despus viene la direccin IP del servidor, 1812 es el puerto, y la ltima palabra es el shared secret del propio servidor. Dicho comando debe devolver una respuesta de acceso denegado si lo datos eran incorrectos, podemos verlo en el siguiente ejemplo: root@popeye:/etc/ldap# radtest ncalderon 1234561 127.0.0.1 1812 testing123 Sending Access-Request of id 202 to 127.0.0.1 port 1812 User-Name = "ncalderon" User-Password = "1234561" NAS-IP-Address = 192.168.27.248 NAS-Port = 1812 rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=202, length=20 rad_verify: Received Access-Reject packet from client 127.0.0.1 port 1812 with invalid signature (err=2)! (Shared secret is incorrect.) (En este caso, como no tenemos ldap configurado, siempre nos devolver un accessreject, bien porque el shared secret es incorrecto, o bien porque el usuario no aparece en los registros.)

Ahora tenemos instalado el servidor, y parece que funciona, porque en el ejemplo anterior hemos visto que deniega el acceso a un usuario que no cumple los requisitos. Por tanto, nos falta configurarlo para que se adapte a nuestras necesidades, para ello cambiaremos algunos parmetros en los archivos de configuracin. Freeradius cuenta con diversos archivos que deben configurarse para lograr que funcione como se requiere. Los principales son: radiusd.conf /etc/freeradius/radiusd.conf eap.conf /etc/freeradius/eap.conf users /etc/freeradius/users default /etc/freeradius/sites-enabled/default -> ../sites-available/default clients.conf /etc/freeradius/clients.conf sql.conf /etc/freeradius/sql.conf ldap /etc/freeradius/modules/ldap Todos localizados en /etc/freeradius. A continuacin se describe la configuracin que debe haber en cada uno de ellos: radiusd.conf prefix = /usr exec_prefix = /usr sysconfdir = /etc localstatedir = /var sbindir = ${exec_prefix}/sbin logdir = /var/log/freeradius raddbdir = /etc/freeradius radacctdir = ${logdir}/radacct confdir = ${raddbdir} run_dir = ${localstatedir}/run/freeradius db_dir = ${raddbdir} libdir = /usr/lib/freeradius pidfile = ${run_dir}/freeradius.pid max_request_time = 30 cleanup_delay = 5 max_requests = 1024 listen { type = auth ipaddr = * port = 0 } listen { ipaddr = * port = 0 type = acct

} hostname_lookups = no allow_core_dumps = no regular_expressions = yes extended_expressions = yes log { destination = files file = ${logdir}/radius.log syslog_facility = daemon stripped_names = no auth = no auth_badpass = no auth_goodpass = no } checkrad = ${sbindir}/checkrad security { max_attributes = 200 reject_delay = 1 status_server = yes } proxy_requests = yes $INCLUDE proxy.conf $INCLUDE clients.conf thread pool { start_servers = 5 max_servers = 32 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 } modules { $INCLUDE ${confdir}/modules/ $INCLUDE eap.conf $INCLUDE sql.conf } instantiate { exec expr expiration logintime }

max_entries = 255 } } ttls { default_eap_type = md5

copy_request_to_tunnel = no use_tunneled_reply = no virtual_server = "inner-tunnel" } peap { default_eap_type = mschapv2 copy_request_to_tunnel = no use_tunneled_reply = no virtual_server = "inner-tunnel" } mschapv2 { } } Una vez configurado este archivo, deben crearse ligas simblicas a los certificados que EAP necesita, para que pueda localizarlos. Para ello, se entra al directorio donde se guardan los certificados y se ejecuta un rehash: cd /etc/freeradius/certs c_rehash Users Este archivo es el que contiene la informacin de los usuarios que pueden acceder a la red, en caso de que no se use otro mtodo. En nuestro caso, este archivo no tiene mucho uso, puesto que se usar un directorio ldap. Todas las configuraciones que tengan como usuario DEFAULT, son las que se asignarn a los usuarios para los que no estn especificadas ningunas. NOTA: Pero si queremos probarlo podramos editar el fichero /etc/freeradius/users y descomentar la lnea que contiene: "John Doe" Auth-Type := Local, User-Password == "hello" Reply-Message = "Hello, %u" Lo que si hay que modificar en este fichero "/etc/freeradius/users" es "System" por "LDAP" por lo que debera quedar algo asi: DEFAULT Framed-Protocol == PPP Framed-Protocol = PPP, Framed-Compression = Van-Jacobson-TCP-IP DEFAULT Hint == "CSLIP" Framed-Protocol = SLIP, Framed-Compression = Van-Jacobson-TCP-IP DEFAULT Hint == "SLIP" Framed-Protocol = SLIP DEFAULT Auth-Type = LDAP Fall-Through = 1 Default Este archivo est contenido en el path: /etc/freeradius/sites-enabled Y es un link al fichero: default -> ../sites-available/default El contenido que debe tener es el siguiente: authorize { preprocess chap

mschap suffix eap { ok = return } files # sql ldap expiration logintime pap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } unix Auth-Type LDAP { ldap } eap } preacct { preprocess acct_unique suffix files } accounting { detail unix radutmp # sql attr_filter.accounting_response } session { radutmp # sql } post-auth { # sql ldap

exec Post-Auth-Type REJECT { attr_filter.access_reject } } pre-proxy { } post-proxy { eap } inner-tunnel Este fichero se encuentra en el path: /etc/freeradius/sites-enabled Y es un link al fichero: inner-tunnel -> ../sites-available/inner-tunnel El contenido que debe tener es el siguiente: server inner-tunnel { authorize { chap mschap unix suffix update control { Proxy-To-Realm := LOCAL } eap { ok = return } files ldap expiration logintime pap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } unix Auth-Type LDAP { ldap } eap

} session { radutmp } post-auth { ldap Post-Auth-Type REJECT { attr_filter.access_reject } } pre-proxy { } post-proxy { eap } clients.conf Configuramos clients.conf que indica los hosts desde los que se aceptan las peticiones. Aqu se especifican los IPs o subredes desde las cuales se aceptarn peticiones. Si llega una peticin de acceso desde un IP que no est registrada, el servidor RADIUS simplemente la ignora, negndole el acceso. En nuestro caso se acepta al localhost y al AP o router "COOVA-AP" que enviar las solicitudes. En la lnea que pone secret le ponemos howard, y en las ltimas lneas: client 192.168.0.0/24 { secret = howard shortname = private-network-1-LAN-WAN } client 192.168.0.0/16 { secret = howard shortname = private-network-2-LAN-WAN } client 192.168.27.24 { secret = howard shortname = AP-ROUTER-COOVA-AP-Juanmi } client 192.168.27.21 { secret = howard shortname = AP-ROUTER-COOVA-AP-Pedro } client 192.168.182.0/24 { secret = howard shortname = private-network-3-WIFI }

/etc/freeradius/modules/ldap A continuacin se puede ver la configuracin del archivo modules/ldap (la mayora de comentarios se han omitido): hi@ubuntu:~$ more /etc/freeradius/modules/ldap ldap { # # Note that this needs to match the name in the LDAP # server certificate, if you're using ldaps. # server = "ldap.your.domain" server = "ubuntu" #identity = "cn=admin,o=My Org,c=UA" identity = "cn=admin,dc=home,dc=com" #password = mypass # basedn = "o=My Org,c=UA" basedn = "ou=Users,dc=home,dc=com" password = 1234 password_attribute = "Cleartext-Password" access_attr = uid # filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" filter = "(uid=%u)" #base_filter = "(objectclass=radiusprofile)" ldap_connections_number = 5 timeout = 4 timelimit = 3 net_timeout = 1 tls { start_tls = no } dictionary_mapping = ${confdir}/ldap.attrmap edir_account_policy_check = no } Ahora que ya tenemos configurado el servidor radius podemos reiniciar el sistema y comprobar si funciona correctamente. Para ello, sudo reboot y cuando se haya producido el reinicio, paramos el servidor radius y lo arrancamos en modo traza: sudo /etc/init.d/freeradius stop sudo freeradius -X Apareciendo como ltima lnea, algo parecido a lo siguiente: Fri May 21 14:10:58 2010 : Debug: Ready to process requests. Ahora podramos realizar la prueba de validacin contra fichero "users" del siguiente modo: sudo radtest "John Doe" hello 127.0.0.1 0 howard La traza debera devolver algo parecido a lo siguiente: Sending Access-Request of id 136 to 127.0.0.1 port 1812

User-Name = "John Doe" User-Password = "hello" NAS-IP-Address = 255.255.255.255 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=136, length=37 Reply-Message = "Hello, John Doe" Para abortar el modo debug deberiamos hacer "Ctrl + C" Y para reiniciar freeradius en modo "No Debug" se lanzara el comando: sudo /etc/init.d/freeradius start Es posible que en ejemplo de arriba no nos de el mismo mensaje, o incluso que el servidor no arranque correctamente porque le falte algn paquete; depende de como se resuelvan las dependencias entre paquetes. Tendramos que revisarlo llegado el caso, pero en este ejemplo no ha aparecido ningn problema. Vamos a instalar y configurar openldap como siguiente paso, y para asegurar que el servidor radius arranque correctamente. Instalando openldap Previo: los paquetes relacionados con openldap ocasionalmente tienen bugs y su configuracin no es correcta pese a haber modificado los archivos de configuracin correctamente, en caso de que queramos reinstalar todo lo relacionado con ldap podemos hacerlo removiendo inicialmente todos los paquetes con: apt-get --purge remove slapd ldap-utils para hacer una instalacin limpia a continuacin. Para instalarlo nuevamente hacemos lo siguiente: apt-get -y install slapd ldap-utils libldap-2.4-2 libdb4.6 Puede que nos haga las siguientes preguntas, a las que responderemos como se indica a continuacin: Desea omitir la configuracin del servidor OpenLDAP? NO Desea que se borre la base de datos cuando se purgue el paquete slapd? NO Permitir el protocolo LDAPv2? SI Si no nos hiciera las preguntas que se indicaron anteriormente, deberamos ejecutar el comando: dpkg-reconfigure slapd para que nos lleve al men con las preguntas previas. Y con esto tenemos instalado nuestro openldap. A continuacin veremos algunos comandos bsicos para su manejo. Para pararlo se puede ejecutar: /etc/init.d/slapd stop Y para arrancarlo se puede ejecutar /etc/init.d/slapd start Para comprobar si est arrancado podemos ejecutar el siguiente comando: ps -ef | grep slapd | grep ldap | awk '{ print $2 }' Para empezar a configurarlo, copiamos el schema de freeradius en el ldap: cp /usr/share/doc/freeradius/examples/openldap.schema /etc/ldap/schema/freeradius.schema Luego cargamos los siguientes LDIF que son necesarios: ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif y nos dar un mensaje como el siguiente avisando que se han cargado correctamente: root@popeye:/etc/init.d# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=cosine,cn=schema,cn=config" root@popeye:/etc/init.d# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=inetorgperson,cn=schema,cn=config" root@popeye:/etc/init.d# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=nis,cn=schema,cn=config" A continuacin editamos el fichero /etc/ldap/slapd.conf y agregamos lo siguiente # Schema and objectClass definitions include /etc/ldap/schema/freeradius.schema y damos los permisos necesarios a la BD del ldap: chown openldap:openldap /var/lib/ldap/ -R Luego debemos crear el fichero ejemplo /etc/ldap/db.ldif con el siguiente contenido: ########################################################### # DATABASE SETUP ########################################################### # Load modules for database type dn: cn=module{0},cn=config objectClass: olcModuleList cn: module{0} olcModulePath: /usr/lib/ldap olcModuleLoad: {0}back_hdb # Create directory database dn: olcDatabase={1}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcDbDirectory: /var/lib/ldap olcSuffix: dc=home,dc=com olcRootDN: cn=admin,dc=home,dc=com olcRootPW: 1234 olcAccess: {0}to attrs=userPassword,shadowLastChange by

dn="cn=admin,dc=home,d c=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=home,dc=com" write by * read olcLastMod: TRUE olcDbCheckpoint: 512 30 olcDbConfig: {0}set_cachesize 0 2097152 0 olcDbConfig: {1}set_lk_max_objects 1500 olcDbConfig: {2}set_lk_max_locks 1500 olcDbConfig: {3}set_lk_max_lockers 1500 olcDbIndex: uid pres,eq olcDbIndex: cn,sn,mail pres,eq,approx,sub olcDbIndex: objectClass eq ########################################################### # DEFAULTS MODIFICATION ########################################################### # Some of the defaults need to be modified in order to allow # remote access to the LDAP config. Otherwise only root # will have administrative access. dn: cn=config changetype: modify delete: olcAuthzRegexp dn: olcDatabase={-1}frontend,cn=config changetype: modify delete: olcAccess dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {CRYPT}7hzU8RaZxaGi2 dn: olcDatabase={0}config,cn=config changetype: modify delete: olcAccess ########################################################## Y lo agregamos al servidor: ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif El resultado debe ser algo as: root@popeye:/etc/ldap# ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=module{0},cn=config" adding new entry "olcDatabase={1}hdb,cn=config" modifying entry "cn=config" modifying entry "olcDatabase={-1}frontend,cn=config" modifying entry "olcDatabase={0}config,cn=config" modifying entry "olcDatabase={0}config,cn=config"

Ver que sigue corriendo el siguiente proceso: root@popeye:/etc/ldap# ps -ef | grep slapd | grep -v ldap openldap 4609 1 0 16:46 ? 00:00:00 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d/ Tambin podra ser este otro, aunque lo normal es que aparezca el anteriormente indicado /usr/sbin/slapd -h ldap://127.0.0.1:389/ ldaps:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d/ Si quisiramos arrancar el ldap en modo debug podramos ejecutar el comando siguiente: /usr/sbin/slapd -h "ldap:/// ldaps:///" -d -1 o /usr/sbin/slapd -h "ldap:/// ldaps:///" -d 256 Continuamos configurando, ahora con un plugin con el que podemos ver el estado de nuestro directorio LDAP de manera ms amigable empleando cualquier navegador web, gracias a phpldapadmin: http://192.168.27.248/phpldapadmin Siendo el login: cn=admin,dc=home,dc=com y la Password: 1234 Hay que recordar que el fichero /etc/phpldapadmin/config.php debe estar configurado con lo siguiente: $ldapservers->SetValue($i,'server','name','POPEYE LDAP Server'); $ldapservers->SetValue($i,'server','host','192.168.1.2'); $ldapservers->SetValue($i,'server','base',array('dc=home,dc=com')); $ldapservers->SetValue($i,'server','auth_type','session'); $ldapservers->SetValue($i,'login','dn','cn=admin,dc=home,dc=com'); $ldapservers->SetValue($i,'login','pass',''); Y que el fichero "/etc/freeradius/modules/ldap" debe contener algo as: server = "home.com" identity = "cn=admin,dc=home,dc=com" basedn = "ou=Users,dc=home,dc=com" password = 1234 password_attribute = "Cleartext-Password" access_attr = uid filter = "(uid=%u)" A continuacin editamos el fichero "/etc/freeradius/users" y sustituimos: DEFAULT Auth-Type = System Fall-Through = 1 por DEFAULT Auth-Type = LDAP Fall-Through = 1 Introducimos la modificacin hecha anteriormente en el fichero "/etc/ldap/slapd.conf": cd /etc/ldap/ slaptest -f slapd.conf -F slapd.d El resultado debe ser algo as: root@popeye:/etc/ldap# slaptest -f slapd.conf -F slapd.d config file testing succeeded Y deberemos modificar los permisos: chown -R openldap:openldap /etc/ldap/slapd.d

Configuramos nuestro cliente LDAP en el servidor para que nos podamos conectar, editando el fichero /etc/ldap/ldap.conf BASE dc=home,dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 URI ldap://192.168.1.2 HOST 192.168.1.2 Crearemos el fichero "ejemplo.ldif" para crear nuestra base de datos que contendr los usuarios para "FREERADIUS" # Tree root dn: dc=home,dc=com objectClass: dcObject objectclass: organization o: home.com dc: home description: Tree root # LDAP admin dn: cn=admin,dc=home,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin userPassword: 1234 description: LDAP administrator Para introducir nuestra BD podemos lanzar el siguiente comando: ldapadd -x -D cn=admin,dc=home,dc=com -W -f ejemplo.ldif El resultado sera algo as: root@popeye:/etc/ldap# ldapadd -x -D cn=admin,dc=home,dc=com -W -f ejemplo.ldif Enter LDAP Password: adding new entry "dc=home,dc=com" adding new entry "cn=admin,dc=home,dc=com" Para comprobar que la entrada ha sido correcta: ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb Enter LDAP Password: 1234 dn: olcDatabase={1}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcDbDirectory: /var/lib/ldap olcSuffix: dc=home,dc=com olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=home,d c=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=home,dc=com" write by * read olcLastMod: TRUE olcRootDN: cn=admin,dc=home,dc=com

olcRootPW: 1234 olcDbCheckpoint: 512 30 olcDbConfig: {0}set_cachesize 0 2097152 0 olcDbConfig: {1}set_lk_max_objects 1500 olcDbConfig: {2}set_lk_max_locks 1500 olcDbConfig: {3}set_lk_max_lockers 1500 olcDbIndex: uid pres,eq En caso de que al crear este ejemplo y aadirlo nos aparezca algn mensaje de error (como que el servidor no est corriendo), o bien le especificamos el host con -h home.com (porque hemos puesto home.com en ldap, habra que cambiarlo si se hubiese puesto de otra manera en la configuracin) o bien cambiamos en ldap.conf el host a localhost. Luego crearemos el rbol de donde colgarn los usuarios de FREERADIUS. Crearemos el fichero "tree-freeradius.ldif" con el siguiente contenido: #Se define la unidad organizacional para el arbol freeradius dn: ou=Users,dc=home,dc=com objectClass: organizationalUnit objectClass: top objectClass: radiusprofile ou: Users userPassword: 1234 description: LDAP FREERADIUS cn: ObjectClass Y lo introduciremos con el comando: ldapadd -x -D cn=admin,dc=home,dc=com -W -f tree-freeradius.ldif Con lo que la estructura debera quedar algo as: root@popeye:/etc/init.d# ldapsearch -xLLL -b dc=home,dc=com dn: dc=home,dc=com objectClass: dcObject objectClass: organization o: home.com dc: home description: Tree root dn: cn=admin,dc=home,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator dn: ou=Users,dc=home,dc=com objectClass: organizationalUnit objectClass: radiusprofile objectClass: top ou: Users description: LDAP FREERADIUS cn: objectClass Y finalmente, para aadir los usuarios al rbol del freeradius hacemos lo siguiente. Creamos un fichero, ejemplo "user-freeradius.ldif" con el siguiente contenido:

dn: uid=juan,ou=Users,dc=home,dc=com objectClass: account objectClass: simpleSecurityObject objectClass: top uid: juan userPassword: juan1 dn: uid=pepe,ou=Users,dc=home,dc=com objectClass: account objectClass: simpleSecurityObject objectClass: top uid: pepe userPassword: pepe1 Y ejecutaramos el siguiente comando: ldapadd -x -D cn=admin,dc=home,dc=com -W -f user-freeradius.ldif Y debe devolver algo parecido a lo siguiente: root@popeye:/etc/ldap# ldapadd -x -D cn=admin,dc=home,dc=com -W -f nuevousuario.ldif Enter LDAP Password: adding new entry "uid=pepe,ou=Users,dc=home,dc=com" adding new entry "uid=juan,ou=Users,dc=home,dc=com" Podremos comprobar el rbol o bien desde la interfaz web en: http://192.168.27.248/phpldapadmin o desde lnea de comando con el comando: ldapsearch -xLLL -b dc=home,dc=com Para comprobar que hemos introducido correctamente los usuarios y que son validados satisfactoriamente por freeradius podemos realizar la siguiente prueba: Lanzar el comando: radtest pepe pepe1 home.com 1 howard que debe devolver lo siguiente como resultado satisfactorio: root@popeye:/etc/ldap# radtest pepe pepe1 home.com 1 howard Sending Access-Request of id 151 to 127.0.0.1 port 1812 User-Name = "pepe" User-Password = "pepe1" NAS-IP-Address = 192.168.27.248 NAS-Port = 1 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=151, length=20 Un resultado errneo sera el siguiente: root@popeye:/etc/ldap# radtest pepe pepe3 home.com 1 howard Sending Access-Request of id 150 to 127.0.0.1 port 1812 User-Name = "pepe" User-Password = "pepe3" NAS-IP-Address = 192.168.27.248 NAS-Port = 1 rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=150, length=20 En la 2 parte se describe como funciona el Roaming, y como empezar a monitorizar los equipos