MYCSS

2020-09-11

Нотатка для себе: Обмеження доступу до WiFi корпоративгої мережі зі спілним сервером FreeRadius

Є бездротова точка доступу 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.

 

Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready