WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Noen eksempler på organisering av bedriftens WiFi er allerede beskrevet. Her vil jeg beskrive hvordan jeg implementerte en slik løsning og problemene jeg møtte ved tilkobling på forskjellige enheter. Vi vil bruke eksisterende LDAP med etablerte brukere, installere FreeRadius og konfigurere WPA2-Enterprise på Ubnt-kontrolleren. Alt virker enkelt. La oss se…

Litt om EAP-metoder

Før vi starter oppgaven, må vi bestemme hvilken autentiseringsmetode vi skal bruke i løsningen vår.

Fra Wikipedia:

EAP er et autentiseringsrammeverk som ofte brukes i trådløse nettverk og punkt-til-punkt-tilkoblinger. Formatet ble først beskrevet i RFC 3748 og oppdatert i RFC 5247.
EAP brukes til å velge en autentiseringsmetode, overføre nøkler og behandle disse nøklene ved hjelp av plugins kalt EAP-metoder. Det er mange EAP-metoder, både definert med EAP selv og de som er utgitt av individuelle leverandører. EAP definerer ikke lenkelaget, det definerer bare meldingsformatet. Hver protokoll som bruker EAP har sin egen EAP-meldingsinnkapslingsprotokoll.

Selve metodene:

  • LEAP er en proprietær protokoll utviklet av CISCO. Sårbarheter funnet. Foreløpig ikke anbefalt for bruk
  • EAP-TLS støttes godt blant trådløse leverandører. Det er en sikker protokoll fordi den er etterfølgeren til SSL-standardene. Å sette opp klienten er ganske komplisert. Du trenger et klientsertifikat i tillegg til passordet. Støttes på mange systemer
  • EAP-TTLS - bredt støttet på mange systemer, tilbyr god sikkerhet ved bruk av PKI-sertifikater kun på autentiseringsserveren
  • EAP-MD5 er en annen åpen standard. Tilbyr minimal sikkerhet. Sårbar, støtter ikke gjensidig autentisering og nøkkelgenerering
  • EAP-IKEv2 - basert på Internet Key Exchange Protocol versjon 2. Gir gjensidig autentisering og etablering av øktnøkkel mellom klient og server
  • PEAP er en felles løsning mellom CISCO, Microsoft og RSA Security som en åpen standard. Allment tilgjengelig i produkter, gir meget god sikkerhet. I likhet med EAP-TTLS, krever bare et sertifikat på serversiden
  • PEAPv0/EAP-MSCHAPv2 - Etter EAP-TLS er dette den andre mye brukte standarden i verden. Brukt klient-server-forhold i Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Laget av Cisco som et alternativ til PEAPv0/EAP-MSCHAPv2. Beskytter ikke autentiseringsdata på noen måte. Støttes ikke på Windows OS
  • EAP-FAST er en metode utviklet av Cisco for å rette opp manglene ved LEAP. Bruker Protected Access Credential (PAC). Helt uferdig

Av all denne variasjonen er valget fortsatt ikke stort. Autentiseringsmetoden som kreves: god sikkerhet, støtte på alle enheter (Windows 10, macOS, Linux, Android, iOS) og faktisk jo enklere jo bedre. Derfor falt valget på EAP-TTLS i forbindelse med PAP-protokollen.
Spørsmålet kan oppstå - Hvorfor bruke PAP? Tross alt, overfører den passord i klartekst?

Ja, det er riktig. Kommunikasjon mellom FreeRadius og FreeIPA vil foregå akkurat slik. I feilsøkingsmodus kan du spore hvordan brukernavnet og passordet sendes. Ja, og la dem gå, bare du har tilgang til FreeRadius-serveren.

Du kan lese mer om hvordan EAP-TTLS fungerer her

FreeRADIUS

Vi vil oppgradere FreeRadius til CentOS 7.6. Det er ikke noe komplisert her, vi installerer det på vanlig måte.

yum install freeradius freeradius-utils freeradius-ldap -y

Av pakkene er versjon 3.0.13 installert. Sistnevnte kan tas kl https://freeradius.org/

Etter dette fungerer FreeRadius allerede. Du kan avkommentere linjen i /etc/raddb/users

steve   Cleartext-Password := "testing"

Start inn på serveren i feilsøkingsmodus

freeradius -X

Og lag en testforbindelse fra localhost

radtest steve testing 127.0.0.1 1812 testing123

Vi fikk svar Mottatt Access-Accept Id 115 fra 127.0.0.1:1812 til 127.0.0.1:56081 lengde 20, det betyr at alt er i orden. Gå videre.

Koble til modulen ldap.

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

Og vi vil endre det umiddelbart. Vi trenger FreeRadius for å kunne få tilgang til FreeIPA

mods-aktivert/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 radiusserveren på nytt og kontroller synkroniseringen av LDAP-brukere:

radtest user_ldap password_ldap localhost 1812 testing123

Redigering eap in mods-aktivert/eap
Her vil vi legge til to forekomster av eap. De vil bare avvike i sertifikater og nøkler. Jeg vil forklare hvorfor dette er sant nedenfor.

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

Deretter redigerer vi nettstedaktivert/standard. Jeg er interessert i autorisasjons- og autentiseringsdelene.

nettstedaktivert/standard

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
}

I autorisasjonsdelen fjerner vi alle moduler vi ikke trenger. Vi forlater bare ldap. Legg til klientverifisering etter brukernavn. Dette er grunnen til at vi la til to forekomster av eap ovenfor.

Multi EAPFaktum er at når vi kobler til noen enheter, vil vi bruke systemsertifikater og spesifisere domenet. Vi har et sertifikat og nøkkel fra en pålitelig sertifiseringsinstans. Personlig, etter min mening, er denne tilkoblingsprosedyren enklere enn å kaste et selvsignert sertifikat på hver enhet. Men selv uten selvsignerte sertifikater var det fortsatt ikke mulig å forlate. Samsung-enheter og Android =< 6 versjoner vet ikke hvordan de skal bruke systemsertifikater. Derfor oppretter vi en egen forekomst av eap-guest for dem med selvsignerte sertifikater. For alle andre enheter vil vi bruke eap-client med et klarert sertifikat. Brukernavn bestemmes av Anonym-feltet når enheten kobles til. Kun 3 verdier er tillatt: gjest, klient og et tomt felt. Resten er forkastet. Dette kan konfigureres i policyer. Jeg skal gi et eksempel litt senere.

La oss redigere autorisasjons- og autentiseringsdelene i stedsaktivert/innertunnel

stedsaktivert/innertunnel

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
}

Deretter må du spesifisere i retningslinjene hvilke navn som kan brukes for anonym pålogging. Redigering policy.d/filter.

Du må finne linjer som ligner på dette:

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

Og nedenfor i elsif legg til de nødvendige verdiene:

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

Nå må vi flytte til katalogen sertifikater. Her må vi legge nøkkelen og sertifikatet fra en pålitelig sertifiseringsinstans, som vi allerede har, og vi må generere selvsignerte sertifikater for eap-guest.

Endre parametere i filen 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"

Vi skriver de samme verdiene i filen server.cnf. Vi forandrer oss bare
vanlig navn:

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"

Vi lager:

make

Klar. Mottatt server.crt и server.nøkkel Vi har allerede registrert oss ovenfor i eap-guest.

Og til slutt, la oss legge til tilgangspunktene våre til filen klient.konf. Jeg har 7 av dem. For ikke å legge til hvert punkt separat, vil vi kun registrere nettverket de befinner seg i (tilgangspunktene mine er i et eget VLAN).

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

Ubiquiti kontroller

Vi hever et eget nettverk på kontrolleren. La det være 192.168.2.0/24
Gå til innstillinger -> profil. La oss lage en ny:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Vi skriver ned adressen og porten til radiusserveren og passordet som ble skrevet i filen clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Opprett et nytt trådløst nettverksnavn. Velg WPA-EAP (Enterprise) som autentiseringsmetode og spesifiser den opprettede radiusprofilen:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Vi lagrer alt, bruker det og går videre.

Sette opp klienter

La oss starte med det vanskeligste!

Windows 10

Vanskeligheten kommer ned til det faktum at Windows ennå ikke vet hvordan man kobler til bedriftens WiFi over et domene. Derfor må vi manuelt laste opp sertifikatet vårt til det klarerte sertifikatlageret. Her kan du bruke enten en selvsignert eller en fra en sertifiseringsinstans. Jeg skal bruke den andre.

Deretter må du opprette en ny tilkobling. For å gjøre dette, gå til Nettverks- og Internett-innstillinger -> Nettverks- og delingssenter -> Opprett og konfigurer en ny tilkobling eller nettverk:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Vi skriver inn nettverksnavnet manuelt og endrer sikkerhetstypen. Klikk deretter på endre tilkoblingsinnstillinger og i kategorien Sikkerhet velger du nettverksautentisering - EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Gå til innstillingene, angi konfidensialitet for autentisering - kunde. Som en pålitelig sertifiseringsinstans, velg sertifikatet vi la til, merk av i boksen "Ikke utsted en invitasjon til brukeren hvis serveren ikke kan autoriseres" og velg autentiseringsmetoden - klartekstpassord (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Gå deretter til flere parametere og merk av i boksen "Spesifiser autentiseringsmodus." Velg "Brukerautentisering" og klikk på lagre legitimasjon. Her må du skrive inn brukernavn_ldap og passord_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Vi lagrer, søker, stenger alt. Du kan koble til et nytt nettverk.

Linux

Jeg testet på Ubuntu 18.04, 18.10, Fedora 29, 30.

Først last ned sertifikatet for deg selv. Jeg har ikke funnet i Linux om det er mulig å bruke systemsertifikater eller om det i det hele tatt finnes en slik butikk.

Vi kobler til via domene. Derfor trenger vi et sertifikat fra sertifiseringsmyndigheten som vårt sertifikat ble kjøpt fra.

Alle tilkoblinger gjøres i ett vindu. Velg vårt nettverk:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonym - klient
domene – domenet som sertifikatet ble utstedt for

Android

ikke-Samsung

Fra versjon 7, når du kobler til WiFi, kan du bruke systemsertifikater ved å spesifisere bare domenet:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domene – domenet som sertifikatet ble utstedt for
anonym - klient

Samsung

Som jeg skrev ovenfor, vet ikke Samsung-enheter hvordan de skal bruke systemsertifikater når de kobler til WiFi, og de har ikke mulighet til å koble til via domene. Derfor må du manuelt legge til rotsertifikatet til sertifiseringsmyndigheten (ca.pem, ta det fra Radius-serveren). Det er her selvsignert vil bli brukt.

Last ned sertifikatet til enheten din og installer det.

Installere et sertifikatWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

I dette tilfellet må du angi et skjermopplåsingsmønster, PIN-kode eller passord, hvis det ikke allerede er angitt:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Jeg viste et komplekst alternativ for å installere et sertifikat. På de fleste enheter klikker du bare på det nedlastede sertifikatet.

Når sertifikatet er installert, kan du fortsette til tilkoblingen:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

sertifikat - angi det du installerte
anonym bruker - gjest

macOS

Apple-enheter kan bare kobles til EAP-TLS direkte fra esken, men du må fortsatt gi dem et sertifikat. For å spesifisere en annen tilkoblingsmetode, må du bruke Apple Configurator 2. Følgelig må du først laste den ned til Mac-en, opprette en ny profil og legge til alle nødvendige WiFi-innstillinger.

Apple ConfiguratorWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Her angir vi navnet på nettverket vårt
Sikkerhetstype - WPA2 Enterprise
Aksepterte EAP-typer - TTLS
Brukernavn og passord - la stå tomt
Indre autentisering - PAP
Ytre identitet - klient

Trust-fanen. Her angir vi vårt domene

Alle. Profilen kan lagres, signeres og distribueres til enheter

Etter at profilen er klar, må du laste den ned til Mac-en og installere den. Under installasjonsprosessen må du spesifisere usernmae_ldap og password_ldap for brukeren:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Prosessen ligner på macOS. Du må bruke en profil (du kan bruke den samme som for macOS. Se ovenfor for hvordan du oppretter en profil i Apple Configurator).

Last ned profilen, installer, skriv inn legitimasjon, koble til:

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

Det er alt. Vi satte opp Radius-serveren, synkroniserte den med FreeIPA og ba Ubiquiti-tilgangspunktene bruke WPA2-EAP.

Mulige spørsmål

I: hvordan overføre en profil/sertifikat til en ansatt?

om: Jeg lagrer alle sertifikater/profiler på FTP med tilgang via nettet. Jeg setter opp et gjestenettverk med hastighetsgrense og tilgang kun til Internett, med unntak av FTP.
Autentisering varer i 2 dager, hvoretter den tilbakestilles og klienten blir stående uten Internett. At. Når en ansatt ønsker å koble til WiFi, kobler han seg først til gjestenettverket, logger på FTP, laster ned sertifikatet eller profilen han trenger, installerer dem og kan deretter koble seg til bedriftsnettverket.

I: hvorfor ikke bruke et opplegg med MSCHAPv2? det er tryggere!

om: for det første fungerer denne ordningen bra på NPS (Windows Network Policy System), i vår implementering er det nødvendig å i tillegg konfigurere LDAP (FreeIpa) og lagre passord-hasher på serveren. Legg til. Det er ikke tilrådelig å gjøre innstillinger, fordi dette kan føre til ulike problemer med synkronisering av ultralydsystemet. For det andre er hashen MD4, så det gir ikke mye sikkerhet

I: Er det mulig å autorisere enheter ved hjelp av mac-adresser?

om: NEI, dette er ikke trygt, en angriper kan forfalske MAC-adresser, og enda mer, godkjenning av MAC-adresser støttes ikke på mange enheter

I: Hvorfor bruke alle disse sertifikatene i det hele tatt? du kan koble til uten dem

om: sertifikater brukes til å autorisere serveren. De. Ved tilkobling sjekker enheten om det er en server som kan stoles på eller ikke. I så fall fortsetter autentiseringen; hvis ikke, lukkes tilkoblingen. Du kan koble til uten sertifikater, men hvis en angriper eller nabo setter opp en radiusserver og et tilgangspunkt med samme navn som vårt hjemme, kan han enkelt fange opp brukerens legitimasjon (ikke glem at de overføres i klartekst) . Og når et sertifikat brukes, vil fienden kun se vårt fiktive brukernavn i loggene sine - gjest eller klient og en typefeil - Ukjent CA-sertifikat

litt mer om macOSPå macOS, installeres systemet på nytt via Internett. I gjenopprettingsmodus må Mac-en være koblet til WiFi, og verken bedriftens WiFi eller gjestenettverket vil fungere her. Personlig installerte jeg et annet nettverk, det vanlige WPA2-PSK, skjult, bare for tekniske operasjoner. Eller du kan også lage en oppstartbar USB-flash-stasjon med systemet på forhånd. Men hvis Mac-en din er etter 2015, må du også finne en adapter for denne flash-stasjonen)

Kilde: www.habr.com

Legg til en kommentar