Servidor Radius II

30 10 2007

Retomando este tema seguiré exponiendo la información sobre los servidores Radius.

Existen algunos mensajes definidos por los RFC 2865 y 2866:

Access-Request→ Enviado por un cliente RADIUS para solicitar autenticación y autorización para conectarse a la red. Debe contener el usuario y contraseña (ya sea de usuario o CHAP); además del puerto NAS, si es necesario.

Access-Accept→ Enviado por un servidor RADIUS en respuesta a un mensaje de Access-Request. Informa que la conexión está autenticada y autorizada y le envía la información de configuración para comenzar a usar el servicio.

Access-Reject→ Enviado por un servidor RADIUS en respuesta a un mensaje de Access-Request. Este mensaje informa al cliente RADIUS que el intento de conexión ha sido rechazado. Un servidor RADIUS envía este mensaje ya sea porque las credenciales no son auténticas o por que el intento de conexión no está autorizado.

Access-Challenge→ Envío de un servidor RADIUS en respuesta a un mensaje de Access-Request. Este mensaje es un desafío para el cliente RADIUS. Si este tipo de paquete es soportado, el servidor pide al cliente que vuelva a enviar un paquete Access-Request para hacer la autenticación. En caso de que no sea soportado, se toma como un Access-Reject.

Accounting-Request→ Enviado por un cliente RADIUS para especificar información de cuenta para una conexión que fue aceptada.

Accounting-Response→ Enviado por un servidor RADIUS en respuesta a un mensaje de Accounting-Request. Este mensaje reconoce el procesamiento y recepción exitosa de un mensaje de Accouting-Response.

Para la implementación del servidor RADIUS, utilizamos las siguientes herramientas de hardware y software:

  • Una laptop con Linux que fungirá como servidor RADIUS (en nuestro caso, Ubuntu).
  • Un Access Point-Router WRV200 Business Service.
  • Laptops con tarjetas inalámbricas usadas como clientes.
  • FreeRADIUS como servidor.
  • MySQL para el almacenamiento de datos de usuarios.

A continuación se presentan los pasos a detalle seguidos para la configuración de FreeRADIUS.

Instalación

Actualmente, FreeRADIUS permite su instalación mediante la descarga y compilación del código fuente. Sin embargo, para su mejor manejo, resulta más práctico convertir el código fuente en un paquete Debian e instalarlo desde el mismo. Para ello, primero se instala lo siguiente para la construcción de paquetes Debian. Cabe mencionar que build-essential no funciona en cualquier sistema Debian.

# apt-get install build-essential
# apt-get install apt-src

Posteriormente, se actualizan las listas de paquetes disponibles (para que se descargue la versión más actual en los repositorios), se crea el directorio donde se guardará FreeRADIUS y se descarga.

# apt-src update
# mkdir ~/build_freeradius

# cd ~/build_freeradius

# apt-src install freeradius

El documento ‘rules’ en ‘~/build_freeradius/freeradius-1.1.3/debian’ debe modificarse para que las siguientes líneas se vean así:

#buildssl=--without-rlm_eap_peap --without-rlm_eap_tls
--without-rlm_eap_ttls --without-rlm_otp --without-rlm_sql_postgresql

--without-snmp
#modulelist=krb5 ldap sql_mysql sql_iodbc
buildssl=--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir`
--with-rlm_sql_postgresql_include_dir=`pg_config --includedir`
modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql

Esto hará que FreeRADIUS se instale con los módulos que necesitamos.

El archivo ‘control’, en el mismo directorio, debe verse así:

Source: freeradiusBuild-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev,libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (>= 2),libperl-dev, libtool, dpkg-dev (>= 1.13.19), libssl-dev, libpq-devBuild-Conflicts:

Esto hará que FreeRADIUS se asocie con las librerías que requiere para funcionar. En nuestro caso, principalmente, MySQL y SSL
Ahora se ejecutan los siguientes comandos para actualizar el archivo ‘control’ y para instalar las librerías sin problemas:

# cd ~/build_freeradius/freeradius-1.1.3/debian# cat control.postgresql >> control# apt-get install libssl-dev libpq-dev

Ahora deben cambiarse las siguientes líneas en el archivo ‘changelog’ encontrado en el directorio ‘~/build_freeradius/freeradius-1.1.3/debian/’.

freeradius (1.1.3-3ubuntu1tls) feisty; urgency=low* Add tls support for compilation-- reauthor <reauthor@gmail.com> Fri, 16 Mar 2007 20:22:40 +0200

Finalmente, se escriben los siguientes comandos para construir el paquete e instalarlo. Además, se requirió la instalación del paquete de conexión de FreeRADIUS con MySQL llamado: ‘freeradius-mysql_1.1.3-3ubuntu1tls_i386.deb’.

# cd ~/build_freeradius# fakeroot dpkg-buildpackage -b –uc freeradius# dpkg -i freeradius_1.1.3-3ubuntu1tls_i386.deb# dpkg -i freeradius-mysql_1.1.3-3ubuntu1tls_i386.deb

Al instalarse los paquetes, se ejecutan; para poder configurarlos, deben pararse con el siguiente comando:

# /etc/init.d/freeradius stop

Configuración

FreeRADIUS cuenta con diversos archivos que deben configurarse para lograr que funcione como se requiere. Los principales son: radiusd.conf, users, clients.conf, sql.conf y eap.conf, todos localizados en /etc/freeradius. A continuación se describe la configuración que debe haber en cada uno de ellos. Lo más importante se marca con rojo.

Radiusd.conf

Aquí solamente es necesario cambiar los argumentos relacionados con SQL, EAP y la configuración del dominio al que los clientes se conectarán. SQL se configura para que RADIUS se conecte a él para comparar la información de autenticación. EAP es el protocolo para la autenticación de usuario, usada normalmente en redes inalámbricas.
Este archivo de configuración es demasiado largo así que aquí sólo se presentan las secciones de interés que fueron modificadas. Para comenzar, debe sustituirse todo ${confdir} encontrado en el archivo por el directorio actual de FreeRADIUS, en nuestro caso ‘/etc/freeradius’.

modules { pap {auto_header = yes}chap {

authtype = CHAP}

pam {pam_auth = radiusd

}unix {

cache = nocache_reload = 600

radwtmp = ${logdir}/radwtmp}

$INCLUDE /etc/freeradius/eap.confmschap {

authtype = MS-CHAPuse_mppe = yes

require_encryption = yesrequire_strong = no

# Windows envía un nombre de usuario como DOMINIO\usuario;
# pero, en la respuesta a Challenge, sólo envía el
# usuario. Esto provoca un error. Al colocar sí en este
# hack, el error se corrige.with_ntdomain_hack = yes

}ldap {

server = "ldap.your.domain"basedn = "o=My Org,c=UA"

filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"start_tls = no

access_attr = "dialupAccess"dictionary_mapping = ${raddbdir}/ldap.attrmap

ldap_connections_number = 5timeout = 4

timelimit = 3net_timeout = 1

}...

preprocess {huntgroups = /etc/freeradius/huntgroups

hints = /etc/freeradius/hintswith_ascend_hack = no

ascend_channels_per_line = 23# Mismo motivo que el pasado, pero para hacerlo en el

# preprocesamientowith_ntdomain_hack = yes

with_specialix_jetstream_hack = nowith_cisco_vsa_hack = no

}...

ippool main_pool {# Se coloca el rango de IPs disponibles y la máscara de

# redrange-start = 192.167.1.1

range-stop = 192.167.1.254netmask = 255.255.255.0

cache-size = 800session-db = ${raddbdir}/db.ippool

ip-index = ${raddbdir}/db.ipindexoverride = no

maximum-timeout = 0}

}
instantiate { execexpr}authorize {

preprocesschap

mschapsuffix

# EAP, activa el protocolo EAP para autorización. FILES, hace que

# se lea el archivo ‘users’. SQL, hace que se entre a la base de# datos de MySQL para buscar los datos del cliente.

eapfiles

sql}

authenticate {Auth-Type PAP {

pap}

Auth-Type CHAP {chap

}Auth-Type MS-CHAP {

mschap}

unix# Habilita la autenticación EAP

eap}

preacct {preprocess

acct_uniquesuffix

}accounting {

detailunix

radutmp# Lee las cuentas localizadas en la base de datos de MySQL

sql}

session {radutmp

# Usa MySQL en el manejo de sesionessql

}post-auth {

# Usa MySQL para las tareas de post-autenticaciónsql

}pre-proxy {

}post-proxy {

eap}

Sql.conf
Se decidió usar MySQL como backend para los usuarios de RADIUS debido a que permite administrarlos de forma simple y flexible. Es más sencillo agregar campos a una base de datos (que puede hacerse incluso desde una aplicación de escritorio o web) que modificar los archivos de configuración de FreeRADIUS.
Una vez que en el archivo de configuración ‘radiusd.conf’ se ha activado el soporte para SQL, debemos configurar el archivo ‘sql.conf’ que contiene información sobre el servidor SQL y las consultas que se deben hacer para obtener la información de los usuarios.
En las primeras líneas se da información sobre el servidor SQL, después viene la definición de las tablas y, por último, las consultas. Las consultas no se colocaron en este archivo, pero pueden verse en el archivo adjunto.

sql { driver = "rlm_sql_mysql"
 # Es importante colocar el IP del servidor. El usuario root o el

 # usuario que tenga permisos a la base de datos ‘radius’ que
 # después crearemos. Finalmente, se coloca la contraseña de este
 # usuario.
   server = "localhost"
   login = "root"
   password = "alipi"

 # Definición de base de datos y tablas

radius_db = "radius"acct_table1 = "radacct"

acct_table2 = "radacct"postauth_table = "radpostauth"

authcheck_table = "radcheck"authreply_table = "radreply"

groupcheck_table = "radgroupcheck"groupreply_table = "radgroupreply"

usergroup_table = "usergroup"nas_table = "nas"

deletestalesessions = yessqltrace = no

sqltracefile = ${logdir}/sqltrace.sqlnum_sql_socks = 5

connect_failure_retry_delay = 60sql_user_name = "%{User-Name}"

...}

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 { # Se le dice que use PEAPdefault_eap_type = peaptimer_expire = 60

ignore_unknown_eap_types = nocisco_accounting_username_bug = no

md5 {}

leap {}

gtc {auth_type = PAP

}tls {

# Se cambian los ${raddbdir} por /etc/freeradiusprivate_key_password = whatever

private_key_file = /etc/freeradius/certs/cert-srv.pemcertificate_file = /etc/freeradius/certs/cert-srv.pem

CA_file = /etc/freeradius/certs/demoCA/cacert.pemdh_file = /etc/freeradius/certs/dh

random_file = /dev/urandom}

# Se le dice que use MSCHAPV2peap {

default_eap_type = mschapv2}

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 usó una base de datos en MySQL. Todas las configuraciones que tengan como usuario DEFAULT, son las que se asignarán a los usuarios en caso de que no estén especificadas para ellos.

Clients.conf
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é registrado aquí, el servidor RADIUS simplemente la ignora, negándole el acceso. En nuestro caso se acepta al localhost y al AP que enviará las solicitudes.

client 127.0.0.1 { secret = supersecretradiuskey

shortname = some_name 	  }

client 192.167.1.1 { # Esta clave es el shared secret que usará el AP para comunicarse

secret = lolo shortname = linksys-g

}

Todos estos archivos se encuentran adjuntos a la práctica para poder observarlos más a detalle. Con esto se da por finalizada la configuración del servidor RADIUS.
Para correr FreeRADIUS, una vez hechas todas estas modificaciones, se escribe el comando:

# /etc/init.d/freeradius start

Sin embargo,

# freeradius -X

permite observar todas las operaciones que se están llevando a cabo.

Configuración de MySQL
FreeRADIUS hace uso de una base de datos llamada radius.
Primero se entra a MySQL y se ejecuta el siguiente comando, para crearla:

mysql> create database radius;

Después, en la línea de comandos, se hace lo explicado abajo, lo cual correrá un script que FreeRADIUS trae consigo:

# cd /usr/share/doc/packages/freeradius/doc/examples/# mysql –u root -p radius < mysql.sql

Así ya se cuenta con una base de datos para la autenticación. Las tablas más importantes son:

  1. usergroup: Aquí se define a qué grupo pertenece cada usuario. Sus atributos son:
    • id. Identificador de registro.
    • UserName. Nombre de usuario.
    • GroupName. Grupo al que pertenece el usuarios
  2. radcheck: Aquí se definen las contraseñas de cada usuario. Sus atributos son:
    • id. Identificador de registro.
    • UserName. Nombre de usuario.
    • Attribute. Tipo de contraseña. En nuestro caso, ‘User-Password’.
    • Op. Es el operador que se usará para la comprobación. Para nosotros ‘==’.
    • Value. La contraseña.
  3. radreply: En esta tabla se definen los atributos sobre la conexión y sesión de los usuarios; por ejemplo, IP asignada y tiempo de espera máximo. En nuestro caso, permitimos que se asignen los de DEFAULT contenidos en el archivo ‘users’; por lo tanto, no insertamos nada en la tabla.
  4. radgroupreply: Similar a radcheck pero permite establecer atributos a un grupo de usuarios completo. Atributos:
    • id. Identificador de registro.
    • GroupName. Nombre de grupo.
    • Attribute. Nombre del atributo que se quiere agregar.

Nosotros sólo hicimos uso de uno, el tipo de autenticación: ‘Auth-Type’.
Op. Es el operador que se usará para la comprobación. Para nosotros ‘:=’.
Value. El valor del atributo. Nuestro Auth-Type es ‘EAP’.

Después de realizar todos los pasos anteriores todavía nos falta el configurar el AP para que realmente utilice el Radius para la autenticación, ésto lo encontraras en el siguiente archivo, que también contiene todo lo anterior; decidí subir el archivo y publicar lo anterior porque a la mayoría de las personas únicamente les interesará el configurar el Servidor Radius, y a otros pocos ya el utilizarlo en alguna aplicación como es la implementación de la autenticación en un AP.

El archivo lo puedes conseguir dando click aquí.

Sin más esperando que les sea útil, y agradeciendo a los miembros de mi equipo nuevamente por su coolaboración en la realización del práctica (del cuál el archivo es el reporte de práctica) me despido hasta el próximo post!.


Acciones

Information

4 responses

4 11 2007
Wifi con autenticación por radius y MySQL bajo Ubuntu « El blog de Santiago

[…] compañero Sergio lo publicó en su blog, pero desgraciadamente subió el documento con protección. Así que aquí pongo el […]

21 02 2008
rick

Salu2.
necesito sabes como puedo sustituir el ap wrv200 business service por una pc trabajando en unix/linux,es decir o alguna otra opcion que no requiera comprar un router ap.

les agradezco su oportuna y util respuesta

16 04 2008
Gilbert

Hola, quiero felicitarlos por compartir esta informacion de Servidor Radius II, tambien quiero pedirles que si tienen alguna otra informacion adicional que pueda servirnos para instalar un servidor radius les agradeceria que por favor la publicaran debido a que en la web hay muy poca informacion acerca de este tema.

Saludos….

20 11 2008
CARLOS

gracias… me ayudaron mucho con lo del servidor radius bno gracias a ustedes

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: