WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Er zijn al enkele voorbeelden van de organisatie van bedrijfs-WiFi beschreven. Hier zal ik uitleggen hoe ik een dergelijke oplossing heb geĆÆmplementeerd en de problemen waarmee ik werd geconfronteerd bij de verbinding met verschillende apparaten. We zullen gebruikmaken van de bestaande LDAP met geregistreerde gebruikers, FreeRadius opzetten en WPA2-Enterprise configureren op de Ubnt-controller. Het lijkt vrij eenvoudig. Laten we kijken…

Een beetje over EAP-methoden

Voordat we met de taak beginnen, moeten we bepalen welke authenticator methode we in onze oplossing gaan gebruiken.

Van Wikipedia:

EAP is een authenticatie-framework dat vaak wordt gebruikt in draadloze netwerken en point-to-point verbindingen. Het formaat werd voor het eerst beschreven in RFC 3748 en geüpdatet in RFC 5247.
EAP wordt gebruikt voor het kiezen van de authenticator methode, het verzenden van sleutels en het verwerken van deze sleutels door modules die EAP-methoden worden genoemd. Er zijn veel EAP-methoden, zowel gedefinieerd samen met EAP als uitgebracht door afzonderlijke fabrikanten. EAP definieert geen kanaalniveau; het definieert alleen het berichtformaat. Elk protocol dat EAP gebruikt, heeft zijn eigen protocol voor het encapsuleren van EAP-berichten.

De methoden zelf:

  • LEAP is een propriĆ«tair protocol, ontwikkeld door CISCO. Er zijn kwetsbaarheden gevonden. Momenteel wordt het niet aanbevolen om te gebruiken.
  • EAP-TLS wordt goed ondersteund door leveranciers van draadloze verbindingen. Het is een veilige protocol, omdat het de opvolger is van de SSL-standaarden. De clientconfiguratie is vrij complex. Een clientcertificaat is nodig naast het wachtwoord. Het wordt ondersteund door veel systemen.
  • EAP-TTLS wordt breed ondersteund door veel systemen en biedt goede beveiliging, waarbij PKI-certificaten alleen aan de authenticatieserver worden verleend.
  • EAP-MD5 is een andere open standaard. Het biedt minimale beveiliging, is kwetsbaar en ondersteunt geen wederzijdse authenticatie en sleutelgeneratie.
  • EAP-IKEv2 is gebaseerd op het Internet Key Exchange Protocol versie 2. Het biedt wederzijdse authenticatie en het tot stand brengen van een sessiesleutel tussen client en server.
  • PEAP is een gezamenlijke oplossing van CISCO, Microsoft en RSA Security als een open standaard. Het is breed verkrijgbaar in producten en biedt zeer goede beveiliging. Het lijkt op EAP-TTLS, waarbij alleen een certificaat aan de serverzijde wordt vereist.
  • PEAPv0/EAP-MSCHAPv2 — naast EAP-TLS is dit de op ƩƩn na meest gebruikte standaard ter wereld. Het wordt gebruikt voor client-server interactie in Microsoft, Cisco, Apple, Linux.
  • PEAPv1/EAP-GTC — ontwikkeld door Cisco als alternatief voor PEAPv0/EAP-MSCHAPv2. Beschermt de authenticatiegegevens in geen enkel geval. Wordt niet ondersteund in Windows OS.
  • EAP-FAST — een methode ontwikkeld door Cisco om de tekortkomingen van LEAP te verhelpen. Gebruikmakend van Protected Access Credential (PAC). Volledig onvoltooid.

Van al deze variƫteiten is de keuze toch niet zo groot. De methode van authenticatie moet voldoen aan: goede beveiliging, ondersteuning op alle apparaten (Windows 10, macOS, Linux, Android, iOS) en, hoe eenvoudiger, hoe beter. Daarom is de keuze gevallen op EAP-TTLS in combinatie met het PAP-protocol.
Er kan de vraag rijzen — waarom PAP gebruiken? Het verzendt immers wachtwoorden in plain text?

Ja, dat klopt. De communicatie tussen FreeRadius en FreeIPA zal precies zo verlopen. In debuggingsmodus kan worden gevolgd hoe gebruikersnaam en wachtwoord worden verzonden. Laat ze maar verzonden worden, zolang jij maar toegang hebt tot de FreeRadius-server.

Meer informatie over de werking van EAP-TTLS is verkrijgbaar. here

FreeRADIUS

We gaan FreeRadius opzetten op CentOS 7.6. Dit is niet ingewikkeld, installeren op de gebruikelijke manier.

yum install freeradius freeradius-utils freeradius-ldap -y

De pakketten bevatten versie 3.0.13. De laatste versie kan worden gedownload van https://freeradius.org/

Na dit is FreeRadius al operationeel. Je kunt de regel in /etc/raddb/users uitcommentariƫren:

steve   Cleartext-Password := "testing"

Start de server in debuggingsmodus.

freeradius -X

En maak een testverbinding met localhost.

radtest steve testing 127.0.0.1 1812 testing123

We hebben het antwoord ontvangen. Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:56081 length 20, dat betekent dat alles goed is. Laten we verder gaan.

Sluit de module aan. ldap.

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

En we gaan het direct aanpassen. We hebben nodig dat FreeRadius toegang heeft 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}})"
}
...

Herstart de radius-server en controleer de synchronisatie van LDAP-gebruikers:

radtest user_ldap password_ldap localhost 1812 testing123

Bewerk eap in mods-enabled/eap
Hier voegen we twee instanties van eap toe. Ze zullen alleen verschillen in certificaten en sleutels. Verderop leg ik uit waarom precies zo.

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

Verder bewerken site-enabled/default. We zijn geĆÆnteresseerd in de secties authorize en authenticate.

site-enabled/default

authorize {
  filter_username
  preprocess
  if (&User-Name == "gast") {
   eap-gast {
       ok = return
   }
  }
  elsif (&User-Name == "klant") {
    eap-klant {
       ok = return 
    }
  }
  else {
    eap-gast {
       ok = return
    }
  }
  ldap
  if ((ok || updated) && User-Password) {
    update {
        control:Auth-Type := ldap
    }
  }
  expiration
  logintime
  pap
  }

authenticate {
  Auth-Type LDAP {
    ldap
  }
  Auth-Type eap-gast {
    eap-gast
  }
  Auth-Type eap-klant {
    eap-klant
  }
  pap
}

In de sectie authorize verwijderen we alle modules die we niet nodig hebben. We behouden alleen ldap. We voegen een controle toe voor de klant op basis van de gebruikersnaam. Dat is precies waarvoor we eerder twee exemplaren van eap hebben toegevoegd.

Multi EAPHet punt is dat we bij het aansluiten van bepaalde apparaten systeemcertificaten gaan gebruiken en het domein gaan opgeven. We hebben een certificaat en een sleutel van een vertrouwd certificeringscentrum. Persoonlijk vind ik deze procedure makkelijker dan voor elk apparaat een zelfondertekend certificaat te gebruiken. Maar zonder zelfondertekende certificaten komen we er niet helemaal vanaf. Samsung-apparaten en Android < 6 versies kunnen geen systeemcertificaten gebruiken. Daarom maken we voor hen een apart exemplaar eap-gast met zelfondertekende certificaten. Voor alle andere apparaten gebruiken we eap-klant met een vertrouwd certificaat. De gebruikersnaam wordt bepaald via het veld Anoniem bij het aansluiten van het apparaat. Er zijn slechts 3 waarden toegestaan: Gast, Klant en een leeg veld. Alle andere waarden worden afgewezen. Dit wordt ingesteld in de beleidsregels. Een voorbeeld geef ik later.

We bewerken de secties authorize en authenticate in site-enabled/inner-tunnel

site-enabled/inner-tunnel

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-gast {
    eap-gast
  }
  Auth-Type eap-klant {
    eap-klant
  }
  Auth-Type PAP {
    pap
  }
  ldap
}

Verder moet we in de beleidsregels aangeven welke namen voor anonieme toegang kunnen worden gebruikt. We bewerken policy.d/filter.

Je moet de regels vinden die hierop lijken:

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

En hieronder in elsif voeg de nodige waarden toe:

elsif (&outer.request:User-Name !~ /^(gast|klant|@)/) {
  update request {
    Module-Failure-Message = "User-Name is niet geanonimiseerd"
  }
  reject
}

Nu moeten we naar de directory verhuizen certs. Hier moet je de sleutel en het certificaat van het vertrouwde certificeringscentrum plaatsen, dat we al hebben, en zelfondertekende certificaten voor eap-gast genereren.

Wij wijzigen de parameters in het bestand ca.cnf.

ca.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = NL
stateOrProvinceNmae = Staat
localityNmae = Stad
organizationName = NONAME
emailAddress = admin@admin.nl
commonName = "CA FreeRadius"

We geven dezelfde waarden op in het bestand server.cnf. We wijzigen alleen
commonName:

server.cnf


...
default_days = 3650
default_md = sha256
...
input_password = blablabla
output_password = blablabla
...
countryName = NL
stateOrProvinceNmae = Staat
localityNmae = Stad
organizationName = NONAME
emailAddress = admin@admin.nl
commonName = "Server Certificate FreeRadius"

We creƫren:

make

Klaar. De verkregen server.crt en server.key staan al eerder vermeld in eap-guest.

En als laatste voegen we onze toegangspunten toe in het bestand client.conf. Ik heb er 7. Om niet elk toegangspunt afzonderlijk toe te voegen, vermelden we enkel het netwerk waarin ze zich bevinden (mijn toegangspunten bevinden zich in een aparte VLAN).

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

Ubiquiti-controller

Op de controller creƫren we een apart netwerk. Laten we zeggen 192.168.2.0/24
We gaan naar instellingen -> profiel. We creƫren een nieuwe:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

We vullen het adres en de poort van de radius-server in en het wachtwoord dat we in het bestand hebben ingesteld clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

We creƫren een nieuwe naam voor het draadloze netwerk. Als authenticatiemethode kiezen we WPA-EAP (Enterprise) en geven we het gemaakte radius-profiel op:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Alles opslaan, toepassen en verder gaan.

Instelling van clients

Laten we beginnen met het moeilijkste!

Windows 10

De moeilijkheid ligt erin dat Windows voorlopig nog niet kan verbinding maken met bedrijfs-WiFi op domeinbasis. Daarom moeten we handmatig ons certificaat in de opslag voor vertrouwde certificaten plaatsen. Hier kunnen zowel zelfondertekende als certificaten van een certificeringsautoriteit worden gebruikt. Ik zal de tweede gebruiken.

Daarna moet er een nieuwe verbinding worden aangemaakt. Hiervoor gaan we naar netwerk- en internetinstellingen -> Netwerkcentrum -> Een nieuwe verbinding of netwerk maken en configureren:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Handmatig vullen we de netwerknaam in en veranderen we het beveiligingstype. Vervolgens klikken we op de verbindingsparameters wijzigen en op het tabblad Beveiliging kiezen we netwerkverificatie — EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

We openen de instellingen, vullen vertrouwelijkheid van authenticatie in — client. Als vertrouwde certificeringsautoriteit kiezen we het certificate dat we hebben toegevoegd, we vinken de optie "Vraag de gebruiker niet om toestemming als de server niet kan worden geverifieerd" aan en als verificatiemethode kiezen we — onvercijferd wachtwoord (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ga naar de aanvullende parameters, vink "Specificeer het authenticatiemodus" aan. Kies "Gebruikersauthenticatie" en klik op bewaar inloggegevens. Hier moet username_ldap en password_ldap worden ingevoerd.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Sla alles op, pas toe en sluit af. Je kunt verbinding maken met het nieuwe netwerk.

Linux

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

Laten we beginnen met het downloaden van het certificaat. Ik heb niet kunnen vinden of er in Linux een mogelijkheid is om systeemcertificaten te gebruiken en of er überhaupt zo’n opslag is.

We gaan verbinden via het domein. Daarom is een certificaat van de certificeringsautoriteit nodig, waar ons certificaat is aangeschaft.

De gehele verbinding wordt in ƩƩn venster gemaakt. We kiezen ons netwerk:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonymous — client
domain — het domein waarvoor het certificaat is afgegeven

Android

non-Samsung

Vanaf versie 7 kan bij WiFi-verbindingen gebruik worden gemaakt van systeemcertificaten door alleen het domein op te geven:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domain — het domein waarvoor het certificaat is afgegeven
anonymous — client

Samsung

Zoals hierboven vermeld, kunnen Samsung-apparaten geen systeemcertificaten gebruiken bij WiFi-verbindingen en hebben ze geen mogelijkheid om via domein te verbinden. Daarom moet je het rootcertificaat van de certificeringsautoriteit handmatig toevoegen (ca.pem, te verkrijgen op de Radius-server). Hier zal zelfondertekend worden gebruikt.

Download het certificaat naar je apparaat en installeer het.

Installatie van het certificaatWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

In dit geval moet je een ontgrendelingsafbeelding, pincode of wachtwoord instellen, als dit nog niet is gebeurd:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ik heb een complexe installatie van het certificaat laten zien. Bij de meeste apparaten is het voldoende om eenvoudig op het gedownloade certificaat te klikken.

Wanneer het certificaat is geĆÆnstalleerd, kun je doorgaan naar de verbinding:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

certificaat — geef degene aan die je hebt geĆÆnstalleerd
anonieme gebruiker — guest

macOS

Apple-apparaten kunnen standaard alleen verbinding maken met EAP-TLS, maar het is nog steeds nodig om hen een certificaat te geven. Om een andere verbindingsmethode op te geven, moet je Apple Configurator 2 gebruiken. Dit betekent dat je het eerst op een Mac moet downloaden, een nieuw profiel moet maken en alle benodigde WiFi-instellingen moet toevoegen.

Apple ConfiguratorWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Hier geef je de naam van je netwerk op
Beveiligingstype — WPA2 Enterprise
Geaccepteerde EAP-typen — TTLS
Gebruikersnaam en wachtwoord — laten we leeg
Inner Authentication — PAP
Outer Identity — client

Tabblad Vertrouwen. Hier geef je ons domein op

Dat is alles. Het profiel kan worden opgeslagen, ondertekend en verspreid naar apparaten.

Wanneer het profiel klaar is, moet het worden gedownload op de Mac en geĆÆnstalleerd. Tijdens de installatie moet je de username_ldap en password_ldap van de gebruiker opgeven:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

iOS

Het proces is vergelijkbaar met macOS. Je moet een profiel gebruiken (je kunt hetzelfde profiel als voor macOS gebruiken. Hoe je een profiel aanmaakt in Apple Configurator, zie hierboven).

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

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

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

Mogelijke vragen

V: hoe geef je een profiel/certificaat aan een medewerker?

A: Alle certificaten/profielen bewaar ik op FTP met toegang via het web. Ik heb een gastnetwerk opgezet met een snelheidsbeperking en alleen internettoegang, met uitzondering van FTP.
De authenticatie houdt 2 dagen stand, waarna deze wordt gereset en de klant zonder internet blijft. Dus wanneer een medewerker zich wil verbinden met WiFi, maakt hij eerst verbinding met het gastnetwerk, gaat naar FTP, downloadt het benodigde certificaat of profiel, installeert deze en kan dan verbinding maken met het bedrijfsnetwerk.

V: Waarom geen schema met MSCHAPv2 gebruiken? Dat is toch veiliger!

A: Ten eerste werkt zo'n schema goed op NPS (Windows Network Policy System); in onze implementatie moet LDAP (FreeIpa) aanvullend worden ingesteld en moeten de wachtwoord-hashes op de server worden opgeslagen. Aanvullende instellingen zijn ongewenst, omdat dit verschillende synchronisatieproblemen kan veroorzaken. Ten tweede is de hash MD4, wat de veiligheid niet aanzienlijk verhoogt.

V: Is het mogelijk om apparaten te autoriseren op basis van MAC-adressen?

A: NEE, dat is niet veilig; een kwaadwillende kan het MAC-adres vervalsen, en bovendien wordt autorisatie op basis van MAC-adressen niet door veel apparaten ondersteund.

V: Waarom moeten we eigenlijk al die certificaten gebruiken? Je kunt ook zonder ze verbinden.

A: Certificaten worden gebruikt om de server te verifiĆ«ren. Dit betekent dat een apparaat bij het verbinden controleert of het de server is die vertrouwd kan worden of niet. Als dat zo is, gaat de authenticatie verder; als dat niet zo is, wordt de verbinding verbroken. Verbinden zonder certificaten is mogelijk, maar als een kwaadwillende of een buur zijn eigen radius-server en toegangspunt met dezelfde naam als de onze opzet, kan hij gemakkelijk de inloggegevens van de gebruiker onderscheppen (vergeet niet dat deze in open tekst worden verzonden). Wanneer een certificaat wordt gebruikt, ziet de vijand in zijn logs alleen onze fictieve gebruikersnamen — guest of client — en een fout zoals — Unknown CA Certificate.

Nog wat over macOSGewoonlijk wordt op macOS het besturingssysteem opnieuw geĆÆnstalleerd via internet. In de herstelmodus moet de Mac verbinding maken met WiFi, en hier werkt ons bedrijfs-WiFi of het gastnetwerk niet. Persoonlijk heb ik een ander netwerk opgezet, gewoon met WPA2-PSK, verborgen, alleen voor technische operaties. Of je kunt ook vooraf een opstartbare USB-stick met het systeem maken. Maar als de Mac na 2015 is, moet je ook een adapter voor deze USB-stick vinden)

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster