openvpn-2fa-otp-freeradius-ldap
Пример полностью настроенной системы
Для облегчения изучения, тестирования и развертывания всех компонентов в своей инфраструктуре подготовлен пример полностью работоспособной системы состоящей из:
- OpenVPN.
- плагин
openvpn-multi-authentication-plugin
для OpenVPN. - FreeRADIUS.
- плагин
strongpass-otp
для FreeRADIUS. - lldap.
В отличие от конфигурации описанной в https://strongpass.ru/blog/openvpn-2fa-otp-freeradius-ldap в данном примере все компоненты работают в Docker-контейнерах.
Параметры настройки OpenVPN сервера таковы, что после подключения он не перенаправляет весь траффик через себя и не добавляет каких-либо маршрутов клиенту. Цель примера - показать какие настройки должны быть у компонентов системы для успешной аутентификации пользователя и установления VPN-туннеля.
В примере используются учетные записи со следующими реквизитами:
-
lldap
Url административного веб-интерфейса http://172.21.2.2:17170/
- Администратор сервера lldap
admin
/password
. - Пользователь для тестирования аутентификации без OTP-кода
user-test1
/5221ug71z7ij
- Пользователь для тестирования аутентификации с OTP-кодом
user-test2
/dltuzhgk0e1g
- Пользователь для подключения плагина FreeRADIUS
strongpass-otp
к lldapfreeradius_ldap_user
/587MVkETPhRf
- Администратор сервера lldap
-
PostgreSQL
- Пользователь для плагина FreeRADIUS. Пользователь может только читать seed-коды.
freeradius_user
/7xFWnt8BN6Ww
. - для технической поддержки. Пользователь может только создавать, обновлять, удалять секреты генератора OTP-кодов, но не может их читать.
helpdesk_user
/Tpog9TPuNtd0
.
Установка
Предполагается, что на сервере, где происходит тестирование, используется дистрибутив Debian 12 и установлены docker, docker-compose.
Склонируйте репозиторий.
git clone https://gitverse.ru/sc/strongpass/openvpn-2fa-otp-freeradius-ldap.git
cd openvpn-2fa-otp-freeradius-ldap
Соберите Docker-образ FreeRADIUS с плагином и необходимыми зависимостями.
sudo docker build -f src/freeradius/docker/Dockerfile -t freeradius:otp .
Соберите Docker-образ OpenVPN на базе Debian 12.
sudo docker build -f example/openvpn/docker/Dockerfile -t openvpn:otp .
Установите разрешения на файлы.
chmod +x example/openvpn/auth-service/auth-service
chmod +x example/openvpn/openvpn-plugin/libopenvpn_auth_plugin.so
Запуск
sudo docker-compose -f example/docker-compose.yaml up
Проверьте журналы на отсутствие ошибок. В случае появления ошибок устраните их.
Установите зависимости и приложение для управления секретами генератора OTP-кодов в виртуальное окружение.
sudo apt update
sudo apt install pipx
pipx ensurepath
pipx install --include-deps ./src/manage_otp
После установки будет доступна команда manage-otp
. Создайте секрет для генератора OTP-кодов для пользователя user-test2
. Находясь в каталоге openvpn-2fa-otp-freeradius-ldap
выполните команду:
manage-otp -c example/manage_otp/config.yaml create user-test2
Добавьте на смартфоне в приложение для генерации OTP-кодов учетную запись с полученным секретом.
Подключитесь клиентом openvpn к серверу используя реквизиты пользователя user-test2
.
sudo openvpn --config example/openvpn/client/openvpn-client.ovpn