WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Algúns exemplos de organización de WiFi corporativa xa foron descritos. Aquí describirei como implementei unha solución similar e os problemas aos que tiven que enfrontarme ao conectarme en diferentes dispositivos. Usaremos o LDAP existente cos usuarios rexistrados, aumentaremos FreeRadius e configuraremos WPA2-Enterprise no controlador Ubnt. Todo parece ser sinxelo. Vexamos…

Un pouco sobre os métodos EAP

Antes de continuar coa tarefa, debemos decidir que método de autenticación usaremos na nosa solución.

De Wikipedia:

EAP é un marco de autenticación que se usa a miúdo en redes sen fíos e conexións punto a punto. O formato describiuse por primeira vez en RFC 3748 e actualizouse en RFC 5247.
EAP úsase para seleccionar un método de autenticación, pasar claves e procesar esas claves con complementos chamados métodos EAP. Hai moitos métodos EAP, ambos definidos co propio EAP e lanzados por provedores individuais. EAP non define a capa de ligazón, só define o formato da mensaxe. Cada protocolo que utiliza EAP ten o seu propio protocolo de encapsulación de mensaxes EAP.

Os propios métodos:

  • LEAP é un protocolo propietario desenvolvido por CISCO. Atopáronse vulnerabilidades. Actualmente non se recomenda o seu uso
  • EAP-TLS é ben compatible entre os provedores sen fíos. É un protocolo seguro porque é o sucesor dos estándares SSL. Configurar o cliente é bastante complicado. Necesitas un certificado de cliente ademais do contrasinal. Soportado en moitos sistemas
  • EAP-TTLS: amplamente compatible con moitos sistemas, ofrece unha boa seguridade ao usar certificados PKI só no servidor de autenticación
  • EAP-MD5 é outro estándar aberto. Ofrece unha seguridade mínima. Vulnerable, non admite a autenticación mutua nin a xeración de claves
  • EAP-IKEv2: baseado na versión 2 do protocolo de intercambio de claves de Internet. Ofrece autenticación mutua e establecemento de claves de sesión entre o cliente e o servidor
  • PEAP é unha solución conxunta de CISCO, Microsoft e RSA Security como estándar aberto. Amplamente dispoñible en produtos, ofrece moi boa seguridade. Similar a EAP-TTLS, só require un certificado no lado do servidor
  • PEAPv0/EAP-MSCHAPv2 - despois de EAP-TLS, este é o segundo estándar amplamente utilizado no mundo. Relación cliente-servidor utilizada en Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC: creado por Cisco como alternativa a PEAPv0/EAP-MSCHAPv2. Non protexe os datos de autenticación de ningún xeito. Non é compatible co sistema operativo Windows
  • EAP-FAST é unha técnica desenvolvida por Cisco para corrixir as deficiencias de LEAP. Usa credenciais de acceso protexido (PAC). Completamente inacabado

De toda esta diversidade, a elección aínda non é grande. O método de autenticación era necesario: boa seguridade, soporte en todos os dispositivos (Windows 10, macOS, Linux, Android, iOS) e, de feito, canto máis sinxelo mellor. Polo tanto, a elección recaeu en EAP-TTLS en conxunto co protocolo PAP.
Pode xurdir a pregunta - Por que usar PAP? porque transmite contrasinais en claro?

Si é correcto. A comunicación entre FreeRadius e FreeIPA realizarase deste xeito. No modo de depuración, pode rastrexar como se envía o nome de usuario e o contrasinal. Si, e déixaos ir, só ti tes acceso ao servidor FreeRadius.

Podes ler máis sobre o traballo de EAP-TTLS aquí

FreeRADIUS

FreeRadius aumentarase en CentOS 7.6. Aquí non hai nada complicado, poñémolo do xeito habitual.

yum install freeradius freeradius-utils freeradius-ldap -y

A versión 3.0.13 instálase desde os paquetes. Este último pódese tomar https://freeradius.org/

Despois diso, FreeRadius xa está funcionando. Pode descomentar a liña en /etc/raddb/users

steve   Cleartext-Password := "testing"

Inicie o servidor no modo de depuración

freeradius -X

E fai unha conexión de proba desde localhost

radtest steve testing 127.0.0.1 1812 testing123

Teño unha resposta Acceso recibido-Identificación de aceptación 115 de 127.0.0.1:1812 a 127.0.0.1:56081 lonxitude 20, significa que todo está ben. Adiante.

Conectamos o módulo ldap.

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

E cambiarémolo de inmediato. Necesitamos FreeRadius para poder acceder a FreeIPA

mods-enabled/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 o servidor radius e comprobe a sincronización dos usuarios LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Edición eap in modificacións activadas/eap
Aquí engadimos dous exemplos de eap. Diferirán só en certificados e claves. A continuación explicarei por que isto é así.

modificacións activadas/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"
           }
}

Edición adicional habilitado para o sitio/predeterminado. As seccións de autorización e autenticación son de interese.

habilitado para o 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
}

Na sección de autorización, eliminamos todos os módulos que non necesitamos. Deixamos só ldap. Engadir verificación do cliente polo nome de usuario. É por iso que engadimos dúas instancias de eap arriba.

EAP múltipleO caso é que ao conectar algúns dispositivos, utilizaremos certificados do sistema e especificaremos o dominio. Temos un certificado e unha clave dunha autoridade de certificación de confianza. Persoalmente, na miña opinión, un procedemento de conexión deste tipo é máis sinxelo que lanzar un certificado autoasinado en cada dispositivo. Pero aínda sen certificados autoasinados, aínda non funcionou. Os dispositivos Samsung e as versións de Android =< 6 non poden usar certificados do sistema. Polo tanto, creamos unha instancia separada de eap-guest para eles con certificados autoasinados. Para todos os demais dispositivos, utilizaremos o cliente eap cun certificado de confianza. O nome de usuario está determinado polo campo Anónimo cando o dispositivo está conectado. Só se permiten 3 valores: Invitado, Cliente e un campo baleiro. Todo o demais é descartado. Configurarase nos políticos. Poñerei un exemplo un pouco máis adiante.

Editemos as seccións de autorización e autenticación en habilitado para o sitio/túnel interno

habilitado para o sitio/túnel interno

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, cómpre especificar nas políticas que nomes se poden usar para o inicio de sesión anónimo. Edición política.d/filtro.

Debes atopar liñas semellantes a esta:

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

E a continuación en elsif engade os valores desexados:

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

Agora necesitamos movernos ao directorio certificados. Aquí cómpre poñer a clave e o certificado dunha autoridade de certificación de confianza, que xa temos e necesitamos xerar certificados autoasinados para eap-guest.

Cambiando os parámetros do ficheiro 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 os mesmos valores no ficheiro servidor.cnf. Cambiamos só
nome 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. Recibido servidor.crt и servidor.clave xa nos rexistramos arriba en eap-guest.

E, finalmente, engadimos os nosos puntos de acceso ao ficheiro cliente.conf. Teño 7. Para non engadir cada punto por separado, só escribiremos a rede na que se atopan (os meus puntos de acceso están nunha VLAN separada).

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

Controlador Ubiquiti

Creamos unha rede separada no controlador. Sexa 192.168.2.0/24
Vaia a configuración -> perfil. Creamos un novo:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Escribimos o enderezo e o porto do servidor radius e o contrasinal que se escribiu no ficheiro clientes.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Crea un novo nome de rede sen fíos. Seleccione WPA-EAP (Enterprise) como método de autenticación e especifique o perfil de radio creado:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Gardamos todo, aplicamos e seguimos adiante.

Configuración de clientes

Comezamos polo máis difícil!

fiestras 10

A dificultade redúcese ao feito de que Windows aínda non sabe como conectarse á WiFi corporativa a través dun dominio. Polo tanto, temos que cargar manualmente o noso certificado no almacén de certificados de confianza. Aquí podes usar tanto a autoasinada como a da autoridade de certificación. Vou usar o segundo.

A continuación, cómpre crear unha nova conexión. Para iso, vai a Configuración de rede e Internet -> Centro de redes e recursos compartidos -> Crea e configura unha nova conexión ou rede:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduza manualmente o nome da rede e cambie o tipo de seguridade. Despois de facer clic en cambiar a configuración de conexión e na pestana Seguridade, seleccione autenticación de rede - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Entramos nos parámetros, prescribimos a confidencialidade da autenticación - cliente. Como autoridade de certificación de confianza, seleccione o certificado que engadimos, marque a caixa "Non emitir unha invitación ao usuario se non se pode autorizar o servidor" e seleccione o método de autenticación: contrasinal sen cifrar (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

A continuación, vai á configuración avanzada, marca "Especificar o modo de autenticación". Seleccione "Autenticación de usuario" e prema gardar credenciais. Aquí terás que introducir username_ldap e password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Gardamos, aplicamos, pechamos todo. Podes conectarte a unha rede nova.

Linux

Probei en Ubuntu 18.04, 18.10, Fedora 29, 30.

Primeiro, descarguemos o noso certificado. Non atopei en Linux se é posible usar certificados do sistema e se existe tal tenda.

Conectámonos ao dominio. Polo tanto, necesitamos un certificado da autoridade de certificación da que se adquiriu o noso certificado.

Todas as conexións realízanse nunha soa xanela. Seleccionando a nosa rede:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

cliente-anónimo
dominio - o dominio para o que se emite o certificado

androide

non Samsung

A partir da versión 7, ao conectar WiFi, pode usar certificados do sistema especificando só o dominio:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

dominio - o dominio para o que se emite o certificado
cliente-anónimo

Samsung

Como escribín anteriormente, os dispositivos Samsung non saben como usar os certificados do sistema cando se conectan a WiFi e non teñen a posibilidade de conectarse a través dun dominio. Polo tanto, debes engadir manualmente o certificado raíz da autoridade de certificación (ca.pem, levámolo no servidor Radius). Aquí é onde se usará a autoasinada.

Descarga o certificado no teu dispositivo e instálao.

Instalación de certificadosWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ao mesmo tempo, terás que configurar o patrón de desbloqueo da pantalla, o código PIN ou o contrasinal, se aínda non está configurado:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Mostrei unha versión complicada de instalar un certificado. Na maioría dos dispositivos, basta con facer clic no certificado descargado.

Cando o certificado estea instalado, pode continuar coa conexión:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certificado: indique o que se instalou
usuario anónimo - convidado

MacOS

Os dispositivos Apple listos para usar só se poden conectar a EAP-TLS, pero aínda debes enviarlles un certificado. Para especificar un método de conexión diferente, cómpre usar Apple Configurator 2. En consecuencia, primeiro debes descargalo no teu Mac, crear un novo perfil e engadir todos os axustes WiFi necesarios.

Configurador de AppleWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduza aquí o nome da súa rede
Tipo de seguridade - WPA2 Enterprise
Tipos de EAP aceptados - TTLS
Nome de usuario e contrasinal: deixe baleiro
Autenticación interna - PAP
Identidade externa-cliente

Ficha de confianza. Aquí especificamos o noso dominio

Todos. O perfil pódese gardar, asinarse e distribuírse nos dispositivos

Despois de que o perfil estea listo, cómpre descargalo no poppy e instalalo. Durante o proceso de instalación, terá que especificar o usernmae_ldap e o password_ldap do usuario:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

IOS

O proceso é semellante ao de macOS. Debes usar un perfil (podes usar o mesmo que para macOS. Como crear un perfil en Apple Configurator, consulta arriba).

Descargar perfil, instalar, introducir credenciais, conectar:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Iso é todo. Configuramos un servidor Radius, sincronizámolo con FreeIPA e dixemos aos AP de Ubiquiti que usasen WPA2-EAP.

Posibles preguntas

EN: como transferir un perfil/certificado a un empregado?

SOBRE: Almacenzo todos os certificados/perfís en ftp con acceso á web. Creouse unha rede de hóspedes cun límite de velocidade e acceso só a Internet, a excepción de ftp.
A autenticación ten unha duración de 2 días, despois do cal se restablece e o cliente queda sen Internet. Iso. cando un empregado quere conectarse a WiFi, primeiro conéctase á rede de convidados, accede a FTP, descarga o certificado ou perfil que necesita, instálao e despois pode conectarse á rede corporativa.

EN: por que non usar esquema con MSCHAPv2? Ela está máis segura!

SOBRE: En primeiro lugar, tal esquema funciona ben en NPS (Windows Network Policy System), na nosa implementación é necesario configurar adicionalmente LDAP (FreeIpa) e almacenar hash de contrasinais no servidor. Engadir. non é recomendable facer axustes, porque. isto pode levar a varios problemas de sincronización da ecografía. En segundo lugar, o hash é MD4, polo que non engade moita seguridade.

EN: é posible autorizar dispositivos por enderezos mac?

SOBRE: NON, isto non é seguro, un atacante pode cambiar os enderezos MAC e, aínda máis, a autorización por enderezos MAC non se admite en moitos dispositivos

EN: que deben usar en xeral todos estes certificados? podes unirte sen eles?

SOBRE: utilízanse certificados para autorizar o servidor. Eses. ao conectarse, o dispositivo comproba se é un servidor de confianza ou non. Se é así, entón a autenticación continúa, se non, a conexión está pechada. Podes conectarte sen certificados, pero se un atacante ou veciño configura na casa un servidor de radio e un punto de acceso co mesmo nome que o noso, pode interceptar facilmente as credenciais do usuario (non esquezas que se transmiten en texto claro). E cando se usa un certificado, o inimigo verá nos seus rexistros só o noso nome de usuario ficticio - convidado ou cliente e un erro de tipo - Certificado CA descoñecido

un pouco máis sobre macOSNormalmente, en macOS, a reinstalación do sistema faise a través de Internet. No modo de recuperación, o Mac debe estar conectado a WiFi e aquí non funcionarán nin a nosa WiFi corporativa nin a rede de convidados. Persoalmente, instalei outra rede, a habitual WPA2-PSK, oculta, só para operacións técnicas. Ou tamén pode facer unha unidade flash USB de arranque co sistema con antelación. Pero se o teu Mac é posterior a 2015, tamén terás que atopar un adaptador para esta unidade flash)

Fonte: www.habr.com

Engadir un comentario