
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
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 -yIz paketa se instalira verzija 3.0.13. Posljednju možete nabaviti na
Nakon toga FreeRadius već radi. Možete u /etc/raddb/users odkomentirati redak
steve Cleartext-Password := "testing"Pokrenite server u debug modu
freeradius -XI napravimo testnu vezu s localhostom
radtest steve testing 127.0.0.1 1812 testing123Dobiven 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/ldapI 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:
makeGotovo. 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:

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

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

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:



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.



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

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



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:

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:

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 certifikata



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


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:

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 Configurator

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:



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:






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
