WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ужо былі апісаны некаторыя прыклады арганізацыі карпаратыўнага WiFi. Тут я распішу як рэалізаваў падобнае рашэнне і праблемы з якімі прыйшлося сутыкнуцца пры падключэнні на розных прыладах. Будзем выкарыстоўваць ужо наяўнай LDAP з заведзенымі карыстачамі, паднімем FreeRadius і наладзім WPA2-Enterprise на кантролеры Ubnt. Накшталт усё проста. Паглядзім...

Трохі аб метадах EAP

Перш чым прыступіць да выканання задачы, трэба вызначыцца які метад аўтэнтыфікацыі будзем выкарыстоўваць у нашым рашэнні.

З вікіпедыі:

EAP - фрэймворк аўтэнтыфікацыі, які часта выкарыстоўваецца ў бесправадных сетках і злучэннях кропка-кропка. Фармат быў упершыню апісаны ў RFC 3748 і абноўлены ў RFC 5247.
EAP выкарыстоўваецца для выбару метаду аўтэнтыфікацыі, перадачы ключоў і апрацоўкі гэтых ключоў якія падключаюцца модулямі званымі метадамі EAP. Існуе мноства метадаў EAP, як вызначаных разам з самім EAP, так і выпушчаных асобнымі вытворцамі. EAP не вызначае канальны ўзровень, ён толькі вызначае фармат паведамленняў. Кожны пратакол які выкарыстоўвае EAP мае ўласны пратакол інкапсуляцыі паведамленняў EAP.

Самі метады:

  • LEAP - прапрыетарны пратакол, распрацаваны CISCO. Знойдзены ўразлівасці. У цяперашні час не рэкамендуецца выкарыстоўваць
  • EAP-TLS - добра падтрымліваецца сярод вендараў бесправадных злучэнняў. З'яўляецца бяспечным пратаколам, паколькі з'яўляецца пераемнікам SSL стандартаў. Настройка кліенцкай дастаткова складаная. Патрэбен кліенцкі сертыфікат апроч пароля. Падтрымліваецца ў многіх сістэмах
  • EAP-TTLS – шырока падтрымліваецца ў многіх сістэмах, прапануе добрую бяспеку, выкарыстоўваючы PKI сертыфікаты толькі на серверы аўтэнтыфікацыі.
  • EAP-MD5 – іншы адкрыты стандарт. Прапануе мінімальную бяспеку. Уразлівы, не падтрымлівае ўзаемную аўтэнтыфікацыю і генерацыю ключоў
  • EAP-IKEv2 – заснаваны на Internet Key Exchange Protocol version 2. Забяспечвае ўзаемную аўтэнтыфікацыю і ўсталяванне сеансавага ключа паміж кліентам і серверам
  • PEAP – сумеснае рашэнне CISCO, Microsoft і RSA Security як адкрыты стандарт. Шырока даступны ў прадуктах, забяспечвае вельмі добрую бяспеку. Падобны з ​​EAP-TTLS, патрабуючы толькі сертыфікат на серверным боку
  • PEAPv0/EAP-MSCHAPv2 – пасля EAP-TLS, гэта другі шырока выкарыстоўваецца стандарт у свеце. Выкарыстоўваецца кліент-серверная ўзаемасувязь у Microsoft, Cisco, Apple, Linux
  • PEAPv1 / EAP-GTC – створаны Cisco як альтэрнатыва PEAPv0 / EAP-MSCHAPv2. Не абараняе аўтэнтыфікацыйныя дадзеныя ў любым выпадку. Не падтрымліваюцца ў Windows OS
  • EAP-FAST – метад, распрацаваны Cisco для выпраўлення недахопаў LEAP. Выкарыстоўвае Protected Access Credential (PAC). Цалкам не дапрацаваны

З усёй гэтай разнастайнасці, выбар усё ж такі не вялікі. Ад метаду аўтэнтыфікацыі патрабавалася: добрая бяспека, падтрымка на ўсіх прыладах (Windows 10, macOS, Linux, Android, iOS) і, уласна, чым прасцей, тым лепш. Таму выбар упаў на EAP-TTLS у звязку з пратаколам PAP.
Магчыма ўзнікне пытанне - Навошта ж выкарыстоўваць PAP? бо ён перадае паролі ў адкрытым выглядзе?

Так, усё дакладна. Зносіны паміж FreeRadius і FreeIPA будзе праходзіць менавіта ў так. У рэжыме дэбагу можна адсачыць як адпраўляюцца username і password. Ды і няхай адпраўляюцца, толькі ў вас ёсць доступ да сервера FreeRadius.

Падрабязней аб працы EAP-TTLS можна пачытаць тут

FreeRADIUS

FreeRadius будзем паднімаць на CentOS 7.6. Тут нічога складанага, ставім звычайным спосабам.

yum install freeradius freeradius-utils freeradius-ldap -y

З пакетаў ставіцца версія 3.0.13. Апошнюю можна ўзяць на https://freeradius.org/

Пасля гэтага FreeRadius ужо працуе. Можна ў /etc/raddb/users разкамэнтаваць радок

steve   Cleartext-Password := "testing"

Запусціць у сервер у рэжыме дэбагу

freeradius -X

І які робіцца тэставае падлучэнне з localhost

radtest steve testing 127.0.0.1 1812 testing123

Атрымалі адказ Received Access-Accept Id 115 ад 127.0.0.1:1812 to 127.0.0.1:56081 length 20, значыць усё добра. Ідзем далей.

Падлучальны модуль ldap.

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

І адразу яго зменім. Нам трэба, каб FreeRadius мог зьвяртацца да 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}})"
}
...

Перазапускаем radius-сервер і правяраем сінхранізацыю карыстачоў LDAP:

radtest user_ldap password_ldap localhost 1812 testing123

Рэдагуем eap у mods-enabled/eap
Тут дададзім два экзэмпляры eap. Яны будуць адрознівацца толькі сертыфікатамі і ключамі. Крыху ніжэй растлумачу, чаму менавіта так

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

Далей рэдагуем site-enabled/default. Цікавяць часткі authorize і authenticate.

site-enabled/default

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
}

У секцыі authorize прыбіраем усе модулі, якія нам не патрэбныя. Пакідаем толькі ldap. Дадаем праверку кліента па username. Менавіта для гэтага мы дадавалі вышэй два асобнікі eap.

Multi EAPСправа ў тым, што падлучаючы некаторыя прылады мы будзем выкарыстоўваць сістэмныя сертыфікаты і ўказваць дамен. Мы маем сертыфікат і ключ ад даверанага цэнтра сертыфікацыі. Асабіста на маю думку такая працэдура падлучэння прасцей, чым кідаць на кожную прыладу самападпісаны сертыфікат. Але і без самападпісаных сертыфікатаў усё ж не атрымалася пайсці. Samsung дэвайсы і Android = <6 версіі не ўмеюць выкарыстоўваць сістэмныя сертыфікаты. Таму для іх ствараем асобны асобнік eap-guest з самападпісанымі сертыфікатамі. Для ўсіх іншых прылад будзем выкарыстоўваць eap-client з давераным сертыфікатам. User-Name вызначаецца па полі Anonymous пры падлучэнні прылады. Дазволена выкарыстоўваць толькі 3 значэння: Guest, Client і пустое поле. Астатняе ўсё адкідаецца. Гэта настройваюцца ў палітыках. Прыклад прывяду крыху пазней

Адрэдагуем секцыі authorize і authenticate у 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-guest {
    eap-guest
  }
  Auth-Type eap-client {
    eap-client
  }
  Auth-Type PAP {
    pap
  }
  ldap
}

Далей трэба прапісаць у палітыках, якія імёны можна выкарыстоўваць для ананімнага ўваходу. Рэдагуем policy.d/filter.

Трэба знайсці радкі падобныя на гэта:

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

І ніжэй у elsif дадаць патрэбныя значэнні:

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

Цяпер нам трэба перамясціцца ў дырэкторыю сертыфікаты. Сюды трэба пакласці ключ і сертыфікат ад даверанага цэнтру сертыфікацыі, які ў нас ужо ёсць і трэба згенераваць самападпісаныя сертыфікаты для eap-guest.

Змяняны параметры ў файле 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"

Такія ж значэнні прапісваем у файле server.cnf. Змяняем толькі
агульная назва:

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"

Ствараем:

make

Гатова. Атрыманыя server.crt и server.key у нас ужо прапісаны вышэй у eap-guest.

І апошняе, дадамо нашы кропкі доступу ў файл client.conf. У мяне іх 7. Каб не дадаваць кожную кропку асобна, прапішам толькі сетку ў які яны знаходзяцца (у мяне кропкі доступу знаходзяцца ў асобным VLAN).

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

Кантролер Ubiquiti

На кантролеры паднімаем асобную сетку. Няхай будзе 192.168.2.0/24
Ідзем у налады -> профіль. Ствараем новы:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Прапісваем адрас і порт radius-сервера і пароль, які прапісвалі ў файле clients.conf:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Ствараем новае імя бесправадной сеткі. У якасці метаду аўтэнтыфікацыі выбіраемы WPA-EAP (Enterprise) і паказваем створаны radius-профіль:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Усё захоўваем, ужывальны і ідзем далей.

Настройка кліентаў

Пачнём з самага складанага!

Windows 10

Складанасць зводзіцца да таго, што Windows пакуль яшчэ не ўмее падлучацца да карпаратыўнага WiFi па дамене. Таму даводзіцца ўручную закідваць наш сертыфікат у сховішча давераных сертыфікатаў. Тут можна выкарыстоўваць як самападпісаны, так і ад цэнтра сертыфікацыі. Я буду выкарыстоўваць другі.

Далей трэба стварыць новае падключэнне. Для гэтага ідзем у параметры сеткі і Інтэрнэт -> Цэнтр кіравання сеткамі і агульным доступам -> Стварэнне і настройка новага падлучэння ці сеткі:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Уручную прапісваем імя сеткі і мяняем тып бяспекі. Пасля націскаем на змяніць параметры падключэння і ва ўладку Бяспека выбіраемы праверку сапраўднасці сеткі – EAP-TTLS.

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Заходзім у параметры, прапісваем канфідэнцыйнасць аўтэнтыфікацыі. кліент. У якасці даверанага цэнтра сертыфікацыі выбіраемы дададзены намі сертыфікат, ставім галачку "Не выдаваць карыстачу запрашэнне, калі не атрымоўваецца аўтарызаваць сервер" і метад праверкі сапраўднасці выбіраемы - незашыфраваны пароль (PAP).

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Далей заходзім у дадатковыя параметры, ставім галачку на "Пакажыце рэжым праверкі сапраўднасці". Выбіраемы пункт «Праверка сапраўднасці карыстальніка» і націскаем на захаваць уліковыя дадзеныя. Тут трэба будзе ўвесці username_ldap і password_ldap

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Усё захоўваем, ужывальны, закрываем. Можна падлучацца да новай сеткі.

Linux

Я правяраў на Ubuntu 18.04/18.10, 29/30, Fedora XNUMX, XNUMX.

Для пачатку, спампоўваем сабе сертыфікат. Я не знайшоў у Linux, ці ёсць магчымасць выкарыстоўваць сістэмныя сертыфікаты і ці ёсць тамака наогул такое сховішча.

Будзем падключацца па дамене. Таму патрэбен сертыфікат які сведчыць цэнтра, у якога быў набыты наш сертыфікат.

Усё падлучэнне робіцца ў адным акне. Выбіраемы нашу сетку:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

anonymous – client
domain - дамен, на які выпушчаны сертыфікат

Android

non-Samsung

C 7 версіі пры падлучэнні WiFi можна выкарыстоўваць сістэмныя сертыфікаты, паказаўшы толькі дамен:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

domain - дамен, на які выпушчаны сертыфікат
anonymous – client

Samsung

Як ужо пісаў вышэй, Samsung-прылады не ўмеюць выкарыстоўваць сістэмныя сертыфікаты пры падлучэнні WiFi, і ў іх няма магчымасці падлучацца па дамене. Таму трэба ўручную дадаць каранёвы сертыфікат цэнтра сертыфікацыі (ca.pem, бярэм на Radius серверы). Вось тут будзе выкарыстоўваць самападпісаны.

Спампоўваем сертыфікат сабе на прыладу і ўсталёўваны яго.

Устаноўка сертыфіката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

Я паказаў складаны варыянт усталёўкі сертыфіката. На большасці прылад дастаткова проста націснуць на скачаны сертыфікат.

Калі сертыфікат усталяваны, можна пераходзіць да падлучэння:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

сертыфікат - паказваем той, які ўсталёўвалі
ананімны карыстальнік - guest

Macos

Яблычныя прылады са скрынкі могуць падлучацца толькі да EAP-TLS, але ўсё роўна трэба закідваць ім сертыфікат. Каб паказаць іншы метад падлучэння, трэба скарыстацца Apple Configurator 2. Адпаведна трэба папярэдне спампаваць яго на мак, стварыць новы профіль і дадаць усе неабходныя налады WiFi.

Apple, канфігуратарWiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

Тут паказваем імя сваёй сеткі
Security Type – WPA2 Enterprise
Accepted EAP Types - TTLS
User Name і Password - пакідаем пустымі
Inner Authentication - PAP
Outer Identity – client

Укладка Trust. Тут паказваем наш дамен

Усё. Профіль можна захоўваць, падпісваць і распаўсюджваць на прылады

Пасля таго, як профіль готаў, яго трэба спампаваць на мак і ўсталяваць. У працэсе ўстаноўкі трэба будзе пазначыць usernmae_ldap і password_ldap карыстальніка:

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

WiFi Enterprise. FreeRadius + FreeIPA + Ubiquiti

IOS

Працэс аналагічны macOS. Трэба выкарыстоўваць профіль (можна прамы такі ж як для macOS. Як ствараць профіль у Apple Configurator, глядзець вышэй).

Спампоўваем профіль, усталёўваем, уводзім уліковыя дадзеныя, падлучаемся:

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

На гэтым усё. Мы наладзілі Radius сервер, сінхранізавалі яго з FreeIPA і паказалі кропкам доступу Ubiquiti выкарыстоўваць WPA2-EAP.

Магчымыя пытанні

У: як перадаваць профіль/сертыфікат супрацоўніку?

Аб: Усе сертыфікаты/профілі я захоўваю на фтп з доступам праз вэб. Падняў гасцявую сетку з абмежаваннем па хуткасці і доступам толькі ў інтэрнэт, за выключэннем фтп.
Аўтэнтыфікацыя трымаецца 2 дні, пасля чаго скідаецца і кліент застаецца без інтэрнэту. В.а. калі супрацоўнік жадае падлучыцца да WiFi, спачатку ён падлучаецца да гасцявой сеткі, заходзіць на фтп, спампоўвае патрэбны яму сертыфікат або профіль, усталёўвае іх, і пасля можа падлучацца да карпаратыўнай сеткі.

У: чаму не выкарыстоўваць схему з MSCHAPv2? яна ж больш бяспечная!

Аб: па-першае, такая схема добра працуе на NPS (Windows Network Policy System), у нашай рэалізацыі неабходна дадаткова наладжваць LDAP (FreeIpa) і захоўваць хэшы пароляў на серверы. Дад. налады рабіць не пажадана, т.я. гэта можа прывесці да розных праблем сіхранізацыі УАЗ. Па-другое, хэш уяўляе сабой MD4, так што гэта не асабліва павышае бяспеку

У: ці можна аўтарызоўваць прылады па mac-адрасах?

Аб: НЕ, гэта не бяспечна, зламыснік можа падмяніць мак-адрасы, і тым больш аўтарызацыя па мак-адрасах не падтрымліваецца на многіх прыладах

У: навошта ўвогуле ўсе гэтыя сертыфікаты выкарыстоўваць? можна ж і без іх падключацца

Аб: сертыфікаты выкарыстоўваюцца, каб аўтарызаваць сервер. Г.зн. прылада пры падлучэнні правярае ці той гэта сервер, якому можна давяраць ці не. Калі той, то аўтэнтыфікацыя праходзіць далей, калі не, злучэнне зачыняецца. Можна падлучацца без сертыфікатаў, але калі зламыснік ці сусед падніме ў сябе дома radius-сервер і кропку доступу з такім жа імем як у нас, ён зможа лёгка перахапіць уліковыя дадзеныя карыстальніка (не забываем, што яны перадаюцца ў адкрытым выглядзе). А калі выкарыстоўваецца сертыфікат, вораг убачыць у сябе ў логах толькі нашы выдуманыя User-Name - guest або client і памылку тыпу - Unknown CA Certificate

яшчэ крыху пра macOSЗвычайна на macOS пераўсталёўка сістэмы робіцца праз інтэрнэт. У рэжыме аднаўлення мак трэба падлучыць да WiFi, і тут не спрацуе ні наш карпаратыўны WiFi, ні гасцёўня сетка. Асабіста я падняў яшчэ адну сетку, звычайную па WPA2-PSK, утоеную, толькі для тэхнічных аперацый. Або яшчэ можна загадзя зрабіць загрузную флешку з сістэмай. Але калі мак пасля 2015 года, трэба будзе яшчэ знойдзе адаптар для гэта флэшкі)

Крыніца: habr.com

Дадаць каментар