WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Već su opisani neki primjeri organizacije korporativnog WiFi-a. Ovdje ću opisati kako sam realizovao takvo rešenje i probleme sa kojima sam se suočio prilikom povezivanja na različitim uređajima. Koristićemo postojeći LDAP sa unetim korisnicima, podići FreeRadius i postaviti WPA2-Enterprise na Ubnt kontroleru. Naizgled je sve jednostavno. Vidjet ćemo...

Malo o metodama EAP

Prije nego što započnemo izvršenje zadatka, potrebno je odrediti koji metod autentifikacije ćemo koristiti u našem rešenju.

Iz Wikipedije:

EAP je okvir autentifikacije koji se često koristi u bežičnim mrežama i tačka-tačka vezama. Format je prvi put opisan u RFC 3748 i ažuriran u RFC 5247.
EAP se koristi za odabir metoda autentifikacije, prenos ključeva i obradu tih ključeva pomoću modula koji se nazivaju EAP metodama. Postoji mnogo EAP metodâ, kako onih definiranih zajedno sa samim EAP-om, tako i onih koje su izdale različite kompanije. EAP ne definiše sloj kanala, već samo definiše format poruka. Svaki protokol koji koristi EAP ima svoj vlastiti protokol za inkapsulaciju EAP poruka.

Metodi sami:

  • LEAP je proprietary protokol razvijen od strane CISCO-a. Pronađene su ranjivosti. Trenutno se ne preporučuje za upotrebu.
  • EAP-TLS se dobro podržava među vendora bežičnih veza. Je siguran protokol, budući da je naslednik SSL standarda. Konfiguracija klijenta je prilično složena. Potreban je klijentski sertifikat pored lozinke. Podržava se u mnogim sistemima.
  • EAP-TTLS se široko podržava u mnogim sistemima, nudi dobru sigurnost, koristeći PKI sertifikate samo na serveru autentifikacije.
  • EAP-MD5 je drugi otvoreni standard. Nudi minimalnu sigurnost. Ranjiv je, ne podržava međusobnu autentifikaciju i generaciju ključeva.
  • EAP-IKEv2 se oslanja na Internet Key Exchange Protocol verzija 2. Obezbeđuje međusobnu autentifikaciju i uspostavljanje sesijskog ključa između klijenta i servera.
  • PEAP je zajedničko rešenje CISCO-a, Microsoft-a i RSA Security-a kao otvoreni standard. Široko je dostupno u proizvodima, obezbeđuje veoma dobru sigurnost. Slično je EAP-TTLS, tražeći samo sertifikat na serverskoj strani.
  • PEAPv0/EAP-MSCHAPv2 — nakon EAP-TLS, to je drugi najšire korišteni standard u svijetu. Koristi se klijent-server veza u Microsoftu, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC — razvijen od strane Cisco kao alternativa PEAPv0/EAP-MSCHAPv2. Ne štiti autentifikacijske podatke u nijednom slučaju. Nije podržan u Windows OS
  • EAP-FAST — metoda koju je razvio Cisco kako bi ispravila nedostatke LEAP-a. Koristi Protected Access Credential (PAC). Potpuno nije dovršen

Od svega tog raznolika izbora, opcije ipak nisu mnoge. Od metode autentifikacije se tražila: dobra sigurnost, podrška na svim uređajima (Windows 10, macOS, Linux, Android, iOS) i, zapravo, što jednostavnije, to bolje. Stoga je izbor pao na EAP-TTLS u kombinaciji s PAP protokolom.
Možda se može javiti pitanje — Zašto koristiti PAP? jer šalje lozinke u otvorenom obliku?

Da, sve je u redu. Komunikacija između FreeRadius i FreeIPA će se odvijati baš na taj način. U debug modu možete pratiti kako se šalju korisničko ime i lozinka. I neka se šalju, samo vi imate pristup serveru FreeRadius.

Više o radu EAP-TTLS možete pročitati ovdje

FreeRADIUS

FreeRadius ćemo postaviti na CentOS 7.6. Ovdje nema ništa složeno, instaliramo na običan način.

yum install freeradius freeradius-utils freeradius-ldap -y

Iz paketa se instalira verzija 3.0.13. Posljednju možete nabaviti na https://freeradius.org/

Nakon toga FreeRadius već radi. Možete u /etc/raddb/users odkomentirati redak

steve   Cleartext-Password := "testing"

Pokrenite server u debug modu

freeradius -X

I napravimo testnu vezu s localhostom

radtest steve testing 127.0.0.1 1812 testing123

Dobiven je odgovor Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:56081 length 20, znači sve je u redu. Idemo dalje.

Povezujemo modul ldap.

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

I odmah ga mijenjamo. Trebamo da FreeRadius može pristupiti 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}})"
}
...

Ponovo pokrećemo radius-server i provjeravamo sinhronizaciju LDAP korisnika:

radtest user_ldap password_ldap localhost 1812 testing123

Uređujemo eap u mods-enabled/eap
Ovdje ćemo dodati dva primjera eap. Oni će se razlikovati samo po certifikatima i ključevima. Malo niže ću objasniti zašto baš tako

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"
           }
}

Zatim uređujemo site-enabled/default. Interesiraju nas sekcije authorize i authenticate.

site-enabled/default

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
}

U sekciji authorize uklanjamo sve module koji nam nisu potrebni. Ostavimo samo ldap. Dodajemo provjeru klijenta po korisničkom imenu. Upravo zbog toga smo iznad dodali dva primjera eap.

Multi EAPNaime, pri povezivanju nekih uređaja koristit ćemo sustavske certifikate i navesti domen. Imamo certifikat i ključ od pouzdane certifikacijske ustanove. Po mom osobnom mišljenju, ovakva procedura povezivanja je jednostavnija nego slati na svaki uređaj samo-potpisane certifikate. No, ni bez samo-potpisanih certifikata nismo uspjeli izbjeći. Samsung uređaji i Android <= 6 verzije ne znaju koristiti sustavske certifikate. Zato za njih kreiramo poseban primjer eap-guest sa samo-potpisanim certifikatima. Za sve ostale uređaje koristit ćemo eap-client s pouzdanim certifikatom. User-Name se definira prema polju Anonymous prilikom povezivanja uređaja. Dozvoljena su samo 3 vrijednosti: Guest, Client i prazno polje. Sve ostalo se odbacuje. Ovo se postavlja u politikama. Primjer ću приведем malo kasnije.

Uređujemo sekcije authorize i authenticate u site-enabled/inner-tunnel

site-enabled/inner-tunnel

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
}

Zatim je potrebno navesti u politikama koja imena se mogu koristiti za anonimni ulaz. Uređujemo policy.d/filter.

Potrebno je pronaći linije slične ovome:

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

I ispod u elsif dodajemo potrebne vrijednosti:

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

Sada se moramo preseliti u direktorij certs. Ovdje je potrebno staviti ključ i certifikat od pouzdane certifikacijske ustanove koji već imamo te generirati samo-potpisane certifikate za eap-guest.

Promjena parametara u datoteci ca.cnf.

ca.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = HR
stateOrProvinceNmae = Država
localityNmae = Grad
organizationName = NONAME
emailAddress = admin@admin.hr
commonName = "CA FreeRadius"

Iste vrijednosti upisujemo u datoteku server.cnf. Mijenjamo samo
commonName:

server.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = HR
stateOrProvinceNmae = Država
localityNmae = Grad
organizationName = NONAME
emailAddress = admin@admin.hr
commonName = "Server Certificate FreeRadius"

Kreiramo:

make

Gotovo. Dobiveni server.crt i server.key već su zapisani gore u eap-guest.

I na kraju, dodajemo naše pristupne točke u datoteku client.conf. Imam ih 7. Da ne dodajem svaku točku posebno, upisat ćemo samo mrežu u kojoj se nalaze (moje pristupne točke se nalaze u posebnom VLAN-u).

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

Ubiquiti kontroler

Na kontroleru podižemo posebnu mrežu. Neka bude 192.168.2.0/24
Idemo u postavke -> profil. Kreiramo novi:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Upisujemo adresu i port radius-servera i lozinku koju smo napisali u datoteci clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Kreiramo novo ime bežične mreže. Kao metodu autentikacije biramo WPA-EAP (Enterprise) i navodimo stvoreni radius-profil:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Sve spremamo, primjenjujemo i idemo dalje.

Postavke klijenata

Počinjemo s najtežim!

Windows 10

Težina se svodi na to da Windows još uvijek ne može povezati s korporativnim WiFi-em putem domene. Stoga je potrebno ručno dodati naš certifikat u pohranu pouzdanih certifikata. Ovdje se može koristiti ili samopotpisani ili iz centra za certificiranje. Ja ću koristiti drugi.

Zatim trebate stvoriti novu vezu. Da bismo to učinili, idemo u postavke mreže i interneta -> Centar za upravljanje mrežama i zajedničkim pristupom -> Stvaranje i postavljanje nove veze ili mreže:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ručno upisujemo ime mreže i mijenjamo tip sigurnosti. Nakon toga kliknemo na izmijeni postavke veze i u kartici Sigurnost biramo provjeru autentičnosti mreže - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Idemo u postavke, upisujemo privatnost autentikacije - klijent. Kao pouzdani centar za certificiranje biramo naš dodani certifikat, označavamo opciju „Ne tražiti od korisnika poziv za autorizaciju ako ne uspije autentificirati poslužitelj“ i metodu provjere autentičnosti biramo - nešifrirana lozinka (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Zatim ulazimo u dodatne opcije, stavljamo oznaku na «Odredite način provjere autentičnosti». Biramo opciju «Provjera autentičnosti korisnika» i kliknemo na spremi vjerodajnice. Ovdje ćemo unijeti username_ldap i password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Sve spremamo, primjenjujemo, zatvaramo. Možemo se povezati na novu mrežu.

Linux

Provjeravao sam na Ubuntu 18.04, 18.10, Fedora 29, 30.

Za početak, preuzimamo certifikat. Nisam našao u Linuxu, postoji li mogućnost korištenja sistemskih certifikata i postoji li uopće takvo spremište.

Povezat ćemo se putem domena. Stoga je potreban certifikat certifikacijskog centra od kojeg smo nabavili naš certifikat.

Sva povezanost se obavlja u jednom prozoru. Odabiremo našu mrežu:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonymous — klijent
domain — domena na koju je izdan certifikat

Android

non-Samsung

Od verzije 7 pri povezivanju na WiFi moguće je koristiti sistemske certifikate, navodeći samo domenu:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domain — domena na koju je izdan certifikat
anonymous — klijent

Samsung

Kao što sam ranije napisao, Samsung uređaji ne mogu koristiti sistemske certifikate prilikom povezivanja na WiFi, i nemaju mogućnost povezivanja putem domene. Stoga treba ručno dodati korijenski certifikat certifikacijskog centra (ca.pem, preuzimamo na Radius serveru). Ovdje će se koristiti samopotpisani.

Preuzimamo certifikat na svoje uređaje i instaliramo ga.

Instalacija certifikataWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Pri tome, bit će potrebno postaviti sliku za otključavanje ekrana, PIN kod ili lozinku, ako već nije postavljena:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Prikazao sam složenu varijantu instalacije certifikata. Na većini uređaja dovoljno je jednostavno pritisnuti na preuzeti certifikat.

Kada je certifikat instaliran, možemo preći na povezivanje:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certifikat — navodimo onaj koji smo instalirali
anonimni korisnik — gost

macOS

Apple uređaji iz kutije mogu se povezati samo na EAP-TLS, ali i dalje je potrebno dodati im certifikat. Da bismo naveli drugu metodu povezivanja, treba koristiti Apple Configurator 2. Prethodno je potrebno preuzeti ga na Mac, kreirati novi profil i dodati sve potrebne WiFi postavke.

Apple ConfiguratorWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ovdje upisujemo ime svoje mreže
Vrsta sigurnosti — WPA2 Enterprise
Prihvaćene EAP vrste — TTLS
Korisničko ime i lozinka — ostavimo praznima
Unutarnja autentifikacija — PAP
Vanjski identitet — klijent

Kartica Povjerenje. Ovdje navodimo našu domenu

Sve. Profil možemo spremiti, potpisati i distribuirati na uređaje

Nakon što je profil spreman, morat ćete ga preuzeti na Mac i instalirati. Tijekom instalacije bit će potrebno unijeti username_ldap i password_ldap korisnika:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Postupak je sličan onome na macOS-u. Potrebno je koristiti profil (možete koristiti isti kao za macOS. Kako stvoriti profil u Apple Configuratoru, pogledajte gore).

Preuzimamo profil, instaliramo, unosimo korisničke podatke, povezujemo se:

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

Na tome je gotovo. Postavili smo Radius poslužitelj, sinkronizirali ga s FreeIPA i zatražili da pristupne točke Ubiquiti koriste WPA2-EAP.

Moguća pitanja

P: kako poslati profil/sertifikat zaposleniku?

O: Sve sertifikate/profil čuvam na FTP-u s pristupom putem weba. Postavio sam gostujuću mrežu s ograničenjem brzine i pristupom samo internetu, osim FTP-u.
Autentifikacija traje 2 dana, nakon čega se resetira i klijent ostaje bez interneta. Dakle, kada zaposlenik želi povezati se na WiFi, prvo se poveže na gostujuću mrežu, zatim uđe na FTP, preuzme mu potrebni sertifikat ili profil, instalira ih, i nakon toga se može povezati na korporativnu mrežu.

P: zašto ne koristiti shemu s MSCHAPv2? Ona je sigurnija!

O: prvo, takva shema dobro radi na NPS-u (Windows Network Policy System), u našoj implementaciji je potrebno dodatno konfigurirati LDAP (FreeIpa) i čuvati hashove lozinki na serveru. Dodatna podešavanja nisu poželjna, jer to može dovesti do raznih problema s usklađivanjem korisničkih računa. Drugo, hash je MD4, tako da to ne povećava sigurnost.

P: može li se autorizirati uređaje prema MAC adresama?

O: NE, to nije sigurno, napadač može promijeniti MAC adrese, a osim toga, autorizacija prema MAC adresama nije podržana na mnogim uređajima.

P: zašto uopće koristiti sve te sertifikate? može se i bez njih povezati.

O: Certifikati se koriste za ovjeru poslužitelja. Odnosno, uređaj prilikom povezivanja provjerava je li to poslužitelj kojemu se može vjerovati ili ne. Ako jest, autentifikacija ide dalje, a ako nije, veza se prekida. Može se povezivati i bez certifikata, ali ako zlonamjerni korisnik ili susjed pokrene radius-poslužitelj te pristupnu točku s istim imenom kao naš, lako može presresti korisničke podatke (ne zaboravite, oni se prenose u otvorenom obliku). Kada se koristi certifikat, neprijatelj u svojim logovima vidi samo naša izmišljena korisnička imena — guest ili client te grešku tipa — Unknown CA Certificate.

Još malo o macOS-u.Obično se na macOS ponovna instalacija sustava radi putem interneta. U načinu oporavka, Mac se mora povezati na WiFi, i ovdje neće raditi niti naš korporativni WiFi, niti gostinjska mreža. Osobno sam postavio još jednu mrežu, običnu po WPA2-PSK, skrivenu, samo za tehničke operacije. Također se može unaprijed napraviti alat za pokretanje s sustavom. No, ako je Mac nakon 2015. godine, potrebno je nabaviti adapter za tu flešku.)

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster