WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Enkele voorbeelde van die organisering van korporatiewe WiFi is reeds beskryf. Hier sal ek beskryf hoe ek 'n soortgelyke oplossing geïmplementeer het en die probleme waarmee ek te kampe gehad het wanneer ek op verskillende toestelle koppel. Ons sal die bestaande LDAP met geregistreerde gebruikers gebruik, FreeRadius verhoog en WPA2-Enterprise op die Ubnt-beheerder instel. Alles blyk eenvoudig te wees. Kom ons kyk…

'n Bietjie oor EAP-metodes

Voordat ons met die taak voortgaan, moet ons besluit watter verifikasiemetode ons in ons oplossing sal gebruik.

Van Wikipedia:

EAP is 'n verifikasieraamwerk wat dikwels in draadlose netwerke en punt-tot-punt-verbindings gebruik word. Die formaat is die eerste keer beskryf in RFC 3748 en bygewerk in RFC 5247.
EAP word gebruik om 'n stawingsmetode te kies, sleutels deur te gee en daardie sleutels te verwerk met inproppe genoem EAP-metodes. Daar is baie EAP-metodes, beide gedefinieer met EAP self en vrygestel deur individuele verskaffers. EAP definieer nie die skakellaag nie, dit definieer slegs die boodskapformaat. Elke protokol wat EAP gebruik, het sy eie EAP-boodskap-inkapselingsprotokol.

Die metodes self:

  • LEAP is 'n eie protokol wat deur CISCO ontwikkel is. Kwesbaarhede gevind. Dit word tans nie aanbeveel om te gebruik nie
  • EAP-TLS word goed ondersteun onder draadlose verskaffers. Dit is 'n veilige protokol omdat dit die opvolger van die SSL-standaarde is. Die opstel van die kliënt is redelik ingewikkeld. Jy benodig 'n kliëntsertifikaat bykomend tot die wagwoord. Ondersteun op baie stelsels
  • EAP-TTLS - wyd ondersteun op baie stelsels, bied goeie sekuriteit deur PKI-sertifikate slegs op die verifikasiebediener te gebruik
  • EAP-MD5 is nog 'n oop standaard. Bied minimale sekuriteit. Kwesbaar, ondersteun nie wedersydse verifikasie en sleutelgenerering nie
  • EAP-IKEv2 - gebaseer op Internet Key Exchange Protocol weergawe 2. Verskaf wedersydse verifikasie en sessiesleutel vestiging tussen kliënt en bediener
  • PEAP is 'n gesamentlike oplossing van CISCO, Microsoft en RSA Security as 'n oop standaard. Wyd beskikbaar in produkte, bied baie goeie sekuriteit. Soortgelyk aan EAP-TTLS, vereis slegs 'n sertifikaat aan die bedienerkant
  • PEAPv0/EAP-MSCHAPv2 - na EAP-TLS is dit die tweede algemeen gebruikte standaard in die wêreld. Gebruik kliënt-bediener verhouding in Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Geskep deur Cisco as 'n alternatief vir PEAPv0/EAP-MSCHAPv2. Beskerm op geen manier verifikasiedata nie. Word nie op Windows OS ondersteun nie
  • EAP-FAST is 'n tegniek wat deur Cisco ontwikkel is om die tekortkominge van LEAP reg te stel. Gebruik Protected Access Credential (PAC). Heeltemal onvoltooid

Van al hierdie diversiteit is die keuse steeds nie groot nie. Die verifikasiemetode was nodig: goeie sekuriteit, ondersteuning op alle toestelle (Windows 10, macOS, Linux, Android, iOS) en, in werklikheid, hoe eenvoudiger, hoe beter. Daarom het die keuse geval op EAP-TTLS in samewerking met die PAP-protokol.
Die vraag kan ontstaan ​​- Waarom PAP gebruik? omdat hy wagwoorde duidelik versend?

Ja, dis reg. Kommunikasie tussen FreeRadius en FreeIPA sal op hierdie manier plaasvind. In ontfoutmodus kan jy naspoor hoe gebruikersnaam en wagwoord gestuur word. Ja, en laat hulle gaan, net jy het toegang tot die FreeRadius-bediener.

Jy kan meer lees oor die werk van EAP-TTLS hier

FreeRADIUS

FreeRadius sal op CentOS 7.6 verhoog word. Hier is niks ingewikkeld nie, ons stel dit op die gewone manier.

yum install freeradius freeradius-utils freeradius-ldap -y

Weergawe 3.0.13 is vanaf die pakkette geïnstalleer. Laasgenoemde kan geneem word https://freeradius.org/

Daarna werk FreeRadius reeds. Jy kan die reël in /etc/raddb/users verwyder

steve   Cleartext-Password := "testing"

Begin in die bediener in ontfoutmodus

freeradius -X

En maak 'n toetsverbinding vanaf localhost

radtest steve testing 127.0.0.1 1812 testing123

Het 'n antwoord Ontvang toegang-aanvaar ID 115 vanaf 127.0.0.1:1812 tot 127.0.0.1:56081 lengte 20, dit beteken alles is reg. Gaan voort.

Ons verbind die module ldap.

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

En ons sal dit dadelik verander. Ons het FreeRadius nodig om toegang tot FreeIPA te kry

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

Herbegin die radiusbediener en kontroleer die sinchronisasie van LDAP-gebruikers:

radtest user_ldap password_ldap localhost 1812 testing123

Redigeer eap in mods-geaktiveer/eap
Hier voeg ons twee gevalle van eap by. Hulle sal slegs verskil in sertifikate en sleutels. Hieronder sal ek verduidelik hoekom dit so is.

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

Verdere redigering webwerf-geaktiveer/verstek. Die magtig en verifieer afdelings is van belang.

webwerf-geaktiveer/verstek

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
}

In die magtigingsafdeling verwyder ons alle modules wat ons nie nodig het nie. Ons laat net ldap. Voeg kliëntverifikasie by gebruikernaam by. Daarom het ons twee gevalle van eap hierbo bygevoeg.

Multi EAPDie feit is dat wanneer ons sommige toestelle koppel, ons stelselsertifikate sal gebruik en die domein sal spesifiseer. Ons het 'n sertifikaat en 'n sleutel van 'n betroubare sertifikaatowerheid. Persoonlik, na my mening, is so 'n verbindingsprosedure makliker as om 'n selfgetekende sertifikaat op elke toestel te gooi. Maar selfs sonder selfondertekende sertifikate het dit steeds nie uitgewerk nie. Samsung-toestelle en Android =< 6 weergawes kan nie stelselsertifikate gebruik nie. Daarom skep ons 'n aparte instansie van eap-guest vir hulle met selfondertekende sertifikate. Vir alle ander toestelle sal ons die eap-kliënt met 'n vertroude sertifikaat gebruik. Die Gebruikersnaam word deur die Anoniem-veld bepaal wanneer die toestel gekoppel is. Slegs 3 waardes word toegelaat: Gas, Kliënt en 'n leë veld. Alles anders word weggegooi. Dit sal in politici gekonfigureer word. Ek sal 'n bietjie later 'n voorbeeld gee.

Kom ons redigeer die magtig- en staaf-afdelings in terrein-geaktiveer/binnetonnel

terrein-geaktiveer/binnetonnel

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
}

Vervolgens moet u in die beleide spesifiseer watter name vir anonieme aanmelding gebruik kan word. Redigering policy.d/filter.

Jy moet lyne soortgelyk aan hierdie vind:

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

En onder in elsif voeg die verlangde waardes by:

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

Nou moet ons na die gids beweeg sertifikate. Hier moet jy die sleutel en sertifikaat van 'n betroubare sertifikaatowerheid plaas, wat ons reeds het en selfondertekende sertifikate vir eap-guest moet genereer.

Verander die parameters in die lêer 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"

Ons skryf dieselfde waardes in die lêer bediener.cnf. Ons verander net
algemene naam:

bediener.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"

Skep:

make

Gereed. Ontvang bediener.crt и bediener.sleutel ons het reeds hierbo in eap-guest geregistreer.

En laastens, kom ons voeg ons toegangspunte by die lêer kliënt.conf. Ek het 7 van hulle. Om nie elke punt afsonderlik by te voeg nie, sal ons net die netwerk skryf waarin hulle geleë is (my toegangspunte is in 'n aparte VLAN).

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

Ubiquiti kontroleerder

Ons skep 'n aparte netwerk op die beheerder. Laat dit 192.168.2.0/24 wees
Gaan na instellings -> profiel. Ons skep 'n nuwe een:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Ons skryf die adres en poort van die radius-bediener en die wagwoord wat in die lêer geskryf is clients.conf:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Skep 'n nuwe draadlose netwerknaam. Kies WPA-EAP (Enterprise) as die verifikasiemetode en spesifiseer die geskepte radiusprofiel:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Ons bêre alles, doen aansoek en gaan aan.

Die opstel van kliënte

Kom ons begin met die moeilikste!

Windows 10

Die moeilikheid kom daarop neer dat Windows nog nie weet hoe om via 'n domein aan korporatiewe WiFi te koppel nie. Daarom moet ons ons sertifikaat handmatig na die vertroude sertifikaatwinkel oplaai. Hier kan jy beide selfondertekende en van die sertifiseringsowerheid gebruik. Ek sal die tweede een gebruik.

Vervolgens moet u 'n nuwe verbinding skep. Om dit te doen, gaan na die netwerk- en internetinstellings -> Netwerk- en delingsentrum -> Skep en konfigureer 'n nuwe verbinding of netwerk:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Voer die netwerknaam handmatig in en verander die tipe sekuriteit. Nadat ons op geklik het konneksieinstellings verander en in die Sekuriteit-oortjie, kies netwerkverifikasie - EAP-TTLS.

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Ons gaan na die parameters, skryf die vertroulikheid van verifikasie voor - kliënt. As 'n betroubare sertifiseringsowerheid, kies die sertifikaat wat ons bygevoeg het, merk die blokkie "Moenie 'n uitnodiging aan die gebruiker uitreik as die bediener nie gemagtig kan word nie" en kies die verifikasiemetode - ongeënkripteerde wagwoord (PAP).

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Gaan dan na die gevorderde instellings, maak 'n regmerkie op "Spesifiseer die verifikasiemodus." Kies "Gebruikersbekragtiging" en klik op stoor geloofsbriewe. Hier sal jy username_ldap en password_ldap moet invoer

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Ons bêre alles, doen aansoek, maak toe. Jy kan aan 'n nuwe netwerk koppel.

Linux

Ek het getoets op Ubuntu 18.04, 18.10, Fedora 29, 30.

Kom ons laai eers ons sertifikaat af. Ek het nie in Linux gevind of dit moontlik is om stelselsertifikate te gebruik en of daar hoegenaamd so 'n winkel is nie.

Kom ons koppel aan die domein. Daarom benodig ons 'n sertifikaat van die sertifiseringsowerheid by wie ons sertifikaat gekoop is.

Alle verbindings word in een venster gemaak. Kies ons netwerk:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

anonieme-kliënt
domein - die domein waarvoor die sertifikaat uitgereik is

Android

nie-Samsung

Vanaf weergawe 7, wanneer u WiFi koppel, kan u stelselsertifikate gebruik deur slegs die domein te spesifiseer:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

domein - die domein waarvoor die sertifikaat uitgereik is
anonieme-kliënt

Samsung

Soos ek hierbo geskryf het, weet Samsung-toestelle nie hoe om stelselsertifikate te gebruik wanneer hulle aan WiFi koppel nie, en hulle het nie die vermoë om via 'n domein te koppel nie. Daarom moet u die wortelsertifikaat van die sertifiseringsowerheid handmatig byvoeg (ca.pem, ons neem dit op die Radius-bediener). Hier is waar self-onderteken gebruik sal word.

Laai die sertifikaat af na jou toestel en installeer dit.

Sertifikaat installasieWiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Terselfdertyd sal jy die skermontsluitpatroon, pinkode of wagwoord moet stel, as dit nie reeds gestel is nie:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Ek het 'n ingewikkelde weergawe van die installering van 'n sertifikaat gewys. Op die meeste toestelle, klik eenvoudig op die afgelaaide sertifikaat.

Wanneer die sertifikaat geïnstalleer is, kan jy voortgaan na die verbinding:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

sertifikaat - dui die een aan wat geïnstalleer is
anonieme gebruiker - gas

MacOS

Apple-toestelle uit die boks kan net aan EAP-TLS koppel, maar jy moet steeds 'n sertifikaat na hulle gooi. Om 'n ander verbindingsmetode te spesifiseer, moet jy Apple Configurator 2 gebruik. Gevolglik moet jy dit eers na jou Mac aflaai, 'n nuwe profiel skep en al die nodige WiFi-instellings byvoeg.

Apple ConfiguratorWiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Voer jou netwerknaam hier in
Sekuriteit Tipe - WPA2 Enterprise
Aanvaarde EAP-tipes - TTLS
Gebruikersnaam en wagwoord - laat leeg
Innerlike verifikasie - PAP
Uiterlike Identiteit-kliënt

Vertroue-oortjie. Hier spesifiseer ons ons domein

Almal. Die profiel kan gestoor, onderteken en na toestelle versprei word

Nadat die profiel gereed is, moet jy dit na die papawer aflaai en installeer. Tydens die installasieproses sal jy die usernmae_ldap en password_ldap van die gebruiker moet spesifiseer:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

IOS

Die proses is soortgelyk aan macOS. Jy moet 'n profiel gebruik (jy kan dieselfde een as vir macOS gebruik. Hoe om 'n profiel in Apple Configurator te skep, sien hierbo).

Laai profiel af, installeer, voer geloofsbriewe in, koppel:

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi Onderneming. FreeRadius + FreeIPA + Ubiquiti

Dis al. Ons het 'n Radius-bediener opgestel, dit met FreeIPA gesinkroniseer en Ubiquiti AP's aangesê om WPA2-EAP te gebruik.

Moontlike vrae

IN: hoe om 'n profiel/sertifikaat aan 'n werknemer oor te dra?

OOR: Ek stoor alle sertifikate/profiele op ftp met webtoegang. Het 'n gasnetwerk met 'n spoedbeperking en slegs toegang tot die internet verhoog, met die uitsondering van ftp.
Stawing duur vir 2 dae, waarna dit teruggestel word en die kliënt sonder die internet gelaat word. Daardie. wanneer 'n werknemer aan WiFi wil koppel, koppel hy eers aan die gasnetwerk, kry toegang tot FTP, laai die sertifikaat of profiel af wat hy benodig, installeer dit en kan dan aan die korporatiewe netwerk koppel.

IN: hoekom nie skema met MSCHAPv2 gebruik nie? Sy is veiliger!

OOR: Eerstens werk so 'n skema goed op NPS (Windows Network Policy System), in ons implementering is dit nodig om addisioneel LDAP (FreeIpa) op te stel en wagwoord-hashes op die bediener te stoor. Voeg by. dit is nie raadsaam om instellings te maak nie, want. dit kan lei tot verskeie probleme om die ultraklank te sinchroniseer. Tweedens, die hash is MD4, so dit voeg nie veel sekuriteit by nie.

IN: is dit moontlik om toestelle volgens Mac-adresse te magtig?

OOR: NEE, dit is nie veilig nie, 'n aanvaller kan MAC-adresse verander, en meer nog word magtiging deur MAC-adresse nie op baie toestelle ondersteun nie

IN: wat vir oor die algemeen al hierdie sertifikate om te gebruik? kan jy sonder hulle aansluit?

OOR: sertifikate word gebruik om die bediener te magtig. Dié. wanneer dit koppel, kyk die toestel of dit 'n bediener is wat vertrou kan word of nie. As dit is, gaan die verifikasie voort, indien nie, word die verbinding gesluit. Jy kan sonder sertifikate koppel, maar as 'n aanvaller of buurman 'n radiusbediener en 'n toegangspunt met dieselfde naam as ons s'n by die huis opstel, kan hy maklik die gebruiker se geloofsbriewe onderskep (moenie vergeet dat dit in duidelike teks versend word nie). En wanneer 'n sertifikaat gebruik word, sal die vyand slegs ons fiktiewe Gebruikersnaam in sy logboeke sien - gas of kliënt en 'n tipe fout - Onbekende CA-sertifikaat

'n bietjie meer oor macOSGewoonlik op macOS word die stelsel herinstalleer via die internet. In herstelmodus moet die Mac aan WiFi gekoppel wees, en nie ons korporatiewe WiFi of die gasnetwerk sal hier werk nie. Persoonlik het ek 'n ander netwerk, die gewone WPA2-PSK, weggesteek, net vir tegniese bedrywighede. Of jy kan steeds vooraf 'n selflaaibare USB-flash drive met die stelsel maak. Maar as die papawer na 2015 is, sal jy steeds 'n adapter vir hierdie flash drive moet kry)

Bron: will.com

Voeg 'n opmerking