WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Guon foarbylden fan it organisearjen fan bedriuws-WiFi binne al beskreaun. Hjir sil ik beskriuwe hoe't ik in ferlykbere oplossing ymplementearre en de problemen dy't ik te krijen hie by it ferbinen op ferskate apparaten. Wy sille de besteande LDAP brûke mei registrearre brûkers, FreeRadius ferheegje en WPA2-Enterprise konfigurearje op 'e Ubnt-controller. Alles liket ienfâldich te wêzen. Litte wy sjen…

In bytsje oer EAP-metoaden

Foardat wy trochgean mei de taak, moatte wy beslute hokker autentikaasjemetoade wy sille brûke yn ús oplossing.

Fan Wikipedia:

EAP is in autentikaasjekader dat faak brûkt wurdt yn draadloze netwurken en punt-nei-punt-ferbiningen. It formaat waard earst beskreaun yn RFC 3748 en bywurke yn RFC 5247.
EAP wurdt brûkt om in autentikaasjemetoade te selektearjen, kaaien troch te jaan en dy kaaien te ferwurkjen mei plug-ins neamd EAP-metoaden. D'r binne in protte EAP-metoaden, sawol definieare mei EAP sels en frijlitten troch yndividuele leveransiers. EAP definiearret de keppelingslaach net, it definiearret allinich it berjochtformaat. Elk protokol dat EAP brûkt hat syn eigen EAP-berjochtynkapselingsprotokol.

De metoaden sels:

  • LEAP is in proprietêr protokol ûntwikkele troch CISCO. Kwetsberheden fûn. It is op it stuit net oan te rieden om te brûken
  • EAP-TLS wurdt goed stipe ûnder draadloze leveransiers. It is in feilich protokol om't it de opfolger is fan 'e SSL-standerts. It ynstellen fan de klant is frij yngewikkeld. Jo hawwe in klantsertifikaat nedich neist it wachtwurd. Stipe op in protte systemen
  • EAP-TTLS - breed stipe op in protte systemen, biedt goede feiligens troch allinich PKI-sertifikaten te brûken op 'e autentikaasjetsjinner
  • EAP-MD5 is in oare iepen standert. Biedt minimale feiligens. Kwetsber, stipet gjin wjersidige autentikaasje en kaaigeneraasje
  • EAP-IKEv2 - basearre op Internet Key Exchange Protocol ferzje 2. Biedt ûnderlinge autentikaasje en sesje-kaai fêstiging tusken client en tsjinner
  • PEAP is in mienskiplike oplossing fan CISCO, Microsoft en RSA Security as in iepen standert. In soad beskikber yn produkten, jout hiel goede feiligens. Fergelykber mei EAP-TTLS, fereasket allinich in sertifikaat oan 'e serverkant
  • PEAPv0/EAP-MSCHAPv2 - nei EAP-TLS is dit de twadde breed brûkte standert yn 'e wrâld. Brûkte klant-tsjinner relaasje yn Microsoft, Cisco, Apple, Linux
  • PEAPv1 / EAP-GTC - makke troch Cisco as alternatyf foar PEAPv0 / EAP-MSCHAPv2. Beskermet op gjin inkelde manier autentikaasjegegevens. Net stipe op Windows OS
  • EAP-FAST is in technyk ûntwikkele troch Cisco om de tekoarten fan LEAP te korrigearjen. Brûkt Protected Access Credential (PAC). Folslein ûnfoltôge

Fan al dit ferskaat is de kar noch altyd net grut. De autentikaasjemetoade wie fereaske: goede feiligens, stipe op alle apparaten (Windows 10, macOS, Linux, Android, iOS) en, yn feite, hoe ienfâldiger hoe better. Dêrom foel de kar op EAP-TTLS yn gearhing mei it PAP-protokol.
De fraach kin opkomme - Wêrom brûke PAP? omdat hy stjoert wachtwurden yn it dúdlik?

Ja dat kloppet. Kommunikaasje tusken FreeRadius en FreeIPA sil op dizze manier plakfine. Yn debugmodus kinne jo folgje hoe't brûkersnamme en wachtwurd ferstjoerd wurde. Ja, en lit se gean, allinich jo hawwe tagong ta de FreeRadius-tsjinner.

Jo kinne mear lêze oer it wurk fan EAP-TTLS hjir

FreeRADIUS

FreeRadius sil wurde ferhege op CentOS 7.6. D'r is hjir neat yngewikkeld, wy sette it op 'e gewoane manier.

yum install freeradius freeradius-utils freeradius-ldap -y

Ferzje 3.0.13 is ynstalleare fanút de pakketten. Dat lêste kin nommen wurde https://freeradius.org/

Dêrnei wurket FreeRadius al. Jo kinne de rigel unkommentearje yn /etc/raddb/users

steve   Cleartext-Password := "testing"

Launch yn de tsjinner yn debug modus

freeradius -X

En meitsje in testferbining fan localhost

radtest steve testing 127.0.0.1 1812 testing123

Hawwe in antwurd Untfongen tagong-akseptearje Id 115 fan 127.0.0.1:1812 oant 127.0.0.1:56081 lingte 20, it betsjut dat alles OK is. Gean dyn gong.

Wy ferbine de module ldap.

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

En wy sille it daliks feroarje. Wy hawwe FreeRadius nedich om tagong te krijen ta FreeIPA

mods-ynskeakele / 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}})"
}
...

Start de radiusserver op 'e nij en kontrolearje de syngronisaasje fan LDAP-brûkers:

radtest user_ldap password_ldap localhost 1812 testing123

Bewurkje eap yn mods-ynskeakele / eap
Hjir foegje wy twa eksimplaren fan eap ta. Se sille allinich ferskille yn sertifikaten en kaaien. Hjirûnder sil ik útlizze wêrom dit sa is.

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

Fierdere bewurking site-ynskeakele / standert. De seksjes foar autorisearjen en ferifiearje binne fan belang.

site-ynskeakele / standert

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
}

Yn 'e autorisearjende seksje ferwiderje wy alle modules dy't wy net nedich binne. Wy litte allinne ldap. Foegje kliïntferifikaasje ta troch brûkersnamme. Dêrom hawwe wy hjirboppe twa eksimplaren fan eap tafoege.

Multi EAPIt feit is dat by it ferbinen fan guon apparaten, wy sille brûke systeem sertifikaten en spesifisearje it domein. Wy hawwe in sertifikaat en in kaai fan in fertroude sertifikaatautoriteit. Persoanlik, neffens my, is sa'n ferbiningsproseduere makliker dan op elk apparaat in selstekene sertifikaat te smiten. Mar ek sûnder sels ûndertekene sertifikaten slagge it noch net. Samsung-apparaten en Android =< 6 ferzjes kinne systeemsertifikaten net brûke. Dêrom meitsje wy in aparte eksimplaar fan eap-gast foar har mei sels ûndertekene sertifikaten. Foar alle oare apparaten sille wy de eap-kliïnt brûke mei in fertroud sertifikaat. De brûkersnamme wurdt bepaald troch it Anonymous fjild as it apparaat ferbûn is. Allinich 3 wearden binne tastien: Gast, Klant en in leech fjild. Al it oare wurdt fuorthelle. It sil wurde konfigurearre yn politisy. Ik jou efkes letter in foarbyld.

Litte wy de autorisearjen en authentisearje seksjes yn 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
}

Dêrnei moatte jo yn it belied oanjaan hokker nammen kinne wurde brûkt foar anonime oanmelding. Bewurkje policy.d/filter.

Jo moatte linen fine lykas dit:

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

En foegje hjirûnder yn elsif de winske wearden ta:

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

No moatte wy nei de map gean sertifikaten. Hjir moatte jo de kaai en sertifikaat pleatse fan in fertroude sertifikaatautoriteit, dy't wy al hawwe en moatte sels ûndertekene sertifikaten generearje foar eap-gast.

Feroarje de parameters yn it bestân 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"

Wy skriuwe deselde wearden yn 'e triem server.cnf. Wy feroarje allinnich
gewoane namme:

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"

Meitsje:

make

Klear. Untfongen server.crt и server.key wy hawwe hjirboppe al registrearre yn eap-guest.

En as lêste, litte wy ús tagongspunten tafoegje oan it bestân client.conf. Ik haw der 7. Om net elk punt apart ta te foegjen, sille wy allinich it netwurk skriuwe wêryn se sitte (myn tagongspunten binne yn in aparte VLAN).

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

Ubiquiti controller

Wy ferheegje in apart netwurk op 'e controller. Lit it wêze 192.168.2.0/24
Gean nei ynstellings -> profyl. Wy meitsje in nij:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Wy skriuwe it adres en de poarte fan 'e radiusserver en it wachtwurd dat yn it bestân skreaun is clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Meitsje in nije namme foar draadloze netwurk. Selektearje WPA-EAP (Enterprise) as de autentikaasjemetoade en spesifisearje it oanmakke radiusprofyl:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Wy bewarje alles, jilde en geane fierder.

It ynstellen fan kliïnten

Litte wy begjinne mei it dreechste!

Windows 10

De swierrichheid komt del op it feit dat Windows noch net wit hoe't jo fia in domein ferbine mei bedriuws-WiFi. Dêrom moatte wy ús sertifikaat manuell uploade nei de fertroude sertifikaatwinkel. Hjir kinne jo sawol sels ûndertekene as fan 'e sertifisearringsautoriteit brûke. Ik sil de twadde brûke.

Dêrnei moatte jo in nije ferbining meitsje. Om dit te dwaan, gean nei de netwurk- en ynternetynstellingen -> Netwurk- en dielensintrum -> Meitsje en konfigurearje in nije ferbining of netwurk:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Fier de netwurknamme manuell yn en feroarje it type feiligens. Neidat wy klikke op feroarje ferbining ynstellings en yn it ljepblêd Feiligens, selektearje netwurkferifikaasje - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Wy geane yn 'e parameters, skriuwe de fertroulikens fan autentikaasje foar - kliïnt. Selektearje as in fertroude sertifisearringsautoriteit it sertifikaat dat wy tafoege hawwe, selektearje it fakje "Gjin útnoeging oan 'e brûker as de tsjinner kin net autorisearre wurde" en selektearje de autentikaasjemetoade - unfersifere wachtwurd (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Gean dan nei de avansearre ynstellings, set in tick op "De ferifikaasjemodus spesifisearje." Selektearje "User Authentication" en klikje op bewarje bewiisbrieven. Hjir moatte jo brûkersnamme_ldap en wachtwurd_ldap ynfiere

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Wy bewarje alles, oanfreegje, slute. Jo kinne ferbine mei in nij netwurk.

linux

Ik testte op Ubuntu 18.04, 18.10, Fedora 29, 30.

Litte wy earst ús sertifikaat downloade. Ik fûn yn Linux net oft it mooglik is om systeemsertifikaten te brûken en oft der sa'n winkel is.

Litte wy ferbine mei it domein. Dêrom hawwe wy in sertifikaat nedich fan 'e sertifikaasje-autoriteit wêrfan ús sertifikaat is kocht.

Alle ferbinings wurde makke yn ien finster. Selektearje ús netwurk:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonym-kliïnt
domein - it domein wêrfoar it sertifikaat is útjûn

Android

net-Samsung

Fanôf ferzje 7 kinne jo by it ferbinen fan WiFi systeemsertifikaten brûke troch allinich it domein op te jaan:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domein - it domein wêrfoar it sertifikaat is útjûn
anonym-kliïnt

Samsung

Lykas ik hjirboppe skreau, wite Samsung-apparaten net hoe't se systeemsertifikaten brûke by it ferbinen mei WiFi, en se hawwe net de mooglikheid om te ferbinen fia in domein. Dêrom moatte jo it root-sertifikaat fan 'e sertifikaasjeautoriteit manuell tafoegje (ca.pem, wy nimme it op' e Radius-tsjinner). Hjir is wêr't sels ûndertekene sil wurde brûkt.

Download it sertifikaat nei jo apparaat en ynstallearje it.

Sertifikaat ynstallaasjeWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Tagelyk moatte jo it patroan foar skermûntskoatteljen, pinkoade of wachtwurd ynstelle, as it net al ynsteld is:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ik liet in yngewikkelde ferzje sjen fan it ynstallearjen fan in sertifikaat. Klikje op de measte apparaten gewoan op it ynladen sertifikaat.

As it sertifikaat is ynstalleare, kinne jo trochgean nei de ferbining:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

sertifikaat - jouwe dejinge oan dy't ynstalleare is
anonime brûker - gast

MacOS

Apple-apparaten út 'e doaze kinne allinich ferbine mei EAP-TLS, mar jo moatte noch in sertifikaat nei har smite. Om in oare ferbiningsmetoade oan te jaan, moatte jo Apple Configurator 2 brûke. Dêrom moatte jo it earst downloade nei jo Mac, in nij profyl oanmeitsje en alle nedige WiFi-ynstellingen tafoegje.

Apple ConfiguratorWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Fier jo netwurknamme hjir yn
Feiligens Type - WPA2 Enterprise
Akseptearre EAP-typen - TTLS
Brûkersnamme en wachtwurd - leech litte
Inner Autentikaasje - PAP
Outer Identity-kliïnt

Trust tab. Hjir spesifisearje wy ús domein

Alle. It profyl kin wurde bewarre, ûndertekene en ferspraat oan apparaten

Nei't it profyl klear is, moatte jo it downloade nei de poppy en ynstallearje. Tidens it ynstallaasjeproses moatte jo de usernmae_ldap en password_ldap fan de brûker opjaan:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

It proses is fergelykber mei macOS. Jo moatte in profyl brûke (jo kinne itselde brûke as foar macOS. Hoe meitsje jo in profyl yn Apple Configurator, sjoch hjirboppe).

Download profyl, ynstallearje, fier referinsjes yn, ferbine:

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

Da's alles. Wy sette in Radius-tsjinner op, syngronisearre it mei FreeIPA, en fertelden Ubiquiti AP's om WPA2-EAP te brûken.

Mooglike fragen

Yn: hoe kinne jo in profyl / sertifikaat oerdrage oan in meiwurker?

Oer: Ik bewarje alle sertifikaten / profilen op ftp mei web tagong. Ferhege in gast netwurk mei in snelheid limyt en tagong allinnich ta it ynternet, mei útsûndering fan ftp.
Autentikaasje duorret 2 dagen, wêrnei't it wurdt reset en de klant bliuwt sûnder ynternet. Dat. as in meiwurker ferbine wol mei WiFi, makket hy earst ferbining mei it gastnetwurk, tagong ta FTP, downloadt it sertifikaat of profyl dat hy nedich is, ynstallearret it, en kin dan ferbine mei it bedriuwsnetwurk.

Yn: wêrom net skema brûke mei MSCHAPv2? Se is feiliger!

Oer: As earste wurket sa'n skema goed op NPS (Windows Network Policy System), yn ús ymplemintaasje is it nedich om ek LDAP (FreeIpa) te konfigurearjen en wachtwurd-hashes op 'e tsjinner op te slaan. Add. it is net oan te rieden om ynstellings te meitsjen, om't. dit kin liede ta ferskate problemen fan syngronisaasje fan de echografie. Twadder is de hash MD4, dus it foeget net folle feiligens ta.

Yn: is it mooglik om apparaten te autorisearjen troch mac-adressen?

Oer: NEE, dit is net feilich, in oanfaller kin MAC-adressen feroarje, en mear noch wurdt autorisaasje troch MAC-adressen net stipe op in protte apparaten

Yn: wat foar algemien al dizze sertifikaten te brûken? kinne jo meidwaan sûnder har?

Oer: sertifikaten wurde brûkt om de tsjinner te autorisearjen. Dy. by it ferbinen kontrolearret it apparaat oft it in tsjinner is dy't fertroud wurde kin of net. As it is, dan giet de autentikaasje troch, as net, is de ferbining sletten. Jo kinne ferbining meitsje sûnder sertifikaten, mar as in oanfaller of buorman in radiusserver en in tagongspunt mei deselde namme as ús thús ynstelt, kin hy de bewiisbrieven fan 'e brûker maklik ûnderskeppe (ferjit net dat se yn dúdlike tekst wurde oerbrocht). En as in sertifikaat wurdt brûkt, sil de fijân yn syn logboeken allinich ús fiktive brûkersnamme sjen - gast as kliïnt en in typeflater - Unbekend CA-sertifikaat

in bytsje mear oer macOSNormaal op macOS wurdt it opnij ynstallearjen fan it systeem fia it ynternet dien. Yn herstelmodus moat de Mac ferbûn wêze mei WiFi, en noch ús bedriuws-WiFi noch it gastnetwurk sil hjir wurkje. Persoanlik haw ik in oar netwurk opbrocht, de gewoane WPA2-PSK, ferburgen, allinich foar technyske operaasjes. Of jo kinne noch foarôf in bootbere USB-flash-drive meitsje mei it systeem. Mar as de poppy nei 2015 is, moatte jo noch in adapter fine foar dizze flash drive)

Boarne: www.habr.com

Add a comment