Ще инсталираме и конфигурираме RADIUS сървър на Debian. И ще настроим RADIUS аутентикация за OpenConnect VPN сървъра. Защо? За да позволим на един потребител да има право на една активна VPN сесия и да не предава своето потребителско име/парола на други хора за използване.
Протокол RADIUS
Протоколът RADIUS изпълнява три основни функции:
- проверява автентичността на потребителя преди да му разреши достъп до мрежата;
- оторизира потребителя за достъп до определени мрежови услуги;
- възпроизвежда и следи за използването на тези мрежови услуги.
RADIUS протоколът се нарича още протокол на AAA (Authentication, Authorization and Accounting), което се разшифрова като „Аутентикация, авторизация и счетоводство“.
Когато ААА не се използва, архитектурата се описва като „отворена“, където всеки може да получи достъп и да прави всичко, което иска, без никакво проследяване.
Може да се използва само частта ААА. Например, ако сметките на потребителите за услугите на компанията не са свързани с обема на предавания трафик през мрежата на компанията, компанията може да реши да удостоверява и оторизира потребителите, но да игнорира активността на потребителите и да не се занимава със счетоводство. Вместо това, в системата за наблюдение ще се води счетоводство и ще се проследява необичайната активност на потребителите, а задачата по удостоверяване и оторизиране може да бъде предоставена на друга система в мрежата.
RADIUS сървър
Най-популярният RADIUS сървър в света с отворен код е FreeRADIUS.
Инсталация и конфигурация на FreeRADIUS
Инсталация
Инсталираме FreeRADIUS и PostgreSQL база данни:
apt install freeradius freeradius-postgresql postgresql postgresql-contrib

Настройка 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
След като импортирам, в моята база данни се появиха 8 таблица с името 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 сървър
За да проверим работоспособността на RADIUS сървъра, добавяме тестов потребител и неговата парола в базата данни 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 сървър в режим на debug:
freeradius -X - debug mode
В новом терминальном прозорец стартираме командата:
radtest user01 pass01 127.0.0.1 0 testing123
Тази команда се опитва да изпълни аутентикационен тест за потребител user01 с парола pass01 на локалната машина (127.0.0.1) чрез RADIUS сървър, който слуша на стандартния порт (затова в командата е посочен порт 0), използвайки тайния парола testing123. Тайният парола е зададен по подразбиране във файла /etc/freeradius/XXX/clients.conf, XXX – това е версията на FreeRADIUS.
При успешна аутентикация ще се изведе „Received Access-Accept„.

За да спрете RADIUS сървъра в режим debug, натиснете комбинацията от бутони Ctrl + C. И стартирайте RADIUS сървъра в нормален (работен) режим:
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
У мене получи така:

Запазваме промените в конфигурационния файл и рестартираме 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 извежда съобщение: „Вече сте влезли в системата – достъпът е отказан„, което означава „Вече сте влезли в системата – достъпът е отказан“.

Изводи
С помощта на RADIUS сървъра вече VPN клиентът може да има само една активна сесия.
Очаквам въпроси в коментарите под статията!
Коментари