Установим и настроим 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

При установке PostgreSQL автоматически создается пользователь postgres. Далее нам необходимо выполнить несколько команд от имени пользователя postgres. Для этого заходим под учетной записью пользователя postgres:

su - postgres

Создаем пользователя с именем radius:

createuser radius --no-superuser --no-createdb --no-createrole -P

При создании пользователя radius потребуется придумать его пароль. В дальнейшем этот пароль нам еще понадобится.

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

createdb radius --owner=radius

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

exit

Импортируем схему (schema.sql) базы данных в базу radius, XXX — это версия FreeRADIUS:

psql -U radius radius < /etc/freeradius/XXX/mods-config/sql/main/postgresql/schema.sql

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

RADIUS server. База данных radius

Настройка 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.

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

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

Войти

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

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

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