WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Au fost deja descrise câteva exemple de organizare a rețelei WiFi corporative. Aici voi descrie cum am implementat o soluție similară și problemele cu care a trebuit să mă confrunt la conectarea pe diferite dispozitive. Vom folosi LDAP-ul existent cu utilizatorii înregistrați, vom ridica FreeRadius și vom configura WPA2-Enterprise pe controlerul Ubnt. Totul pare a fi simplu. Să vedem…

Câteva despre metodele EAP

Înainte de a continua cu sarcina, trebuie să decidem ce metodă de autentificare vom folosi în soluția noastră.

Din Wikipedia:

EAP este un cadru de autentificare care este adesea folosit în rețelele fără fir și conexiunile punct la punct. Formatul a fost descris pentru prima dată în RFC 3748 și actualizat în RFC 5247.
EAP este folosit pentru a selecta o metodă de autentificare, pentru a trece cheile și pentru a procesa acele chei cu plug-in-uri numite metode EAP. Există multe metode EAP, atât definite cu EAP în sine, cât și lansate de furnizori individuali. EAP nu definește stratul de legătură, definește doar formatul mesajului. Fiecare protocol care utilizează EAP are propriul protocol de încapsulare a mesajelor EAP.

Metodele în sine:

  • LEAP este un protocol proprietar dezvoltat de CISCO. Vulnerabilități găsite. În prezent, nu este recomandată utilizarea
  • EAP-TLS este bine acceptat printre furnizorii de servicii wireless. Este un protocol securizat deoarece este succesorul standardelor SSL. Configurarea clientului este destul de complicată. Aveți nevoie de un certificat de client în plus față de parolă. Suportat pe multe sisteme
  • EAP-TTLS - acceptat pe scară largă pe multe sisteme, oferă o bună securitate prin utilizarea certificatelor PKI doar pe serverul de autentificare
  • EAP-MD5 este un alt standard deschis. Oferă securitate minimă. Vulnerabil, nu acceptă autentificarea reciprocă și generarea cheilor
  • EAP-IKEv2 - bazat pe Internet Key Exchange Protocol versiunea 2. Oferă autentificare reciprocă și stabilirea cheii de sesiune între client și server
  • PEAP este o soluție comună a CISCO, Microsoft și RSA Security ca standard deschis. Disponibil pe scară largă în produse, oferă o securitate foarte bună. Similar cu EAP-TTLS, care necesită doar un certificat pe partea de server
  • PEAPv0/EAP-MSCHAPv2 - după EAP-TLS, acesta este al doilea standard utilizat pe scară largă în lume. Relația client-server folosită în Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Creat de Cisco ca alternativă la PEAPv0/EAP-MSCHAPv2. Nu protejează în niciun fel datele de autentificare. Nu este acceptat pe sistemul de operare Windows
  • EAP-FAST este o tehnică dezvoltată de Cisco pentru a corecta deficiențele LEAP. Utilizează acreditările de acces protejat (PAC). Complet neterminat

Din toată această diversitate, alegerea nu este încă grozavă. Era necesară metoda de autentificare: securitate bună, suport pe toate dispozitivele (Windows 10, macOS, Linux, Android, iOS) și, de fapt, cu cât mai simplu, cu atât mai bine. Prin urmare, alegerea a căzut pe EAP-TTLS împreună cu protocolul PAP.
Poate apărea întrebarea - De ce să folosiți PAP? pentru că transmite parole în clar?

Da, așa e. Comunicarea între FreeRadius și FreeIPA va avea loc în acest fel. În modul de depanare, puteți urmări cum sunt trimise numele de utilizator și parola. Da, și lasă-le să plece, doar tu ai acces la serverul FreeRadius.

Puteți citi mai multe despre activitatea EAP-TTLS aici

FreeRADIUS

FreeRadius va fi ridicat pe CentOS 7.6. Nu este nimic complicat aici, îl setăm în modul obișnuit.

yum install freeradius freeradius-utils freeradius-ldap -y

Versiunea 3.0.13 este instalată din pachete. Acesta din urmă poate fi luat https://freeradius.org/

După aceea, FreeRadius funcționează deja. Puteți decomenta linia în /etc/raddb/users

steve   Cleartext-Password := "testing"

Lansați pe server în modul de depanare

freeradius -X

Și faceți o conexiune de testare de la localhost

radtest steve testing 127.0.0.1 1812 testing123

Am un răspuns Acces primit-Accept ID 115 de la 127.0.0.1:1812 la 127.0.0.1:56081 lungime 20, înseamnă că totul este în regulă. Daţi-i drumul.

Conectăm modulul ldap.

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

Și o vom schimba imediat. Avem nevoie de FreeRadius pentru a putea accesa 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}})"
}
...

Reporniți serverul radius și verificați sincronizarea utilizatorilor LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Editarea eap in mods-enabled/eap
Aici adăugăm două exemple de eap. Acestea vor diferi doar în certificate și chei. Mai jos voi explica de ce este așa.

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

Editare ulterioară activat pentru site/implicit. Secțiunile de autorizare și autentificare sunt de interes.

activat pentru site/implicit

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
}

În secțiunea de autorizare, eliminăm toate modulele de care nu avem nevoie. Lăsăm doar ldap. Adăugați verificarea clientului după numele de utilizator. De aceea am adăugat două exemple de eap mai sus.

EAP multipluCert este că la conectarea unor dispozitive vom folosi certificate de sistem și vom specifica domeniul. Avem un certificat și o cheie de la o autoritate de certificare de încredere. Personal, după părerea mea, o astfel de procedură de conectare este mai ușoară decât aruncarea unui certificat autosemnat pe fiecare dispozitiv. Dar chiar și fără certificate autosemnate, tot nu a funcționat. Dispozitivele Samsung și Android =< 6 versiuni nu pot folosi certificate de sistem. Prin urmare, creăm o instanță separată de eap-guest pentru ei cu certificate autosemnate. Pentru toate celelalte dispozitive, vom folosi clientul eap cu un certificat de încredere. Numele de utilizator este determinat de câmpul Anonim atunci când dispozitivul este conectat. Sunt permise doar 3 valori: Invitat, Client și un câmp gol. Orice altceva este aruncat. Se va configura în politicieni. Voi da un exemplu puțin mai târziu.

Să edităm secțiunile de autorizare și autentificare în activat pentru site/tunel-interior

activat pentru site/tunel-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
}

Apoi, trebuie să specificați în politici ce nume pot fi folosite pentru autentificare anonimă. Editare politică.d/filtru.

Trebuie să găsiți linii similare cu aceasta:

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

Și mai jos în elsif adăugați valorile dorite:

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

Acum trebuie să trecem la director certificate. Aici trebuie să puneți cheia și certificatul de la o autoritate de certificare de încredere, pe care o avem deja și trebuie să generăm certificate autosemnate pentru eap-guest.

Modificați parametrii din fișier 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"

Scriem aceleași valori în fișier server.cnf. Schimbăm doar
denumirea comună:

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"

Crea:

make

Gata. Primit server.crt и server.cheie ne-am înregistrat deja mai sus în eap-guest.

Și, în sfârșit, să adăugăm punctele noastre de acces la fișier client.conf. Am 7. Pentru a nu adăuga fiecare punct separat, vom scrie doar rețeaua în care se află (punctele mele de acces sunt într-un VLAN separat).

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

Controler Ubiquiti

Creăm o rețea separată pe controler. Să fie 192.168.2.0/24
Accesați setări -> profil. Creăm unul nou:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Scriem adresa și portul serverului radius și parola care a fost scrisă în fișier clienti.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Creați un nou nume de rețea fără fir. Selectați WPA-EAP (Enterprise) ca metodă de autentificare și specificați profilul de rază creat:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Salvăm totul, aplicăm și mergem mai departe.

Stabilirea clienților

Să începem cu cele mai dificile!

Ferestre 10

Dificultatea se rezumă la faptul că Windows nu știe încă să se conecteze la WiFi corporativ prin intermediul unui domeniu. Prin urmare, trebuie să încărcăm manual certificatul nostru în depozitul de certificate de încredere. Aici puteți utiliza atât autosemnatul, cât și de la autoritatea de certificare. Il voi folosi pe al doilea.

Apoi, trebuie să creați o nouă conexiune. Pentru a face acest lucru, accesați setările de rețea și Internet -> Centru de rețea și partajare -> Creați și configurați o nouă conexiune sau rețea:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduceți manual numele rețelei și modificați tipul de securitate. După ce facem clic pe modificați setările de conexiune iar în fila Securitate, selectați autentificare în rețea - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Intrăm în parametri, prescriem confidențialitatea autentificării - client. Ca autoritate de certificare de încredere, selectați certificatul pe care l-am adăugat, bifați caseta „Nu emiteți o invitație utilizatorului dacă serverul nu poate fi autorizat” și selectați metoda de autentificare - parolă necriptată (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Apoi, accesați setările avansate, bifați „Specificați modul de autentificare”. Selectați „Autentificare utilizator” și faceți clic pe salvați acreditările. Aici va trebui să introduceți username_ldap și password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Salvăm totul, aplicăm, închidem. Vă puteți conecta la o nouă rețea.

Linux

Am testat pe Ubuntu 18.04, 18.10, Fedora 29, 30.

Mai întâi, să descarcăm certificatul nostru. Nu am găsit în Linux dacă este posibil să se utilizeze certificate de sistem și dacă există deloc un astfel de magazin.

Să ne conectăm la domeniu. Prin urmare, avem nevoie de un certificat de la autoritatea de certificare de la care a fost achiziționat certificatul nostru.

Toate conexiunile se fac într-o singură fereastră. Selectarea rețelei noastre:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

client-anonim
domeniu - domeniul pentru care este emis certificatul

Android

non-Samsung

Din versiunea 7, la conectarea WiFi, puteți utiliza certificate de sistem specificând doar domeniul:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domeniu - domeniul pentru care este emis certificatul
client-anonim

Samsung

După cum am scris mai sus, dispozitivele Samsung nu știu cum să folosească certificatele de sistem atunci când se conectează la WiFi și nu au capacitatea de a se conecta printr-un domeniu. Prin urmare, trebuie să adăugați manual certificatul rădăcină al autorității de certificare (ca.pem, îl luăm pe serverul Radius). Aici va fi folosit autosemnatul.

Descărcați certificatul pe dispozitiv și instalați-l.

Instalare certificatWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

În același timp, va trebui să setați modelul de deblocare a ecranului, codul PIN sau parola, dacă nu este deja setat:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Am arătat o versiune complicată a instalării unui certificat. Pe majoritatea dispozitivelor, pur și simplu faceți clic pe certificatul descărcat.

Când certificatul este instalat, puteți continua la conexiune:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certificat - indicați cel care a fost instalat
utilizator anonim - oaspete

MACOS

Dispozitivele Apple din cutie se pot conecta numai la EAP-TLS, dar totuși trebuie să le aruncați un certificat. Pentru a specifica o altă metodă de conectare, trebuie să utilizați Apple Configurator 2. În consecință, trebuie mai întâi să îl descărcați pe Mac, să creați un profil nou și să adăugați toate setările WiFi necesare.

Configurator AppleWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Introduceți aici numele rețelei dvs
Tip de securitate - WPA2 Enterprise
Tipuri EAP acceptate - TTLS
Nume de utilizator și parolă - lăsați necompletat
Autentificare interioară - PAP
Identitate exterioară-client

Fila de încredere. Aici specificam domeniul nostru

Toate. Profilul poate fi salvat, semnat și distribuit pe dispozitive

După ce profilul este gata, trebuie să îl descărcați pe mac și să îl instalați. În timpul procesului de instalare, va trebui să specificați usernmae_ldap și password_ldap ale utilizatorului:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Procesul este similar cu macOS. Trebuie să utilizați un profil (puteți folosi același ca pentru macOS. Cum să creați un profil în Apple Configurator, vezi mai sus).

Descărcați profilul, instalați, introduceți acreditările, conectați:

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

Asta e tot. Am configurat un server Radius, l-am sincronizat cu FreeIPA și le-am spus AP-urilor Ubiquiti să folosească WPA2-EAP.

Posibile intrebari

ÎN: cum se transferă un profil/certificat unui angajat?

DESPRE: Stochez toate certificatele/profilurile pe ftp cu acces web. S-a ridicat o rețea de oaspeți cu o limită de viteză și acces numai la Internet, cu excepția ftp.
Autentificarea durează 2 zile, după care este resetată și clientul rămâne fără Internet. Acea. atunci când un angajat dorește să se conecteze la WiFi, se conectează mai întâi la rețeaua invitaților, accesează FTP, descarcă certificatul sau profilul de care are nevoie, îl instalează și apoi se poate conecta la rețeaua corporativă.

ÎN: de ce să nu folosiți schema cu MSCHAPv2? E mai sigură!

DESPRE: În primul rând, o astfel de schemă funcționează bine pe NPS (Windows Network Policy System), în implementarea noastră este necesară configurarea suplimentară a LDAP (FreeIpa) și stocarea hash-urilor parolei pe server. Adăuga. nu este indicat sa faci setari, deoarece. aceasta poate duce la diverse probleme de sincronizare a ultrasunetelor. În al doilea rând, hash-ul este MD4, deci nu adaugă prea multă securitate.

ÎN: este posibil să se autorizeze dispozitivele după adrese mac?

DESPRE: NU, acest lucru nu este sigur, un atacator poate schimba adresele MAC și, cu atât mai mult, autorizarea prin adrese MAC nu este acceptată pe multe dispozitive

ÎN: ce să folosească în general toate aceste certificate? te poti alatura fara ei?

DESPRE: certificatele sunt folosite pentru a autoriza serverul. Acestea. la conectare, dispozitivul verifică dacă este un server de încredere sau nu. Dacă este, atunci autentificarea continuă, dacă nu, conexiunea este închisă. Te poti conecta fara certificate, dar daca un atacator sau vecin isi instaleaza acasa un server radius si un punct de acces cu acelasi nume cu al nostru, poate intercepta cu usurinta datele de conectare ale utilizatorului (nu uita ca acestea sunt transmise in text clar). Și când se folosește un certificat, inamicul va vedea în jurnalele sale doar numele nostru de utilizator fictiv - oaspete sau client și o eroare de tip - Certificat CA necunoscut

mai multe despre macOSDe obicei, pe macOS, reinstalarea sistemului se face prin Internet. În modul de recuperare, Mac-ul trebuie să fie conectat la WiFi și nici WiFi-ul nostru corporativ, nici rețeaua pentru oaspeți nu vor funcționa aici. Personal, am ridicat o alta retea, obisnuita WPA2-PSK, ascunsa, doar pentru operatiuni tehnice. Sau puteți face în continuare o unitate flash USB bootabilă cu sistemul în avans. Dar dacă macul este după 2015, va trebui totuși să găsiți un adaptor pentru această unitate flash)

Sursa: www.habr.com

Adauga un comentariu