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
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
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:
Annotiamo l'indirizzo e la porta del server Radius e la password scritta nel file client.conf:
Crea un nuovo nome di rete wireless. Seleziona WPA-EAP (Enterprise) come metodo di autenticazione e specifica il profilo del raggio creato:
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:
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.
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).
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
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:
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:
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 certificato
In questo caso, dovrai impostare una sequenza di sblocco dello schermo, un codice PIN o una password, se non è già impostata:
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:
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 Configurator
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:
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:
È 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