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

Обновлено Обновлено: Опубликовано Опубликовано:

В данном примере настройка сервера выполняется с использованием дистрибутива Linux — Ubuntu Server. Клиент настраивается под Microsoft Windows. В качестве LDAP-сервера мною используется Microsoft Active Directory.

Статью можно использовать как основу для настройки OpenVPN на любой операционной системе семейства UNIX.

Готовим сервер

Заходим в систему под суперпользователем:

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

Загрузка клиента openvpn

Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».

Переходим в папку 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» от имени администратора (это важно).

Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:

Запуск подключения openvpn-клиента к серверу

Если все настроено правильно, произойдет подключение и значок поменяет цвет с серого на зеленый.

Настраиваем аутентификацию через 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

Сохраняем файл и проверяем работоспособность. При включении клиента появится окно для ввода логина и пароля.

Аутентификация openvpn через LDAP

Вводим логин и пароль для учетной записи, которую мы добавили в группу «VPN users» — произойдет подключение и значок поменяет цвет с серого на зеленый.

# Active Directory # Linux # Ubuntu # UNIX # Безопасность # Настройки # Серверы # Сети
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет