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
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
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:
Zapisujemy adres i port serwera Radia oraz hasło, które zostało zapisane w pliku klienci.konf:
Utwórz nową nazwę sieci bezprzewodowej. Wybierz WPA-EAP (Enterprise) jako metodę uwierzytelniania i określ utworzony profil promienia:
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ć:
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.
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).
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
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ć:
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ę:
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 certyfikatu
W takim przypadku konieczne będzie ustawienie wzoru odblokowania ekranu, kodu PIN lub hasła, jeśli nie zostało jeszcze ustawione:
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:
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 Configurator
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:
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:
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