Настройка radius сервера debian
Очень часто, в качестве реализации LDAP используется Active Directory. С данным сервером не возникаем много сложностей, так как существует огромная практика у администраторов и, как следствие, множество рабочей документации. Мы же рассмотрим другую реализацию — FreeIPA, при работе с которой есть нюансы. В моих примерах команды выполняются на Rocky Linux (CentOS / Red Hat).
Предполагается, что у нас уже установлены следующие сервисы:
Наша инструкция будет разбита на подразделы:
Как будет выполняться настройка
Для выполнения задачи по настройке авторизации на WiFi через RADIUS сервер может использоваться множество решений. Какие-то из них более удобные в настройке, какие-то в эксплуатации. В данной инструкции сделан упор на максимальное удобство со стороны пользователя.
Фреймворк аутентификации EAP включает в себя множество протоколов. Одним из самых популярных является PEAP (EAP-TLS) — его поддержка реализована в большинстве устройств. Данный протокол, в свою очередь, работает совместно с такими методами аутентификации, как EAP-MSCHAPv2 и EAP-GTС.
Для работы с FreeIPA нам подойдет MSCHAP, но для его использования потребуется небольшое расширение схемы и добавление поля хранения хэша пароля. Сервер RADIUS (в нашем случае, Freeradius) будет его вытаскивать и сравнивать с хэшем введенного пароля.
Перейдем к реализации задуманного.
Настройка FreeIPA
На стороне сервера LDAP нам необходимо:
- Добавить атрибут ipaNTHash для хранения в нем хэша пароля
- Создать роли и привилегии для возможности читать данный атрибут.
- Создать сервисный аккаунт и предоставить ему права на чтение атрибута ipaNTHash.
В нашем примере будет использоваться домен dmosk.local.
Настройка атрибута ipaNTHash
Начнем с установки пакета:
yum install freeipa-server-trust-ad
Данный пакет необходим для запуска утилиты ipa-adtrust-install, с помощью которой мы создаем атрибут ipaNTHash:
Команда запросит пароль для пользователя admin:
После мы получим предупреждение о существовании файла smb.conf и о том, что команда ipa-adtrust-install его заменит. Соглашаемся на изменения:
WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing samba configuration.
Do you wish to continue? [no]: yes
На все последующие вопросы можно ответить по умолчанию, нажав Enter. Ждем окончания операции. Теперь при смене пароля или создании нового пользователя, у учетной записи будет добавлен атрибут ipaNTHash.
Чтобы в этом убедиться нужно поменяем пароль у существующей записи:
ipa user-mod test --password
* в данном примере мы работаем с учетной записью test.
Если мы создаем новую запись, необходимо сразу после этого также поменять пароль.
Теперь проверяем, что у нашей учетной записи есть нужный нам атрибут:
* в данном примере мы обращаемся к серверу LDAP localhost и вытаскиваем данные по учетной записи test. Чтобы не получать множество данных, мы фильтруем, вытаскивая только атрибут ipaNTHash.
Система запросит пароль — вводим его от учетной записи администратора FreeIPA. Мы должны получить, примерно, такой ответ:
Enter LDAP Password:
dn: uid=test,cn=users,cn=compat,dc=dmosk,dc=local
dn: uid=test,cn=users,cn=accounts,dc=dmosk,dc=local
ipaNTHash:: b1hf+P9igLWcziUv21AOuA==
* где b1hf+P9igLWcziUv21AOuA== — хэш пароля.
Создание ролей и привилегий
Нам необходимо создать настройки безопасности для возможности предоставить доступ к атрибуту ipaNTHash. Разберемся с этим по шагам.
1. Создаем разрешение:
- ipaNTHash reader — имя разрешения.
- attrs — атрибут, для которого действует разрешение.
- type — тип учетной записи, для которой будет применимо разрешение.
- right — уровень прав.
2. Добавляем привилегию:
* данной командой мы создадим привилегию с именем Radius services.
3. Добавим созданное разрешение в созданную привилегию:
4. Создадим роль:
* где Radius server — имя роли.
5. Добавим в созданную роль созданную привилегию:
Итого, мы получили роль Radius server, в которую входит привилегия Radius services, в которую входит разрешение ipaNTHash reader для чтения атрибута ipaNTHash.
Создание и настройка сервисной учетной записи
Создадим пользователя, с помощью которого Freeradius будет подключаться к FreeIPA и получать доступ к атрибуту ipaNTHash.
* где freeradius — имя сервисного аккаунта; ipa-server.dmosk.local — FQDN-имя сервера IPA.
* в данном примере файл будет сохранен по пути /root/radiusd.keytab.
kinit -t /root/radiusd.keytab -k freeradius/ipa-server.dmosk.local
Мы должны увидеть что-то на подобие:
Default principal: freeradius/[email protected]
Valid starting Expires Service principal
08/23/2021 12:48:14 08/24/2021 12:48:14 krbtgt/[email protected]
Также выполним who a mi в LDAP:
ldapwhoami -Y GSSAPI
Ответ должен быть на подобие:
SASL/GSSAPI authentication started
SASL username: freeradius/[email protected]
SASL SSF: 256
SASL data security layer installed.
dn: krbprincipalname=freeradius/[email protected],cn=services,cn=accounts,dc=dmosk,dc=local
* freeradius/[email protected],cn=services,cn=accounts,dc=dmosk,dc=local — полный путь учетной записи в LDAP. Он нам понадобиться для дальнейшей настройки.
Теперь зададим пароль для сервисного аккаунта. Для этого создаем ldif файл:
dn: krbprincipalname=freeradius/[email protected],cn=services,cn=accounts,dc=dmosk,dc=local
changetype: modify
add: objectClass
objectClass: simpleSecurityObject
-
add: userPassword
userPassword: my_password
* где krbprincipalname указывает на полный путь к сервисной учетной записи, а userPassword — пароль, который мы хотим ей задать.
Применяем настройки из файла:
modifying entry "krbprincipalname=freeradius/[email protected],cn=services,cn=accounts,dc=dmosk,dc=local"
Проверим, выполнив запрос:
Система от нас потребует пароль для сервисной учетной записи (в нашем примере, my_password) — вводим его. Мы должны получить что-то на подобие:
Снова получаем билет для привилегированного пользователя:
Добавляем сервисный аккаунт в роль Radius server:
С настройкой FreeIPA мы закончили и можем переходить к настройке Freeradius.
Настройка сервера RADIUS
Устанавливаем дополнение к Freeradius для работы с ldap:
yum install freeradius-ldap
Активируем установленный модуль:
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Открываем на редактирование файл ldap:
Внесем некоторые изменения в настройки конфигурации:
- server — перечисление наших серверов FreeIPA. Если их несколько, создаем несколько строчек.
- identity — путь до учетной записи пользователя, под которой мы будем подключаться к Freeradius.
- password — пароль для учетной записи, которую мы используем в опции identity.
- base_dn — базовый путь в ldap для поиска объектов.
- control:NT-Password — атрибут, в котором Freeradius должен найти пароль пользователя.
Настраиваем модуль EAP:
Достаточно внести изменение в одной строке:
systemctl restart radiusd
Для проверки устанавливаем утилиту freeradius-utils:
yum install freeradius-utils
И вводим команду:
radtest -t mschap test test12345 localhost:1812 0 testing123
* где test и test12345 — логин и пароль для учетной записи во FreeIPA. Именно для нее в данной инструкции выше был создан хэш пароля.
Мы должны увидеть что-то на подобие:
Проверка прошла успешно.
Что дальше
Описание настройки WiFi не входит в рамки данной инструкции. В двух словах, выполняем следующие шаги:
- На WiFi контроллере или точке доступа указываем тип проверки подлинности с использованием RADIUS. В качестве последнего указываем его IP-адрес, а также парольную фразу, которую планируем использовать для проверки подлинности.
- На Freeradius в конфигурационном файле clients.conf создаем раздел с указанием IP-адреса устройства, с которого будет отправляться запрос на проверку подлинности, также указываем парольную фразу.
- Подключаемся к WiFi с использованием учетных данных, хранимых во FreeIPA.
Возможные проблемы
Для диагностики проблем, удобнее всего запускать freeradius в режиме дебага. Для этого сначала остановим его:
systemctl stop radiusd
После запускаем радиус командой:
После проведения диагностики не забываем снова запустить сервис:
systemctl start radiusd
Рассмотрим проблему, с которой столкнулся я.
eap_peap: ERROR: TLS Alert write:fatal:protocol version
При подключении некоторых устройств мы можем получить ошибку:
(18) eap_peap: ERROR: TLS Alert write:fatal:protocol version
tls: TLS_accept: Error in error
(18) eap_peap: ERROR: Failed in __FUNCTION__ (SSL_read): error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol
(18) eap_peap: ERROR: System call (I/O) error (-1)
(18) eap_peap: ERROR: TLS receive handshake failed during operation
(18) eap_peap: ERROR: [eaptls process] = fail
(18) eap: ERROR: Failed continuing EAP PEAP (25) session. EAP sub-module failed
Причина: по умолчанию, eap настроен на использование TLS версии 1.2. Если устройство, с которого мы подключаемся использует версию протокола выше или ниже, то мы получим ошибку.
Решение: в настройках RADIUS-сервера есть возможность указать, какие версии TLS должны поддерживаться. Открываем конфигурационный файл:
Приводим к следующему виду опции:
* в данном примере указаны не самые лучшие параметры с точки зрения безопасности. Лучше всего отказаться от TLS 1.0 и 1.1. — для этого, как правило, необходимо установить обновления на клиентском устройстве.
MultiFactor Radius Adapter — программный компонент, RADIUS сервер для Linux.
Компонент доступен вместе с исходным кодом, распространяется бесплатно. Актуальная версия находится на GitHub: код и сборка.
Обратите внимание на лицензию. Она не дает вам право вносить изменения в исходный код Компонента и создавать производные продукты на его основе. Исходный код предоставляется в ознакомительных целях.
Требования для установки компонента
Для установки выполните команды:
Инструкция применима к Astra Linux Special Edition (релиз Смоленск) в режиме замкнутой программной среды (ЗПС).
Создайте папку, скачайте и распакуйте актуальную версию компонента из GitHub:
Создайте системного пользователя mfa и дайте ему права на приложение:
Параметры работы компонента хранятся в файле /opt/multifactor/radius/multifactor-radius-adapter.dll.config в формате XML.
Параметры подключения к Active Directory
Для проверки первого фактора в домене применимы следующие параметры:
При включении параметра use-active-directory-user-phone компонент будет использовать телефон, записанный на вкладке General. Формат телефона может быть любым.
При включении параметра use-active-directory-mobile-user-phone компонент будет использовать телефон, записанный на вкладке Telephones в поле Mobile. Формат телефона также может быть любым.
Параметры подключения к внешнему RADIUS серверу
Для проверки первого фактора в RADIUS, например, в Network Policy Server применимы следующие параметры:
Дополнительные RADIUS атрибуты
Можно указать, какие атрибуты будет передавать компонент при успешной аутентификации, в том числе с проверкой вхождения пользователя в группу безопасности
После настройки конфигурации запустите компонент:
Статус можно проверить командой:
Журналы работы компонента находятся в папке /opt/multifactor/radius/logs , а также в системном журнале.
При размещении компонета в кластерной конфигурации придерживайтесь схемы Active/Passive или выбирайте вариант, при котором повторный запрос с клиента будет обрабатываться тем же сервером.
Для наилучшей работы с nginx или HAProxy также укажите в настройках прокси-сервера заголовок proxy_protocol.
Дополнительная информация про Active Directory
- Linux версия адаптера пока не умеет работать с несколькими доменами, между которыми установлено доверие.
- Для работы с Active Directory используется простая проверка подлинности пароля пользователя. Настоятельно рекомендуем использовать схему LDAPS для шифрования трафика между адаптером и доменом (на сервере AD должен быть установлен сертификат, в т.ч. самоподписанный).
маломощная железка с arm процессором и собранный под нее и установленный Debian 7 wheezy.
ЗАДАЧА:
поставить FreeRADIUS 3.0.X, настроить его на работу с БД SQLITE. Т.е., учетные записи пользователей (которых нужно аутентифицировать) RADIUS должен брать из БД SQLITE.
На рисунке представлена верхнеуровневая схема взаимодействия компонентов.
Почему я решил описать данное решение?
Столкнувшись с данной задачей и начав гуглить, я был удивлен тому, что подробных описаний по сборке freeradius, а тем более с поддержкой SQLITE просто нет. Поэтому решил законспектировать себе и другим на память.
РЕШЕНИЕ:
Состоит из 3 частей:
1) Сборка Freeradius 3.0.3 (я выбрал эту версию, на более поздних все будет выглядеть примерно также) с поддержкой SQLite;
2) Настройка связки Freeradius и SQLite;
3) Настройка сервера, на котором аутентифицируются пользователи (на рисунке выше — «сервер»).
1 Сборка Freeradius 3.0.3 с поддержкой SQLite
Если с первого раза ./configure не отработает – возможно в системе не хватает еще каких-то пакетов, читаем внимательно вывод и устанавливаем их.
2 Настройка связки Freeradius и SQLite
Для настройки связки freeradius + sqlite необходимо выполнить следующие действия:
2.1 Создать и настроить БД пользователей sqlite
2.1.1 Создать базу sqlite и схему в БД, с которой будет работать radius:
/etc/raddb/sqlite_rad.db – это путь к файлу БД, Вы можете разместить его в любом удобном месте.
2.1.2 Создать УЗ пользователя в БД:
2.2 Настроить freeradius:
2.2.1 Конфигурационные файлы всех доступных модулей radius находятся в /etc/raddb/mods-available. Чтобы включить их, нужно создать ссылку на модуль в папке /etc/raddb/mods-enabled:
2.2.2 Редактируем /etc/raddb/mods-enabled/sql, следующим образом:
Переменная filename должна указывать на файл БД, созданный в пункте 2.1.1.
2.2.3 Прописываем клиента radius, т.е. тот сервер (или сетевое оборудование), пользователи которого будут аутентифицироваться через данный radius. Для этого добавляем строки в файл /etc/raddb/clients.conf:
secret в данном случае – это секретное слово radius по которому он аутентифицирует клиента.
shortname – произвольное «короткое имя», это значение можно даже опустить.
2.2.4 Проверяем, что в секции «authorize» в файле /etc/raddb/sites-enabled/default присутствует «-sql»:
3 Настройка клиента RADIUS
3.1 На клиенте установить пакет pam_radius:
3.2 В файле /etc/pam_radius_auth.conf на клиенте добавить строку:
где other-server – IP адрес сервера radius, other-secret – секретное слово из пункта 2.2.3 настройки:
Услуга VPN-доступа предоставляется путем терминации на вашем сервере псевдо-dialup соединений, устанавливаемых абонентами поверх существующих сетевых подключений. В качестве серверов доступа проверены и протестированы pptpd, accel-ppp (pptp), openvpn (Debian Linux).
Для предоставления подобных услуг вы должны последовательно настроить:
- сервер доступа (ppp, pptp, openvpn-службы)
- авторизацию сервера доступа через библиотеку RADIUS (radiusclient или встроенные решения)
- RADIUS-сервер из комплекта поставки NETAMS 4.0
- зарегистрировать сервер доступа (NAS)
- настроить RADIUS-источник данных в административном веб-интерфейсе
- создать тарифный план на основе обработчика XPrepaidByDaysVPN1
- создать абонента, назначить ему тарифный план, и протестировать работу
Схема взаимодействия всех компонентов приведена ниже:
Настройка сервера доступа
Опишем процедуры настройки на примере pptpd из комплекта Debian Linux 6.0.3
Опустим детали, в результате настройки должны получиться конфигурационные файлы такого вида:
Настройка RADIUS-клиента
На примере libradiusclient1. Эта библиотека служит для связи сервера доступа (pptp/ppp) и RADIUS-сервера, т.е. для передачи запросов на авторизацию и учета состояния подключения (аккаунтинга). Конфигурационные файлы этой бибилиотеки хранятся в каталоге /etc/radiusclient/
из дистрибутива /usr/local/netams4/radius/misc переписать файл dictionary.microsoft в каталог /etc/radiusclient/. Этот файл содержит в себе описание специфичных атрибутов, требуемых для авторизации по протоколу MS-CHAP V2, а также для передачи ключей шифрования MPPE.
из дистрибутива /usr/local/netams4/radius/misc переписать скрипт bwlimit в каталог /etc/ppp/ip-up.d/. Этот скрипт запускается в момент установления соединения и позволяет настраивать ограниения скорости для абонента путем настройки правил шайпера tc.
в конец конфигурационного файла /etc/radiusclient/dictionary дописать следующие строки:
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE Acct-Interim-Interval 85 integer
в файле /etc/radiusclient/radiusclient.conf указать IP-адреса нашего RADIUS-сервера (из поставки NETAMS 4.0):
в файле /etc/radiusclient/servers указать пароль (shared secret) нашего RADIUS-сервера:
Настройка RADIUS-сервера
Сервер поставляется в дистрибутиве и расположен в каталоге /usr/local/netams4/radius/
По умолчанию, запуск его в стартап-скрипта (startup.sh) закомментирован. Запустить RADIUS-сервер можно так:
cd radius && /bin/sh radius-startup.sh && cd ..
Других настроек сервер не имеет. Параметры подключения к ядру биллинга (jserver) берутся из общего файла netams4.properties, список NAS-серверов с паролями - при старте у jserver. Изменение списка серверов доступа требует рестарта процесса java, отвечающего на RADIUS-сервер.
Настройка серверов доступа
Процедура подробно описана в разделе: Сервера доступа
Настройка источника данных
Процедура подробно описана в разделе: RADIUS
Настройка тарифного плана
Процедура подробно описана в разделе: XPrepaidByDaysVPN1
Создание абонента и проверка
Эти процедуры подробно описаны в соответствующих разделах, например Работа с абонентом
Читайте также: