Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 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 ?):
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:
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:
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade &&
sudo apt-get autoremove
Aceptamos y dejamos que se instalen los paquetes, y cuando haya finalizado, instalamos
el Firefox:
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:
Para comprobar que podemos conectarnos por escritorio remoto, deberemos activar
"Sistema → Preferencias → Escritorio Remoto":
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade &&
sudo apt-get autoremove
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
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:
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):
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
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade &&
sudo apt-get autoremove
/etc/init.d/freeradius stop
freeradius -X
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:
Dicho comando debe devolver una respuesta de acceso denegado si lo datos eran
incorrectos, podemos verlo en el siguiente ejemplo:
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
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
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/
authorize {
preprocess
chap
mschap
suffix
eap
# sql
ldap
}
Eap.conf
Se configura este archivo para que EAP (Extensible Authentication Protocol) funcione
como protocolo de autenticación. EAP se utilizará como PEAP (Protected EAP). El cual, a
su vez, usará MSCHAPV2 (Microsoft Challenge-Handshake Authentication Protocol).
Además se requiere establecer la lista de certificados.
eap {
default_eap_type = md5
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 2048
md5 {
}
leap {
}
gtc {
auth_type = PAP
}
tls {
certdir = ${confdir}/certs
cadir = ${confdir}/certs
private_key_password = whatever
private_key_file = ${certdir}/server.pem
certificate_file = ${certdir}/server.pem
CA_file = ${cadir}/ca.pem
dh_file = ${certdir}/dh
random_file = ${certdir}/random
cipher_list = "DEFAULT"
make_cert_command = "${certdir}/bootstrap"
cache {
enable = no
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.
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
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
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.
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
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"
# 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 podríamos realizar la prueba de validación contra fichero "users" del siguiente
modo:
Vamos a instalar y configurar openldap como siguiente paso, y para asegurar que el
servidor radius arranque correctamente.
Instalando openldap
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
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 nos dará un mensaje como el siguiente avisando que se han cargado correctamente:
###########################################################
# 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
También podría ser este otro, aunque lo normal es que aparezca el anteriormente
indicado
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
Hay que recordar que el fichero /etc/phpldapadmin/config.php debe estar configurado con
lo siguiente:
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)"
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
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”.
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
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