Neki primjeri organiziranja korporativnog WiFi-a već su opisani. Ovdje ću opisati kako sam implementirao slično rješenje i probleme s kojima sam se morao suočiti prilikom povezivanja na različitim uređajima. Koristit ćemo postojeći LDAP s registriranim korisnicima, podići FreeRadius i konfigurirati WPA2-Enterprise na Ubnt kontroleru. Čini se da je sve jednostavno. Da vidimo…
Malo o EAP metodama
Prije nego što nastavimo sa zadatkom, moramo odlučiti koju metodu provjere autentičnosti ćemo koristiti u našem rješenju.
Iz Wikipedije:
EAP je okvir za provjeru autentičnosti koji se često koristi u bežičnim mrežama i vezama od točke do točke. Format je prvi put opisan u RFC 3748 i ažuriran u RFC 5247.
EAP se koristi za odabir metode provjere autentičnosti, prosljeđivanje ključeva i obradu tih ključeva pomoću dodataka koji se nazivaju EAP metode. Postoje mnoge metode EAP-a, definirane sa samim EAP-om i izdane od strane pojedinačnih dobavljača. EAP ne definira sloj veze, on samo definira format poruke. Svaki protokol koji koristi EAP ima vlastiti protokol enkapsulacije EAP poruka.
Same metode:
- LEAP je vlasnički protokol koji je razvio CISCO. Pronađene ranjivosti. Trenutno se ne preporučuje korištenje
- EAP-TLS je dobro podržan među bežičnim dobavljačima. To je siguran protokol jer je nasljednik SSL standarda. Postavljanje klijenta je prilično komplicirano. Osim lozinke potreban vam je certifikat klijenta. Podržano na mnogim sustavima
- EAP-TTLS - široko podržan na mnogim sustavima, nudi dobru sigurnost korištenjem PKI certifikata samo na autentifikacijskom poslužitelju
- EAP-MD5 je još jedan otvoreni standard. Nudi minimalnu sigurnost. Ranjiv, ne podržava međusobnu autentifikaciju i generiranje ključeva
- EAP-IKEv2 - temeljen na Internet Key Exchange Protocol verziji 2. Omogućuje uzajamnu autentifikaciju i uspostavu ključa sesije između klijenta i poslužitelja
- PEAP je zajedničko rješenje tvrtki CISCO, Microsoft i RSA Security kao otvoreni standard. Široko dostupan u proizvodima, pruža vrlo dobru sigurnost. Slično EAP-TTLS-u, zahtijeva samo certifikat na strani poslužitelja
- PEAPv0/EAP-MSCHAPv2 - nakon EAP-TLS, ovo je drugi široko korišten standard u svijetu. Korišten odnos klijent-poslužitelj u Microsoft, Cisco, Apple, Linux
- PEAPv1/EAP-GTC - Kreirao Cisco kao alternativu PEAPv0/EAP-MSCHAPv2. Ni na koji način ne štiti podatke za provjeru autentičnosti. Nije podržano na Windows OS-u
- EAP-FAST je tehnika koju je razvio Cisco kako bi ispravio nedostatke LEAP-a. Koristi vjerodajnicu zaštićenog pristupa (PAC). Potpuno rohbau
Od sve te raznolikosti, izbor još uvijek nije velik. Tražila se metoda autentifikacije: 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že se postaviti pitanje - Zašto koristiti PAP? jer prenosi lozinke u čistom obliku?
Da, tako je. Komunikacija između FreeRadiusa i FreeIPA odvijat će se na ovaj način. U načinu otklanjanja pogrešaka možete pratiti kako se korisničko ime i lozinka šalju. Da, i pusti ih, samo ti imaš pristup FreeRadius serveru.
Možete pročitati više o radu EAP-TTLS-a
FreeRADIUS
FreeRadius će biti podignut na CentOS 7.6. Ovdje nema ništa komplicirano, postavili smo ga na uobičajeni način.
yum install freeradius freeradius-utils freeradius-ldap -y
Iz paketa se instalira verzija 3.0.13. Ovo posljednje se može uzeti
Nakon toga FreeRadius već radi. Možete dekomentirati redak u /etc/raddb/users
steve Cleartext-Password := "testing"
Pokrenite poslužitelj u načinu otklanjanja pogrešaka
freeradius -X
I napravite probnu vezu s lokalnog hosta
radtest steve testing 127.0.0.1 1812 testing123
Imam odgovor Primljeni ID pristupa-prihvaćanja 115 od 127.0.0.1:1812 do 127.0.0.1:56081 duljina 20, znači da je sve OK. Samo naprijed.
Spojimo modul lDAP.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
I to ćemo odmah promijeniti. Potreban nam je FreeRadius da bismo mogli pristupiti FreeIPA-i
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}})"
}
...
Ponovno pokrenite radius poslužitelj i provjerite sinkronizaciju LDAP korisnika:
radtest user_ldap password_ldap localhost 1812 testing123
Uređivanje eap in mods-enabled/eap
Ovdje dodajemo dvije instance eap. Razlikovat će se samo po certifikatima i ključevima. U nastavku ću objasniti zašto je to 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"
}
}
Daljnje uređivanje omogućeno na web-mjestu/zadano. Zanimljivi su odjeljci autorizacije i autentifikacije.
omogućeno na web-mjestu/zadano
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 odjeljku za autorizaciju uklanjamo sve module koji nam nisu potrebni. Ostavljamo samo ldap. Dodajte potvrdu klijenta korisničkim imenom. Zato smo gore dodali dvije instance eap-a.
Višestruki EAPČinjenica je da ćemo spajanjem nekih uređaja koristiti certifikate sustava i odrediti domenu. Imamo certifikat i ključ od pouzdanog tijela za izdavanje certifikata. Osobno, po mom mišljenju, takav postupak povezivanja je lakši od bacanja samopotpisanog certifikata na svaki uređaj. Ali ni bez samopotpisanih certifikata, još uvijek nije išlo. Samsung uređaji i Android =< 6 verzije ne mogu koristiti certifikate sustava. Stoga za njih stvaramo zasebnu instancu eap-guest sa samopotpisanim certifikatima. Za sve ostale uređaje koristit ćemo eap-client s povjerljivim certifikatom. Korisničko ime određeno je poljem Anonymous kada je uređaj povezan. Dopuštene su samo 3 vrijednosti: Gost, Klijent i prazno polje. Sve ostalo se odbacuje. Bit će konfiguriran u političarima. Dat ću primjer malo kasnije.
Uredimo odjeljke za autorizaciju i autentifikaciju 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 morate u pravilima navesti koja se imena mogu koristiti za anonimnu prijavu. Uređivanje politika.d/filtar.
Morate pronaći retke slične ovome:
if (&outer.request:User-Name !~ /^(anon|@)/) {
update request {
Module-Failure-Message = "User-Name is not anonymized"
}
reject
}
I ispod u elsif dodajte željene vrijednosti:
elsif (&outer.request:User-Name !~ /^(guest|client|@)/) {
update request {
Module-Failure-Message = "User-Name is not anonymized"
}
reject
}
Sada moramo prijeći na imenik potvrde. Ovdje trebate staviti ključ i certifikat od pouzdanog autoriteta za izdavanje certifikata, koji već imamo i trebamo generirati samopotpisane certifikate za eap-guest.
Promijenite parametre u datoteci 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"
Zapisujemo iste vrijednosti u datoteku poslužitelj.cnf. Mijenjamo samo
uobičajeno ime:
poslužitelj.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"
Stvoriti:
make
Spreman. Primljeno server.crt и server.ključ već smo se registrirali gore u eap-guest.
I na kraju, dodajmo naše pristupne točke datoteci klijent.konf. Imam ih 7. Da ne bismo dodavali svaku točku posebno, napisat ćemo samo mrežu u kojoj se nalaze (moje pristupne točke su u posebnom VLAN-u).
client APs {
ipaddr = 192.168.100.0/24
password = password_AP
}
Ubiquiti kontroler
Podižemo zasebnu mrežu na kontroleru. Neka to bude 192.168.2.0/24
Idite na postavke -> profil. Stvaramo novi:
Zapisujemo adresu i port radius servera i lozinku koja je zapisana u datoteci klijenti.konf:
Stvorite novi naziv bežične mreže. Odaberite WPA-EAP (Enterprise) kao metodu provjere autentičnosti i navedite kreirani profil radijusa:
Spremamo sve, prijavimo se i idemo dalje.
Postavljanje klijenata
Počnimo s najtežim!
Windows 10
Poteškoća se svodi na činjenicu da Windows još ne zna kako se povezati na korporativni WiFi putem domene. Stoga moramo ručno prenijeti svoj certifikat u pouzdano spremište certifikata. Ovdje možete koristiti i samopotpisane i one od certifikacijskog tijela. Koristit ću drugi.
Zatim morate stvoriti novu vezu. Da biste to učinili, idite na mrežne i internetske postavke -> Centar za mrežu i dijeljenje -> Stvorite i konfigurirajte novu vezu ili mrežu:
Ručno unesite naziv mreže i promijenite vrstu sigurnosti. Nakon što kliknemo na promijeniti postavke veze te u kartici Sigurnost odaberite mrežnu provjeru autentičnosti - EAP-TTLS.
Ulazimo u parametre, propisujemo povjerljivost autentifikacije - klijent. Kao certifikacijsko tijelo od povjerenja, odaberite certifikat koji smo dodali, označite kućicu "Ne izdaj poziv korisniku ako se poslužitelj ne može autorizirati" i odaberite metodu autentifikacije - nešifrirana lozinka (PAP).
Zatim idite na napredne postavke, stavite kvačicu na "Odredite način provjere autentičnosti." Odaberite "Autentikacija korisnika" i kliknite na spremi vjerodajnice. Ovdje ćete morati unijeti username_ldap i password_ldap
Spremamo sve, prijavimo, zatvorimo. Možete se spojiti na novu mrežu.
Linux
Testirao sam na Ubuntu 18.04, 18.10, Fedora 29, 30.
Prvo preuzmimo naš certifikat. U Linuxu nisam našao je li moguće koristiti sistemske certifikate i postoji li uopće takva trgovina.
Spojimo se na domenu. Stoga nam je potreban certifikat certifikacijske kuće od koje je naš certifikat kupljen.
Sve veze se izvode u jednom prozoru. Odabir naše mreže:
anonimni klijent
domena - domena za koju se izdaje certifikat
Android
ne-Samsung
Od verzije 7, kada povezujete WiFi, možete koristiti certifikate sustava navodeći samo domenu:
domena - domena za koju se izdaje certifikat
anonimni klijent
Samsung
Kao što sam gore napisao, Samsung uređaji ne znaju koristiti sistemske certifikate pri spajanju na WiFi, a nemaju ni mogućnost povezivanja preko domene. Stoga morate ručno dodati korijenski certifikat certifikacijskog tijela (ca.pem, preuzimamo ga na Radius poslužitelju). Ovdje će se koristiti samopotpisani.
Preuzmite certifikat na svoj uređaj i instalirajte ga.
Instalacija certifikata
Istodobno ćete morati postaviti uzorak za otključavanje zaslona, pin kod ili lozinku, ako već nije postavljeno:
Pokazao sam kompliciranu verziju instaliranja certifikata. Na većini uređaja jednostavno kliknite na preuzeti certifikat.
Kada je certifikat instaliran, možete nastaviti s povezivanjem:
certifikat - označite onaj koji je instaliran
anonimni korisnik - gost
macOS
Appleovi uređaji izvan kutije mogu se spojiti samo na EAP-TLS, ali svejedno im morate baciti certifikat. Da biste odredili drugu metodu povezivanja, trebate koristiti Apple Configurator 2. Sukladno tome, prvo ga morate preuzeti na svoj Mac, izraditi novi profil i dodati sve potrebne WiFi postavke.
Apple Configurator
Ovdje unesite naziv svoje mreže
Vrsta sigurnosti - WPA2 Enterprise
Prihvaćene vrste EAP-a - TTLS
Korisničko ime i lozinka - ostavite prazno
Unutarnja autentifikacija - PAP
Vanjski identitet klijenta
Kartica povjerenja. Ovdje specificiramo našu domenu
Svi. Profil se može spremiti, potpisati i distribuirati na uređaje
Nakon što je profil spreman, trebate ga preuzeti na mak i instalirati. Tijekom procesa instalacije morat ćete navesti usernmae_ldap i password_ldap korisnika:
iOS
Proces je sličan macOS-u. Morate koristiti profil (možete koristiti isti kao za macOS. Kako napraviti profil u Apple Configuratoru, pogledajte gore).
Preuzmite profil, instalirajte, unesite vjerodajnice, povežite se:
To je sve. Postavili smo Radius poslužitelj, sinkronizirali ga s FreeIPA-om i rekli Ubiquiti AP-ovima da koriste WPA2-EAP.
Moguća pitanja
NA: kako prenijeti profil/certifikat na zaposlenika?
OKO: Sve certifikate/profile pohranjujem na ftp s pristupom webu. Podigao mrežu za goste s ograničenjem brzine i pristupom samo internetu, s izuzetkom ftp-a.
Autentifikacija traje 2 dana, nakon čega se resetira i klijent ostaje bez interneta. Da. kada se zaposlenik želi spojiti na WiFi, prvo se spaja na mrežu za goste, pristupa FTP-u, preuzima certifikat ili profil koji mu je potreban, instalira ga, a zatim se može spojiti na korporativnu mrežu.
NA: zašto ne koristiti shemu s MSCHAPv2? Ona je sigurnija!
OKO: Prvo, takva shema dobro funkcionira na NPS (Windows Network Policy System), u našoj implementaciji potrebno je dodatno konfigurirati LDAP (FreeIpa) i pohraniti hashove lozinki na poslužitelj. Dodati. nije preporučljivo raditi postavke, jer. to može dovesti do raznih problema sinkronizacije ultrazvuka. Drugo, hash je MD4, tako da ne dodaje veliku sigurnost.
NA: je li moguće autorizirati uređaje prema mac-adresama?
OKO: NE, ovo nije sigurno, napadač može promijeniti MAC adrese, a još više autorizacija MAC adresama nije podržana na mnogim uređajima
NA: za što općenito sve te certifikate koristiti? možeš li se pridružiti bez njih?
OKO: certifikati se koriste za autorizaciju poslužitelja. Oni. prilikom spajanja uređaj provjerava je li poslužitelj kojem se može vjerovati ili ne. Ako jest, autentifikacija se nastavlja, ako nije, veza se prekida. Možete se spojiti bez certifikata, ali ako napadač ili susjed kod kuće postavi radijus poslužitelj i pristupnu točku s istim imenom kao i naš, lako može presresti korisničke vjerodajnice (ne zaboravite da se one prenose čistim tekstom). A kada se koristi certifikat, neprijatelj će u svojim zapisima vidjeti samo naše izmišljeno korisničko ime - gost ili klijent i pogrešku tipa - Unknown CA Certificate
još malo o macOS-uObično se na macOS-u ponovno instaliranje sustava vrši putem interneta. U načinu oporavka, Mac mora biti spojen na WiFi, a ni naš poslovni WiFi ni mreža za goste ovdje neće raditi. Osobno sam podigao drugu mrežu, uobičajeni WPA2-PSK, skriven, samo za tehničke operacije. Ili još uvijek možete unaprijed napraviti USB flash pogon za podizanje sustava sa sustavom. Ali ako je mak nakon 2015., ipak ćete morati pronaći adapter za ovaj flash pogon)
Izvor: www.habr.com