You are on page 1of 19

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 empezar la
instalación no consiga resolver el DHCP para obtener una dirección IP, y en ese caso
tengamos que crear una máquina nueva cambiando la configuración de red a NAT/Bridge.
Una vez instalado, tenemos nuestro servidor virtualizado aunque con lo básico: sin
entorno gráfico, 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 línea 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-pack-
gnome-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 gráfico (sudo reboot). Al arrancar, nos pide de manera gráfica usuario y
contraseña, 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 español. Le damos a add y añadimos uno con distribución española (language
spanish, spain). Lo marcamos como teclado por defecto, y lo probamos abajo. Debería
funcionar correctamente; para casos más complejos como teclados inalámbricos o con
características especiales, puede que sea más difícil de configurar.

Una vez tenemos el sistema en castellano y reconociendo el teclado correctamente,


empezamos con la instalación 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 opción que queremos, y pulsando barra espaciadora para
marcar/desmarcar, y terminamos con enter) y empezará a descargar paquetes
automáticamente; durante la instalación preguntará una contraseña 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 instalación 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
añadimos la siguiente línea, para buscar paquetes en un repositorio más:
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-generic-
pae
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 contraseña. Ejemplo: olivia
True: Configurar la red automáticamente 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 también por si lo necesitamos después:
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 más preparado que justo después de la instalación,
pero todavía nos faltan paquetes por instalar. Instalamos las librerías 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 build-
essential libgdbm-dev libldap2-dev libsasl2-dev libiodbc2-dev libkrb5-dev snmp autotools-
dev 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.4-
locales libgcc1-dbg libgomp1-dbg libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7 gettext-
doc 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 configuración de Kerberos;
pulsamos enter y la instalación prosigue automáticamente.
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 líneas:
#::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 líneas (dependiendo de como se llame nuestro pc, si por
ejemplo se llama ubuntu rellenamos como a continuación). Y hacemos lo mismo con la
dirección IP, vemos cual tiene nuestra máquina asignada (haciendo ifconfig en un
terminal, en el apartado eth0, o como se llame nuestro interfaz de red, serán 4 números
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 tendríamos una parte configurada, a continuación veremos cómo configurar
el freeradius y ldap para que los usuarios puedan loguearse en la red inalámbrica.
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 estaría instalado el servidor, para comprobar que funciona podemos hacer una
prueba arrancándolo en modo debug. Para ello primero lo paramos haciendo como root
(prececiendo el comando de “sudo” como hemos hecho hasta ahora, o habiéndonos
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 líneas serán 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 pestaña 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 envía paquetes al servidor Radius mostrando la
respuesta, las 2 siguientes palabras son el usuario y su password; después viene la
dirección 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 access-
reject, 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 parámetros en los archivos de configuración.
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 continuación se describe la configuración 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 simbólicas 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 información de los usuarios que pueden acceder a la
red, en caso de que no se use otro método. 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 asignarán a los usuarios para los que no estén
especificadas ningunas.
NOTA: Pero si queremos probarlo podríamos editar el fichero /etc/freeradius/users y
descomentar la línea 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 debería 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 aceptarán peticiones. Si llega
una petición de acceso desde un IP que no esté registrada, el servidor RADIUS
simplemente la ignora, negándole el acceso. En nuestro caso se acepta al localhost y al
AP o router "COOVA-AP" que enviará las solicitudes.
En la línea que pone “secret” le ponemos howard, y en las últimas líneas:
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 continuación se puede ver la configuración del archivo modules/ldap (la mayoría 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 línea, algo parecido a lo siguiente:
Fri May 21 14:10:58 2010 : Debug: Ready to process requests.
Ahora podríamos realizar la prueba de validación contra fichero "users" del siguiente
modo:
sudo radtest "John Doe" hello 127.0.0.1 0 howard

La traza debería 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 lanzaría 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 algún paquete; depende de como se
resuelvan las dependencias entre paquetes. Tendríamos que revisarlo llegado el caso,
pero en este ejemplo no ha aparecido ningún 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
configuración no es correcta pese a haber modificado los archivos de configuración
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 instalación limpia a continuación. 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
continuación:
¿Desea omitir la configuración 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, deberíamos ejecutar el
comando:
dpkg-reconfigure slapd
para que nos lleve al menú con las preguntas previas. Y con esto tenemos instalado
nuestro openldap. A continuación veremos algunos comandos básicos 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 continuación 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/
También podría 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 quisiéramos arrancar el ldap en modo debug podríamos 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 más 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 continuación 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 modificación 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 sería 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 añadirlo nos aparezca algún 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, habría que cambiarlo si se hubiese
puesto de otra manera en la configuración) o bien cambiamos en “ldap.conf” el host a
“localhost”.
Luego crearemos el árbol de donde colgarán 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 debería 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 añadir 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 ejecutaríamos 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 línea 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 erróneo sería 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

You might also like