Настройка OpenVpn с доменной авторизацией в Samba 4 server AD DC через ldap auth.
Предполагается, что у вас установлена и настроена samba 4 server в режиме контроллера домена active directory.
Установлен openvpn с поддержкой ldap. В моей системе он шел отдельным пакетом openvpn-auth-ldap
В active directory существует обычный (без привелегий) пользователь ldapuser и группа openvpn, в которую добавлены пользователи, которые будут получать доступ через openvpn.
192.168.5.0 – физическая подсеть
192.168.7.0 – виртуальная подсеть
Создадим сертификаты при помощи скриптов easy-rsa. У меня они находятся в /etc/openvpn/easy-rsa так же они могут быть в /usr/share/doc/openvpn. Если у вас их нет, их можно взять здесь.
Создадим директорию для ключей:
# mkdir /etc/openvpn/keys
Загрузим переменные в оболочку:
# cd /etc/openvpn/easy-rsa/2.0/
# . ./vars
Запустим скрипт для создания серийного и индексного файла для новых ключей:
# ./clean-all
Создадим корневой сертификат.
# ./build-ca
Создадим сертификат для сервера.
# ./build-key-server server
Создадим ключ Диффи Хельман:
# ./build-dh
Создадим ключ для tls-аутентификации:
# openvpn --genkey –secret ta.key
Скопируем все ключи ca.crt, dh1024.pem, server.crt, server.key, ta.key из /etc/openvpn/easy-rsa/2.0/keys/ в /etc/openvpn/keys/
Создадим основной конфигурационный файл /etc/openvpn/server.conf
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/ldap.conf" #подгружаем плагин и конфигурационный файл для него.
proto udp # tcp/udp, рекомендуется udp, так как более «легкий» протокол.
dev tap # тип интерфейса tun/tap
port 5050
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
client-cert-not-required #без клиентского сертификата, будем использовать ldap-авторизацию.
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
server 192.168.7.0 255.255.255.0
push "route 192.168.5.0 255.255.255.0"
route 192.168.7.0 255.255.255.252
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
tls-timeout 120
persist-key
persist-tun
route-gateway 192.168.7.1
push "route-gateway 192.168.7.1"
keepalive 10 120
comp-lzo
max-clients 30
client-to-client
verb 3
user openvpn
group openvpn
status /var/log/openvpn-status.log
log /var/log/openvpn.log
auth MD5
cipher BF-CBC
Создадим конфигурационный файл для ldap-авторизации /etc/openvpn/ldap.conf
<LDAP>
URL ldap://127.0.0.1 #адрес ldap-сервера samba 4
BindDN cn=ldapuser,cn=Users,dc=test,dc=loc #Существующий обычный (без привелегий) пользователь от которого будем производить поиск в LDAP
Password User_123 #пароль пользователя для поиска в ldap-каталоге.
Timeout 15
TLSEnable no
FollowReferrals yes
TLSCACertDir /etc/ssl/certs
</LDAP>
<Authorization>
BaseDN «cn=Users,dc=test,dc=loc»
SearchFilter «(&(sAMAccountname=%u)(objectClass=user)(memberOf=cn=openvpn,cn=Users,dc=test,dc=loc))» #Правило фильтра, по которому будет осуществляться поиск, а при совпадении правила и авторизация. Логика фильтра такая же как в proftpd. Более подробно можно почитать здесь.
RequireGroup false #Штатная возможность проверки пользователя в группе. Не использовал, потому что пока не придумал как запросить пользователя через MemberAttribute.
<Group>
BaseDN «cn=Users,dc=test,dc=loc»
SearchFilter «(|(cn=openvpn))»
MemberAttribute member
</Group>
</Authorization>
Настройка windows-клиента
Скачаем клиента.
При установке будем использовать путь по умолчанию.
После установки скопируем с сервера ca.crt ta.key из /etc/openvpn/keys на клиента в директорию C:Program FilesOpenVPNconfigtest_loc
Создадим файл конфигурации C:Program FilesOpenVPNconfigtest_loc.ovpn
auth-user-pass
remote 192.168.5.50 #адрес нашего vpn-сервера
proto udp
dev tap
port 5050
client
resolv-retry infinite
ca test_loc/ca.crt
tls-auth test_loc/ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
persist-key
persist-tun
comp-lzo
Запускаем сервер openvpn, подключаемся клиентом.