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
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
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:
Vi skriver ner adress och port för radiusservern och lösenordet som skrevs i filen clients.conf:
Skapa ett nytt trådlöst nätverksnamn. Välj WPA-EAP (Enterprise) som autentiseringsmetod och ange den skapade radieprofilen:
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:
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.
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).
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
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:
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:
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 certifikat
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:
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:
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 Configurator
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:
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:
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