WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Några exempel på att organisera företags WiFi har redan beskrivits. Här kommer jag att beskriva hur jag implementerade en sådan lösning och vilka problem jag stötte på vid anslutning på olika enheter. Vi kommer att använda befintlig LDAP med etablerade användare, installera FreeRadius och konfigurera WPA2-Enterprise på Ubnt-kontrollern. Allt verkar enkelt. Låt oss se…

Lite om EAP-metoder

Innan vi börjar med uppgiften måste vi bestämma vilken autentiseringsmetod vi ska använda i vår lösning.

Från Wikipedia:

EAP är ett autentiseringsramverk som ofta används i trådlösa nätverk och punkt-till-punkt-anslutningar. Formatet beskrevs först i RFC 3748 och uppdaterades i RFC 5247.
EAP används för att välja en autentiseringsmetod, överföra nycklar och bearbeta dessa nycklar med plugins som kallas EAP-metoder. Det finns många EAP-metoder, både definierade med själva EAP och de som släpps av enskilda leverantörer. EAP definierar inte länklagret, det definierar bara meddelandeformatet. Varje protokoll som använder EAP har sitt eget EAP-meddelandeinkapslingsprotokoll.

Själva metoderna:

  • LEAP är ett patentskyddat protokoll utvecklat av CISCO. Sårbarheter hittades. För närvarande rekommenderas inte för användning
  • EAP-TLS stöds väl bland trådlösa leverantörer. Det är ett säkert protokoll eftersom det är efterföljaren till SSL-standarderna. Att ställa in klienten är ganska komplicerat. Du behöver ett klientcertifikat utöver lösenordet. Stöds på många system
  • EAP-TTLS - stöds brett på många system, erbjuder bra säkerhet med PKI-certifikat endast på autentiseringsservern
  • EAP-MD5 är en annan öppen standard. Ger minimal säkerhet. Sårbar, stöder inte ömsesidig autentisering och nyckelgenerering
  • EAP-IKEv2 - baserad på Internet Key Exchange Protocol version 2. Ger ömsesidig autentisering och etablering av sessionsnyckel mellan klient och server
  • PEAP är en gemensam lösning mellan CISCO, Microsoft och RSA Security som en öppen standard. Allmänt tillgänglig i produkter, ger mycket god säkerhet. Liknar EAP-TTLS, kräver endast ett certifikat på serversidan
  • PEAPv0/EAP-MSCHAPv2 - Efter EAP-TLS är detta den andra allmänt använda standarden i världen. Använde klient-server-relation i Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Skapad av Cisco som ett alternativ till PEAPv0/EAP-MSCHAPv2. Skyddar inte autentiseringsdata på något sätt. Stöds inte på Windows OS
  • EAP-FAST är en metod utvecklad av Cisco för att rätta till bristerna i LEAP. Använder PAC (Protected Access Credential). Helt oavslutat

Av all denna variation är valet fortfarande inte stort. Autentiseringsmetoden som krävs: bra säkerhet, stöd på alla enheter (Windows 10, macOS, Linux, Android, iOS) och faktiskt, ju enklare desto bättre. Därför föll valet på EAP-TTLS i samband med PAP-protokollet.
Frågan kan uppstå - Varför använda PAP? Den överför trots allt lösenord i klartext?

Ja det stämmer. Kommunikationen mellan FreeRadius och FreeIPA kommer att ske exakt så här. I felsökningsläge kan du spåra hur användarnamnet och lösenordet skickas. Ja, och släpp dem, bara du har tillgång till FreeRadius-servern.

Du kan läsa mer om hur EAP-TTLS fungerar här

FreeRADIUS

Vi kommer att uppgradera FreeRadius till CentOS 7.6. Det är inget komplicerat här, vi installerar det på vanligt sätt.

yum install freeradius freeradius-utils freeradius-ldap -y

Av paketen är version 3.0.13 installerad. Den senare kan tas kl https://freeradius.org/

Efter detta fungerar FreeRadius redan. Du kan avkommentera raden i /etc/raddb/users

steve   Cleartext-Password := "testing"

Starta in på servern i felsökningsläge

freeradius -X

Och gör en testanslutning från localhost

radtest steve testing 127.0.0.1 1812 testing123

Vi fick svar Mottaget Access-Accept Id 115 från 127.0.0.1:1812 till 127.0.0.1:56081 längd 20, det betyder att allt är OK. Varsågod.

Anslutning av modulen ldap.

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

Och vi kommer att ändra det omedelbart. Vi behöver FreeRadius för att kunna komma åt 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}})"
}
...

Starta om radiusservern och kontrollera synkroniseringen av LDAP-användare:

radtest user_ldap password_ldap localhost 1812 testing123

Redigerar eap in mods-aktiverade/eap
Här kommer vi att lägga till två instanser av eap. De skiljer sig endast i certifikat och nycklar. Jag förklarar varför detta är sant nedan.

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

Därefter redigerar vi site-enabled/default. Jag är intresserad av sektionerna för auktorisering och autentisering.

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
}

I behörighetsdelen tar vi bort alla moduler som vi inte behöver. Vi lämnar bara ldap. Lägg till klientverifiering efter användarnamn. Det är därför vi har lagt till två instanser av eap ovan.

Multi EAPFaktum är att när vi ansluter vissa enheter kommer vi att använda systemcertifikat och ange domänen. Vi har ett certifikat och nyckel från en betrodd certifikatutfärdare. Personligen, enligt min mening, är denna anslutningsprocedure enklare än att kasta ett självsignerat certifikat på varje enhet. Men även utan självsignerade certifikat gick det fortfarande inte att lämna. Samsung-enheter och Android =< 6 versioner vet inte hur man använder systemcertifikat. Därför skapar vi en separat instans av eap-guest för dem med självsignerade certifikat. För alla andra enheter kommer vi att använda eap-client med ett pålitligt certifikat. Användarnamn bestäms av fältet Anonym när enheten ansluts. Endast 3 värden är tillåtna: gäst, klient och ett tomt fält. Resten kasseras allt. Detta kan konfigureras i policyer. Jag ska ge ett exempel lite senare.

Låt oss redigera behörighets- och autentiseringssektionerna i platsaktiverad/innertunnel

platsaktiverad/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
}

Därefter måste du ange i policyerna vilka namn som kan användas för anonym inloggning. Redigering policy.d/filter.

Du måste hitta linjer som liknar denna:

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

Och nedan i elsif lägg till de nödvändiga värdena:

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

Nu måste vi flytta till katalogen cert. Här måste vi lägga nyckeln och certifikatet från en betrodd certifieringsmyndighet, som vi redan har, och vi måste generera självsignerade certifikat för eap-guest.

Ändra parametrarna 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 samma värden i filen server.cnf. Vi ändrar oss bara
vanligt namn:

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 skapar:

make

Redo. Mottagen server.crt и server.nyckel Vi har redan registrerat oss ovan i eap-guest.

Och slutligen, låt oss lägga till våra åtkomstpunkter till filen klient.konf. Jag har 7 av dem. För att inte lägga till varje punkt separat kommer vi bara att registrera nätverket där de finns (mina accesspunkter finns i ett separat VLAN).

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

Ubiquiti-kontroller

Vi skapar ett separat nätverk på styrenheten. Låt det vara 192.168.2.0/24
Gå till inställningar -> profil. Låt oss skapa en ny:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Vi skriver ner adress och port för radiusservern och lösenordet som skrevs i filen clients.conf:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Skapa ett nytt trådlöst nätverksnamn. Välj WPA-EAP (Enterprise) som autentiseringsmetod och ange den skapade radieprofilen:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Vi sparar allt, applicerar det och går vidare.

Skapa klienter

Låt oss börja med det svåraste!

Windows 10

Svårigheten beror på det faktum att Windows ännu inte vet hur man ansluter till företagets WiFi över en domän. Därför måste vi manuellt ladda upp vårt certifikat till den betrodda certifikatarkivet. Här kan du använda antingen en självsignerad eller en från en certifieringsmyndighet. Jag ska använda den andra.

Därefter måste du skapa en ny anslutning. För att göra detta, gå till Nätverks- och Internetinställningar -> Nätverks- och delningscenter -> Skapa och konfigurera en ny anslutning eller ett nytt nätverk:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Vi anger manuellt nätverksnamnet och ändrar säkerhetstypen. Klicka sedan på ändra anslutningsinställningar och på fliken Säkerhet väljer du nätverksautentisering - EAP-TTLS.

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Gå till inställningarna, ställ in konfidentialitet för autentisering - klient. Som en betrodd certifieringsmyndighet, välj certifikatet vi lade till, markera rutan "Ge inte en inbjudan till användaren om servern inte kan auktoriseras" och välj autentiseringsmetoden - klartextlösenord (PAP).

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Gå sedan till ytterligare parametrar och markera rutan "Ange autentiseringsläge." Välj "Användarautentisering" och klicka på spara inloggningsuppgifter. Här måste du ange användarnamn_ldap och lösenord_ldap

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Vi sparar, ansöker, stänger allt. Du kan ansluta till ett nytt nätverk.

Linux

Jag testade på Ubuntu 18.04, 18.10, Fedora 29, 30.

Ladda först ner certifikatet själv. Jag har inte hittat i Linux om det går att använda systemcertifikat eller om det överhuvudtaget finns en sådan butik.

Vi kommer att ansluta via domän. Därför behöver vi ett certifikat från den certifieringsmyndighet som vårt certifikat köptes från.

Alla anslutningar görs i ett fönster. Välj vårt nätverk:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

anonym - klient
domän — den domän för vilken certifikatet utfärdades

Android

icke-Samsung

Från version 7, när du ansluter WiFi, kan du använda systemcertifikat genom att endast ange domänen:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

domän — den domän för vilken certifikatet utfärdades
anonym - klient

Samsung

Som jag skrev ovan vet inte Samsung-enheter hur man använder systemcertifikat när man ansluter WiFi, och de har inte möjlighet att ansluta via domän. Därför måste du manuellt lägga till certifieringsmyndighetens rotcertifikat (ca.pem, ta det från Radius-servern). Det är här självsignerad kommer att användas.

Ladda ner certifikatet till din enhet och installera det.

Installera ett certifikatWiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

I det här fallet måste du ställa in ett skärmupplåsningsmönster, PIN-kod eller lösenord, om det inte redan är inställt:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Jag visade ett komplext alternativ för att installera ett certifikat. På de flesta enheter klickar du helt enkelt på det nedladdade certifikatet.

När certifikatet är installerat kan du fortsätta till anslutningen:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

certifikat - ange det du installerade
anonym användare - gäst

MacOS

Apple-enheter kan bara ansluta till EAP-TLS direkt, men du måste fortfarande förse dem med ett certifikat. För att ange en annan anslutningsmetod måste du använda Apple Configurator 2. Därför måste du först ladda ner den till din Mac, skapa en ny profil och lägga till alla nödvändiga WiFi-inställningar.

Apple ConfiguratorWiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Här anger vi namnet på vårt nätverk
Säkerhetstyp - WPA2 Enterprise
Godkända EAP-typer - TTLS
Användarnamn och lösenord - lämna tomt
Inre autentisering - PAP
Yttre identitet - klient

Fliken Trust. Här anger vi vår domän

Allt. Profilen kan sparas, signeras och distribueras till enheter

När profilen är klar måste du ladda ner den till din Mac och installera den. Under installationsprocessen måste du ange användarens usernmae_ldap och password_ldap:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

iOS

Processen liknar macOS. Du behöver använda en profil (du kan använda samma som för macOS. Se ovan för hur du skapar en profil i Apple Configurator).

Ladda ner profilen, installera, ange referenser, anslut:

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

WiFi företag. FreeRadius + FreeIPA + Ubiquiti

Det är allt. Vi satte upp Radius-servern, synkroniserade den med FreeIPA och sa åt Ubiquiti-åtkomstpunkterna att använda WPA2-EAP.

Möjliga frågor

PÅ: hur överför man en profil/certifikat till en anställd?

om: Jag lagrar alla certifikat/profiler på FTP med åtkomst via webben. Jag ställer in ett gästnätverk med en hastighetsgräns och endast tillgång till Internet, med undantag för FTP.
Autentiseringen varar i 2 dagar, varefter den återställs och klienten lämnas utan internet. Den där. När en anställd vill ansluta till WiFi ansluter han först till gästnätverket, loggar in på FTP, laddar ner certifikatet eller profilen han behöver, installerar dem och kan sedan ansluta till företagets nätverk.

PÅ: varför inte använda ett schema med MSCHAPv2? det är säkrare!

om: För det första fungerar det här schemat bra på NPS (Windows Network Policy System), i vår implementering är det nödvändigt att ytterligare konfigurera LDAP (FreeIpa) och lagra lösenordshashar på servern. Lägg till. Det är inte tillrådligt att göra inställningar, eftersom detta kan leda till olika problem med synkronisering av ultraljudssystemet. För det andra är hashen MD4, så det ger inte mycket säkerhet

PÅ: Är det möjligt att auktorisera enheter med mac-adresser?

om: NEJ, detta är inte säkert, en angripare kan förfalska MAC-adresser, och ännu mer, auktorisering av MAC-adresser stöds inte på många enheter

PÅ: Varför använda alla dessa certifikat överhuvudtaget? du kan ansluta utan dem

om: certifikat används för att auktorisera servern. De där. Vid anslutning kontrollerar enheten om det är en server som går att lita på eller inte. Om så är fallet fortsätter autentiseringen, om inte stängs anslutningen. Du kan ansluta utan certifikat, men om en angripare eller granne sätter upp en radieserver och en accesspunkt med samma namn som vår hemma, kan han enkelt fånga upp användarens autentiseringsuppgifter (glöm inte att de sänds i klartext) . Och när ett certifikat används, kommer fienden att se i sina loggar endast vårt fiktiva användarnamn - gäst eller klient och ett typfel - Okänt CA-certifikat

lite mer om macOSNormalt, på macOS, görs ominstallation av systemet via Internet. I återställningsläge måste Mac vara ansluten till WiFi, och varken vårt företags WiFi eller gästnätverket kommer att fungera här. Personligen installerade jag ett annat nätverk, det vanliga WPA2-PSK, dolt, bara för tekniska operationer. Eller så kan du också skapa ett startbart USB-minne med systemet i förväg. Men om din Mac är efter 2015 måste du också hitta en adapter för denna flashenhet)

Källa: will.com

Lägg en kommentar