Настройка OpenVPN с поддержкой авторизации клиентов в Active Directory

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 580]


    В предыдущих заметках мы уже рассматривали некоторые типовые конфигурации OpenVPN, а сегодня мы рассмотрим конфигурацию с поддержкой авторизации в Active Directory. Такая конфигурация является более гибкой и защищенной заменой pptp встроенной в блок «Маршрутизация и удаленный доступ» Windows.

    Интеграция OpenVPN и ActiveDirectory

    Создание пар ключей рассматривать сегодня не будем, а лишь напомним основную последовательность:

    • Исправляем vars
    • Генерируем dh командой ./build-dh
    • Генерируем ca, ./buitd-ca
    • Создаем ключи сервера (./build-key-server) и клиента (./build-key)

    Устанавливаем необходимые пакеты:

    # yum install openvpn-auth-ldap.x86_64 openvpn.x86_64 easy-rsa.noarch

    Создаем конфигурационный файл серверной части:

    port 7096
    proto tcp-server
    dev tap-vpn
    ca ca.crt
    cert vpn-server.crt
    key vpn-server.key
    dh dh2048.pem
    script-security 2
    up vpn-up.sh
    plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
    mode server
    tls-server
    keepalive 10 120
    duplicate-cn
    username-as-common-name
    push "route 10.5.0.0 255.255.0.0 172.16.0.1"
    comp-lzo
    persist-key
    persist-tun
    status openvpn-status.log
    verb 3

    Конфигурация может показаться довольно обычной, но есть некоторые моменты о которых сейчас расскажу подробнее.

    script-security 2
    up vpn-up.sh

    Этот блок реализует исполнение скрипта vpn-up.sh при старте openvpn. Точнее, этот скрипт запускается когда интерфейс «поднимается», а в случае сервера он «поднимается» при запуске службы. Собственно, сам скрипт добавляет интерфейс openvpn к сетевому мосту, который «смотрит» в локальную сеть. Содержимое файла vpn-up.sh выглядит следующим образом:

    #!/bin/sh

    /usr/sbin/brctl addif bridge-2-lan tap-vpn
    /usr/sbin/ifconfig tap-vpn up
    exit 0

    Обратите внимание, что скрипт принудительно завершается статусом «0». Можно было бы предусмотреть обработку ошибок, но в данном скрипте вероятность ошибки несущественна. Если скрипт будет завершен с любым отличным от «0» кодом завершения, то служба openvpn запущена не будет. Так же, я рекомендую использовать полные пути к командам, так как переменная PATH может быть искажена для системных пользователей.

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

    Реализует функционал авторизации с использованием учетных данных Active Directory. Конфигурационный файл плагин ,соответственно, расположен в файле /etc/openvpn/auth/ldap.conf и в нашем случае выглядит следующим образом:

    <LDAP>
    URL ldap://172.16.0.3
    BindDN CN=ovpn,CN=Users,DC=gigant,DC=com
    Password SBG5AdvTDUdbX
    Timeout 15
    TLSEnable no
    </LDAP>
    <Authorization>
    BaseDN "CN=Users,DC=gigant,DC=com"
    SearchFilter "(&(objectCategory=person)(objectClass=user)(sAMAccountName=%u)(memberOf=CN=VPN Group,CN=Users,DC=gigant,DC=com))"
    RequireGroup false
    </Authorization>

    Параметры достаточно типовые для систем реализующих функционал авторизации в Active Directory, а интерес представляет только фильтр поиска (SearchFilter) выбирающих пользователей, являющихся членами группы VPN Group. Если вы посмотрите пример этого конфигурационного файла входящий в поставку дистрибутива, то там анализ принадлежности пользователя группе реализован несколько иначе, но мы использовали директиву RequireGroup и отключили этот функционал.

    duplicate-cn
    username-as-common-name

    Так как, для клиентов мы использовали один набор сертификатов, а вопросы авторизации мы переложили на Active Directory, то нам необходимо использовать имя пользователя вместо cn сертификата. Представленные выше команды и реализуют указанный функционал.

    Конфигурационный файл клиента стандартный и единственным отличием является наличие параметра auth-user-pass. Данный параметр вызывает диалог ввода имени пользователя и пароля при запуске конфигурационного файла.

    Учетные данные пользователя можно «встроить» в конфигурационный файл клиента используя директиву:

    auth-user-pass login.conf

    Файл login.conf соответственно будет содержать имя пользователя и пароль в виде двух строк:

    username
    password

    На этом вопрос типовой настройки авторизации с использованием учетных данных ActiveDirectory можно считать закрытым. Данная инструкция конечно рассматривает только общие вопросы и более детально внедрение производится с учетом реалий вашей сети.


    Обсуждение статьи

    Ваш комментарий: