Настройка OpenVPN + FreeIPA (LDAP) на Ubuntu
Используемые термины: OpenVPN, FreeIPA, Ubuntu.
Рассмотрим отдельной инструкцией настройку аутентификации на OpenVPN через LDAP на базе FreeIPA. Конфигурирование будет выполнено на Ubuntu (проверено для версий 20 и 22).
Предполагается, что у нас уже установлены серверы OpenVPN и FreeIPA. Ссылки на некоторые полезные инструкции будут в конце данной инструкции.
Настройка FreeIPA
Настройка OpenVPN
Редактирование на клиенте и проверка
Использование групп безопасности
Шифрование запросов
Дополнительные материалы
Настройка на FreeIPA
На сервере аутентификации необходимо создать учетную запись, с помощью которой мы будем подключаться по ldap и выполнять поиск учетных записей.
Данный аккаунт можно создать с помощью веб интерфейса FreeIPA или командной строки. Мы рассмотрим второй вариант.
Заходим по SSH на сервер FreeIPA и авторизуемся под администратором:
kinit admin
Создадим сервисную учетную запись командой:
ipa service-add openvpn/srv-vpn-01.dmosk.local --skip-host-check --force
* в данном примере мы создаем сервисную учетную запись для хоста srv-vpn-01.dmosk.local. Опции --skip-host-check и --force нужны на тот случай, если данного хоста нет в службе каталогов.
Чтобы создать пароль для сервисного аккаунта, создаем файл ldif:
vi openvpn-passwd.ldif
dn: krbprincipalname=openvpn/srv-vpn-01.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local
changetype: modify
add: objectClass
objectClass: simpleSecurityObject
-
add: userPassword
userPassword: openvpn123
* в данном примере мы создаем атрибут userPassword и задаем ему значение openvpn123 (наш пароль) для аккаунта openvpn/srv-vpn-01.dmosk.local.
Применяем изменения для нашего каталога:
ldapmodify -f ./openvpn-passwd.ldif -D 'cn=Directory Manager' -W -H ldap://localhost -Z
Зададим позднее время для истечение срока действия пароля:
ipa service-mod openvpn/srv-vpn-01.dmosk.local --setattr=krbPasswordExpiration=`echo $(($(date +%Y)+10))$(date +%m%d%H%M%SZ)`
* в данном примере 10 лет.
Удаляем тикет для авторизации на ldap под администратором:
kdestroy
Настройка OpenVPN
Нам нужно установить модуль для аутентификации на OpenVPN через LDAP. Вводим команды:
apt update
apt install openvpn-auth-ldap
Редактируем конфигурационный файл openvpn (добавляем строку):
vi /etc/openvpn/server.conf
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
Создаем конфигурационный файл ldap.conf:
vi /etc/openvpn/ldap.conf
<LDAP>
URL "ldap://ipa-server1.dmosk.local ldap://ipa-server2.dmosk.local"
BindDN krbprincipalname=openvpn/srv-vpn-01.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local
Password openvpn123
Timeout 15
FollowReferrals yes
TLSEnable no
</LDAP>
<Authorization>
BaseDN "cn=users,cn=accounts,dc=dmosk,dc=local"
SearchFilter "(&(uid=%u)(objectClass=person)(!(nsaccountlock=TRUE)))"
RequireGroup false
</Authorization>
* обратите внимание, что мы настроили подключение без шифрования — настройку TLS выполним ниже. Также мы закомментировали настройки аутентификации на основе групп — также, рассмотрим данную конфигурацию ниже.
** где:
- URL — адреса контроллеров домена. Задаются через пробел. Если адресов несколько, значение указываем в кавычках.
- BindDN — учетная запись для связывания с контроллером домена. Можно указать обычную учетную запись либо принципал.
- Password — пароль для учетной записи, которую мы указали в BindDN.
- TLSEnable — использование шифрования между OpenVPN и FreeIPA. На данном этапе без шифрования.
- Authorization BaseDN — корень в домене, с которого начнется поиск учетной записи для аутентификации.
- Authorization SearchFilter — фильтр по значению некоторых атрибутов для поиска объектов в LDAP. В данном примере объект должен иметь значение uid, которое равно запрашиваемому логину и objectClass должен быть person.
Перезапускаем сервис:
systemctl restart openvpn@server
На этом настройка сервера завершена. Переходим к проверке.
Настройка клиента
На клиенте нам нужно в конфигурационный файл ovpn добавить всего одну строку:
...
auth-user-pass
Теперь, при попытке подключиться к VPN, программа будет требовать ввода логина и пароля — вводим данные для авторизации через ldap.
Аутентификация на основе групп безопасности
Выше мы закомментировали настройки авторизации на основе групп. Давайте рассмотрим, как их использовать. Для этого нужно выполнить настройки на стороне VPN и LDAP.
Настройка OpenVPN
Открываем файл:
vi /etc/openvpn/ldap.conf
Добавляем секцию Group в Authorization:
<Authorization>
<Group>
BaseDN "cn=groups,cn=accounts,dc=dmosk,dc=local"
SearchFilter "(|(cn=admins)(cn=openvpn))"
</Group>
</Authorization>
* где:
- Group BaseDN — корень в домене, с которого начнется поиск групп.
- Group SearchFilter — фильтр для поиска группы безопасности. В нашем примере, она должна входить либо в группу admins, либо openvpn.
Перезапускаем сервис:
systemctl restart openvpn@server
FreeIPA
На стороне сервера LDAP нужно создать группу безопасности для разрешения подключения (в нашем примере, это openvpn) и добавить в нее нужных пользователей.
Заходим по SSH на сервер FreeIPA и авторизуемся под администратором:
kinit admin
Создадим группу командой:
ipa group-add --desc='Allow VPN-connections' openvpn
Добавим в данную группу пользователей, которым хотим разрешить подключение, например:
ipa group-add-member openvpn --users=admin,dmosk
* в данном примере мы добавляем пользователей admin и dmosk.
Готово. Пробуем подключиться.
Настройка TLS между OpenVPN и FreeIPA
Для работы по зашифрованному каналу между VPN и LDAP необходимо, чтобы наш сервер OpenVPN был членом домена. После нужно запросить сертификат для служебной учетной записи и прописать его в конфигурационном файле ldap.
Присоединение к домену
Подробнее о процессе присоединения компьютера к FreeIPA рассказано в инструкции Установка и использование FreeIPA на CentOS. В данном разделе пройдемся по данному вопросу поверхностно.
Устанавливаем клиентскую часть:
apt install freeipa-client
Вводим
ipa-client-install --mkhomedir
Система задаст несколько вопросов, после начнется процесс присоединения к домену. В итоге, мы должны увидеть:
...
Client configuration complete.
The ipa-client-install command was successful
Компьютер присоединен к домену на базе FreeIPA.
Запрос сертификата
Мы создадим запрос на сертификат к службе сертификации FreeIPA. Данные действия нужно выполнить на сервере VPN.
Заходим по SSH на сервере OpenVPN и cоздаем запрос на получение сертификата:
ipa-getcert request -k /etc/ssl/freeipa.key -f /etc/ssl/freeipa.crt -I openvpn
Запрос должен обработаться быстро. Посмотреть статус можно командой:
ipa-getcert list
В каталоге:
ls /etc/ssl
... мы должны увидеть 2 новых файла — freeipa.key и freeipa.crt.
Настройка OpenVPN
Откроем на редактирование конфигурационный файл ldap.conf:
vi /etc/openvpn/ldap.conf
Внесем следующие изменения:
<LDAP>
...
TLSEnable yes
TLSCACertFile /etc/ipa/ca.crt
TLSCertFile /etc/ssl/freeipa.crt
TLSKeyFile /etc/ssl/freeipa.key
</LDAP>
* где:
- TLSEnable — использование шифрования между OpenVPN и FreeIPA. Меняем значение на yes для включения.
- TLSCACertFile — путь до ключа центра сертификации. Задаем путь до ca от FreeIPA. Он должен был появиться после присоединения нашего компьютера к домену.
- TLSCertFile/TLSKeyFile — открытый и закрытый ключи для сервисной учетной записи.
Перезапускаем сервис сервера vpn:
systemctl restart openvpn@server
Настройка выполнена. Пробуем подключиться клиентом.
Читайте также
Другие инструкции, которые могут быть полезными:
2. Настройка OpenVPN + FreeIPA (LDAP) на CentOS 7.
3. Установка и использование FreeIPA на Rocky Linux или CentOS.
4. Как настроить OpenVPN сервер и включить аутентификацию через LDAP (Active Directory).