Как подружить Wi-Fi Mikrotik и TP-Link с помощью RADIUS / Хабр

Обоснование

На имеющихся беспроводных маршрутизаторах TP-Link TL-WR842ND с заводской прошивкой у нас есть возможность использовать следующие типы защиты: WPA2–PSK, WPA2–Enterprise. Остальные варианты не рассматривались из-за их неактуальности: открытая сеть не соответствует поставленной цели; WEP – давно скомпрометирован; WPA-PSK/Enterprise – есть же WPA2 c более строгим подходом к шифрации.

WPA2-PSK – использует Pre-shared key, который в общем случае устраивал бы, но так как было желание управлять допущенными к сети MAC-адресами пользователей централизованно, а не на каждой точке в отдельности, доставляет некоторое неудобство.

WPA2-Enterprise – использует RADIUS-сервер для авторизации/аутентификации; учет пользователей (accounting) не поддерживается точкой доступа TP-Link TL-WR842ND. Отправляет в запросе к RADIUS MAC-адрес пользователя – следовательно можно вести список разрешенных MAC на RADIUS-сервере. WR842ND не умеет подставлять MAC-адрес вместо имени пользователя и пароля (такая возможность есть, например, в RouterOS от Mikrotik), поэтому придется заводить учетные данные (пользователь/пароль) либо на каждого пользователя можно с привязкой к MACy, либо одну общую учетку, о которой будут осведомлены все заинтересованные пользователи, а список MAC-адресов будет вестись отдельно.

Так как централизованно управлять списком доступа на основании MAC-адресов позволяет RADIUS-сервер, то выбор защиты Wi-Fi сети пал на WPA2-Enterprise.

WPA2-Enterprise поддерживает ряд методов аутентификации EAP. Для Window актуальны EAP-TLS и EAP-PEAPv0.
EAP-TLS – поможет избавить пользователя от введения логина и пароля, но здесь встанет другая задача по разворачиванию инфраструктуры открытых ключей и распределению сертификатов. Причем встанет проблема установки сертификатов на мобильных устройствах. Хоть данный метод самый надёжный, но из-за сложности развёртывания и сопровождения для наших нужд он отпадает.

EAP-PEAPv0 с MS-CHAPv2 – от пользователя требуется доверие к точке доступа/серверу и знание связки логин/пароль. Доверие к точке доступа/серверу достигается проверкой предъявляемого сервером сертификата, либо отключением этой проверки. Суть метода состоит в создании защищённого туннеля внутри которого осуществляется аутентификация пользователя по методу MS-CHAPv2. Простое развёртывание и сопровождение, особенно если слепо доверять точке доступа/серверу. Но страдает безопасность от «активных» злоумышленников.

Похожее:  Тулякам рекомендуют платить за ЖКХ дистанционно: как это сделать - Новости Тулы и области -

Метод EAP-PEAPv0 с MS-CHAPv2 существенно проще в реализации, чем EAP-TLS и позволит организовать закрытую сеть, тем самым «любому желающему» будет гораздо сложнее, нежели просто определить разрешенный MAC-адрес, если конечно у него не будет альтернативного метода получения доступа к учетным данным.

Реализация метода EAP-PEAPv0 с MS-CHAPv2 во FreeRADIUS позволяет выдавать пользователю индивидуальную связку логин/пароль и привязывать их к MAC-адресу его оборудования. Хотя для наших целей это было признано нецелесообразным из-за дополнительной нагрузки на администраторов сети по сопровождению пользователей. Поэтому будет общий логин/пароль на всех, так как некоторые wi-fi клиенты не дают возможности оставлять данные поля пустыми.

Итог: беспроводной маршрутизатор TP-Link TL-WR842ND будет работать в режиме точки доступа с методом безопасности WPA2-Enterprise, который предполагает использование RADIUS-сервера. RADIUS-сервер на базе FreeRADIUS будет реализовывать список доступа на основе MAC-адресов и производить аутентификацию пользователей по методу EAP-PEAPv0 с MS-CHAPv2. При данном методе, пользователю необходимо доверять точеке доступа/серверу (или проверять сертификат для установки доверия) и знать учетные данные (логин/пароль) для прохождения MS-CHAPv2 аутентификации.

4 Добавляем список доступа на основе MAC-адресов

(по мотивам http://wiki.freeradius.org/guide/Mac Auth)

Конфигурация FreeRADIUS не поддерживает списка MAC-адресов из коробки. Хотя MAC-адрес можно указать как дополнительный атрибут проверки в файле /etc/freeradius/users, например:

user Cleartext-Password := "pass", Calling-Station-Id == "1a-2b-3c-4d-5e-6f"

Для запроса с именем пользователя user будет проверяться пароль и сравниваться атрибут Calling-Station-Id. Чтобы это работало в случае ЕAP-PEAP следует в файле /etc/freeradius/eap.conf установить параметр сopy_request_to_tunnel = yes в секции приведённой ниже:

eap { 
  ...
  peap {
    ...
    сopy_request_to_tunnel = yes
    ...
  }
  ... 
}

Точка доступа в запросе шлет параметр Calling-Station-Id = “MAC-адрес«, причем формат представления MAC-адреса может быть различным на разных точках доступа. Чтобы избежать проблем из-за различного представления MAC-адреса, следует их приводить к одному виду. Для этого в фйле /etc/freeradius/policy.conf имеется уже готовая процедура – rewrite.calling_station_id. Чтобы ей воспользоваться её название нужно вставить в начало секции authorize {} после объявления preprocess (если он есть) в файлах /etc/freeradius/site-available/default и /etc/freeradius/site-available/inner-tunnel следующим образом:

authorize {
  preprocess
  rewrite.calling_station_id
  ...
}

Процедура нормализует формат MAC-адреса в атрибуте Callin-Station-Id из запроса, пришедшего на сервер, к формату xx-xx-xx-xx-xx-xx – нижний регистр и все через «минус». Поэтому в файле /etc/freeradius/user следует придерживаться данного формата. В принципе уже можно делать список доступа для фильтрации по MAC.

Вариант1.

Достаточно в файл users в самое его начало добавлять нужных пользователей с параметром Calling-Station-Id, если учетные данные нужны одинаковые, то можно их просто повторить, например:

user Cleartext-Password := "pass", Calling-Station-Id == "1a-2b-3c-4d-5e-6f"
user Cleartext-Password := "pass", Calling-Station-Id == "aa-bb-cc-dd-ee-ff"
user Cleartext-Password := "pass", Calling-Station-Id == "11-22-33-44-55-66"

Тем самым на одну пару логин/пароль вешаем три различных MAC-адреса.

Вариант2.

Можно пойти другим путём и создать для списка разрешенных MAC-адресов отдельный файл. Для этого создаем в каталоге /etc/freeradius/ файл authorized_macs и объявляем его в модуле files. Для этого вставляем в конец файла /etc/freeradius/modules/files следующий кусок конфига:

#MAC Auth
files authorized_macs {
        key = "%{Calling-Station-ID}"
        usersfile = ${confdir}/authorized_macs
        compat = no
}

Чтобы проверка MAC-адресов из файла /etc/freeradius/authorized_macs выполнялась, нужно в файл /etc/freeradius/sites-available/default в секцию authorize {} после объявления rewrite.calling_station_id вставить прокомментированные строки:

authorize {
        preprocess
        rewrite.calling_station_id
        
        #
        # Здесь инициируем поиск по файлу authorized_macs
        authorized_macs
        #
        # А здесь отвергаем запрос, если поиск завершился неудачей
        if (!ok) {
          reject
        }
}

Теперь файл authorized_macs заполняем разрешенными для авторизации MAC-адресами. Каждый MAC на новой строке. Следует учитывать, что формат строго следующий: xx-xx-xx-xx-xx-xx , где x-либо цифра, либо буквы от a до f в нижнем регистре. Например:

1a-2b-3c-4d-5e-6f
aa-bb-cc-dd-ee-ff
11-22-33-44-55-66

Следует отметить, что атрибут Calling-Station-Id указанный в файле users для определённой пары логин/пароль также будет действовать, но его проверка будет осуществляться на этапе, который проходит позднее. Так что если поступит запрос со значением Calling-Station-Id, не указанном в файле authorized_macs, то этот запрос сразу отклонится, вне зависимости, что указано в файле users.

Итог: выше описаны необходимые измения в конфигурации по-умолчанию, чтобы получить требуемый функционал от freeradius. Еще нужно настроить точки доступа, куда нужно вписать IP адрес RADIUS-сервера и секретную фразу из секций client {}. Также в конфигурации описано много лишних методов аутентификации и модулей дополнительной обработки, которые можно удалить/закомментировать без ущерба функционалу. При выбранном типе аутентификации у FreeRADIUS нет возможности выдавать клиентам IP адреса и прочие сетевые настройки, это должен делать отдельный DHCP-сервер.

Настройка FreeRADIUS.

Начнем с установки и настройки FreeRADIUS сервера.

В операционной системе Gentoo это делается довольно просто, достаточно ввести команду
=====================================================
root@s2 ~ # emerge -av freeradius

These are the packages that I would merge, in order:

Calculating dependencies …done!

[ebuild N ] net-dialup/freeradius-1.0.5-r1 -edirectory
-frascend -frnothreads -frxp -kerberos -ldap -mysql pam
-postgres -snmp ssl -udpfromto 2,240 kB

Total size of downloads: 2,240 kB

Do you want me to merge these packages? [Yes/No]
=====================================================

Если планируется хранить базу пользователей во внешних базах (например, ldap, mysql или postgre), то перед сборкой RADIUS сервера надо активировать соответствующие флаги, позволяющие собрать FreeRADIUS с поддержкой mysql/postgre и/или ldap:
=====================================================
# USE=”mysql ldap” emerge -av freeradius
=====================================================

После проверки включенности нужных флагов, достаточно нажать клавишу Y и пакет будет собран и установлен в систему:
=====================================================

<….>

— !targe sym /usr/lib/rlm_digest-1.0.5.la
— !targe sym /usr/lib/rlm_detail.so
— !targe sym /usr/lib/rlm_detail-1.0.5.la
— !targe sym /usr/lib/rlm_counter.so
— !targe sym /usr/lib/rlm_counter-1.0.5.la
— !targe sym /usr/lib/rlm_checkval.so
— !targe sym /usr/lib/rlm_checkval-1.0.5.la
— !targe sym /usr/lib/rlm_chap.so
— !targe sym /usr/lib/rlm_chap-1.0.5.la
— !targe sym /usr/lib/rlm_attr_rewrite.so
— !targe sym /usr/lib/rlm_attr_rewrite-1.0.5.la
— !targe sym /usr/lib/rlm_attr_filter.so
— !targe sym /usr/lib/rlm_attr_filter-1.0.5.la
— !targe sym /usr/lib/rlm_always.so
— !targe sym /usr/lib/rlm_always-1.0.5.la
— !targe sym /usr/lib/rlm_acct_unique.so
— !targe sym /usr/lib/rlm_acct_unique-1.0.5.la
— !targe sym /usr/lib/libradius.so
— !targe sym /usr/lib/libradius-1.0.5.la
— !targe sym /usr/lib/libeap.so
— !targe sym /usr/lib/libeap-1.0.5.la
>>> original instance of package unmerged safely.
>>>

Вышеприведенный лог сборки (его конец) показывает, что FreeRADIUS 1.0.5 успешно установлен в систему (о чем сообщает строка ” net-dialup/freeradius-1.0.5-r1 merged”). Можно приступать к его настройке.

1 файл /etc/raddb/clients.conf

Для начала пропишем клиентов (в данном случае — точку доступа) в файле /etc/raddb/clients.conf
#—————————————————-
client 192.168.1.250/32 {
secret = test1234
shortname = test_ap
}
#—————————————————-

Эта запись означает, что клиент с адресом 192.168.1.250 авторизируется на RADIUS-е с паролем test1234. Имя test_ap будет использована при логировании событий, связанных с этой точкой доступа.

Не забываем сменить стандартный пароль для localhost_клиентов:
#—————————————————-
secret = very_strong_secret_password
#—————————————————-

2 файл /etc/raddb/radiusd.conf

Теперь разберемся с основным файлом конфигурации Radius-а /etc/raddb/radiusd.conf

Секция Modules{ }, раздел mschap { }

Включаем

use_mppe = yes # использовать алгоритм mppe

require_encryption = yes # использовать шифрование

require_strong = yes # только сильное шифрование

3 файл /etc/raddb/proxy.conf

Теперь открываем файл /etc/raddb/proxy.conf и добавляем в конец этого файла
#—————————————————-
realm DEFAULT {
type = radius
authhost = LOCAL
accthost = LOCAL
}
#—————————————————-

DEFAULT реалм, добавленный нами, позволяет всем аккаунтам, которые не попали ни в один вышезаданный реалм, проверяться на локальном радиусе. В нашем случае это означает, что все windows-аккаунты с отрезанной доменной частью будут проверяться локально.

4 файл /etc/raddb/eap.conf

Переходим к настройке протокола EAP. Его настройки располагаются в отдельном файле, который, в свою очередь, подключается к основному /etc/raddb/radiusd.conf вот такой конструкцией:
#—————————————————-
$INCLUDE ${confdir}/eap.conf
#—————————————————-

Открываем /etc/raddb/eap.conf

В секции eap{ }
#—————————————————-
default_eap_type = peap # по-умолчанию, используем EAP-PEAP
#—————————————————-

Раскомментируем секцию, относящуюся к peap:
#—————————————————-
peap {
default_eap_type = mschapv2
}
#—————————————————-

Но этого недостаточно для функционирования PEAP, нам также необходимо активировать (раскомментировать) секцию, отвечающую за EAP-TLS:
#—————————————————-
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem

certificate_file = ${raddbdir}/certs/cert-srv.

В данном случае использованы цифровые сертификаты, сгенерированные автоматически, при установке пакета freeradius. Можно, конечно, создать собственные сертификаты, подписанные своим (или сторонним) сертификационным центром, но для простоты объяснения, этот этап опущен (он будет подробно расписан в следующей части статьи). Для работы RADIUS-сервера для обеспечения работы EAP-PEAP протокола, вышеприведенных настроек будет достаточно.

6 права доступа к /etc/raddb/

Пара слов о безопасности. При установке пакета freeradius создается пользователь radiusd и группа radiusd, которая является основной для этого пользователя. Права на директорию конфигурационных файлов RADIUS устанавливаются следующие:
=====================================================
# /bin/ls -l /etc | grep raddb
drwxr-x— 3 root radiusd 4096 Oct 12 15:10 raddb
=====================================================

7 запуск radiusd в режиме отладки

На этом настройка FreeRadius сервера завершена. Можно запустить его в режиме отладки командой

# /usr/sbin/radiusd -fX

Настройка точки доступа.

Здесь описывается лишь настройка точки доступа в качестве Radius-клиента. Разумеется, интерфейсы точек доступа разных производителей будут выглядеть по-разному, но общие принципы настроек изменяться не будут.

Надо сделать следующее:

  • включить WPA;
  • выбрать тип шифрования (AES или TKIP)
  • прописать адрес RADIUS-сервера
  • прописать пароль доступа (shared secret) к RADIUS-серверу

Вводим SSID беспроводной сети (WPA-PEAP), активируем “Security” и жмем кнопку “Configure Security”.

В появившемся окне выбрать WPA RADIUS в пункте “Security Mode”. Далее алгоритм шифрования — установить AES (или TKIP, если клиентское оборудование AES не поддерживает). Далее вводим адрес машины, где установлен RADIUS сервер и порт, по которому оный принимает запросы (порт 1812 — является стандартным).

Осталось задать “Shared Secret” (пароль на подключение) и все — настройка точки доступа на этом завершена.

Реализация

Демон FreeRADIUSa после установки сразу же стартует, то есть после выполнения команды apt-get install freeradius мы имеем на выходе запущенный RADIUS-сервер. Официальная документация рекомендует вносить как можно меньше изменений в исходную конфигурацию, ибо она продумана для многих типичных задач RADIUS-сервера. FreeRADIUS «из коробки» уже умеет работать с WPA2-Enterprise, в том числе и с EAP-PEAPv0 c внутритуннельной аутентификацией MS-CHAPv2. Поэтому настройка FreeRADIUS заключается в том, чтобы создать собственный сертификат сервера, завести клиентов (точки доступа) , завести учетные данные для MS-CHAPv2 и добавить возможность фильтрации запросов по MAC-адресами из разрешенного списка.

Следует отметить, что приведенные команды и фрагменты конфигурации тестировались на Debian 7.5 c FreeRADIUS 2.1.12 dfsg-1.2

1 Создание production-сертификатов

Так как большинство методов корпоративного WPA2 требуют наличия сертификата и закрытого ключа как минимум на сервере, то придется его создать. Чтобы создать самоподписанный сертификат нам нужен сертификат и закрытый ключ собственного удостоверяющего центра, которые тоже придется создать.

Инструменты для создания сертификатов нужных freeradius у Debian лежат по пути /usr/share/doc/freeradius/examples/certs. Содержимое этого каталога следует скопировать в /etc/freeradius/certs.
Необходимы файлы:

А также можно скопировать README, в котором расписано что и зачем нужно и как этим пользоваться, поэтому дальше пойдут необходимые команды с краткими пояснениями, за более подробной инфой в README.

Для работы скриптов понадобится openssl и make.

Создаем файл с параметрами Диффи-Хеллмана, если он вдруг отсутствует в каталоге /etc/freeradius/certs:

# make dh

Результат работы: файл dh

Создаём корневой сертификат или сертификат удостоверяющего центра. Если до этого уже были какие-то сертификаты (обычно тестовые), то удаляем:

# rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*

Редактируем под себя файл ca.cnf. Следует обратить внимание на default_md = md5 (лучше поставить sha1), default_days = 365 ( возможно через год не захочется генерировать новый сертификат, тогда лучше ставить побольше), input_password/output_password и нужно отредактировать под себя всю секцию [certificate_authority].

Далее выполняем:

# make ca.pem
# make ca.der

Результаты работы: ca.pem, ca.key и ca.der – сертификат удостоверяющего центра, его закрытый ключ и сертификат в формате понятном для Windows соответсвенно.

Создание серверного сертификата:
Редактируем под себя файл server.cnf. Следует обратить внимание на default_md = md5 (лучше поставить sha1), default_days = 365 ( возможно через год не захочется генерировать новый сертификат, тогда лучше ставить побольше), input_password/output_password и нужно отредактировать под себя всю секцию [server]. Важно чтобы значение commonName отличалась от соответствующего сертификата удостоверяющего центра.

Далее выполняем:

# make index.txt
# make serial
# make server.pem

Результат работы: помимо прочих файлы server.pem и server.key – сертификат и закрытый ключ сервера.

В конфигурации пути к сертификатам сгенерированным в папке /etc/freeradius/certs прописаны по умолчанию.

Если был изменён пароль на закрытый ключ сервера (output_password), то его придется указать в конфиге. А также нужно закомментировать путь к скрипту создания временных сертификатов. Это делается в файле /etc/freeradius/eap.conf в следующей секциии:

eap {
  ...
  tls { 
    ...
    private_key_password=пароль 
    ...
  # make_cert_command = "${certdir}/bootstrap"
    ...
  }
  ...
}

Настройка беспроводного клиента.

WiFi карта подключена к компьютеру под управлением Windows XP PRO SP2. Настройка производится в родной Windows Zero Config утилите.

Жмем на “изменить порядок предпочтения сетей”.

В закладке “беспроводные сети” щелкаем на кнопку “Добавить”.

Попадаем в окно свойств беспроводной сети.

Закладка “связи”. Указываем нужное имя сети (в нашем случае WPA-PEAP) и выбираем тип шифрования данных (AES или TKIP). Разумеется, он должен совпадать с тем, что был указан в точке доступа.

Переходим на закладку “Проверка подлинности”. В типе EAP ставим “Protected EAP (PEAP)”. После чего жмем на кнопку “Свойства”.

В следующем окошке снимаем галку с “проверять сертификат сервера”. Так как сертификаты у нас самосгенеренные при установке FreeRadius, Windows не сможет проверить их валидность (это будет показано чуть ниже).

Далее, выбираем “Метод проверки подлинности”, ставим там “Secured password (EAP-MSCHAP v2). Если тут же нажать кнопку “настроить”, то

Добавление FreeRadius в автостарт

Осталось лишь остановить FreeRADIUS сервер, запущенный в режиме отладки, добавить его в автостарт…
=====================================================
# rc-update add radiusd default
* radiusd added to runlevel default
=====================================================

…для того, чтобы radiusd сервис запускался при старте системы, и запустить его (однократно) в нормальном режиме:
=====================================================
# /etc/init.d/radiusd start
* Starting radiusd … [ ok ]
=====================================================

Все, настройка системы на этом завершена.

Aaa process

In RADIUS, authentication and authorization are done by lookup in a database, and accounting is done by recording usage information there, too.

The sequence of events in the life-cycle of a RADIUS-mediated WiFi connection are as follows:

Radiuspicking auth-typeauthenticating

Официальная WiKi FreeRADIUS настоятельно рекомендует новичкам прочитать эту страничку
How things work in RADIUSPicking an Auth-TypeAuthenticating a userInsufficient information
.

:!: Вот мой вольный перевод этой статьи, за достоверность не ручаюсь.

И на всякий случай синхронизирую термины:


Большинство проблем с конфигурацией связаны с непониманием концепции FreeRADIUS. Редактирование конфигурационных файлов и перебор возможных опций не поможет понять концепцию.

Ни вы, ни радиус не знает и не решает, что клиент вам пришлет в запросе. Ответственность за то, что содержится в запросе лежит 100% на клиенте.

Радиус сервер смотрит на запрос и говорит:

Хмм... Могу ли я справится с этим запросом?

Ответ на этот вопрос зависит от того, какие типы аутентификации вы включили, что сервер может найти в базе данных, и что содержится в запросе.

Сервер начинает опрашивать модули этапа авторизации (в конфиге есть отдельная секция authorize {}):

Модуль Unix, можешь ли ты обработать это?
Модуль Pap, можешь ли ты обработать это?
Модуль Mschap, можешь ли ты обработать это?

В какой-то момент один из модулей скажет:

Да, я вижу в запросе нечто, что могу распознать. И я могу что-нибудь сделать!

Модули делают это на основании просмотра ключевых атрибутов пришедших в запросе, таких как MS-CHAP-Challenge (для MS-CHAP), или CHAP-Challenge (для CHAP), or EAP-Message (для EAP). Или же на основании предположения, что надо бы добавить что-то в каждый запрос.

Если модуль думает, что у него есть шанс чтобы ещё и аутентифицировать пользователя, он скажет:

Я не могу аутентифицировать этого пользователя сейчас ( Я просто говорю, чтобы авторизовать его)
Но мой приятель в секции Authenticate может!
Эй, добавьте  Auth-Type для меня!

Если модуль ничего не распознаёт, или знает, что нет необходимости что-то искать, то он просто ничего не делает.

В конце авторизации, сервер проверит добавлен ли Auth-Type к запросу. Если нет, то немедленно отклонит запрос.

Давайте предположим, что клиент отправил запрос с атрибутом User-Password, и модуль pap включен в секции autorize {}. Тогда pap модуль установит Auth-Type = pap.

Таким образом, сервер снова обратится к модулю pap, но уже на стадии аутентификации ( она также имеет свою секцию в конфиге authenticate {}), pap ответит:

Я вижу User-Password, который вводил пользователь.
Это замечательно, но мне нужно его с чем-то сравнить.
Ах! Другой модуль добавил «правильный» пароль для этого пользователя еще на стадии авторизации!

Итак, затем идет сравнение локального заранее известного правильного пароля с тем, который ввел пользователь (пришел в запросе). Это то, как работает аутентификация.

«правильный» пароль (заранее известный правильный пароль) был добавлен другим модулем. Например, модуль pap просто выполняет PAP аутентификацию и ничего больше. Преимущества такого подхода в том, что «правильный» пароль может быть добавлен в запрос из текстового файла users, SQL, LDAP, /etc/passwd, внешней программы и т.д. и т.п. в очень широких пределах.

Например, если подключен модуль LDAP в секции authorize {}, и сервер обрабатывает запрос, то если модуль найдет у себя запись с паролем (где-нибудь в каталоге LDAP), то он добавит этот пароль в запрос, чтобы другой модуль на этапе аутентификации мог использовать его.

Что, если клиент отправит MSCHAP запрос? Что будет с этим запросом делать радиус-сервер?

В этом случае, модуль mschap ищет в запросе атрибут MS-CHAP на этапе авторизации и когда находит устанавливает атрибут Auth-Type на себя (mschap), но уже для этапа аутентификации.
Модуль базы данных (например, такой как LDAP, выше) получает информацию о «правильном» пароле и добавляет её в запрос. Затем модуль mschap вызывается уже для процесса аутентификации. Он просматривает запрос в поисках «правильного» пароля либо в виде текста, либо в виде NT-HASH (почему? Смотрите таблицу протоколов http://deployingradius.com/documents/protocols/compatibility.html ). Если ни один требуемый вид пароля не будет предоставлен хранилищем данных, то mschap скажет:

Извините, я не могу аутентифицировать пользователя, потому что не имею достаточно информации, мне нужно проверить MSCHAP.

Но сервер уже исчерпал варианты, его единственный вариант был mschap, так как это то, что клиент послал в запросе. Mschap модуль не смог ничего сделать, потому что ему не предоставили «правильный» пароль. Таким образом сервер за неимением вариантов запрос отклоняет. MSCHAP данные могли быть корректными, но у сервера не было способа убедиться в этом. Поэтому он ответил отказом.

Summary

Even though RADIUS was initially designed for dial up access, it is still useful today especially to control access to WiFi networks. There are versions of RADIUS for Windows Server as well as Open Source Alternatives. As RADIUS is a standardized, multi-platform protocol not a specific software.

The radius protocol

RADIUS is actually a standardized protocol, not a program; it’s an interface, not an implementation. As with other Internet-related protocols, the standard is established by the Internet Engineering Task Force (IETF) and documented the following Request for Comments (RFC) specifications below:

These documents are the ultimate authority on the RADIUS protocol.

RADIUS defines a standard “conversation” for the purposes of connecting a computer to a network. One side of the conversation is the server, the other is the client.

Windows server nps radius

For restaurant owners who already use Windows Server with domain networking, NPS role can be installed and used for free. In Windows Server 2022, RADIUS is implemented by installing a Network Policy Server (NPS) role. RADIUS is a major feature of NPS.

Microsoft’s Windows Server platform provides a RADIUS server, an economical option for those already running (or planning to run) a Windows Server. Starting with Windows Server 2008, Microsoft provided the RADIUS service with its NPS role, whereas previously it was provided by the Internet Authentication Service (IAS) role. Like most other Windows Server roles, NPS configuration is GUI-based.

The RADIUS client can be defined by using a fully qualified domain name or an IP address, but groups of RADIUS clients can’t be defined by specifying an IP address range. The Enterprise and Datacenter editions allow an unlimited number of RADIUS clients and remote RADIUS server groups, and allow defining RADIUS clients via IP address ranges in addition to a domain name or single IP.

NPS supports the basic common authentication protocols: PEAP, EAP-TLS, PAP, SPAP, CHAP, MD5, MS-CHAP, MS-CHAPv2 and EAP-MD5. Additionally, Microsoft allows plug-ins of other vendors’ EAP methods on NPS. One-time password (OTP) method is valid for only one login session or transaction, on a computer system or other digital device.

OTPs avoid a number of shortcomings that are associated with traditional static password-based authentication; a number of implementations also incorporate two factor authentication by ensuring that the one-time password requires access to something a person has, such as a specific cellphone, as well as something a person knows, such as a personal identification number (PIN).

Админ тоже виноват, плохой сервис выбрал. надо исправлять ситуацию

К счастью, руководство выручило. В поисках интернет-провайдера в поисковике случайно нашло сервис авторизации у интернет-провайдера КубТел. Судя по их карте, провайдер не крупный, присутствует только в больших городах Краснодарского края. Помимо интернета, много других услуг предоставляют, но нас интересовал только интернет и сервис авторизации.

После переговоров они согласились настроить свой сервис для нашего шлюза Zyxel UAG5100 с последующим тестированием. К нашему удивлению, они блестяще справились с задачей без нытья. CNA наконец-то выскакивал на всех Apple, процесс прохождения авторизации в CNA отрабатывался отлично на всех устройствах (кроме Xiaomi по звонку).

Гости очень довольны, претензии по авторизации прекратились (кроме Xiaomi), но таких гостей просим на смс перейти.

Встречают по одёжке, провожают по уму

Сервис авторизации – самый заметный момент в гостевом Wi-Fi, фактически лицо всего Wi-Fi или заведения, куда гость пришёл. С него начинается первый выход в интернет, если что-то не так пойдёт, в зависимости от ситуации и настроения гостя, претензии польются на царя/админа/заведение или вендора.

Вендор то при чём? Captive Portal отработал, ожидает действий гостя, а он по вине оператора сервиса никак не может попасть на CNA или не те кнопки нажал. До начала конференции остаётся пара минут, гости нервничают, плохо разбираясь в ИТ, сразу винят установленное оборудование и то, на чём крутится сервис, но только не свой телефон и себя. Дома же всё отлично работает на запароленном Wi-Fi.

Гостей можно понять, они с гаджетами на ВЫ, их любые мелочи пугают, нервничают и не могут пройти авторизацию.

Предупреждение на iPhone
Предупреждение на iPhone

Примером была одна и та же картина у устройств Apple. После подключения к Wi-Fi не выскочил CNA, далее гость идёт в браузер, нажимает на любую страницу в «Избранное», получает предупреждение и не редиректит на страницу авторизации.

Следовательно, гости с Apple постоянно были в такой ситуации и VIP-персоны тоже, а жёстко критиковать они умеют…

Гости Wi-Fi при отсутствии CNA
Гости Wi-Fi при отсутствии CNA

Поэтому было критично, чтобы CNA корректно на всех устройствах выскакивал, там предупреждений нет.

Вы энтузиаст и любите самостоятельно настраивать?

Давайте рассмотрим на шлюзе Zyxel VPN300 самостоятельную настройку сервиса авторизации оператора КубТел по смс, звонку и паспорту (ваучеру) для иностранцев.

Обратимся к КубТел за получением (или покупкой) сервиса. В принципе, они могут сами всё настроить, но нам тоже можно.

Получим:

Пример настройки сервиса производился на Zyxel VPN300 с версией прошивки V5.02(ABFC.0). Рекомендуется, чтобы шлюз был готов к подключению к интернету.

Использование nebula на конкретном примере

Сейчас мы уже не будем настраивать наш межсетевой экран, так как для облачной аутентификации не играет другой роли кроме как шлюз в Интернет. Доступ в беспроводную сеть будет по-прежнему идти через точку доступа NWA210AX, а за остальное, включая аутентификацию пользователей и настройку оборудования, будет отвечать Zyxel Nebula.

В рамках данной статьи не будем детально описывать весь процесс первичной настройки сервиса Zyxel Nebula, так как он касается не только беспроводной сети, но и многих других аспектов сетевой инфраструктуры.

Будем считать, что организация уже зарегистрирована в Zyxel Nebula, уже есть учётная запись администратора и создана хотя бы одна площадка.

Настройка capsman

Типичные настройки пропускаю, есть нюансы EAP.

  1. Формат Caller ID – по MAC для привязки устройств к учетным записям

    Caller ID
    Caller ID
  2. Авторизация на Radius – EAP сквозное.

    EAP авторизация
    EAP авторизация

Настройка точки доступа для использования сервиса аутентификации

В принципе, настройка точки доступа для аутентификации со встроенным RADIUS на шлюзе Zyxel производится аналогично, как и было показано в статье Настройка WPA2 Enterprise c RADIUS

От слова к делу — настраиваем встроенный сервис radius

Начинаем с получения IP адреса. Для этого воспользуемся утилитой ZON — Zyxel One Network Utility, которая собирает данные обо всех устройствах Zyxel в доступном сегменте сети.

Примечание. На самом деле у программы ZON есть много других замечательных функций, но описание всех возможностей выходит за рамки данной статьи.Как подружить Wi-Fi Mikrotik и TP-Link с помощью RADIUS / Хабр
Рисунок 3. Утилита ZON для нашего примера

Итак, мы знаем IP адреса устройств, к которым нам предстоит подключиться.

Отказоустойчивость и второй radius сервер

Для среды production в компаниях уровня Enterprise нужно отказоустойчивое решение. Для таких целей часто используется второй сервер аутентификации.

Довольно большое распространение получили системы на базе MS Windows, где, благодаря серверной роли Network Policy Server и авторизации в Active Directory, можно настроить два сервера аутентификации для WPA2 Enterprise, и у них будет единая синхронизированная база данных пользователей и ключей.

Что касается схемы с RADIUS сервером на единственном шлюзе, то этот вариант больше подходит для небольших офисов, не имеющих собственной внутренней инфраструктуры. Проще говоря, для тех, у кого нет своих серверов и бизнес-процессы завязаны на использование облачных ресурсов.

Электронная почта, файлообмен, резервное копирование и даже бухгалтерия — всё это можно получить на внешних ресурсах. По правде говоря, в этом случае при отказе единственного межсетевого экрана офисная сеть становится практически бесполезна, и в принципе уже всё равно что там с сервисом аутентификации.

Обратите внимание. При падении службы аутентификации не происходит немедленного разрыва сетевых связей, установленных благодаря сервису аутентификации. Все уже подключённые клиенты продолжат работать в локальной сети. А вот новые подключения установить будет невозможно. В то же время наличие отказоустойчивой схемы из двух шлюзов позволит избежать подобных неприятностей.

Эту задачу можно решить другим способом — реализовать отказоустойчивую схему из двух шлюзов. В этом случае при отказе основного устройства работу подхватит резервное, и все сервисы, размещённые на сетевом шлюзе, в том числе аутентификация, продолжат работать.

Но всё можно решить ещё проще при использовании аутентификации в облачном сервисе Zyxel Nebula. В этом случае за отказоустойчивость самой системы отвечает мощный промышленный программно-аппаратный комплекс. Разумеется, серверы Nebula размещены в ЦОД, выполняются все необходимые процедуры по поддержанию заявленного уровня высокой доступности и так далее. Единственное, что требуется от локального офиса — канал в Интернет.

Пользователю остаётся только подключить устройство к облаку Zyxel Nebula и воспользоваться всеми заявленными преимуществами.

Переходим к настройке клиента

В статье Настройка WPA2 Enterprise c RADIUS была иллюстрация на примере Mac OS X. Теперь для разнообразия подключим ноутбук с Windows 10.

Нажимаем внизу в разделе уведомления на Панели задач значок запуска беспроводных сетей. В появившемся списке выбираем пункт Zyxel. Появится окно с запросом имени пользователя и персонального ключа.

Как подружить Wi-Fi Mikrotik и TP-Link с помощью RADIUS / Хабр
Рисунок 15. Настройка клиента.

Вводим необходимые реквизиты и подключаемся к системе.

Мы сейчас прошли весь этап настройки с внешним готовым сервисом RADIUS на межсетевом экране. Даже без стандартных действий для серверной системы: установки пакетов, настройки firewall, тестирования самой сервисной службы… — всё равно операция заняла достаточно много времени. Можно ли это сделать побыстрее и с меньшими трудозатратами? Можно, если использовать Zyxel Nebula. Но об этом ниже.

Проверьте — может быть radius есть в вашем шлюзе?

В шлюзах от Zyxel уже есть встроенный сервис RADIUS. То есть если используется, например, сетевой экран, то в нём уже есть всё необходимое для аутентификации WPA2 Enterprise.

Достаточно просто приобрести нужное устройство, подключиться к нему удалённо и выполнить настройки.

Практически в любой современной ИТ инфраструктуре можно встретить межсетевой экран для доступа в Интернет. В случае с оборудованием от Zyxel можно получить не только защиту от внешних (и внутренних!) атак, но и систему аутентификации WPA2 Enterprise c реквизитами для отдельных пользователей, и ничего устанавливать не надо, всё работает из коробки.

Однако, любая замечательная функция без конкретного описания так и останется потенциальной возможностью. Чтобы этого не произошло в этот раз, проиллюстрируем на примере как можно всё настроить, используя уже имеющиеся средства.

В качестве шлюза, сервера RADIUS у нас используется облачный межсетевой экран. Помимо основных обязанностей он может выполнять функции контроллера точек доступа.

Мы уже писали ранее об устройствах из этой линейке в статье Убираем старые проблемы защиты крупных и малых сетей.

Для примера такой схемы аутентификации прекрасно подойдёт USG FLEX 200 — уже не начальный уровень, но и не топовая модель в линейке. Эта модель хорошо подходит в качестве межсетевого экрана для небольших и средних офисов.

Коротко о межсетевом экране USG FLEX 200:

Как подружить Wi-Fi Mikrotik и TP-Link с помощью RADIUS / Хабр
Рисунок 1. Межсетевой экран USG FLEX 200.

В качестве точки для нашей демонстрации выберем ту же самую NWA210AX, уже знакомую нам по статье Настройка WPA2 Enterprise c RADIUS.

Коротко о точке доступа WA210AX устройстве:

Как подружить Wi-Fi Mikrotik и TP-Link с помощью RADIUS / Хабр
Рисунок 2. Точка доступа NWA210AX.

В итоге мы должны получить тот же самый результат, что и с внешним сервером, но без расходования дополнительных ресурсов на хостинг виртуальной машины и без лишних телодвижений по развёртыванию сервиса RADIUS, настройке firewalll, настройке средств безопасности и так далее.

Подводя итоги

Решить вопросы аутентификации и авторизации можно несколькими способами. Например, полностью взять инициативу на себя и реализовать сервис «с нуля», начиная от выбора аппаратного обеспечения для физического сервера (или виртуальной среды), соответствующего приложения, базы данных для хранения учётных записей, интерфейса для настройки.

Можно упростить задачу и использовать встроенные решения, как, например, в межсетевом экране USG FLEX. А может быть лучше максимально упростить задачу и просто использовать облачный сервис со всеми удобными функциями? Выбор, как всегда, за конечным потребителем.

Заключение

На этом завершается вторая часть статьи. Мы научились настраивать беспроводную сеть для работы в режиме чистого WPA с аутентификацией клиентов через EAP-PEAP, с хранением базы аккаунтов во внешней базе (в данном случае — в текстовом файле). Если не хочется связываться с собственным центром сертификации, то информации, приведенной выше, более чем достаточно для построения защищенной беспроводной сети.

Выводы

  • FreeRADIUS организован по модульному принципу. Для того чтобы FreeRADIUS имел поддержку того или иного протокола, нужно подключить/отключить модуль в конфигурации. Многие, если не все модули имеют свою секцию конфигурации в общем конфиге.

  • Поступивший запрос проходит процедуру авторизации, для настройки есть отдельная секция в конфигурационном файле authorize {}. Запрос обрабатывается попорядку перечисленными в секции модулями, модули пытаются распознать атрибуты и в случае успеха, авторизуют пользователя, указанного в запросе. По сути это означает, что в запрос добавляется атрибут Auth-Type, где указывается каким методом (модулем) производить аутентификацию. На этом же этапе модули реализующие хранилище данных ищут в своих базах данные, на указанного в запросе пользователя и также добавляют их к запросу. Если в процессе авторизации Auth-Type не установлен, то запрос откланяется. Иначе запрос переходит на этап аутентификации.

  • Методы аутентификации настраиваются в секции authenticate {}. Тут запрос поступает в модуль, который задан в атрибуте Auth-Type. На основании данных вставленных в запрос из модуля-хранилища еще на предыдущем этапе происходит сравнение атрибутов пришедших от клиента с атрибутами из хранилища. На основании этого сравнения уже принимается решение о разрешении или отклонении доступа, либо об уточнении параметров у клиента.

  • Вот такая концепция у радиус-сервера, в данном случае до безобразия упрощенная.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *