Установим и настроим RADIUS server на Debian. И настроим RADIUS-аутентификацию для OpenConnect VPN сервера. А для чего? А для того, чтобы один пользователь имел право на одну активную сессию VPN и не передавал свои логин/пароль другим людям для пользования.

RADIUS протокол

RADIUS протокол выполняет три основные функции:

  • проверяет подлинность пользователя прежде, чем разрешить ему доступ к сети;
  • авторизует пользователя для доступа к определенным сетевым сервисам;
  • ведет учет и отслеживает использование этих сетевых сервисов.

RADIUS протокол еще называют протоколом ААА (Authentication, Authorization and Accounting), что расшифровывается как «Аутентификация, авторизация и учет».

Когда ААА не используется, архитектура описывается как «открытая», где любой может получить доступ и делать все, что угодно, без какого-либо отслеживания.

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

RADIUS server

Самый популярный в мире RADIUS server с открытым исходным кодом — это FreeRADIUS.

Установка и настройка FreeRADIUS

Установка

Устанавливаем FreeRADIUS и СУБД PostgreSQL:

apt install freeradius freeradius-postgresql postgresql postgresql-contrib
RADIUS server. Установка в Debian

Настройка PostgreSQL

Нам понадобятся два файла: schema.sql и setup.sql из директории /etc/freeradius/XXX/mods-config/sql/main/postgresql/, где XXX — это версия FreeRADIUS. Из файла schema.sql мы импортируем схему базы данных PostgreSQL. А с помощью файла setup.sql мы создадим PostgreSQL-пользователя с именем radius и назначим ему необходимые права.

Изменим пароль пользователя radius со значения по умолчанию radpass на собственное значение. Для этого отредактируем файл setup.sql из директории /etc/freeradius/XXX/mods-config/sql/main/postgresql/, где XXX — это версия FreeRADIUS.

FreeRADIUS Настройка PostgreSQL

При установке PostgreSQL автоматически создается пользователь postgres. Этот пользователь имеет все права для создания баз данных, управления ролями и выполнения других административных задач в PostgreSQL. А чтобы пользователь postgres имел право на чтение файлов schema.sql и setup.sql из директории /etc/freeradius/XXX/mods-config/sql/main/postgresql/, где XXX — это версия FreeRADIUS, добавим пользователя postgres в группу freerad:

usermod -aG freerad postgres

Проверим, в каких группах теперь состоит пользователь postgres:

groups postgres

Заходим под учетной записью пользователя postgres:

su - postgres

Входим в командную оболочку PostgreSQL:

psql

Создаем базу данных с именем radius:

CREATE DATABASE radius;

Подключаемся к базе данных radius:

\c radius

Импортируем схему базы данных в базу radius из файла schema.sql, который в директории /etc/freeradius/XXX/mods-config/sql/main/postgresql/, где XXX — это версия FreeRADIUS:

\i /etc/freeradius/XXX/mods-config/sql/main/postgresql/schema.sql

Просматриваем таблицы в текущей базе данных (т.е. в базе radius):

\dt

После импорта у меня в базе radius появилось 9 таблиц.

FreeRADIUS База данных radius

Cоздаем PostgreSQL-пользователя с именем radius и назначаем ему необходимые права (XXX — это версия FreeRADIUS):

\i /etc/freeradius/XXX/mods-config/sql/main/postgresql/setup.sql

Проверим предоставленные привилегии пользователю radius на уровне таблиц:

SELECT * FROM information_schema.role_table_grants WHERE grantee = 'radius';

Проверим предоставленные привилегии пользователю radius на другие объекты (функции, последовательности и т. д.):

SELECT * FROM information_schema.role_usage_grants WHERE grantee = 'radius';
FreeRADIUS Проверка привилегий пользователя radius

Выходим из командной оболочки PostgreSQL:

\q

Выходим из-под пользователя postgres:

exit

Настройка FreeRADIUS

Создаем ссылку на SQL-модуль, XXX — это версия FreeRADIUS:

ln -s /etc/freeradius/XXX/mods-available/sql /etc/freeradius/XXX/mods-enabled/

Настраиваем SQL-модуль (конфигурационный файл /etc/freeradius/XXX/mods-available/sql), меняя параметры подключения к базе данных в соответствии с нашими данными:

sql {
dialect = "postgresql"
driver = "rlm_sql_${dialect}"

# Connection info:

server = "localhost"
port = 5432
login = "radius"
password = "radius_password"

# Database table configuration for everything except Oracle

radius_db = "radius"
}

# Table to keep radius client info
client_table = "nas"

где radius_password — это пароль пользователя radius, который мы придумали в предыдущем разделе статьи.

В конфигурационном файле /etc/freeradius/XXX/sites-enabled/default проверяем, что в секции authorize присутствует -sql и в секции accounting присутствует -sql:

authorize {
........
-sql
........
}
accounting {
........
-sql
........
}

Перезагружаем FreeRADIUS с помощью команды:

systemctl restart freeradius

Проверка работоспособности RADIUS server

Чтобы проверить работоспособность RADIUS server, добавим тестового пользователя и его пароль в базу radius. Заходим под учетной записью пользователя postgres:

su - postgres

Запускаем интерактивную оболочку PostgreSQL:

psql

Подключаемся к базе данных radius:

\c radius

Добавляем в базу radius, в таблицу radcheck тестового пользователя user01 с паролем pass01:

INSERT INTO radcheck (username, attribute, op, value) VALUES ('user01', 'Cleartext-Password', ':=', 'pass01');

Выходим из интерактивной оболочки PostgreSQL:

\q

Выходим из-под пользователя postgres:

exit

Останавливаем FreeRADIUS:

systemctl stop freeradius

Запускаем RADIUS server в режиме debug:

freeradius -X - debug mode

В новом терминальном окне запускаем команду:

radtest user01 pass01 127.0.0.1 0 testing123

Эта команда пытается выполнить тест аутентификации для пользователя user01 с паролем pass01 на локальной машине (127.0.0.1) через RADIUS server, прослушивающий стандартный порт (поэтому в команде указан порт 0), с использованием секретного пароля testing123. Секретный пароль задан по умолчанию в файле /etc/freeradius/XXX/clients.conf, XXX — это версия FreeRADIUS.

В случае успешной аутентификации будет выведено «Received Access-Accept«.

RADIUS server. Тест аутентификации пользователя

Чтобы остановить RADIUS server в режиме debug, нажимаем комбинацию клавиш Ctrl + C. И запускаем RADIUS server в обычном (рабочем) режиме:

systemctl start freeradius

RADIUS-аутентификация для OpenConnect VPN

Установка и настройка OpenConnect VPN описана в статье: «OpenConnect VPN. Подробное руководство«. В этой статье описывается аутентификация VPN клиентов по паролю силами OpenConnect VPN сервера. Сейчас же мы хотим передать задачу по аутентификации, авторизации и учету VPN пользователей RADIUS серверу. Для этого нам понадобится библиотека radcli.

Установка библиотеки radcli

Создаем директорию, куда будем скачивать библиотеку radcli:

mkdir /usr/local/src/radcli

Перемещаемся в эту директорию:

cd /usr/local/src/radcli/

Скачиваем библиотеку radcli, YYY — это версия библиотеки radcli:

wget https://github.com/radcli/radcli/releases/download/YYY/radcli-YYY.tar.gz

Распаковываем архив:

tar zxvf radcli-YYY.tar.gz

Переходим в директорию radcli-YYY, где YYY — это версия библиотеки radcli:

cd radcli-YYY

Компилируем и устанавливаем:

./configure --sysconfdir=/etc/ && make && make install

Готово! Библиотека radcli установлена.

Если понадобится удаление radcli, то это можно сделать:

cd /usr/local/src/radcli/radcli-YYY
make uninstall

Настройка radcli

У меня OpenConnect VPN сервер и FreeRADIUS находятся на одной машине.

Открываем конфигурационный файл /etc/radcli/radiusclient.conf и проверяем настройки:

authserver localhost
acctserver localhost
servers /etc/radcli/servers
dictionary /etc/radcli/dictionary
default_realm
radius_timeout 10
radius_retries 3
bindaddr *

Открываем конфигурационный файл /etc/radcli/servers и добавляем строку с секретным паролем testing123:

localhost/localhost   testing123

Настройка OpenConnect VPN

Открываем конфигурационный файл /etc/ocserv/ocserv.conf и закомментируем с помощью символа # все строки, начинающиеся с auth.

Включаем RADIUS-аутентификацию с помощью следующей строки:

auth = "radius[config=/etc/radcli/radiusclient.conf,groupconfig=true]"

Включаем RADIUS-учет с помощью следующей строки:

acct = "radius[config=/etc/radcli/radiusclient.conf]"

Добавляем опцию stats-report-time, в которой указывается время в секундах, когда должна передаваться учетная информация.

stats-report-time = 360

У меня получилось вот так:

RADIUS server. RADIUS-аутентификация OpenConnect VPN сервера

Сохраняем изменения в конфигурационном файле и перезагружаем OpenConnect VPN сервер:

systemctl restart ocserv

Проверка работоспособности RADIUS-аутентификации OpenConnect VPN

Проверить работоспособность RADIUS-аутентификации OpenConnect VPN сервера очень просто. Открываем OpenConnect VPN клиент, вводим логин user01 и пароль pass01. Если все настроено правильно, получите доступ к VPN.

Один VPN пользователь — одна сессия

Давайте настроим так, чтобы один VPN пользователь имел право лишь на одну активную сессию. Это для того, чтобы пользователи не передавали свои VPN аккаунты другим людям, а использовали только сами.

В конфигурационном файле /etc/freeradius/XXX/sites-enabled/default, где XXX — это версия FreeRADIUS, в секцию session добавляем sql:

session {
sql
}

В конфигурационный файл /etc/freeradius/XXX/users, в самый его конец, добавляем строку:

DEFAULT Simultaneous-Use := 1

Перезагружаем FreeRADIUS с помощью команды:

systemctl restart freeradius

Проверяем, что второе VPN соединение с тем же логином/паролем не устанавливается. Например, в этом случае AnyConnect VPN клиент выводит сообщение: «You are already logged in — access denied«, т.е. «Вы уже залогинены — доступ запрещен».

RADIUS server. Один пользователь - одна активная сессия

Выводы

С помощью RADIUS server теперь VPN клиент может иметь только одну активную сессию.

Жду вопросы в комментариях под статьей!

Комментарии

  • Родион
    Ответить

    Уже промучился какое-то время с прикручиванием радиус-аутентификации и только наткнулся на вашу статью) У меня в роли радиуса Win server.

  • Иван
    Ответить

    У вас нет шага с импортом /etc/freeradius/3.0/mods-config/sql/main/postgresql/setup.sql что валит радуимс при попытке записать даныне входа

    • Ирина К.
      Ответить

      Спасибо, Иван! Подправила.

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

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Войти

Зарегистрироваться

Сбросить пароль

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