Привет, хочу поделиться своим опытом работы с LinOTP и привести пример надежной аутентификации с помощью связки LinOTP + FreeRADIUS и Wallix Bastion.
LinOTP это гибкая опенсорс платформа корпоративного уровня для надежной аутентификации.
Wallix Bastion - решение по управлению привилегированым доступом (PAM).
На Хабре уже есть некоторые статьи про LinOTP - 1, 2. Здесь мы используем новые версии ОС и продуктов, а также проходим от начала до конца настройки, поехали..
Что используем:
-
LinOTP 2.12.3
-
Debian 10 (Так же поддерживаются)
-
FreeRADIUS 3
-
Wallix Bastion 8
-
Добавьте репозиторий linotp.org :
1. Инсталляция LinOTP
Добавьте репозиторий linotp.org:
echo 'deb http://www.linotp.org/apt/debian buster linotp
linotp-deps' > /etc/apt/sources.list.d/linotp.list
Для проверки пакета импортируйте ключ подписи пакета:
apt-get install dirmngr
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
913DFF12F86258E5
Устанавливаем БД (поддерживаемые БД):
apt-get update
apt-get install mariadb-server
mysql_secure_installation
Наконец, устанавливаем LinOTP:
apt-get install linotp
2. Интеграция с Active Directory
Достучаться до веб-админа LinOTP можно по ссылке: https://<linotp_ip>/manage
Идем в LinotpConfig -> UserIdResolvers и создаем новый UserIdResolver, выбирая тип LDAP:
Конфигурация Resolver-aТеперь вы должны добавить Realm - задайте ему имя, и укажите LDAP Resolver, который только что создали.
UserIdResolver-ы организованы в области, чтобы использовать их в LinOTP. В одном Realm-e может находиться много UserIdResolver-ов (multitenancy, так сказать).
На этом этапе мы можем проверить синхронизированных пользователей в User View.
Cинхронизированные пользователи3. Интеграция LinOTP и FreeRADIUS
Устанавливаем FreeRADIUS и дополнительные пакеты:
apt-get install linotp-adminclient-cli python-ldap
freeradius python-passlib python-bcrypt git libio-all-lwp-perl
libconfig-file-perl libtry-tiny-perl
Создаем символические ссылки и конфиги для freeradius:
ln -s /etc/freeradius/3.0/sites-available
/etc/freeradius/sites-available
ln -s /etc/freeradius/3.0/sites-enabled
/etc/freeradius/sites-enabled
ln -s /etc/freeradius/3.0/clients.conf
/etc/freeradius/clients.conf
ln -s /etc/freeradius/3.0/users
/etc/freeradius/users
Устанавливаем модуль аутентификации linotp-auth-freeradius-perl:
git clone
https://github.com/LinOTP/linotp-auth-freeradius-perl.git
cd linotp-auth-freeradius-perl/
cp radius_linotp.pm
/usr/share/linotp/radius_linotp.pm
Редактируем конигурацию следующим образом:
nano /etc/freeradius/sites-enabled/linotp
server linotp {listen { ipaddr = * port = 1812 type = auth}listen { ipaddr = * port = 1813 type = acct}authorize { preprocess update { &control:Auth-Type := Perl }}authenticate { Auth-Type Perl { perl }}accounting { unix }}
В sites-enabled удаляем все кроме linotp:
ls /etc/freeradius/sites-enabled
linotp
Далее добавляем RADIUS-клиентов. Я сразу добавляю Wallix Bastion:
nano /etc/freeradius/clients.conf
client Wallix { ipaddr = 192.168.10.10 secret = your_secret}
Используем коннектор perl в качестве базы пользователей:
nano /etc/freeradius/users
DEFAULT Auth-type := perl
nano /etc/freeradius/3.0/mods-available/perl
perl { filename = /usr/share/linotp/radius_linotp.pm func_authenticate = authenticate func_authorize = authorize }
Создаем симлинк для mods-enabled и удаляем eap:
ln -s /etc/freeradius/3.0/mods-available/perl
/etc/freeradius/3.0/mods-enabled/perl
rm /etc/freeradius/3.0/mods-enabled/eap
Создайте конфигурацию коннекторов для проверки учетных данных, которые пришли в Radius:
nano /etc/linotp2/rlm_perl.ini
URL=https://<Linotp_ip>/validate/simplecheckREALM=realm1RESCONF=resolver1Debug=TrueSSL_CHECK=False
4. Регистрация токенов пользователей
На этом этапе мы хотим позволить нашим пользователям регистрировать токены самостоятельно. Для этого у LinOTP есть selfservice портал, что не может не радовать.
Переходим в LinOTPConfig > policies и добавляем новую политику. В моем случае пользователи будут использовать TOTP, который они регистрируют в Google Authenticator, соответственно параметры политики следующие:
Настройка политикиПодробное описание параметров - тут.
URL для пользователей: https://<LINOTP_ip> или https://<LINOTP_ip> /selfservice/login
5. Wallix Bastion Интеграция
Чтобы Wallix Bastion запрашивал у пользователей второй фактор нам нужно, во-первых, добавить внешнюю аутентификацию.
Переходим в Configuration> External authentication и добавляем новую аутентификацию - RADIUS. Secret указываем тот, что использовали ранее в конфигурации freeRADIUS.
Внешняя аутентификация на Wallix BastionПереходим в LDAP/AD domains и выбираем (или добавляем, если вы еще этого не сделали) домен, который мы ранее синхронизировали с LinOTP. В Secondary authentication выберите linotp и примените конфигурацию. После этого домен будет выглядеть так:
С этого момента вы можете аутентифицироваться в Wallix Bastion с помощью двухфакторной аутентификации, где второй фактор проверяет LinOTP.
6. Troubleshoot.
Если что-то не работает, можно поискать ошибки:
Логи RADIUS:
/var/log/freeradius/radius.log
Логи LinOTP:
/var/log/linotp/linotp.log
Проверить токен можно следующим образом:
https://<yourlinotpserver>/validate/check?user=<login>&pass=<OTPvalue>
Вместо вывода
В данной статье мы настроили локальную платформу второго фактора аутентификации - LinOTP и прикрутили ее к решению Wallix Bastion с FreeRADIUS в роли коннектора.
Моя статья на англ. - medium
Спасибо, что уделили время, надеюсь информация была полезной.