Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Alcuni esempi di organizzazione del WiFi aziendale sono già stati descritti. Qui descriverò come ho implementato tale soluzione e i problemi che ho riscontrato durante la connessione su dispositivi diversi. Utilizzeremo l'LDAP esistente con utenti consolidati, installeremo FreeRadius e configureremo WPA2-Enterprise sul controller Ubnt. Tutto sembra semplice. Vediamo…

Un po' di metodi EAP

Prima di iniziare l'attività, dobbiamo decidere quale metodo di autenticazione utilizzeremo nella nostra soluzione.

Da Wikipedia:

EAP è un framework di autenticazione spesso utilizzato nelle reti wireless e nelle connessioni punto-punto. Il formato è stato descritto per la prima volta nella RFC 3748 e aggiornato nella RFC 5247.
EAP viene utilizzato per selezionare un metodo di autenticazione, trasferire le chiavi ed elaborare tali chiavi tramite plugin chiamati metodi EAP. Esistono molti metodi EAP, sia definiti con l'EAP stesso sia quelli rilasciati dai singoli fornitori. EAP non definisce il livello di collegamento, definisce solo il formato del messaggio. Ogni protocollo che utilizza EAP dispone del proprio protocollo di incapsulamento dei messaggi EAP.

I metodi stessi:

  • LEAP è un protocollo proprietario sviluppato da CISCO. Vulnerabilità riscontrate. Attualmente non consigliato per l'uso
  • EAP-TLS è ben supportato dai fornitori wireless. È un protocollo sicuro perché è il successore degli standard SSL. La configurazione del client è piuttosto complicata. Oltre alla password è necessario un certificato client. Supportato su molti sistemi
  • EAP-TTLS: ampiamente supportato su molti sistemi, offre una buona sicurezza utilizzando i certificati PKI solo sul server di autenticazione
  • EAP-MD5 è un altro standard aperto. Offre una sicurezza minima. Vulnerabile, non supporta l'autenticazione reciproca e la generazione di chiavi
  • EAP-IKEv2: basato su Internet Key Exchange Protocol versione 2. Fornisce l'autenticazione reciproca e la creazione di chiavi di sessione tra client e server
  • PEAP è una soluzione congiunta tra CISCO, Microsoft e RSA Security come standard aperto. Ampiamente disponibile nei prodotti, offre un'ottima sicurezza. Simile a EAP-TTLS, richiede solo un certificato lato server
  • PEAPv0/EAP-MSCHAPv2 - Dopo EAP-TLS, questo è il secondo standard ampiamente utilizzato nel mondo. Utilizzo della relazione client-server in Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC: creato da Cisco come alternativa a PEAPv0/EAP-MSCHAPv2. Non protegge in alcun modo i dati di autenticazione. Non supportato sul sistema operativo Windows
  • EAP-FAST è un metodo sviluppato da Cisco per correggere le carenze di LEAP. Utilizza credenziali di accesso protetto (PAC). Completamente incompiuto

Di tutta questa varietà, la scelta non è ancora eccezionale. Il metodo di autenticazione richiesto: buona sicurezza, supporto su tutti i dispositivi (Windows 10, macOS, Linux, Android, iOS) e, infatti, più semplice è, meglio è. Pertanto la scelta è caduta su EAP-TTLS in combinazione con il protocollo PAP.
Potrebbe sorgere la domanda: perché utilizzare PAP? Dopotutto, trasmette le password in chiaro?

Sì, è giusto. La comunicazione tra FreeRadius e FreeIPA avverrà esattamente in questo modo. In modalità debug, puoi tenere traccia di come vengono inviati nome utente e password. Sì, e lasciali andare, solo tu hai accesso al server FreeRadius.

Puoi leggere ulteriori informazioni su come funziona EAP-TTLS qui

LiberoRADIUS

Aggiorneremo FreeRadius a CentOS 7.6. Non c'è niente di complicato qui, lo installiamo nel solito modo.

yum install freeradius freeradius-utils freeradius-ldap -y

Dei pacchetti è installata la versione 3.0.13. Quest'ultimo può essere preso a https://freeradius.org/

Successivamente, FreeRadius è già funzionante. Puoi rimuovere il commento dalla riga in /etc/raddb/users

steve   Cleartext-Password := "testing"

Avvia il server in modalità debug

freeradius -X

Ed effettua una connessione di prova da localhost

radtest steve testing 127.0.0.1 1812 testing123

Abbiamo ricevuto una risposta ID di accettazione accesso ricevuto 115 da 127.0.0.1:1812 a 127.0.0.1:56081 lunghezza 20, significa che è tutto OK. Andare avanti.

Collegamento del modulo ldap.

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

E lo cambieremo immediatamente. Abbiamo bisogno di FreeRadius per poter accedere a FreeIPA

abilitato per mod/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}})"
}
...

Riavvia il server Radius e controlla la sincronizzazione degli utenti LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Modifica subito abilitato per mod/eap
Qui aggiungeremo due istanze di eap. Differiranno solo nei certificati e nelle chiavi. Spiegherò perché questo è vero di seguito.

abilitato per mod/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"
           }
}

Successivamente modifichiamo abilitato per il sito/predefinito. Mi interessano le sezioni Autorizza e Autentica.

abilitato per il sito/predefinito

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
}

Nella sezione autorizza rimuoviamo tutti i moduli che non ci servono. Lasciamo solo ldap. Aggiungi la verifica del cliente tramite nome utente. Questo è il motivo per cui abbiamo aggiunto due istanze di eap sopra.

Multi EAPIl fatto è che quando colleghiamo alcuni dispositivi utilizzeremo i certificati di sistema e specificheremo il dominio. Disponiamo di un certificato e di una chiave provenienti da un'autorità di certificazione attendibile. Personalmente, a mio avviso, questa procedura di connessione è più semplice che lanciare un certificato autofirmato su ciascun dispositivo. Ma anche senza i certificati autofirmati non era ancora possibile partire. I dispositivi Samsung e le versioni Android =< 6 non sanno come utilizzare i certificati di sistema. Pertanto, creiamo per loro un'istanza separata di eap-guest con certificati autofirmati. Per tutti gli altri dispositivi utilizzeremo eap-client con un certificato attendibile. Il nome utente è determinato dal campo Anonimo quando si collega il dispositivo. Sono consentiti solo 3 valori: Ospite, Cliente e un campo vuoto. Il resto è tutto scartato. Questo può essere configurato nelle policy. Darò un esempio un po' più tardi.

Modifichiamo le sezioni di autorizzazione e autenticazione in abilitato al sito/tunnel interno

abilitato al sito/tunnel 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
}

Successivamente è necessario specificare nelle policy quali nomi possono essere utilizzati per l'accesso anonimo. La modifica policy.d/filter.

Devi trovare righe simili a questa:

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

E sotto in elsif aggiungi i valori necessari:

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

Ora dobbiamo spostarci nella directory certs. Qui dobbiamo inserire la chiave e il certificato di un'autorità di certificazione attendibile, di cui già disponiamo, e dobbiamo generare certificati autofirmati per eap-guest.

Modifica dei parametri nel file 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"

Scriviamo gli stessi valori nel file server.cnf. Cambiamo solo
nome comune:

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"

Noi creiamo:

make

Pronto. Ricevuto server.crt и chiave.server Ci siamo già registrati sopra in eap-guest.

Infine, aggiungiamo i nostri punti di accesso al file client.conf. Ne ho 7. Per non aggiungere ciascun punto separatamente, registreremo solo la rete in cui si trovano (i miei punti di accesso sono in una VLAN separata).

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

Controllore Ubiquiti

Innalziamo una rete separata sul controller. Lascia che sia 192.168.2.0/24
Vai su impostazioni -> profilo. Creiamone uno nuovo:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Annotiamo l'indirizzo e la porta del server Radius e la password scritta nel file client.conf:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Crea un nuovo nome di rete wireless. Seleziona WPA-EAP (Enterprise) come metodo di autenticazione e specifica il profilo del raggio creato:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Salviamo tutto, lo applichiamo e andiamo avanti.

Configurazione dei clienti

Iniziamo con la parte più difficile!

Windows 10

La difficoltà sta nel fatto che Windows non sa ancora come connettersi al WiFi aziendale su un dominio. Pertanto, dobbiamo caricare manualmente il nostro certificato nell'archivio certificati attendibile. Qui è possibile utilizzarne uno autofirmato o uno fornito da un'autorità di certificazione. Userò il secondo.

Successivamente è necessario creare una nuova connessione. Per fare ciò, vai su Impostazioni di rete e Internet -> Centro connessioni di rete e condivisione -> Crea e configura una nuova connessione o rete:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Inseriamo manualmente il nome della rete e modifichiamo il tipo di sicurezza. Quindi fare clic su modificare le impostazioni di connessione e nella scheda Sicurezza, seleziona Autenticazione di rete - EAP-TTLS.

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Vai alle impostazioni, imposta la riservatezza dell'autenticazione - cliente. In qualità di autorità di certificazione attendibile, seleziona il certificato che abbiamo aggiunto, seleziona la casella "Non inviare un invito all'utente se il server non può essere autorizzato" e seleziona il metodo di autenticazione: password in testo semplice (PAP).

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Successivamente, vai ai parametri aggiuntivi e seleziona la casella "Specifica la modalità di autenticazione". Selezionare "Autenticazione utente" e fare clic su salvare le credenziali. Qui dovrai inserire nomeutente_ldap e password_ldap

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Salviamo, applichiamo, chiudiamo tutto. Puoi connetterti a una nuova rete.

Linux

Ho testato su Ubuntu 18.04, 18.10, Fedora 29, 30.

Innanzitutto, scarica tu stesso il certificato. Non ho trovato in Linux se sia possibile utilizzare i certificati di sistema o se esista un archivio del genere.

Ci collegheremo tramite dominio. Pertanto, abbiamo bisogno di un certificato dell'autorità di certificazione da cui è stato acquistato il nostro certificato.

Tutte le connessioni vengono effettuate in un'unica finestra. Seleziona la nostra rete:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

anonimo - cliente
dominio: il dominio per il quale è stato emesso il certificato

Android

non Samsung

Dalla versione 7, quando ci si connette WiFi, è possibile utilizzare i certificati di sistema specificando solo il dominio:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

dominio: il dominio per il quale è stato emesso il certificato
anonimo - cliente

Samsung

Come ho scritto sopra, i dispositivi Samsung non sanno come utilizzare i certificati di sistema quando si connettono al WiFi e non hanno la possibilità di connettersi tramite dominio. Pertanto è necessario aggiungere manualmente il certificato radice dell'autorità di certificazione (ca.pem, prelevarlo dal server Radius). Qui è dove verrà utilizzato l'autofirmato.

Scarica il certificato sul tuo dispositivo e installalo.

Installazione di un certificatoWi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

In questo caso, dovrai impostare una sequenza di sblocco dello schermo, un codice PIN o una password, se non è già impostata:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Ho mostrato un'opzione complessa per l'installazione di un certificato. Sulla maggior parte dei dispositivi è sufficiente fare clic sul certificato scaricato.

Una volta installato il certificato è possibile procedere alla connessione:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

certificato: indica quello che hai installato
utente anonimo - ospite

macOS

I dispositivi Apple possono connettersi solo a EAP-TLS immediatamente, ma è comunque necessario fornire loro un certificato. Per specificare un metodo di connessione diverso, è necessario utilizzare Apple Configurator 2. Di conseguenza, devi prima scaricarlo sul tuo Mac, creare un nuovo profilo e aggiungere tutte le impostazioni WiFi necessarie.

Apple ConfiguratorWi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Qui indichiamo il nome della nostra rete
Tipo di sicurezza: WPA2 Enterprise
Tipi EAP accettati: TTLS
Nome utente e password: lasciare vuoti
Autenticazione interna - PAP
Identità Esterna - cliente

Scheda Fiducia. Qui indichiamo il nostro dominio

Tutto. Il profilo può essere salvato, firmato e distribuito ai dispositivi

Dopo che il profilo è pronto, devi scaricarlo sul tuo Mac e installarlo. Durante il processo di installazione, dovrai specificare usernmae_ldap e password_ldap dell'utente:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

iOS

Il processo è simile a macOS. Devi utilizzare un profilo (puoi utilizzare lo stesso di macOS. Vedi sopra per come creare un profilo in Apple Configurator).

Scarica il profilo, installa, inserisci le credenziali, connettiti:

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

Wi-Fi aziendale. FreeRadius + FreeIPA + Ubiquiti

È tutto. Abbiamo configurato il server Radius, lo abbiamo sincronizzato con FreeIPA e abbiamo detto ai punti di accesso Ubiquiti di utilizzare WPA2-EAP.

Possibili domande

A: come trasferire un profilo/certificato a un dipendente?

DI: Memorizzo tutti i certificati/profili su FTP con accesso via web. Ho configurato una rete ospite con un limite di velocità e accesso solo a Internet, ad eccezione dell'FTP.
L'autenticazione dura 2 giorni, trascorsi i quali viene ripristinata e il client rimane senza Internet. Quello. Quando un dipendente desidera connettersi al WiFi, si connette prima alla rete ospite, accede all'FTP, scarica il certificato o il profilo di cui ha bisogno, li installa e quindi può connettersi alla rete aziendale.

A: perché non utilizzare uno schema con MSCHAPv2? è più sicuro!

DI: in primo luogo, questo schema funziona bene su NPS (Windows Network Policy System), nella nostra implementazione è necessario configurare ulteriormente LDAP (FreeIpa) e archiviare gli hash delle password sul server. Aggiungere. Non è consigliabile effettuare impostazioni, perché ciò può portare a diversi problemi con la sincronizzazione del sistema ecografico. In secondo luogo, l'hash è MD4, quindi non aggiunge molta sicurezza

A: È possibile autorizzare i dispositivi utilizzando indirizzi mac?

DI: NO, questo non è sicuro, un utente malintenzionato può falsificare gli indirizzi MAC e, ancora di più, l'autorizzazione tramite indirizzi MAC non è supportata su molti dispositivi

A: Perché utilizzare tutti questi certificati? puoi connetterti senza di loro

DI: i certificati vengono utilizzati per autorizzare il server. Quelli. Durante la connessione, il dispositivo verifica se si tratta di un server affidabile o meno. In tal caso l'autenticazione procede; in caso contrario la connessione viene chiusa. Puoi connetterti senza certificati, ma se un malintenzionato o un vicino configura un server Radius e un punto di accesso con lo stesso nome del nostro a casa, può facilmente intercettare le credenziali dell'utente (non dimenticare che vengono trasmesse in chiaro) . E quando viene utilizzato un certificato, il nemico vedrà nei suoi registri solo il nostro nome utente fittizio - ospite o cliente e un errore di tipo - Certificato CA sconosciuto

qualcosa in più su macOSIn genere, su macOS, la reinstallazione del sistema viene eseguita tramite Internet. In modalità di ripristino, il Mac deve essere connesso al WiFi e qui né il nostro WiFi aziendale né la rete ospite funzioneranno. Personalmente ho installato un'altra rete, la solita WPA2-PSK, nascosta, solo per operazioni tecniche. Oppure puoi anche creare in anticipo un'unità flash USB avviabile con il sistema. Ma se il tuo Mac è successivo al 2015, dovrai trovare anche un adattatore per questa unità flash)

Fonte: habr.com

Aggiungi un commento