FreeRadius con WPA+PEAP-TLS

Post on 30-Jun-2015

1,065 views 2 download

Tags:

transcript

FreeRadius con WPA+PEAP-TLS

Roberto

Jose A. Velo Santos

Introducción

Nuestro objetivo es configurar una red wifi

de forma segura usando un servidor

FreeRadius

Radius

Radius (Remote Authentication Dial-In User Server) es un protocolo usado en redes, para dispositivos como routers. Nos permite gestionar la AAA (Autenticación, Autorización y registro. En ingles sería Authentication, Authorization and Accounting) de usuarios remotos sobre un determinado recurso.

¿Qué es AAA?

Authentication (Autenticación) Authorization (Autorización) Accounting (Registro)

Authentication

Authentication (Autenticación): determina si un usuario tiene permiso para acceder a un determinado servicio de red del que quiere hacer uso. El proceso de autenticación se realiza mediante la presentación de una identidad y unos credenciales por parte del usuario que esta demandando el acceso. Un tipo habitual de credencial es el uso de una contraseña (password) que junto al nombre del usuario nos permite acceder a recursos determinados.

El método que usamos en nuestro proyecto es EAP Protegido (PEAP).

Authorization

Authorization (Autorización): Se refiere a conceder servicios específicos (incluyendo la negación de servicio) a un determinado usuario, basándose para ello en su propia autenticación, los servicios que esta solicitando, y el estado actual del sistema. Los métodos actualmente soportados en un servidor radius son:

- Bases de datos LDAP

- Bases de datos SQL

- El uso de ficheros de configuración locales al servidor (/usr/local/etc/raddb/users), que ademas es el

que usamos nosotros.

Accounting

Accounting (Registro):se refiere a realizar un registro del consumo de recursos que realizan los usuarios. El registro suele incluir aspectos como la identidad del usuario, la naturaleza del servicio prestado, y cuando empezó y terminó el uso de dicho servicio. Es muy interesante el uso del protocolo Radius cuando tenemos redes de dimensiones considerables sobre las que queremos proporcionar un servicio de acceso centralizado. Ejemplo: empresas que proporcionan acceso a Internet o grandes redes corporativas.

Seguridad en tecnologías de red inalámbrica

La seguridad es un tema importante en las redes inalámbricas porque, al contrario que en una red cableada, a la que solo tiene acceso las personas que físicamente pueden conectarse, cualquier persona de la calle o pisos o edificios vecinos pueden conectarse a una red inalámbrica o ver el contenido de los paquetes que circulan por ella si esta no está convenientemente protegida.

Hay varios protocolos estándar que proporcionan seguridad en redes inalámbricas IEEE 802.1X, pero nosotros solo hemos usado WPA2.

WPA2

Se basa en el nuevo estándar 802.11i, y el cambio mas significativo con respecto a WPA es que usa el protocolo de cifrado AES en lugar de RC4.

Protected EAP (PEAP)

Otro concepto relacionado con la seguridad en redes inalámbricas es EAP (Extensible Authentication Protocol). EAP es un marco general de autenticación, y no un mecanismo de autenticación concreto. Proporciona algunas funciones comunes y un método para negociar el mecanismo de autenticación a usar. En este proyecto haremos uso del denominado EAP protegido (PEAP) para la autenticación de nuestro usuario en la red inalambrica. Como nuestro suplicante es una máquina con Windows XP, usaremos MSCHAPv2, la versión de PEAP empleada por Microsoft en este SO.

Funcionamiento del Radius

El cliente radius envía credenciales de usuario e información de parámetros de conexión en forma de un mensaje radius al servidor. Este autentica la solicitud del cliente y envía de regreso un mensaje de respuesta. Los clientes radius también envían mensajes de cuentas a servidores radius.

Tipos de mensajes RadiusPrimero el cliente le envía al servidor el mensaje:

Acces-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.

Si todo va bien, entonces el servidor le reponde con: 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. Y si falla en el intento de conexión…

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.

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 Accounting-Response.

Existen otros mensajes, pero no los vamos a mencionar dado que no han aparecido en nuestro caso.

Ejemplo de secuencia cuando un cliente se conecta a una red implementada con radius hasta que se desconecta:

1. El cliente envía su usuario/contraseña. Esta información es encriptada con una llave secreta y enviada en un access-request al servidor radius (Fase de autenticación).

2. Cuando la relacion usuario/contraseña es correcta, entonces el servidor envía un mensaje de aceptación, access-accept, con información extra (Fase de autorización).

3. El cliente ahora envía un mensaje de accounting-request (Start) con la información correspondiente a su cuenta y para indicar que el usuario está reconocido dentro de la red (Fase de accounting).

4. El servidor radius responde con un mensaje accounting-response, cuando la información de la cuenta es almacenada.

5. Cuando el usuario ha sido identificado, este puede acceder a los servicios proporcionados. Finalmente cuando desee desconectarse, enviará un mensaje de acccounting-request (Stop).

6. El servidor radius responde con un mensaje de accounting-response

cuando la información de cuenta es almacenada.

Instalación Antes de nada, mencionar lo que necesitamos:

Un ordenador con Linux que funcionará como servidor radius Un Acces Point – Router Un par de maquinas con Windows xp que funcionaran como clientes. Freeradius 1.1.2 (Usamos esta versión porque no nos ha dado tantos

problemas como otras mas recientes) Openssl (Para los certificados) PEAP-TLS

IMPORTANTE: Hay dos formas de instalar el freeradius. La primera y mas

recomendable es descargarlo de la pagina del fabricante. La segunda, y la

que nos ha dado muchos problemas (con las licencias de OpenSSL) es

instalandolo de los repositorios (no recomendable).

Empezando a instalar

Antes de nada instalamos lo necesario de Open ssl:

apt-get install openssl libssl-dev Libpq-dev

Descargamos el freeradius:

wget http://freeradius.portal-to-web.de/old/freeradius-1.1.2.tar.gz

Lo descomprimimos:

tar xvfz freeradius-1.1.2.tar.gz

Entramos en el directorio que nos ha descomprimido y con la opción configure le estamos diciendo que nos instale los módulos TLS y PEAP:

cd freeradius-1.1.2/./configure –without-rlm_perl –with-rlm_eap_peap –with-rlm_eap_tls

Una vez hecho esto, compilamos y si todo esta correcto instalamos:

make

make install

Y ya estaria el freeradius instalado.

Explicación básica del freeradius (comandos, directorio…) El freeradius, cuando se instala, se aloja en el siguiente directorio:

/usr/local/etc/raddb

Aquí es donde encontramos los ficheros que necesitamos modificar:

radiusd.conf, clients.conf, eap.conf y users

Y también se encuentra el directorio donde van a ir los certificados:

/certs

Comandos

Radius –X : Modo de depuración. Un consejo: ten siempre una Terminal ejecutando radiusd –X . Así podras ver lo que esta pasando en el freeradius.

radtest nombreUsuario contraseña ip puerto claveSecreta : Usado para hacer pruebas de usuario. Si te dice Acces-reject entonces no funciona. Si te dice Access-Accept, si que funciona.

radiusd start/restart/stop : Usado para iniciar/reiniciar/detener el servicio del freeradius.

OTROS COMANDOS QUE ME AYUDARON: ps –aux | grep radius : Para buscar el servicio del radius. kill -9 “pidDelRadius” : para matar el servicio.

Los dos comandos anteriores los pongo porque hay veces en que no funciona para el servicio, y para no tener que reiniciar la máquina es mejor matar el proceso.

Para mirar los errores que puede dar el radius, usamos el “log” . Se encuentra en el siguiente directorio:

cd /usr/local/var/log/radius

Y para verlo usas un editor de unix como gedit, pico…

pico radius.log

Configuración

Configuramos los ficheros:

Radiusd.conf Clients.conf: añadimos el cliente AP Users : añadimos los usuarios Eap.conf : Configuramos para que sea PEAP y le

indicamos la ruta de los certificados

Configuración del AP

Simplemente tienes que entrar en la pagina de configuración del AP y en wireles security poner las opciones radius, clave WPA, metodo de cifrado TKIP y la ip del servidor y puerto donde instalaste el freeradius (en nuestro caso la máquina de ubuntu) .

Configuración de los clientes de Windows XP

1- Vamos a propiedades de conexión de red inalámbrica

2- Le damos a agregar

3- Ponemos como esta en la imagen excepto en el nombre, que puedes poner el que quieras

4- Ahora vamos a la pestaña “autenticación” y la dejamos igual que en la imagen tambien. Luego pinchamos en propiedades

5- Ahora desmarcamos todas las opciones y donde pone “seleccione metodo de autenticación” elegimos “EAP-MSCHAP v2”

6- Le damos a configurar y desmarcamos la casilla

7- En la pestaña conexión también desmarcamos la casilla. Aceptamos todo y ya esta configurado

8- Ahora cuando intentes conectarte a esa red te aparecería lo siguiente. Pones usuario y contraseña del radius y ya está.

Creación de los certificados

Los creamos mediante OpenSSL.

Problemas que hemos tenido

Con el freeradius de los repositorios oficiales: aparte de tener los ficheros distintos, tiene poblemas con las licencias de openssl. No recomiendo usarlo. Es mas comodo aunque cueste mas instalarlo la versión de la página oficial.

Poblemas con distros de Linux: En suse por ejemplo nos ha dado mas problemas que en ubuntu y en debian juntos.

Problema con la ip de establecida en radiusd.conf: este problema se da cuando usas el comand radiusd –i “unaIP” –p “unPuerto” . No es necesario usar este comando, si no te puede dar problemas diciendo “bind ip address”.

Problemas con los puertos: En ubuntu 8.04 tiene problema con los puertos del freeradius. Intentamos abrirlos con el iptables pero no funcionaba. En ubuntu 9.10 no hay ese problema.

Problema al intentar construir un paquete .deb para instalar freeradius: No habia forma de construirlo. Daba errores.

Problema al intentar hacer make a la última versión del radius: decía que make se salía del directorio actual. Tuvimos que instalar una versión mas antigua (1.1.2).

Problema al intentar detener el servicio del freeradius: no se detenía. Hay que matar el proceso.

Problema al generar los certificados por defecto del radius: cuando estaba introduciendo los datos, al terminar daba error. Creaba el certificado igual pero no funcionaba.

Hemos probado freeradius en varias distros (ubuntu, suse, debian, freebsd, Windows…) y donde mejor nos ha funcionado es en ubuntu.

Cuanto queremos emitir los certificados a partir de los que trae el freeradius, que estan ubicados en ../raddb/certs. Nos termina dando un problema con la private key.

FIN