WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ja s'han descrit alguns exemples d'organització del WiFi corporatiu. Aquí descriuré com vaig implementar una solució similar i els problemes que vaig haver d'enfrontar en connectar-me a diferents dispositius. Utilitzarem el LDAP existent amb usuaris registrats, augmentarem FreeRadius i configurarem WPA2-Enterprise al controlador Ubnt. Tot sembla ser senzill. A veure…

Una mica sobre els mètodes EAP

Abans de continuar amb la tasca, hem de decidir quin mètode d'autenticació utilitzarem a la nostra solució.

De la Viquipèdia:

EAP és un marc d'autenticació que s'utilitza sovint en xarxes sense fil i connexions punt a punt. El format es va descriure per primera vegada a RFC 3748 i es va actualitzar a RFC 5247.
EAP s'utilitza per seleccionar un mètode d'autenticació, passar claus i processar aquestes claus amb complements anomenats mètodes EAP. Hi ha molts mètodes EAP, tant definits amb el mateix EAP com publicats per proveïdors individuals. EAP no defineix la capa d'enllaç, només defineix el format del missatge. Cada protocol que utilitza EAP té el seu propi protocol d'encapsulació de missatges EAP.

Els mateixos mètodes:

  • LEAP és un protocol propietari desenvolupat per CISCO. Vulnerabilitats trobades. Actualment no es recomana utilitzar-lo
  • EAP-TLS té un bon suport entre els proveïdors sense fil. És un protocol segur perquè és el successor dels estàndards SSL. Configurar el client és força complicat. Necessites un certificat de client a més de la contrasenya. Compatible amb molts sistemes
  • EAP-TTLS: àmpliament compatible amb molts sistemes, ofereix una bona seguretat mitjançant l'ús de certificats PKI només al servidor d'autenticació
  • EAP-MD5 és un altre estàndard obert. Ofereix una seguretat mínima. Vulnerable, no admet l'autenticació mútua i la generació de claus
  • EAP-IKEv2: basat en la versió 2 del protocol d'intercanvi de claus d'Internet. Proporciona autenticació mútua i establiment de claus de sessió entre el client i el servidor
  • PEAP és una solució conjunta de CISCO, Microsoft i RSA Security com a estàndard obert. Àmpliament disponible en productes, proporciona una molt bona seguretat. Similar a EAP-TTLS, només requereix un certificat al costat del servidor
  • PEAPv0/EAP-MSCHAPv2: després d'EAP-TLS, aquest és el segon estàndard àmpliament utilitzat al món. Relació client-servidor utilitzada a Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC: creat per Cisco com a alternativa a PEAPv0/EAP-MSCHAPv2. No protegeix les dades d'autenticació de cap manera. No és compatible amb el sistema operatiu Windows
  • EAP-FAST és una tècnica desenvolupada per Cisco per corregir les deficiències de LEAP. Utilitza la credencial d'accés protegit (PAC). Totalment inacabat

De tota aquesta diversitat, l'elecció encara no és gran. Es requeria el mètode d'autenticació: bona seguretat, suport en tots els dispositius (Windows 10, macOS, Linux, Android, iOS) i, de fet, com més senzill millor. Per tant, l'elecció va recaure en EAP-TTLS juntament amb el protocol PAP.
Pot sorgir la pregunta: per què utilitzar PAP? perquè transmet les contrasenyes en clar?

Sí, és correcte. La comunicació entre FreeRadius i FreeIPA es farà d'aquesta manera. En mode de depuració, podeu fer un seguiment de com s'envien el nom d'usuari i la contrasenya. Sí, i deixa'ls anar, només tu tens accés al servidor FreeRadius.

Podeu llegir més sobre el treball d'EAP-TTLS aquí

FreeRADIUS

FreeRadius s'aixecarà a CentOS 7.6. Aquí no hi ha res complicat, ho posem de la manera habitual.

yum install freeradius freeradius-utils freeradius-ldap -y

La versió 3.0.13 s'instal·la des dels paquets. Aquest últim es pot agafar https://freeradius.org/

Després d'això, FreeRadius ja funciona. Podeu descomentar la línia a /etc/raddb/users

steve   Cleartext-Password := "testing"

Inicieu el servidor en mode de depuració

freeradius -X

I feu una connexió de prova des de localhost

radtest steve testing 127.0.0.1 1812 testing123

Teniu una resposta S'ha rebut l'identificador d'accés-acceptació 115 de 127.0.0.1:1812 a 127.0.0.1:56081 longitud 20, vol dir que tot està bé. Endavant.

Connectem el mòdul ldap.

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

I ho canviarem de seguida. Necessitem FreeRadius per poder accedir 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}})"
}
...

Reinicieu el servidor de radi i comproveu la sincronització dels usuaris LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Edició eap in mods habilitats/eap
Aquí afegim dos exemples d'eap. Només es diferenciaran en certificats i claus. A continuació us explicaré per què és així.

mods habilitats/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"
           }
}

Més edició activat per al lloc/predeterminat. Les seccions d'autorització i autenticació són d'interès.

activat per al lloc/predeterminat

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
}

A l'apartat d'autorització, eliminem tots els mòduls que no necessitem. Deixem només ldap. Afegiu la verificació del client per nom d'usuari. És per això que hem afegit dos exemples d'eap més amunt.

EAP múltipleEl cas és que en connectar alguns dispositius, utilitzarem certificats del sistema i especificarem el domini. Tenim un certificat i una clau d'una autoritat de certificació de confiança. Personalment, al meu entendre, aquest procediment de connexió és més fàcil que llançar un certificat autofirmat a cada dispositiu. Però fins i tot sense certificats autofirmats, encara no va funcionar. Els dispositius Samsung i les versions d'Android = < 6 no poden utilitzar certificats del sistema. Per tant, creem una instància separada d'eap-guest per a ells amb certificats autofirmats. Per a la resta de dispositius, utilitzarem el client eap amb un certificat de confiança. El nom d'usuari ve determinat pel camp Anònim quan el dispositiu està connectat. Només es permeten 3 valors: Convidat, Client i un camp buit. Tota la resta es descarta. Estarà configurat en els polítics. Posaré un exemple una mica més endavant.

Editem les seccions d'autorització i autenticació a habilitat per al lloc/túnel-interior

habilitat per al lloc/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ó, heu d'especificar a les polítiques quins noms es poden utilitzar per a l'inici de sessió anònim. Edició policy.d/filter.

Heu de trobar línies semblants a aquesta:

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

I a continuació a elsif afegeix els valors desitjats:

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

Ara ens hem de moure al directori CERTs. Aquí heu de posar la clau i el certificat d'una autoritat de certificació de confiança, que ja tenim i hem de generar certificats autofirmats per a eap-guest.

Canvieu els paràmetres del fitxer 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"

Escrivim els mateixos valors al fitxer server.cnf. Només canviem
nom comú:

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

A punt. Rebut servidor.crt и servidor.clau ja ens hem registrat més amunt a eap-guest.

I finalment, afegim els nostres punts d'accés al fitxer client.conf. En tinc 7. Per no afegir cada punt per separat, només escriurem la xarxa on es troben (els meus punts d'accés estan en una VLAN independent).

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

Controlador Ubiquiti

Creem una xarxa separada al controlador. Sigui 192.168.2.0/24
Aneu a Configuració -> Perfil. En creem un de nou:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Escrivim l'adreça i el port del servidor radius i la contrasenya que es va escriure al fitxer clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Creeu un nom de xarxa sense fils nou. Seleccioneu WPA-EAP (Enterprise) com a mètode d'autenticació i especifiqueu el perfil de radi creat:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ho guardem tot, apliquem i seguim endavant.

Configuració de clients

Comencem pel més difícil!

Windows 10

La dificultat es redueix al fet que Windows encara no sap com connectar-se al WiFi corporatiu mitjançant un domini. Per tant, hem de carregar manualment el nostre certificat al magatzem de certificats de confiança. Aquí podeu utilitzar tant l'autofirmat com l'autoritat de certificació. Faré servir el segon.

A continuació, heu de crear una connexió nova. Per fer-ho, aneu a la configuració de xarxa i Internet -> Centre de xarxes i compartició -> Crea i configura una nova connexió o xarxa:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduïu manualment el nom de la xarxa i canvieu el tipus de seguretat. Després de fer clic a canviar la configuració de connexió i a la pestanya Seguretat, seleccioneu autenticació de xarxa - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Entrem en els paràmetres, prescriurem la confidencialitat de l'autenticació - client. Com a autoritat de certificació de confiança, seleccioneu el certificat que hem afegit, marqueu la casella "No emeteu una invitació a l'usuari si el servidor no es pot autoritzar" i seleccioneu el mètode d'autenticació: contrasenya sense xifrar (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

A continuació, aneu a la configuració avançada, marqueu "Especifiqueu el mode d'autenticació". Seleccioneu "Autenticació d'usuari" i feu clic a guardar les credencials. Aquí haureu d'introduir username_ldap i password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ho guardem tot, apliquem, tanquem. Podeu connectar-vos a una xarxa nova.

Linux

Vaig provar a Ubuntu 18.04, 18.10, Fedora 29, 30.

Primer, descarreguem el nostre certificat. No he trobat a Linux si és possible utilitzar certificats del sistema i si hi ha una botiga d'aquest tipus.

Connectem-nos al domini. Per tant, necessitem un certificat de l'autoritat de certificació a la qual s'ha comprat el nostre certificat.

Totes les connexions es fan en una finestra. Selecció de la nostra xarxa:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

client anònim
domini: el domini pel qual s'emet el certificat

Android

no Samsung

A partir de la versió 7, quan connecteu WiFi, podeu utilitzar certificats del sistema especificant només el domini:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domini: el domini pel qual s'emet el certificat
client anònim

Samsung

Com he escrit més amunt, els dispositius Samsung no saben com utilitzar els certificats del sistema quan es connecten a WiFi i no tenen la possibilitat de connectar-se mitjançant un domini. Per tant, cal afegir manualment el certificat arrel de l'autoritat de certificació (ca.pem, el portem al servidor Radius). Aquí és on s'utilitzarà la signatura pròpia.

Baixeu el certificat al vostre dispositiu i instal·leu-lo.

Instal·lació del certificatWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Al mateix temps, haureu d'establir el patró de desbloqueig de la pantalla, el codi PIN o la contrasenya, si encara no està configurat:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Vaig mostrar una versió complicada d'instal·lar un certificat. A la majoria de dispositius, només cal que feu clic al certificat descarregat.

Quan el certificat estigui instal·lat, podeu procedir a la connexió:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certificat: indiqueu el que s'ha instal·lat
usuari anònim - convidat

macOS

Els dispositius Apple des de la caixa només es poden connectar a EAP-TLS, però encara haureu de llançar-los un certificat. Per especificar un mètode de connexió diferent, heu d'utilitzar Apple Configurator 2. En conseqüència, primer heu de descarregar-lo al vostre Mac, crear un perfil nou i afegir tots els paràmetres WiFi necessaris.

Configuració d'AppleWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduïu aquí el nom de la vostra xarxa
Tipus de seguretat - WPA2 Enterprise
Tipus d'EAP acceptats - TTLS
Nom d'usuari i contrasenya: deixeu-ho en blanc
Autenticació interna - PAP
Identitat externa-client

Pestanya de confiança. Aquí especifiquem el nostre domini

Tots. El perfil es pot desar, signar i distribuir als dispositius

Un cop el perfil estigui llest, l'heu de descarregar a la rosella i instal·lar-lo. Durant el procés d'instal·lació, haureu d'especificar el usernmae_ldap i la password_ldap de l'usuari:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

El procés és similar al de macOS. Heu d'utilitzar un perfil (podeu utilitzar el mateix que per a macOS. Com crear un perfil a Apple Configurator, vegeu més amunt).

Baixeu el perfil, instal·leu, introduïu credencials, connecteu-vos:

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

Això és tot. Vam configurar un servidor Radius, el vam sincronitzar amb FreeIPA i vam dir als AP d'Ubiquiti que utilitzessin WPA2-EAP.

Possibles preguntes

AT: com transferir un perfil/certificat a un empleat?

SOBRE: Emmagatzeme tots els certificats/perfils a ftp amb accés web. S'ha creat una xarxa de convidats amb un límit de velocitat i accés només a Internet, amb l'excepció de ftp.
L'autenticació té una durada de 2 dies, després dels quals es restableix i el client es queda sense Internet. Això. quan un empleat es vol connectar a WiFi, primer es connecta a la xarxa de convidats, accedeix a FTP, baixa el certificat o el perfil que necessita, l'instal·la i després es pot connectar a la xarxa corporativa.

AT: per què no utilitzar l'esquema amb MSCHAPv2? Ella està més segura!

SOBRE: En primer lloc, aquest esquema funciona bé a NPS (sistema de polítiques de xarxa de Windows), en la nostra implementació, cal configurar addicionalment LDAP (FreeIpa) i emmagatzemar hash de contrasenya al servidor. Afegeix. no és aconsellable fer la configuració, perquè. això pot provocar diversos problemes de sincronització de l'ecografia. En segon lloc, el hash és MD4, de manera que no afegeix molta seguretat.

AT: és possible autoritzar dispositius per adreces mac?

SOBRE: NO, això no és segur, un atacant pot canviar les adreces MAC i, encara més, l'autorització per adreces MAC no és compatible amb molts dispositius

AT: Què fan servir en general tots aquests certificats? pots unir-te sense ells?

SOBRE: Els certificats s'utilitzen per autoritzar el servidor. Aquells. en connectar-se, el dispositiu comprova si és un servidor de confiança o no. Si és així, l'autenticació continua, si no, la connexió es tanca. Pots connectar-te sense certificats, però si un atacant o veí instal·la a casa un servidor de radi i un punt d'accés amb el mateix nom que el nostre, pot interceptar fàcilment les credencials de l'usuari (no oblidis que es transmeten en text clar). I quan s'utilitza un certificat, l'enemic veurà als seus registres només el nostre nom d'usuari fictici - convidat o client i un error de tipus - Certificat CA desconegut

una mica més sobre macOSNormalment a macOS, la reinstal·lació del sistema es fa a través d'Internet. En mode de recuperació, el Mac ha d'estar connectat a WiFi, i aquí no funcionaran ni la nostra WiFi corporativa ni la xarxa de convidats. Personalment, vaig plantejar una altra xarxa, l'habitual WPA2-PSK, oculta, només per a operacions tècniques. O encara podeu crear una unitat flash USB d'arrencada amb el sistema per endavant. Però si la rosella és posterior al 2015, encara haureu de trobar un adaptador per a aquesta unitat flaix)

Font: www.habr.com

Afegeix comentari