Настройка OpenVPN + FreeIPA (LDAP)

Thank you for reading this post, don't forget to subscribe!

Рас­смот­рим отдель­ной инструк­ци­ей настрой­ку аутен­ти­фи­ка­ции на OpenVPN через LDAP на базе FreeIPA. Кон­фи­гу­ри­ро­ва­ние будет выпол­не­но на CentOS 7.

Пред­по­ла­га­ет­ся, что у нас уже уста­нов­ле­ны сер­ве­ры OpenVPN и FreeIPA.

Настройка на FreeIPA

На сер­ве­ре аутен­ти­фи­ка­ции мы долж­ны создать учет­ную запись, с помо­щью кото­рой мы будем под­клю­чать­ся по ldap и выпол­нять поиск учет­ных запи­сей. Мы созда­дим сер­вис­ный аккаунт.

Захо­дим по SSH на сер­вер FreeIPA и авто­ри­зу­ем­ся под администратором:

kinit admin

Созда­дим сер­вис­ную учет­ную запись командой:

ipa service-add openvpn/oserver.test.local

Что­бы создать пароль для сер­вис­но­го акка­ун­та, созда­ем файл ldif:

vi openvpn-passwd.ldif

* в дан­ном при­ме­ре мы созда­ем атри­бут userPassword и зада­ем ему зна­че­ние openvpn (наш пароль) для поль­зо­ва­те­ля openvpn/oserver.test.local.

При­ме­ня­ем изме­не­ния для наше­го каталога:

ldapmodify -f ./openvpn-passwd.ldif -D 'cn=Directory Manager' -W -H ldap://localhost -Z

Зада­дим позд­нее вре­мя для исте­че­ние сро­ка дей­ствия пароля:

ipa service-mod openvpn/oserver.test.local --setattr=krbPasswordExpiration=20300317010000Z

* в дан­ном при­ме­ре до 2030 года.

Уда­ля­ем тикет для авто­ри­за­ции на ldap под администратором:

kdestroy

Настройка OpenVPN

Нам нуж­но уста­но­вить модуль для аутен­ти­фи­ка­ции на OpenVPN через LDAP. Вво­дим команды:

yum install epel-release

yum install openvpn-auth-ldap

Редак­ти­ру­ем кон­фи­гу­ра­ци­он­ный файл openvpn (добав­ля­ем строку):

vi /etc/openvpn/server.conf

plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf

Откры­ва­ем кон­фи­гу­ра­ци­он­ный файл ldap.conf:

vi /etc/openvpn/auth/ldap.conf

При­во­дим его к, при­мер­но, сле­ду­ю­ще­му виду:

* обра­ти­те вни­ма­ние, что мы настро­и­ли под­клю­че­ние без шиф­ро­ва­ния — настрой­ку 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/auth/ldap.conf

Сни­ма­ем ком­мен­та­рии с настро­ек Group и при­во­дим их к виду:

* где:

  • 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,test

* в дан­ном при­ме­ре мы добав­ля­ем поль­зо­ва­те­лей admin и test.

Гото­во. Про­бу­ем подключиться.

Настройка TLS между OpenVPN и FreeIPA

Для рабо­ты по зашиф­ро­ван­но­му кана­лу меж­ду VPN и LDAP необ­хо­ди­мо, что­бы наш сер­вер OpenVPN был чле­ном доме­на. После нуж­но запро­сить сер­ти­фи­кат для слу­жеб­ной учет­ной запи­си и про­пи­сать его в кон­фи­гу­ра­ци­он­ном фай­ле ldap.

Присоединение к домену

Подроб­нее о про­цес­се при­со­еди­не­ния ком­пью­те­ра к FreeIPA рас­ска­за­но в инструк­ции Уста­нов­ка и исполь­зо­ва­ние FreeIPA на CentOS. В дан­ном раз­де­ле прой­дем­ся по дан­но­му вопро­су поверхностно.

Уста­нав­ли­ва­ем кли­ент­скую часть:

yum install freeipa-client

Вво­дим

ipa-client-install --mkhomedir

Систе­ма задаст несколь­ко вопро­сов, после нач­нет­ся про­цесс при­со­еди­не­ния к доме­ну. В ито­ге, мы долж­ны увидеть:


Client configuration complete.
The ipa-client-install command was successful

Ком­пью­тер при­со­еди­нен к доме­ну на базе FreeIPA.

Запрос сертификата

Ранее мы созда­ли слу­жеб­ную учет­ную запись openvpn/oserver.test.local — созда­дим для нее сер­ти­фи­кат. Дан­ные дей­ствия нуж­но выпол­нить на сер­ве­ре VPN.

Итак, захо­дим по SSH на сер­ве­ре OpenVPN и авто­ри­зо­вы­ва­ем­ся под адми­ном на сер­ве­ре FreeIPA:

kinit admin

Созда­ем запрос на полу­че­ние сертификата:

ipa-getcert request -K openvpn/`hostname` -k /etc/pki/tls/certs/freeipa.key -f /etc/pki/tls/certs/freeipa.crt -I openvpn

Запрос дол­жен обра­бо­тать­ся быст­ро. Посмот­реть ста­тус мож­но командой:

ipa-getcert list

В ката­ло­ге:

ls /etc/pki/tls/certs

… мы долж­ны уви­деть 2 новых фай­ла — freeipa.key и freeipa.crt.

Закры­ва­ем сессию

kdestroy

Настройка OpenVPN

Откро­ем на редак­ти­ро­ва­ние кон­фи­гу­ра­ци­он­ный файл ldap.conf:

vi /etc/openvpn/auth/ldap.conf

Вне­сем сле­ду­ю­щие изменения:

* где:

  • TLSEnable — исполь­зо­ва­ние шиф­ро­ва­ния меж­ду OpenVPN и FreeIPA. Меня­ем зна­че­ние на yes для включения.
  • TLSCACertFile — путь до клю­ча цен­тра сер­ти­фи­ка­ции. Зада­ем путь до ca от FreeIPA. Он дол­жен был появить­ся после при­со­еди­не­ния наше­го ком­пью­те­ра к домену.
  • TLSCertFile/TLSKeyFile — откры­тый и закры­тый клю­чи для сер­вис­ной учет­ной записи.

Пере­за­пус­ка­ем сер­вис сер­ве­ра vpn:

systemctl restart openvpn@server

Настрой­ка выпол­не­на. Про­бу­ем под­клю­чить­ся клиентом.