Настройка radius сервера debian

Обновлено: 03.07.2024

Очень часто, в качестве реализации 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 нам необходимо:

  1. Добавить атрибут ipaNTHash для хранения в нем хэша пароля
  2. Создать роли и привилегии для возможности читать данный атрибут.
  3. Создать сервисный аккаунт и предоставить ему права на чтение атрибута 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/ipa-server.dmosk.local@DMOSK.LOCAL

Valid starting Expires Service principal
08/23/2021 12:48:14 08/24/2021 12:48:14 krbtgt/DMOSK.LOCAL@DMOSK.LOCAL

Также выполним who a mi в LDAP:

ldapwhoami -Y GSSAPI

Ответ должен быть на подобие:

SASL/GSSAPI authentication started
SASL username: freeradius/ipa-server.dmosk.local@DMOSK.LOCAL
SASL SSF: 256
SASL data security layer installed.
dn: krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local

* freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local — полный путь учетной записи в LDAP. Он нам понадобиться для дальнейшей настройки.

Теперь зададим пароль для сервисного аккаунта. Для этого создаем ldif файл:

dn: krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,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/ipa-server.dmosk.local@dmosk.local,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 не входит в рамки данной инструкции. В двух словах, выполняем следующие шаги:

  1. На WiFi контроллере или точке доступа указываем тип проверки подлинности с использованием RADIUS. В качестве последнего указываем его IP-адрес, а также парольную фразу, которую планируем использовать для проверки подлинности.
  2. На Freeradius в конфигурационном файле clients.conf создаем раздел с указанием IP-адреса устройства, с которого будет отправляться запрос на проверку подлинности, также указываем парольную фразу.
  3. Подключаемся к 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

Создание абонента и проверка

Эти процедуры подробно описаны в соответствующих разделах, например Работа с абонентом

Читайте также: