Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Opisano już kilka przykładów organizacji korporacyjnego WiFi. Tutaj opiszę jak zaimplementowałem podobne rozwiązanie i problemy jakie napotkałem przy łączeniu się na różnych urządzeniach. Wykorzystamy istniejący LDAP ze stałymi użytkownikami, zainstalujemy FreeRadius i skonfigurujemy WPA2-Enterprise na kontrolerze Ubnt. Wszystko wydaje się proste. Zobaczmy…

Trochę o metodach EAP

Zanim przystąpimy do zadania, musimy zdecydować, jaką metodę uwierzytelniania zastosujemy w naszym rozwiązaniu.

Z Wikipedii:

EAP to platforma uwierzytelniania często używana w sieciach bezprzewodowych i połączeniach punkt-punkt. Format został po raz pierwszy opisany w dokumencie RFC 3748 i zaktualizowany w dokumencie RFC 5247.
Protokół EAP służy do wybierania metody uwierzytelniania, przesyłania kluczy i przetwarzania tych kluczy za pomocą wtyczek zwanych metodami EAP. Istnieje wiele metod EAP, zarówno zdefiniowanych za pomocą samego protokołu EAP, jak i tych udostępnianych przez poszczególnych dostawców. EAP nie definiuje warstwy łącza, definiuje jedynie format wiadomości. Każdy protokół korzystający z protokołu EAP ma swój własny protokół enkapsulacji wiadomości EAP.

Same metody:

  • LEAP jest zastrzeżonym protokołem opracowanym przez firmę CISCO. Znaleziono luki. Obecnie nie zaleca się stosowania
  • Protokół EAP-TLS jest dobrze obsługiwany przez dostawców rozwiązań bezprzewodowych. Jest to protokół bezpieczny, ponieważ jest następcą standardów SSL. Konfiguracja klienta jest dość skomplikowana. Oprócz hasła potrzebny jest certyfikat klienta. Obsługiwane w wielu systemach
  • EAP-TTLS - szeroko obsługiwany w wielu systemach, zapewnia dobre bezpieczeństwo przy użyciu certyfikatów PKI tylko na serwerze uwierzytelniającym
  • EAP-MD5 to kolejny otwarty standard. Zapewnia minimalne bezpieczeństwo. Luka w zabezpieczeniach, nie obsługuje wzajemnego uwierzytelniania i generowania kluczy
  • EAP-IKEv2 - oparty na protokole Internet Key Exchange w wersji 2. Zapewnia wzajemne uwierzytelnianie i ustanawianie klucza sesji pomiędzy klientem a serwerem
  • PEAP to wspólne rozwiązanie firm CISCO, Microsoft i RSA Security jako otwarty standard. Szeroko dostępny w produktach, zapewnia bardzo dobre bezpieczeństwo. Podobny do EAP-TTLS, wymagający jedynie certyfikatu po stronie serwera
  • PEAPv0/EAP-MSCHAPv2 — po EAP-TLS jest to drugi powszechnie używany standard na świecie. Używana relacja klient-serwer w Microsoft, Cisco, Apple, Linux
  • PEAPv1/EAP-GTC — stworzony przez Cisco jako alternatywa dla PEAPv0/EAP-MSCHAPv2. Nie chroni w żaden sposób danych uwierzytelniających. Nieobsługiwane w systemie operacyjnym Windows
  • EAP-FAST to metoda opracowana przez Cisco w celu skorygowania wad LEAP. Używa poświadczeń dostępu chronionego (PAC). Całkowicie niedokończony

Spośród całej tej różnorodności wybór wciąż nie jest duży. Wymagana metoda uwierzytelniania: dobre bezpieczeństwo, obsługa na wszystkich urządzeniach (Windows 10, macOS, Linux, Android, iOS) i tak naprawdę im prościej, tym lepiej. Dlatego wybór padł na EAP-TTLS w połączeniu z protokołem PAP.
Może pojawić się pytanie – po co używać PAP? W końcu przesyła hasła w postaci zwykłego tekstu?

Tak to prawda. Komunikacja pomiędzy FreeRadius i FreeIPA będzie przebiegać dokładnie w ten sposób. W trybie debugowania możesz śledzić sposób wysyłania nazwy użytkownika i hasła. Tak, i pozwól im odejść, tylko Ty masz dostęp do serwera FreeRadius.

Możesz przeczytać więcej o działaniu protokołu EAP-TTLS tutaj

Wolny PROMIEŃ

Zaktualizujemy FreeRadius do CentOS 7.6. Nie ma tu nic skomplikowanego, instalujemy to w zwykły sposób.

yum install freeradius freeradius-utils freeradius-ldap -y

Spośród pakietów zainstalowana jest wersja 3.0.13. Te ostatnie można zabrać o godz https://freeradius.org/

Po tym FreeRadius już działa. Możesz odkomentować tę linię w pliku /etc/raddb/users

steve   Cleartext-Password := "testing"

Uruchom na serwerze w trybie debugowania

freeradius -X

I wykonaj połączenie testowe z localhost

radtest steve testing 127.0.0.1 1812 testing123

Otrzymaliśmy odpowiedź Otrzymano identyfikator akceptacji dostępu 115 z 127.0.0.1:1812 do 127.0.0.1:56081 długość 20, oznacza to, że wszystko jest w porządku. Zacząć robić.

Podłączenie modułu ldap.

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

I natychmiast to zmienimy. Potrzebujemy FreeRadius, aby móc uzyskać dostęp do FreeIPA

włączone mody/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}})"
}
...

Uruchom ponownie serwer Radia i sprawdź synchronizację użytkowników LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Edycja eap w włączone mody/eap
Tutaj dodamy dwie instancje eap. Różnią się jedynie certyfikatami i kluczami. Poniżej wyjaśnię, dlaczego tak jest.

włączone mody/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"
           }
}

Następnie edytujemy włączone/domyślnie z witryną. Interesują mnie sekcje autoryzacji i uwierzytelniania.

włączone/domyślnie z witryną

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
}

W sekcji autoryzacji usuwamy wszystkie moduły, których nie potrzebujemy. Zostawiamy tylko ldap. Dodaj weryfikację klienta według nazwy użytkownika. Dlatego właśnie dodaliśmy powyżej dwa wystąpienia eap.

Wiele EAPFaktem jest, że podłączając niektóre urządzenia będziemy korzystać z certyfikatów systemowych i określać domenę. Posiadamy certyfikat i klucz od zaufanego urzędu certyfikacji. Osobiście moim zdaniem ta procedura połączenia jest prostsza niż wrzucanie certyfikatu z podpisem własnym na każde urządzenie. Ale nawet bez certyfikatów z podpisem własnym nadal nie można było wyjechać. Urządzenia Samsung i Android =< 6 wersji nie wiedzą, jak korzystać z certyfikatów systemowych. Dlatego tworzymy dla nich osobną instancję eap-guest z certyfikatami z podpisem własnym. W przypadku wszystkich pozostałych urządzeń użyjemy klienta eap z zaufanym certyfikatem. Nazwa użytkownika jest określana w polu Anonimowy podczas podłączania urządzenia. Dozwolone są tylko 3 wartości: Gość, Klient i puste pole. Cała reszta jest odrzucana. Można to skonfigurować w zasadach. Podam przykład nieco później.

Edytujmy sekcje autoryzacji i uwierzytelniania w dostępny na miejscu/tunel wewnętrzny

dostępny na miejscu/tunel wewnętrzny

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
}

Następnie należy określić w zasadach jakich nazw można używać do logowania anonimowego. Redagowanie polityka.d/filter.

Musisz znaleźć linie podobne do tej:

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

A poniżej w elsif dodaj niezbędne wartości:

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

Teraz musimy przejść do katalogu certyfikaty. Tutaj musimy umieścić klucz i certyfikat z zaufanego urzędu certyfikacji, który już posiadamy, oraz wygenerować certyfikaty z podpisem własnym dla eap-guest.

Zmiana parametrów w pliku 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"

Te same wartości zapisujemy w pliku serwer.cnf. Tylko się zmieniamy
Nazwa zwyczajowa:

serwer.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"

Tworzymy:

make

Gotowy. Otrzymane serwer.crt и klucz.serwera Zarejestrowaliśmy się już powyżej w eap-guest.

Na koniec dodajmy do pliku nasze punkty dostępu klient.conf. Mam ich 7. Aby nie dodawać każdego punktu z osobna zarejestrujemy tylko sieć w której się znajdują (moje punkty dostępowe są w osobnym VLAN-ie).

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

Kontroler Ubiquiti

Tworzymy osobną sieć na kontrolerze. Niech będzie to 192.168.2.0/24
Przejdź do ustawień -> profil. Stwórzmy nowy:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Zapisujemy adres i port serwera Radia oraz hasło, które zostało zapisane w pliku klienci.konf:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Utwórz nową nazwę sieci bezprzewodowej. Wybierz WPA-EAP (Enterprise) jako metodę uwierzytelniania i określ utworzony profil promienia:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Zapisujemy wszystko, stosujemy i ruszamy dalej.

Konfigurowanie klientów

Zacznijmy od najtrudniejszej części!

Windows 10

Trudność polega na tym, że Windows nie wie jeszcze, jak połączyć się z firmową siecią Wi-Fi za pośrednictwem domeny. Dlatego musimy ręcznie przesłać nasz certyfikat do zaufanego magazynu certyfikatów. Tutaj możesz użyć dokumentu z podpisem własnym lub dokumentu otrzymanego od urzędu certyfikacji. Użyję tego drugiego.

Następnie musisz utworzyć nowe połączenie. Aby to zrobić, przejdź do Ustawienia sieci i Internetu -> Centrum sieci i udostępniania -> Utwórz i skonfiguruj nowe połączenie lub sieć:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Ręcznie wpisujemy nazwę sieci i zmieniamy typ zabezpieczeń. Następnie kliknij zmienić ustawienia połączenia i w zakładce Bezpieczeństwo wybierz uwierzytelnianie sieciowe - EAP-TTLS.

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przejdź do ustawień, ustaw poufność uwierzytelniania - klient. Jako zaufany urząd certyfikacji wybierz dodany przez nas certyfikat, zaznacz opcję „Nie wysyłaj zaproszenia do użytkownika, jeśli serwer nie może zostać autoryzowany” i wybierz metodę uwierzytelnienia - hasło w postaci zwykłego tekstu (PAP).

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Następnie przejdź do dodatkowych parametrów i zaznacz pole „Określ tryb uwierzytelniania”. Wybierz „Uwierzytelnianie użytkownika” i kliknij zapisz dane uwierzytelniające. Tutaj musisz wprowadzić nazwę użytkownika_ldap i hasło_ldap

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Zapisujemy, aplikujemy, zamykamy wszystko. Możesz połączyć się z nową siecią.

Linux

Testowałem na Ubuntu 18.04, 18.10, Fedora 29, 30.

Najpierw pobierz certyfikat dla siebie. W Linuksie nie znalazłem czy można korzystać z certyfikatów systemowych i czy w ogóle istnieje taki magazyn.

Połączymy się poprzez domenę. Dlatego potrzebny jest nam certyfikat od urzędu certyfikacji, od którego zakupiono nasz certyfikat.

Wszystkie połączenia wykonujemy w jednym oknie. Wybierz naszą sieć:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

anonimowy - klient
domena — domena, dla której wydano certyfikat

Android

inny niż Samsung

Od wersji 7 przy łączeniu WiFi można korzystać z certyfikatów systemowych podając jedynie domenę:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

domena — domena, dla której wydano certyfikat
anonimowy - klient

Samsung

Jak pisałem powyżej, urządzenia Samsunga nie wiedzą, jak korzystać z certyfikatów systemowych podczas łączenia Wi-Fi, a także nie mają możliwości łączenia się przez domenę. Dlatego musisz ręcznie dodać certyfikat główny urzędu certyfikacji (ca.pem, pobierz go z serwera Radius). W tym miejscu zostanie użyty podpis własny.

Pobierz certyfikat na swoje urządzenie i zainstaluj go.

Instalowanie certyfikatuPrzedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

W takim przypadku konieczne będzie ustawienie wzoru odblokowania ekranu, kodu PIN lub hasła, jeśli nie zostało jeszcze ustawione:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Pokazałem złożoną opcję instalacji certyfikatu. Na większości urządzeń wystarczy kliknąć pobrany certyfikat.

Po zainstalowaniu certyfikatu możesz przystąpić do połączenia:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

certyfikat - wskaż ten, który zainstalowałeś
użytkownik anonimowy - gość

macOS

Urządzenia Apple mogą od razu łączyć się tylko z protokołem EAP-TLS, ale nadal musisz dostarczyć im certyfikat. Aby określić inną metodę połączenia, musisz użyć programu Apple Configurator 2. W związku z tym musisz najpierw pobrać go na komputer Mac, utworzyć nowy profil i dodać wszystkie niezbędne ustawienia Wi-Fi.

Apple ConfiguratorPrzedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Tutaj podajemy nazwę naszej sieci
Typ zabezpieczeń — WPA2 Enterprise
Akceptowane typy protokołu EAP — TTLS
Nazwa użytkownika i hasło - pozostaw puste
Uwierzytelnienie wewnętrzne – PAP
Tożsamość zewnętrzna – klient

Zakładka Zaufanie. Tutaj wskazujemy naszą domenę

Wszystko. Profil można zapisać, podpisać i rozesłać do urządzeń

Gdy profil będzie gotowy, musisz pobrać go na komputer Mac i zainstalować. Podczas procesu instalacji będziesz musiał określić usernmae_ldap i hasło_ldap użytkownika:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

iOS

Proces jest podobny do macOS. Musisz użyć profilu (możesz użyć tego samego, co w systemie macOS. Zobacz powyżej, jak utworzyć profil w Apple Configurator).

Pobierz profil, zainstaluj, wprowadź dane uwierzytelniające, połącz:

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

Przedsiębiorstwo Wi-Fi. FreeRadius + FreeIPA + Ubiquiti

To wszystko. Skonfigurowaliśmy serwer Radius, zsynchronizowaliśmy go z FreeIPA i poinstruowaliśmy punkty dostępowe Ubiquiti, aby korzystały z WPA2-EAP.

Możliwe pytania

W: jak przenieść profil/certyfikat na pracownika?

O: Wszystkie certyfikaty/profile przechowuję na FTP z dostępem przez WWW. Założyłem sieć gościnną z ograniczeniem prędkości i dostępem tylko do Internetu, z wyjątkiem FTP.
Uwierzytelnienie trwa 2 dni, po czym zostaje zresetowane i klient pozostaje bez Internetu. To. Kiedy pracownik chce połączyć się z WiFi, najpierw łączy się z siecią gościnną, loguje się na FTP, pobiera potrzebny mu certyfikat lub profil, instaluje je, a następnie może połączyć się z siecią firmową.

W: dlaczego nie skorzystać ze schematu z MSCHAPv2? to jest bezpieczniejsze!

O: po pierwsze, ten schemat działa dobrze na NPS (Windows Network Policy System), w naszej implementacji konieczne jest dodatkowo skonfigurowanie LDAP (FreeIpa) i przechowywanie skrótów haseł na serwerze. Dodać. Nie zaleca się dokonywania ustawień, ponieważ może to prowadzić do różnych problemów z synchronizacją systemu ultradźwiękowego. Po drugie, skrót to MD4, więc nie dodaje dużego bezpieczeństwa

W: Czy można autoryzować urządzenia przy użyciu adresów MAC?

O: NIE, to nie jest bezpieczne, osoba atakująca może sfałszować adresy MAC, a co więcej, autoryzacja za pomocą adresów MAC nie jest obsługiwana na wielu urządzeniach

W: Po co w ogóle korzystać z tych wszystkich certyfikatów? możesz połączyć się bez nich

O: certyfikaty służą do autoryzacji serwera. Te. Podczas łączenia urządzenie sprawdza, czy jest to serwer godny zaufania, czy nie. Jeśli tak, uwierzytelnianie jest kontynuowane; jeśli nie, połączenie zostaje zamknięte. Możesz połączyć się bez certyfikatów, ale jeśli atakujący lub sąsiad skonfiguruje w domu serwer promienia i punkt dostępowy o tej samej nazwie co nasz, może łatwo przechwycić dane uwierzytelniające użytkownika (nie zapominaj, że są one przesyłane w postaci zwykłego tekstu) . A kiedy zostanie użyty certyfikat, wróg zobaczy w swoich logach tylko naszą fikcyjną nazwę użytkownika - gość lub klient oraz błąd typu - Nieznany certyfikat CA

trochę więcej o macOSZazwyczaj w systemie macOS ponowna instalacja systemu odbywa się przez Internet. W trybie odzyskiwania komputer Mac musi być podłączony do Wi-Fi i ani nasza firmowa sieć Wi-Fi, ani sieć dla gości nie będą tutaj działać. Osobiście zainstalowałem inną sieć, zwykłą WPA2-PSK, ukrytą, tylko do operacji technicznych. Możesz także wcześniej utworzyć rozruchowy dysk flash USB z systemem. Ale jeśli Twój Mac jest starszy niż 2015, będziesz musiał także znaleźć adapter do tego dysku flash)

Źródło: www.habr.com

Dodaj komentarz