Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Ya se han descrito algunos ejemplos de organización de WiFi corporativo. Aquí describiré cómo implementé dicha solución y los problemas que encontré al conectarme en diferentes dispositivos. Usaremos el LDAP existente con usuarios establecidos, instalaremos FreeRadius y configuraremos WPA2-Enterprise en el controlador Ubnt. Todo parece sencillo. Vamos a ver…

Un poco sobre los métodos EAP

Antes de comenzar la tarea, debemos decidir qué método de autenticación usaremos en nuestra solución.

De Wikipedia:

EAP es un marco de autenticación que se utiliza a menudo en redes inalámbricas y conexiones punto a punto. El formato se describió por primera vez en RFC 3748 y se actualizó en RFC 5247.
EAP se utiliza para seleccionar un método de autenticación, transferir claves y procesar esas claves mediante complementos llamados métodos EAP. Existen muchos métodos EAP, tanto definidos con el propio EAP como aquellos lanzados por proveedores individuales. EAP no define la capa de enlace, solo define el formato del mensaje. Cada protocolo que utiliza EAP tiene su propio protocolo de encapsulación de mensajes EAP.

Los métodos en sí:

  • LEAP es un protocolo propietario desarrollado por CISCO. Vulnerabilidades encontradas. Actualmente no se recomienda su uso
  • EAP-TLS cuenta con un buen soporte entre los proveedores de servicios inalámbricos. Es un protocolo seguro porque es el sucesor de los estándares SSL. Configurar el cliente es bastante complicado. Necesita un certificado de cliente además de la contraseña. Compatible con muchos sistemas
  • EAP-TTLS: ampliamente compatible con muchos sistemas, ofrece buena seguridad utilizando certificados PKI solo en el servidor de autenticación.
  • EAP-MD5 es otro estándar abierto. Ofrece una seguridad mínima. Vulnerable, no admite autenticación mutua ni generación de claves
  • EAP-IKEv2: basado en el Protocolo de intercambio de claves de Internet versión 2. Proporciona autenticación mutua y establecimiento de claves de sesión entre el cliente y el servidor.
  • PEAP es una solución conjunta entre CISCO, Microsoft y RSA Security como estándar abierto. Ampliamente disponible en productos, proporciona muy buena seguridad. Similar a EAP-TTLS, solo requiere un certificado del lado del servidor
  • PEAPv0/EAP-MSCHAPv2: después de EAP-TLS, este es el segundo estándar más utilizado en el mundo. Relación cliente-servidor usada en Microsoft, Cisco, Apple, Linux.
  • PEAPv1/EAP-GTC: creado por Cisco como alternativa a PEAPv0/EAP-MSCHAPv2. No protege los datos de autenticación de ninguna manera. No compatible con el sistema operativo Windows
  • EAP-FAST es un método desarrollado por Cisco para corregir las deficiencias de LEAP. Utiliza credencial de acceso protegido (PAC). Completamente sin terminar

De toda esta variedad, la elección todavía no es muy amplia. Se requería el método de autenticación: buena seguridad, soporte en todos los dispositivos (Windows 10, macOS, Linux, Android, iOS) y, de hecho, cuanto más sencillo, mejor. Por lo tanto, la elección recayó en EAP-TTLS junto con el protocolo PAP.
Puede surgir la pregunta: ¿Por qué utilizar PAP? ¿Porque transmite contraseñas en claro?

Sí, eso es correcto. La comunicación entre FreeRadius y FreeIPA se realizará exactamente así. En el modo de depuración, puede realizar un seguimiento de cómo se envían el nombre de usuario y la contraseña. Sí, y déjalos ir, sólo tú tienes acceso al servidor FreeRadius.

Puede leer más sobre cómo funciona EAP-TTLS aquí

RADIUS gratis

FreeRadius se desarrollará en CentOS 7.6. Aquí no hay nada complicado, lo instalamos de la forma habitual.

yum install freeradius freeradius-utils freeradius-ldap -y

De los paquetes, está instalada la versión 3.0.13. Este último se puede tomar en https://freeradius.org/

Después de esto, FreeRadius ya está funcionando. Puedes descomentar la línea en /etc/raddb/users

steve   Cleartext-Password := "testing"

Inicie el servidor en modo de depuración

freeradius -X

Y haga una conexión de prueba desde localhost

radtest steve testing 127.0.0.1 1812 testing123

tengo una respuesta Se recibió el ID de aceptación y acceso 115 de 127.0.0.1:1812 a 127.0.0.1:56081 longitud 20, significa que todo está bien. Adelante.

Conectamos el módulo ldap.

ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap

Y lo cambiaremos de inmediato. Necesitamos FreeRadius para poder acceder a FreeIPA

mods habilitados/ldap

ldap {
server="ldap://ldap.server.com"
port=636
start_tls=yes
identity="uid=admin,cn=users,dc=server,dc=com"
password=**********
base_dn="cn=users,dc=server,dc=com"
set_auth_type=yes
...
user {
base_dn="${..base_dn}"
filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
}
...

Reinicie el servidor Radius y verifique la sincronización de los usuarios LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Editando eap en mods habilitados/eap
Aquí agregaremos dos instancias de eap. Se diferenciarán únicamente en los certificados y claves. A continuación explicaré por qué esto es así.

mods habilitados/eap

eap eap-client {                                                                                                                                                                                                                           default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_file = ${certdir}/fisrt.key
           certificate_file = ${certdir}/first.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}
eap eap-guest {
default_eap_type = ttls                                                                                                                                                                                                                 timer_expire = 60                                                                                                                                                                                                                       ignore_unknown_eap_types = no                                                                                                                                                                                                          cisco_accounting_username_bug = no                                                                                                                                                                                                      max_sessions = ${max_requests}
           tls-config tls-common {
           private_key_passwotd=blablabla
           private_key_file = ${certdir}/server.key
           certificate_file = ${certdir}/server.crt
           dh_file = ${certdir}/dh
           ca_path = ${cadir}
           cipher_list = "HIGH"
           cipher_server_preference = no
           ecdh_curve = "prime256v1"
           check_crl = no
           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
           ttls {
           tls = tls-common
           default_eap_type = md5
           copy_request_to_tunnel = no
           use_tunneled_reply = yes
           virtual_server = "inner-tunnel"
           }
}

A continuación editamos habilitado para el sitio/predeterminado. Las secciones autorizar y autenticar son de interés.

habilitado para el sitio/predeterminado

authorize {
  filter_username
  preprocess
  if (&User-Name == "guest") {
   eap-guest {
       ok = return
   }
  }
  elsif (&User-Name == "client") {
    eap-client {
       ok = return 
    }
  }
  else {
    eap-guest {
       ok = return
    }
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  logintime
  pap
  }

authenticate {
  Auth-Type LDAP {
    ldap
  }
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  pap
}

En la sección de autorización eliminamos todos los módulos que no necesitamos. Dejamos solo ldap. Agregue verificación de cliente por nombre de usuario. Es por eso que agregamos dos instancias de eap arriba.

PAE múltipleEl caso es que al conectar algunos dispositivos utilizaremos certificados del sistema y especificaremos el dominio. Disponemos de un certificado y una clave de una autoridad certificadora de confianza. Personalmente, en mi opinión, este procedimiento de conexión es más fácil que incluir un certificado autofirmado en cada dispositivo. Pero ni siquiera sin los certificados autofirmados era posible salir. Dispositivos Samsung y Android =< 6 versiones no saben cómo utilizar los certificados del sistema. Por lo tanto, creamos una instancia separada de eap-guest para ellos con certificados autofirmados. Para todos los demás dispositivos usaremos eap-client con un certificado confiable. El nombre de usuario está determinado por el campo Anónimo al conectar el dispositivo. Sólo se permiten 3 valores: Invitado, Cliente y un campo vacío. El resto está todo descartado. Esto se puede configurar en políticas. Daré un ejemplo un poco más tarde.

Editemos las secciones de autorización y autenticación en habilitado para el sitio/túnel interior

habilitado para el sitio/túnel interior

authorize {
  filter_username
  filter_inner_identity
  update control {
   &Proxy-To-Realm := LOCAL
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  digest
  logintime
  pap
  }

authenticate {
  Auth-Type eap-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  Auth-Type PAP {
    pap
  }
  ldap
}

A continuación, debe especificar en las políticas qué nombres se pueden utilizar para el inicio de sesión anónimo. Edición política.d/filtro.

Necesitas encontrar líneas similares a esta:

if (&outer.request:User-Name !~ /^(anon|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

Y abajo en elsif agregue los valores deseados:

elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
  update request {
    Module-Failure-Message = "User-Name is not anonymized"
  }
  reject
}

Ahora necesitamos movernos al directorio. certificados. Aquí debemos colocar la clave y el certificado de una autoridad de certificación confiable, que ya tenemos, y debemos generar certificados autofirmados para eap-guest.

Cambiar los parámetros en el archivo. ca.cnf.

ca.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "CA FreeRadius"

Escribimos los mismos valores en el archivo. servidor.cnf. solo cambiamos
nombre común:

servidor.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = RU
stateOrProvinceNmae = State
localityNmae = City
organizationName = NONAME
emailAddress = [email protected]
commonName = "Server Certificate FreeRadius"

Crear:

make

Listo. Recibió servidor.crt и servidor.clave Ya nos hemos registrado arriba en eap-guest.

Y finalmente, agreguemos nuestros puntos de acceso al archivo. cliente.conf. Tengo 7. Para no agregar cada punto por separado, registraremos solo la red en la que están ubicados (mis puntos de acceso están en una VLAN separada).

client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}

controlador ubiquiti

Levantamos una red separada en el controlador. Que sea 192.168.2.0/24
Vaya a configuración -> perfil. Creamos uno nuevo:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Escribimos la dirección y puerto del servidor Radius y la contraseña que estaba escrita en el archivo. clientes.conf:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Cree un nuevo nombre de red inalámbrica. Seleccione WPA-EAP (Enterprise) como método de autenticación y especifique el perfil de radio creado:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Guardamos todo, lo aplicamos y seguimos adelante.

Configurar clientes

¡Empecemos por la parte más difícil!

Windows 10

La dificultad se debe al hecho de que Windows aún no sabe cómo conectarse al WiFi corporativo a través de un dominio. Por lo tanto, tenemos que cargar manualmente nuestro certificado en el almacén de certificados de confianza. Aquí puede utilizar uno autofirmado o uno de una autoridad de certificación. Usaré el segundo.

A continuación, debe crear una nueva conexión. Para hacer esto, vaya a Configuración de red e Internet -> Centro de redes y recursos compartidos -> Crear y configurar una nueva conexión o red:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Ingresamos manualmente el nombre de la red y cambiamos el tipo de seguridad. Luego haga clic en cambiar la configuración de conexión y en la pestaña Seguridad, seleccione autenticación de red - EAP-TTLS.

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Entramos en los parámetros, prescribimos la confidencialidad de la autenticación. cliente. Como autoridad de certificación confiable, seleccione el certificado que agregamos, marque la casilla "No enviar una invitación al usuario si el servidor no puede ser autorizado" y seleccione el método de autenticación: contraseña no cifrada (PAP).

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

A continuación, vaya a parámetros adicionales y marque la casilla "Especificar modo de autenticación". Seleccione "Autenticación de usuario" y haga clic en guardar credenciales. Aquí deberá ingresar nombre de usuario_ldap y contraseña_ldap

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Guardamos, aplicamos, cerramos todo. Puede conectarse a una nueva red.

Linux

Probé en Ubuntu 18.04, 18.10, Fedora 29, 30.

Primero, descarguemos nuestro certificado. No he encontrado en Linux si es posible utilizar certificados del sistema o si existe tal almacén.

Nos conectaremos vía dominio. Por lo tanto, necesitamos un certificado de la autoridad de certificación a la que se compró nuestro certificado.

Todas las conexiones se realizan en una ventana. Seleccionando nuestra red:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

anónimo - cliente
dominio: el dominio para el cual se emitió el certificado

Android

no Samsung

A partir de la versión 7, al conectar WiFi, puedes utilizar certificados del sistema especificando solo el dominio:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

dominio: el dominio para el cual se emitió el certificado
anónimo - cliente

Samsung

Como escribí anteriormente, los dispositivos Samsung no saben cómo usar los certificados del sistema cuando se conectan WiFi y no tienen la capacidad de conectarse a través de un dominio. Por lo tanto, debe agregar manualmente el certificado raíz de la autoridad de certificación (ca.pem, tómelo del servidor Radius). Aquí es donde se utilizará la autofirma.

Descargue el certificado en su dispositivo e instálelo.

Instalación del certificadoEmpresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Al mismo tiempo, deberá configurar el patrón de desbloqueo de pantalla, el código PIN o la contraseña, si aún no está configurado:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Mostré una versión complicada de cómo instalar un certificado. En la mayoría de los dispositivos, simplemente haga clic en el certificado descargado.

Cuando el certificado esté instalado, puede proceder a la conexión:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

certificado - indique el que se instaló
usuario anónimo - invitado

macOS

Los dispositivos Apple solo pueden conectarse a EAP-TLS de fábrica, pero aún así debes proporcionarles un certificado. Para especificar un método de conexión diferente, debe utilizar Apple Configurator 2. En consecuencia, primero debe descargarlo a su Mac, crear un nuevo perfil y agregar todas las configuraciones de WiFi necesarias.

Configurador de AppleEmpresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Ingrese el nombre de su red aquí
Tipo de seguridad: WPA2 empresarial
Tipos de EAP aceptados: TTLS
Nombre de usuario y contraseña - dejar vacío
Autenticación interna - PAP
Identidad exterior: cliente

Pestaña de confianza. Aquí especificamos nuestro dominio.

Todo. El perfil se puede guardar, firmar y distribuir a dispositivos.

Una vez que el perfil esté listo, debe descargarlo en Mac e instalarlo. Durante el proceso de instalación, deberá especificar el usuarionmae_ldap y la contraseña_ldap del usuario:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

iOS

El proceso es similar a macOS. Necesita usar un perfil (puede usar el mismo que para macOS. Consulte más arriba cómo crear un perfil en Apple Configurator).

Descargue el perfil, instálelo, ingrese las credenciales, conéctese:

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Empresa Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Eso es todo. Configuramos el servidor Radius, lo sincronizamos con FreeIPA y les dijimos a los puntos de acceso de Ubiquiti que usaran WPA2-EAP.

posibles preguntas

A: ¿Cómo transferir un perfil/certificado a un empleado?

ACERCA DE: Almaceno todos los certificados/perfiles en ftp con acceso web. Configuré una red de invitados con un límite de velocidad y acceso solo a Internet, a excepción de FTP.
La autenticación dura 2 días, luego de los cuales se reinicia y el cliente se queda sin Internet. Eso. Cuando un empleado quiere conectarse a WiFi, primero se conecta a la red de invitados, inicia sesión en FTP, descarga el certificado o perfil que necesita, los instala y luego puede conectarse a la red corporativa.

A: ¿Por qué no utilizar un esquema con MSCHAPv2? ¡Está más segura!

ACERCA DE: En primer lugar, este esquema funciona bien en NPS (Sistema de políticas de red de Windows), en nuestra implementación es necesario configurar adicionalmente LDAP (FreeIpa) y almacenar hashes de contraseñas en el servidor. Agregar. No es aconsejable realizar ajustes, porque esto puede provocar diversos problemas con la sincronización del sistema de ultrasonido. En segundo lugar, el hash es MD4, por lo que no añade mucha seguridad.

A: ¿Es posible autorizar dispositivos mediante direcciones mac?

ACERCA DE: NO, esto no es seguro, un atacante puede falsificar direcciones MAC y, más aún, la autorización mediante direcciones MAC no es compatible con muchos dispositivos.

A: ¿Para qué se utilizan en general todos estos certificados? ¿Puedes unirte sin ellos?

ACERCA DE: Los certificados se utilizan para autorizar el servidor. Aquellos. Al conectarse, el dispositivo comprueba si se trata de un servidor en el que se puede confiar o no. Si es así, la autenticación continúa; si no, la conexión se cierra. Puedes conectarte sin certificados, pero si un atacante o un vecino instala en casa un servidor Radius y un punto de acceso con el mismo nombre que el nuestro, puede interceptar fácilmente las credenciales del usuario (no olvides que se transmiten en texto claro). . Y cuando se utiliza un certificado, el enemigo verá en sus registros solo nuestro nombre de usuario ficticio (invitado o cliente) y un tipo de error: certificado de CA desconocido.

un poco más sobre macOSPor lo general, en macOS, la reinstalación del sistema se realiza a través de Internet. En modo recovery el Mac debe estar conectado a WiFi, y aquí no funcionará ni nuestro WiFi corporativo ni la red de invitados. Personalmente instalé otra red, la habitual WPA2-PSK, oculta, solo para operaciones técnicas. O aún puede crear una unidad flash USB de arranque con el sistema por adelantado. Pero si la amapola es posterior a 2015, aún necesitarás encontrar un adaptador para esta unidad flash)

Fuente: habr.com

Añadir un comentario