Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> OpenVPN + LDAP

OpenVPN с авторизацией в OpenLDAP

Автор: aleksey.kravchenko.


    Статья о том, как настроить OpenVPN с авторизацией пользователей в OpenLDAP. OpenVPN настраивал по статье Openvpn + FreeBSD.

Задача: обеспечить безопасный удаленный доступ к ресурсам локальной сети, используя для
авторизации доменные учетные записи, хранящиеся в OpenLDAP. После подключения клиенту должен
выдаваться IP-адрес и адрес локального DNS-сервера. Основной шлюз клиента меняться не будет,
чтобы сохранить доступ к другим ресурсам Интернет.

Условия: в локальной сети 192.168.1.0 есть маршрутизатор, который имеет IP-адрес
192.168.1.1. Маршрутизвтор подключен к провайдеру по PPPoE и имеет реальный IP-адрес
22.22.22.22. Модем настроен в режиме "мост". Для подключения используется ppp. На этом
маршрутизаторе запущен DNS-сервер BIND и межсетевой экран ipfw, и именно он будет
выполнять функцию VPN-сервера. Версия FreeBSD - 6.2. OpenLDAP-сервер имеет IP-адрес
192.168.1.3.


                               1. Установка программ
Шаг 1
Установите OpenVPN из портов. Не удаляйте исходный код!
# cd /usr/ports/security/openvpn/
# make install
# rehash

Шаг 2
Установите из портов re2c:
# cd /usr/ports/devel/re2c
# make install clean
# rehash

Шаг 3
Скачайте архив http://openvpn-auth-ldap.googlecode.com/files/auth-ldap-2.0.3.tar.gz и установите:
# cd /home/krav/install/
# tar xzpf auth-ldap-2.0.3.tar.gz
# cd auth-ldap-2.0.3
# ./configure \
? -–prefix=/usr/local \
? –-with-openldap=/usr/local \
? –-with-openvpn=/usr/ports/security/openvpn/work/openvpn-2.0.6/
# make
# make install

Примечание! Это для FreeBSD 6.2. В 7-ке появился порт /usr/ports/security/openvpn-auth-ldap

                               2. Создание сертификатов
Эта часть практически полностью скопирована из статьи http://www.lissyara.su/?id=1549

Шаг 1
Загрузите переменные в оболочку:
# cd /usr/local/share/doc/openvpn/easy-rsa/
# sh
# . ./vars

Шаг 2
Запустите скрипт для создания серийного и индексного файла для новых ключей:
# ./clean-all

Шаг 3
Создайте сертификат. При создании сертификата введите всю необходимую информацию:
# ./build-ca
Generating a 1024 bit RSA private key
.....++++++
....++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:UA
State or Province Name (full name) [NA]:Dnepropetrovsk
Locality Name (eg, city) [BISHKEK]:Dnepropetrovsk
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:kravchenko@xxxxxx.dp.ua

Шаг 4
Создайте сертификат X.509 для сервера. На вопросы отвечайте как и на предыдущем шаге, после этого введите пароль и имя организации, и подтвердите подпись:
# ./build-key-server server
Generating a 1024 bit RSA private key
...........................++++++
..........................................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:UA
State or Province Name (full name) [NA]:Dnepropetrovsk
Locality Name (eg, city) [BISHKEK]:Dnepropetrovsk
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:kravchenko@xxxxxx.dp.ua

Шаг 5
Создайте ключ Диффи Хельман:
# ./build-dh

Шаг 6
Выйдите из оболочки sh и создайте ключ для tls-аутентификации:
# exit
# openvpn --genkey --secret \
? /usr/local/share/doc/openvpn/easy-rsa/keys/server/ta.key

Серверу достаются файлы ca.crt, dh1024.pem, server.crt, server.key, ta.key, а клиенту ca.crt и ta.key.


                               3. Настройка сервера
Шаг 1
Создайте 2 директории:
# mkdir /usr/local/etc/openvpn
# mkdir/usr/local/etc/openvpn/keys

Шаг 2
Скопируйте все ключи (ca.crt, dh1024.pem, server.crt, server.key, ta.key) в /usr/local/etc/openvpn/keys.
Шаг 3
Создайте конфигурационный файл /usr/local/etc/openvpn/server.conf:
# Включаем плагин и в качестве аргумента - конфигурационный файл
plugin /usr/local/lib/openvpn-auth-ldap.so "/usr/local/etc/openvpn/openvpn-auth-ldap.conf"
port 2000
proto tcp
# На tun0 у меня провайдер PPPoE
dev tun1
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
client-cert-not-required
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
#client-config-dir ccd
route 10.8.0.0 255.255.255.252
tls-server
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
tls-timeout 120
auth MD5
cipher BF-CBC
keepalive 10 120
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

Шаг 4
Создайте директории и файлы, указанные в переменных status и log:
# mkdir /var/log/openvpn/
# cd /var/log/openvpn/
# touch openvpn-status.log openvpn.log

Шаг 5
В директории /usr/local/etc/openvpn/ создайте файл openvpn-auth-ldap.conf следующего содержания:
<LDAP>
# Адрес OpenLDAP сервера
    URL             ldap://192.168.1.3
# Пользователь в LDAP с правом поиска
    BindDN          cn=manager,dc=mycompany,dc=local
# Его пароль
    Password        password
    Timeout         15
    TLSEnable       no
    FollowReferrals yes
</LDAP>

<Authorization>
        BaseDN          "ou=users,dc=mycompany,dc=local"
        SearchFilter    "(&(uid=%u)(objectclass=posixAccount))"
        RequireGroup    false
# Group у меня не используется        
        <Group>
                BaseDN          "ou=groups,dc=mycompany,dc=local"
                SearchFilter    "(|(cn=developers)(cn=artists))"
                MemberAttribute uniqueMember
        </Group>
</Authorization>

Шаг 6
Для запуска OpenVPN внесите в файл /etc/rc.conf строки:
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"

Шаг 7
Внесите изменения в конфигурационный файл BIND, чтобы VPN-клиенты могли использовать DNS 192.168.1.1. К перечисленным сетям в переменной allow-auery добавьте сеть 10.8.0.0/24:
allow-query     { 192.168.1.0/24; 127.0.0.1; 10.8.0.0/24; };

Шаг 8
Добавьте правила в межсетевой экран:
${FwCMD} add allow all from any to me dst-port 2000
${FwCMD} add allow all from 10.8.0.0/24 to ${lan_net}
${FwCMD} add allow all from ${lan_net} to 10.8.0.0/24

Шаг 9
Запустите OpenVPN:
# /usr/local/etc/rc.d/openvpn start

                               4. Настройка клиента Windows XP
Шаг 1
Скачайте и установите openvpn-2.0.6-gui-1.0.3-install.exe

Шаг 2
Создайте конфигурационный файл C:\Program Files\OpenVPN\config\openvpn.ovpn. И скопируйте в эту директорию сертификат ca.crt и ключ ta.key.
auth-user-pass
dev tun
proto tcp
# Внешний IP сервера OpenVPN
remote 22.22.22.22
port 2000
client
resolv-retry infinite
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
tls-client
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
push "dhcp-option DNS 192.168.1.1"
verb 3

Шаг 3
Подключитесь к серверу OpenVPN. Для этого:
1. Нажмите правой кнопкой мыши на иконке «OpenVPN GUI» --> «Connect».
2. На приглашение ввести логин и пароль, введите свой логин и пароль в домене (LDAP-е).

Примечание! При таких настройках клиенту не будет выдаваться шлюз по умолчанию, только IP, DNS.



размещено: 2008-07-14,
последнее обновление: 2008-08-11,
автор: aleksey.kravchenko


Kukulkan, 2008-08-08 в 16:13:00

Моветон устанавливать из исходников.
Утилита уже больше года присутствует в портах:
/usr/ports/security/openvpn-auth-ldap

p.s. У этого плагина, кстати, есть одна полезная функция - добавлять адрес, назначенный vpn клиенту, в определяемую настройками таблицу PF.

artem, 2008-09-01 в 12:06:38

/>. ./vars
/usr/local/bin/.: Permission denied.


/>./vars
./vars: Permission denied.


./build-ca
./build-ca: Permission denied.



что за фигня? вроде раньше такого не было, сижу под рутом

фкеуь, 2008-09-01 в 12:08:59

openvpn/easy-rsa/2.0/>sh
# . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server
# ./build-ca
./build-ca: Permission denied

InventoR, 2008-11-24 в 15:08:23

Под bash все заработало.

GRooVE, 2009-07-02 в 0:50:12

chmod +x

JIeXa, 2010-01-28 в 23:41:49

Дико извиняюсь, но возможно ли это подружить с WinLDAP(ака ActiveDirectory)?

DogEater, 2010-02-03 в 21:41:48

>>Дико извиняюсь, но возможно ли это подружить с WinLDAP(ака ActiveDirectory)
видимо да.
http://www.matthardy.info/2009/configure-openvpn-to-authenticate-against-active-directory-ldap-in-linux/
и http://code.google.com/p/openvpn-auth-ldap/

*, 2011-02-25 в 23:36:39

на 10 строчке второе слово поправьте
МАРШРУТИЗАТОР

*, 2011-02-25 в 23:36:39

на 10 строчке второе слово поправьте
МАРШРУТИЗАТОР

InventoR, 2012-02-08 в 19:02:28

В общем у связки с группой проблема одна, она гребет имя из CN и если там тря ля ля ля ля, то логин не пройдет.
рекомендую в этом случаю юзать так:
SearchFilter    \"(&(sAMAccountName=%u)(memberof=CN=vpn,CN=Users,DC=local,DC=ua))\"

Это для АД от MS



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1604 секунд
Из них PHP: 54%; SQL: 46%; Число SQL-запросов: 77 шт.
Исходный размер: 33078; Сжатая: 7763