Є бездротова точка доступу WiFi що має декілька віртуальних WiFi мереж котрі розділені за допомогою VLAN. Так є корпоративна мережа з доступом до серверів компанії, є звичайна мережа корпоративних користувачів для доступу до мережі інтернет тільки, ні і є гостьова мережа з певними обмеженнями.
Віртуальні WiFi:
- lexxai
- lexxai-co
- lexxai-guest
- lexxai_5g
- lexxai-co_5g
Корпоративна WiFi мережа використовує доступ за технологією
WPA2-EAP, з авторизацією в корпоративному
FreeRadius
сервері. Гостьова мережа має доступ з відомим ключем WPA2-PKS, але з Captive
Portal. Додаткові мережі що працюють у діапазоні 5ГГц мають суфікс '_5g'.
Налаштування FreeRadius
Усі віртуальні wifi мережі налаштовані з підключенням до спільного Radius сервера, як різні клієнти.
FreeRadius clients |
Кожен користувач має персональний сертифікат котрий згенерований корпоративним центром сертифікації.
користувачів персональні сертифікати |
Налаштування FreeRADIUS: EAP
FreeRADIUS EAP |
Сертифікати користувачів
Таким чином WiFi авторизацію пройдуть тільки клієнти у котрих налаштовані сертифікати у мобільних пристроях.
Експортування сертифікату з ключем в форматі PKCS#12 .p12 |
Але є але, усі сертифікати виданні тим центром сертифікації що вказаний у налаштуваннях FreeRADIUS будуть підключатися до усіх мереж WiFi що використовують цей RADIUS сервер, за виключенням тих сертифікатів що були додані до файлу відкликання (SSL Revocation List).
Розподілення доступу
Для розподілення користувачів, треба створити файл поліції у теці в FreeRadius - policy.d.
touch /usr/local/etc/raddb/policy.d/lexxai-corporate
vi /usr/local/etc/raddb/policy.d/lexxai-corporate
lexxai-corporate:
filter_lexxai_corporate {
if ( &request:Called-Station-Id =~ /^[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}-[0-9a-f]{2}
:lexxai-co(_5g)?$/i ){
if ( &TLS-Client-Cert-Common-Name == &User-Name && &TLS-Client-Cert-Common-Name =~ /^wifi-lexxai-co[_-]{1}.*
$/i ) {
noop
}else{
reject
}
}
}
Додати створену поліцію (filter_lexxai_corporate) до налатування розділу post-auth в файлі /usr/local/etc/raddb/sites-enabled/default
Додавання в post-auth фільтра filter_lexxai_corporate |
Таким чином, після авторизації користувача буде зроблена додаткова перевірка частини імені користувача 'lexxai-co' з назвою віртуальної мережі Wifi.
Назва передається у атрибуті Called-Station-Id у вигляді XX-XX-XX-XX-XX-XX:lexxai-co, де XX...XX це мак адрес.
Ім'я користувача має спів падати з тим що записано у сертифікаті:
&TLS-Client-Cert-Common-Name
== &User-Name
І це ім'я має починатися з "wifi-lexxai-co".
Тільки виконання всіх цих умов надає доступ до корпоративної мережі "lexxai-co".
P.S. Якщо змінити налаштування FreeRadius у графічному інтерфейсі pfSense то файл /usr/local/etc/raddb/sites-enabled/default буде перезаписаний, і треба знову додати фільтр у розділ post-auth.
Для автоматизацї додав скрипт:
#!/bin/sh WDIR=`dirname ${0}` RADD=/usr/local/etc/raddb if [ ! -f "${RADD}/policy.d/lexxai-corporate" ];then echo "policy not exist" cp "${WDIR}/ese-corporate" "${RADD}/policy.d/ese-corporate" fi if [ -f "${RADD}/policy.d/ese-corporate" ];then POLAPPLY=`grep filter_lexxai_corporate "${RADD}/sites-enabled/default"` if [ -z "${POLAPPLY}" ];then echo "RADIUS policy was not applied" patch -f -s "${RADD}/sites-enabled/default" < "${WDIR}/def.diff" if [ -f "${RADD}/sites-enabled/default.orig" ];then rm "${RADD}/sites-enabled/default.orig" fi /usr/local/etc/rc.d/radiusd.sh restart > /dev/null fi else echo "policy STILL not exist !!!" fiДе def.diff результат роботи команти diff -u sites-enabled/default sites-enabled/default.orig. У мене це так, у Вас буде інше:
--- default.orig 2020-09-21 10:57:54.480212000 +0300 +++ default 2020-09-21 11:03:11.773411000 +0300 @@ -148,6 +148,7 @@ # State := "0x%{randstr:16h}" # } # } + filter_lexxai_corporate update { &reply: += &session-state: }Додав до розкладу */5 через crone.
Немає коментарів:
Дописати коментар