Как настроить OpenVPN сервер и включить аутентификацию через LDAP (Active Directory)


В данном примере настройка сервера выполняется с использованием дистрибутива Linux — Ubuntu Server. Клиент настраивается под Microsoft Windows. В качестве LDAP-сервера мною используется Microsoft Active Directory.
Статью можно использовать как основу для настройки OpenVPN на любой операционной системе семейства UNIX.
Подготовка системы
Установка OpenVPN
Настройка сервера и клиента
Настройка аутентификации через Active Directory
Готовим сервер
Заходим в систему под суперпользователем:
sudo su
Устанавливаем часовой пояс (у меня московское время) и синхронизируем его с сервером времени:
timedatectl set-timezone Europe/Moscow
Настраиваем задание в cron для автоматической синхронизации времени каждый день в 00:00:
mkdir -p /var/cron/tabs && echo '0 0 * * * /usr/sbin/ntpdate ru.pool.ntp.org' >> /var/cron/tabs/crontab && crontab /var/cron/tabs/crontab && crontab -l
Обновляем пакеты:
apt update && apt upgrade
Устанавливаем OpenVPN и создаем сертификаты
Устанавливаем пакеты openvpn и easy-rsa:
apt install openvpn easy-rsa
Создаем каталог easy-rsa, переходим в него и копируем рабочие файлы:
mkdir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* .
Открываем на редактирование скрипт vars и выставляем подходящие значения для своего сертификата:
# nano ./vars |
export KEY_COUNTRY="RU" export KEY_PROVINCE="Leningrad" export KEY_CITY="Sankt-Petersburg" export KEY_ORG="DMOSK COMPANY" export KEY_EMAIL="master@dmosk.ru" export KEY_CN=DMOSK export KEY_OU=DMOSK export KEY_NAME=name-openvpn-server.dmosk.ru export KEY_ALTNAMES="name-openvpn-server" #export PKCS11_MODULE_PATH=changeme #export PKCS11_PIN=1234 |
Запускаем на исполнение отредактированный скрипт:
# . ./vars |
На всякий случай, чистим каталоги от старых сертификатов:
# ./clean-all |
Генерируем первый сертификат:
# ./build-ca |
На все запросы просто нажимаем Enter, так как мы все настроили в переменных с помощью файла vars.
Создаем ключ для сервера:
# ./build-key-server server |
В конце подтверждаем подписание сертификата ([Y]).
Формируем ключ Диффи-Хеллмана:
# ./build-dh |
Теперь создаем ключ для клиента:
# ./build-key client |
В конце подтверждаем подписание сертификата ([Y]).
Ну и на последок, TLS-ключ:
# openvpn --genkey --secret keys/ta.key |
Копируем каталог с созданными сертификатами и ключами в /etc/openvpn:
# cp -r keys /etc/openvpn/ |
Настраиваем сервер и клиента
Настройка сервера
Создаем конфигурационный файл и вставляем в него следующее содержимое:
# nano /etc/openvpn/server.conf |
local 192.168.166.155 port 443 proto udp dev tun ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh2048.pem tls-auth keys/ta.key 0 server 172.16.10.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 max-clients 32 client-to-client persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 4 mute 20 daemon mode server tls-server comp-lzo |
* 192.168.166.155 — IP-адрес, на котором сервер будет устанавливать VPN-соединение. 172.16.10.0 255.255.255.0 — адресация для виртуальной сети. 32 — количество клиентов для одновременного подключения.
Создаем каталог для логов и запускаем службу сервера openvpn:
# mkdir /var/log/openvpn # service openvpn start |
Проверить работоспособность службы можно командой:
# service openvpn status |
Настройка клиента
Заходим на официальный сайт openvpn и скачиваем клиента для Windows:
https://openvpn.net/index.php/open-source/downloads.html
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client.crt, client.key, dh2048.pem, ta.key из каталога /etc/openvpn/keys на сервере.
** Самый простой способ скопировать файлы с сервера UNIX — воспользоваться программой WinSCP.
У вас, скорее всего, возникнет проблема при открытии папки keys — ошибка permission denied (не хватает прав). Для обхода этой проблемы на сервере Ubuntu скопируйте необходимые ключи во временную папку и предоставьте к ним полный доступ:
# mkdir /tmp/keys # cd /etc/openvpn/keys # cp ca.crt client.crt client.key dh2048.pem ta.key /tmp/keys # chmod -R 777 /tmp/keys |
По завершении копирования не забываем удалить папку /tmp/keys:
# rm -R /tmp/keys |
Теперь возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
client resolv-retry infinite nobind remote 192.168.166.155 443 proto udp dev tun comp-lzo ca ca.crt cert client.crt key client.key dh dh2048.pem tls-client tls-auth ta.key 1 float keepalive 10 120 persist-key persist-tun verb 0 |
*** 192.168.166.155 — IP-адрес сервера VPN.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Если все настроено правильно, произойдет подключение и значок поменяет цвет с серого на зеленый.
Настраиваем аутентификацию через LDAP
Рассмотрим действия на стороне сервера VPN, сервера LDAP и клиента.
На сервере OpenVPN
Устанавливаем пакет openvpn-auth-ldap:
apt install openvpn-auth-ldap
Редактируем конфигурационный файл openvpn (добавляем две строки):
vi /etc/openvpn/server.conf
username-as-common-name
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
В директории /etc/openvpn создаем каталог auth и в нем конфигурационный файл ldap.conf. В последний добавляем следующие строки:
mkdir /etc/openvpn/auth
vi /etc/openvpn/auth/ldap.conf
<LDAP>
URL ldap://dc1.dmosk.local
BindDN CN=openvpn,CN=Users,DC=dmosk,DC=local
Password openvpn
Timeout 15
TLSEnable no
</LDAP>
<Authorization>
BaseDN "DC=dmosk,DC=local"
SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=VPN users,CN=Users,DC=dmosk,DC=local))"
</Authorization>
* ldap://dc1.dmosk.local — контроллер домена. CN=openvpn,CN=Users,DC=dmosk,DC=local — учетная запись для связывания с контроллером домена. openvpn — пароль для учетной записи openvpn. DC=dmosk,DC=local — корень в домене, с которого начнется поиск учетной записи для аутентификации. CN=VPN users,CN=Users,DC=dmosk,DC=local — группа безопасности, в которую должна входить учетная запись для успешной аутентификации.
Перезагружаем демон openvpn:
service openvpn restart
На сервере Active Directory
Запускаем оснастку для управления пользователями и компьютерами.
В контейнере «Users» создаем учетную запись openvpn с паролем openvpn. Никаких дополнительных прав ей не даем.
* Данные контейнер, имя и пароль используются для примера. Само собой, вы можете использовать любые значения. Только не забывайте также редактировать конфигурационный файл ldap.conf на сервере.
В том же контейнере создаем группу безопасности «VPN users». В нее добавляем учетные записи всех пользователей, которым хотим предоставить возможность подключаться к VPN.
* Если в компании сложная структура Active Directory с множеством сайтов, возможно, стоит сделать паузу на 15 минут и подождать окончания репликации.
На клиенте Windows
Запускаем блокнот от имени администратора и открываем конфигурационный файл клиента openvpn (C:\Program Files\OpenVPN\config\config.ovpn).
Добавляем в него одну строку:
auth-user-pass
Сохраняем файл и проверяем работоспособность. При включении клиента появится окно для ввода логина и пароля.
Вводим логин и пароль для учетной записи, которую мы добавили в группу «VPN users» — произойдет подключение и значок поменяет цвет с серого на зеленый.