WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Er zijn al enkele voorbeelden beschreven van het organiseren van bedrijfs-WiFi. Hier zal ik beschrijven hoe ik een dergelijke oplossing heb geïmplementeerd en welke problemen ik tegenkwam bij het verbinden op verschillende apparaten. We zullen de bestaande LDAP gebruiken bij gevestigde gebruikers, FreeRadius installeren en WPA2-Enterprise configureren op de Ubnt-controller. Alles lijkt eenvoudig. Laten we eens kijken…

Iets over EAP-methoden

Voordat we met de taak beginnen, moeten we beslissen welke authenticatiemethode we in onze oplossing gaan gebruiken.

Van Wikipedia:

EAP is een authenticatieframework dat vaak wordt gebruikt in draadloze netwerken en point-to-point-verbindingen. Het formaat werd voor het eerst beschreven in RFC 3748 en bijgewerkt in RFC 5247.
EAP wordt gebruikt om een ​​authenticatiemethode te selecteren, sleutels over te dragen en deze sleutels te verwerken door plug-ins die EAP-methoden worden genoemd. Er zijn veel EAP-methoden, zowel gedefinieerd door EAP zelf als methoden die door individuele leveranciers zijn vrijgegeven. EAP definieert niet de linklaag, maar alleen het berichtformaat. Elk protocol dat EAP gebruikt, heeft zijn eigen EAP-berichtinkapselingsprotocol.

De methoden zelf:

  • LEAP is een eigen protocol ontwikkeld door CISCO. Kwetsbaarheden gevonden. Momenteel niet aanbevolen voor gebruik
  • EAP-TLS wordt goed ondersteund door leveranciers van draadloze netwerken. Het is een veilig protocol omdat het de opvolger is van de SSL-standaarden. Het instellen van de client is behoorlijk ingewikkeld. Naast het wachtwoord heeft u een clientcertificaat nodig. Ondersteund op veel systemen
  • EAP-TTLS - breed ondersteund op veel systemen, biedt goede beveiliging door alleen PKI-certificaten op de authenticatieserver te gebruiken
  • EAP-MD5 is een andere open standaard. Biedt minimale beveiliging. Kwetsbaar, ondersteunt geen wederzijdse authenticatie en sleutelgeneratie
  • EAP-IKEv2 - gebaseerd op Internet Key Exchange Protocol versie 2. Biedt wederzijdse authenticatie en het tot stand brengen van sessiesleutels tussen client en server
  • PEAP is een gezamenlijke oplossing van CISCO, Microsoft en RSA Security als open standaard. Op grote schaal verkrijgbaar in producten, biedt een zeer goede veiligheid. Vergelijkbaar met EAP-TTLS, waarvoor alleen een certificaat aan de serverzijde nodig is
  • PEAPv0/EAP-MSCHAPv2 - Na EAP-TLS is dit de tweede veelgebruikte standaard ter wereld. Gebruikte client-server-relatie in Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC - Gemaakt door Cisco als alternatief voor PEAPv0/EAP-MSCHAPv2. Beschermt op geen enkele manier authenticatiegegevens. Niet ondersteund op Windows-besturingssysteem
  • EAP-FAST is een door Cisco ontwikkelde methode om de tekortkomingen van LEAP te corrigeren. Maakt gebruik van Protected Access Credential (PAC). Volledig onvoltooid

Van al deze variëteit is de keuze nog steeds niet geweldig. De vereiste authenticatiemethode: goede beveiliging, ondersteuning op alle apparaten (Windows 10, macOS, Linux, Android, iOS) en sterker nog: hoe eenvoudiger hoe beter. Daarom viel de keuze op EAP-TTLS in combinatie met het PAP-protocol.
De vraag kan rijzen: waarom PAP gebruiken? Het verzendt tenslotte wachtwoorden in duidelijke tekst?

Ja dat klopt. De communicatie tussen FreeRadius en FreeIPA zal precies zo plaatsvinden. In de foutopsporingsmodus kunt u volgen hoe de gebruikersnaam en het wachtwoord worden verzonden. Ja, en laat ze gaan, alleen jij hebt toegang tot de FreeRadius-server.

U kunt meer lezen over hoe EAP-TTLS werkt hier

GratisRADIUS

We zullen FreeRadius upgraden naar CentOS 7.6. Er is hier niets ingewikkelds, we installeren het op de gebruikelijke manier.

yum install freeradius freeradius-utils freeradius-ldap -y

Van de pakketten is versie 3.0.13 geïnstalleerd. Dit laatste kan worden meegenomen https://freeradius.org/

Hierna werkt FreeRadius al. Je kunt de commentaar van de regel verwijderen in /etc/raddb/users

steve   Cleartext-Password := "testing"

Start de server in de foutopsporingsmodus

freeradius -X

En maak een testverbinding vanaf localhost

radtest steve testing 127.0.0.1 1812 testing123

Wij kregen antwoord Ontvangen toegangs-acceptatie-ID 115 van 127.0.0.1:1812 tot 127.0.0.1:56081 lengte 20, het betekent dat alles in orde is. Doe Maar.

De module aansluiten ldap.

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

En we zullen het onmiddellijk veranderen. We hebben FreeRadius nodig om toegang te krijgen tot 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}})"
}
...

Start de radiusserver opnieuw op en controleer de synchronisatie van LDAP-gebruikers:

radtest user_ldap password_ldap localhost 1812 testing123

Eap in bewerken mods-enabled/eap
Hier zullen we twee exemplaren van eap toevoegen. Ze verschillen alleen in certificaten en sleutels. Ik zal hieronder uitleggen waarom dit waar is.

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

Vervolgens bewerken wij site-ingeschakeld/standaard. Ik ben geïnteresseerd in de secties Autoriseren en Authenticeren.

site-ingeschakeld/standaard

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 het autorisatiegedeelte verwijderen we alle modules die we niet nodig hebben. We laten alleen ldap achter. Voeg klantverificatie toe op gebruikersnaam. Daarom hebben we hierboven twee exemplaren van eap toegevoegd.

Meerdere EAPHet is een feit dat we bij het verbinden van sommige apparaten systeemcertificaten zullen gebruiken en het domein zullen specificeren. We hebben een certificaat en sleutel van een vertrouwde certificeringsinstantie. Persoonlijk ben ik van mening dat deze verbindingsprocedure eenvoudiger is dan een zelfondertekend certificaat op elk apparaat te plaatsen. Maar zelfs zonder zelfondertekende certificaten was het nog steeds niet mogelijk om te vertrekken. Samsung-apparaten en Android =< 6 versies weten niet hoe ze systeemcertificaten moeten gebruiken. Daarom maken we voor hen een afzonderlijk exemplaar van eap-guest met zelfondertekende certificaten. Voor alle andere apparaten gebruiken we eap-client met een vertrouwd certificaat. De gebruikersnaam wordt bepaald door het veld Anoniem bij het verbinden van het apparaat. Er zijn slechts 3 waarden toegestaan: Gast, Klant en een leeg veld. De rest wordt allemaal weggegooid. Dit kan worden geconfigureerd in beleid. Ik zal even later een voorbeeld geven.

Laten we de autorisatie- en authenticatiesecties bewerken in site-enabled/binnentunnel

site-enabled/binnentunnel

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 het beleid opgeven welke namen kunnen worden gebruikt voor anoniem inloggen. Bewerken beleid.d/filter.

Je moet regels vinden die vergelijkbaar zijn met deze:

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

En voeg hieronder in elsif de benodigde waarden toe:

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

Nu moeten we naar de map gaan certs. Hier moeten we de sleutel en het certificaat van een vertrouwde certificeringsinstantie plaatsen, die we al hebben, en we moeten zelfondertekende certificaten genereren voor eap-guest.

Het wijzigen van de parameters in het bestand 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"

We schrijven dezelfde waarden in het bestand server.cnf. Wij veranderen alleen
gemeenschappelijke naam:

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"

We creëren:

make

Klaar. Ontvangen server.crt и server.sleutel We hebben ons hierboven al geregistreerd in eap-guest.

En tot slot voegen we onze toegangspunten aan het bestand toe klant.conf. Ik heb er 7. Om niet elk punt afzonderlijk toe te voegen, registreren we alleen het netwerk waarin ze zich bevinden (mijn access points bevinden zich in een apart VLAN).

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

Ubiquiti-controller

We creëren een apart netwerk op de controller. Laat het 192.168.2.0/24 zijn
Ga naar instellingen -> profiel. Laten we een nieuwe maken:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

We noteren het adres en de poort van de radiusserver en het wachtwoord dat in het bestand is geschreven klanten.conf:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Maak een nieuwe draadloze netwerknaam. Selecteer WPA-EAP (Enterprise) als authenticatiemethode en specificeer het gemaakte radiusprofiel:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

We bewaren alles, passen het toe en gaan verder.

Klanten instellen

Laten we beginnen met het moeilijkste deel!

Windows 10

De moeilijkheid komt neer op het feit dat Windows nog niet weet hoe het verbinding moet maken met bedrijfs-WiFi via een domein. Daarom moeten we ons certificaat handmatig uploaden naar het vertrouwde certificaatarchief. Hier kunt u een zelfondertekend exemplaar of een exemplaar van een certificeringsinstantie gebruiken. Ik gebruik de tweede.

Vervolgens moet u een nieuwe verbinding maken. Ga hiervoor naar Netwerk- en internetinstellingen -> Netwerkcentrum -> Een nieuwe verbinding of netwerk maken en configureren:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

We voeren handmatig de netwerknaam in en wijzigen het beveiligingstype. Klik dan op verbindingsinstellingen wijzigen en selecteer op het tabblad Beveiliging netwerkverificatie - EAP-TTLS.

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Ga naar de instellingen, stel de vertrouwelijkheid van authenticatie in - klant. Als vertrouwde certificeringsinstantie selecteert u het certificaat dat we hebben toegevoegd, vinkt u het vakje 'Geen uitnodiging aan de gebruiker versturen als de server niet kan worden geautoriseerd' aan en selecteert u de authenticatiemethode: wachtwoord in platte tekst (PAP).

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Ga vervolgens naar de aanvullende parameters en vink het vakje ‘Authentificatiemodus opgeven’ aan. Selecteer “Gebruikersauthenticatie” en klik op inloggegevens opslaan. Hier moet u gebruikersnaam_ldap en wachtwoord_ldap invoeren

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Wij bewaren, passen toe, sluiten alles af. U kunt verbinding maken met een nieuw netwerk.

Linux

Ik heb getest op Ubuntu 18.04, 18.10, Fedora 29, 30.

Download eerst het certificaat voor uzelf. Ik heb in Linux niet gevonden of het mogelijk is om systeemcertificaten te gebruiken of dat er überhaupt zo'n winkel bestaat.

We maken verbinding via een domein. Daarom hebben we een certificaat nodig van de certificeringsinstantie waar ons certificaat is gekocht.

Alle verbindingen worden in één venster gemaakt. Selecteer ons netwerk:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

anoniem - klant
domein — het domein waarvoor het certificaat is uitgegeven

Android

niet-Samsung

Vanaf versie 7 kunt u bij het verbinden met WiFi systeemcertificaten gebruiken door alleen het domein op te geven:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

domein — het domein waarvoor het certificaat is uitgegeven
anoniem - klant

Samsung

Zoals ik hierboven schreef, weten Samsung-apparaten niet hoe ze systeemcertificaten moeten gebruiken bij het verbinden van WiFi, en hebben ze niet de mogelijkheid om verbinding te maken via een domein. Daarom moet u het rootcertificaat van de certificeringsinstantie handmatig toevoegen (ca.pem, haal het van de Radius-server). Hier wordt zelfondertekend gebruikt.

Download het certificaat naar uw apparaat en installeer het.

Een certificaat installerenWiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

In dit geval moet u een schermontgrendelingspatroon, pincode of wachtwoord instellen, als dit nog niet is ingesteld:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Ik liet een complexe optie zien voor het installeren van een certificaat. Op de meeste apparaten klikt u eenvoudig op het gedownloade certificaat.

Wanneer het certificaat is geïnstalleerd, kunt u doorgaan met de verbinding:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

certificaat - geef het certificaat aan dat u hebt geïnstalleerd
anonieme gebruiker - gast

macOS

Apple-apparaten kunnen alleen out-of-the-box verbinding maken met EAP-TLS, maar je moet ze wel nog steeds voorzien van een certificaat. Om een ​​andere verbindingsmethode op te geven, moet u Apple Configurator 2 gebruiken. U moet deze daarom eerst naar uw Mac downloaden, een nieuw profiel aanmaken en alle benodigde WiFi-instellingen toevoegen.

Apple ConfiguratorWiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

Hier vermelden wij de naam van ons netwerk
Beveiligingstype - WPA2 Enterprise
Geaccepteerde EAP-typen - TTLS
Gebruikersnaam en wachtwoord - laat leeg
Innerlijke authenticatie - PAP
Uiterlijke identiteit - cliënt

Tabblad Vertrouwen. Hier geven wij ons domein aan

Alle. Het profiel kan worden opgeslagen, ondertekend en gedistribueerd naar apparaten

Nadat het profiel gereed is, moet u het naar uw Mac downloaden en installeren. Tijdens het installatieproces moet u de usernmae_ldap en wachtwoord_ldap van de gebruiker opgeven:

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

WiFi-onderneming. FreeRadius + FreeIPA + Ubiquiti

iOS

Het proces is vergelijkbaar met macOS. Je hebt een profiel nodig (je kunt hetzelfde profiel gebruiken als voor macOS. Zie hierboven hoe je een profiel aanmaakt in Apple Configurator).

Download het profiel, installeer, voer inloggegevens in, maak verbinding:

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

Dat is alles. We hebben de Radius-server opgezet, gesynchroniseerd met FreeIPA en de Ubiquiti-toegangspunten opgedragen WPA2-EAP te gebruiken.

Eventuele vragen

В: hoe een profiel/certificaat overdragen aan een medewerker?

О: Ik bewaar alle certificaten/profielen op FTP met toegang via internet. Ik heb een gastnetwerk opgezet met een snelheidslimiet en alleen toegang tot internet, met uitzondering van FTP.
Authenticatie duurt 2 dagen, waarna deze wordt gereset en de client zonder internet zit. Dat. Wanneer een medewerker verbinding wil maken met WiFi, maakt hij eerst verbinding met het gastnetwerk, logt in op FTP, downloadt het certificaat of profiel dat hij nodig heeft, installeert deze en kan vervolgens verbinding maken met het bedrijfsnetwerk.

В: waarom gebruik je geen schema met MSCHAPv2? het is veiliger!

О: ten eerste werkt dit schema goed op NPS (Windows Network Policy System), in onze implementatie is het noodzakelijk om bovendien LDAP (FreeIpa) te configureren en wachtwoord-hashes op de server op te slaan. Toevoegen. Het is niet raadzaam om instellingen uit te voeren, omdat dit kan leiden tot verschillende problemen met de synchronisatie van het ultrasone systeem. Ten tweede is de hash MD4, dus het voegt niet veel beveiliging toe

В: Is het mogelijk om apparaten te autoriseren met behulp van mac-adressen?

О: NEE, dit is niet veilig, een aanvaller kan MAC-adressen spoofen, en sterker nog, autorisatie door MAC-adressen wordt op veel apparaten niet ondersteund

В: Waarom überhaupt al deze certificaten gebruiken? je kunt verbinding maken zonder hen

О: certificaten worden gebruikt om de server te autoriseren. Die. Bij het verbinden controleert het apparaat of het een server is die vertrouwd kan worden of niet. Als dit het geval is, gaat de authenticatie door; als dit niet het geval is, wordt de verbinding verbroken. U kunt verbinding maken zonder certificaten, maar als een aanvaller of buurman thuis een radiusserver en een toegangspunt opzet met dezelfde naam als die van ons, kan hij gemakkelijk de inloggegevens van de gebruiker onderscheppen (vergeet niet dat deze in duidelijke tekst worden verzonden) . En wanneer een certificaat wordt gebruikt, ziet de vijand in zijn logs alleen onze fictieve gebruikersnaam - gast of klant en een typefout - Onbekend CA-certificaat

iets meer over macOSOp macOS gebeurt het opnieuw installeren van het systeem doorgaans via internet. In de herstelmodus moet de Mac verbonden zijn met wifi, en noch onze bedrijfs-WiFi, noch het gastnetwerk zullen hier werken. Persoonlijk heb ik een ander netwerk geïnstalleerd, de gebruikelijke WPA2-PSK, verborgen, alleen voor technische handelingen. Of u kunt ook vooraf een opstartbare USB-stick met het systeem maken. Maar als je Mac van na 2015 is, zul je ook een adapter voor deze flashdrive moeten vinden)

Bron: www.habr.com

Voeg een reactie