
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.
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 -yDe pakketten bevatten versie 3.0.13. De laatste versie kan worden gedownload van
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 -XEn maak een testverbinding met localhost.
radtest steve testing 127.0.0.1 1812 testing123We 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/ldapEn 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:
makeKlaar. 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:

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

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:

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:



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.



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).

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.



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:

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:

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 certificaat



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


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:

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 Configurator

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:



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:






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
