Полная версия

OSS Group


Авторизация

  

Навигация

Текущее местоположение:  OSS Group :: Wiki :: APT :: OpenVPN.README.ALT
Главное меню:   Главная   Документация   Разработка   Контакты   Поиск   Карта сайта   Wiki   Блоги
Разделы Wiki:   Admin  APT  Sandbox

OpenVPN.README.ALT

Данный файл описывает порядок настройки и особенности
использования OpenVPN из пакета openvpn-2.0.9-alt1.
---------------------------------------------------------------


Общая информация.
==================================

OpenVPN - свободная реализация SSL VPN. Каналы OpenVPN организуются 
через TUN/TAP, для создания туннеля возможно использование как UDP, 
так и TCP портов. Аутентификация и шифрование производится с 
использованием SSL и сертификатов X.509. В качестве серверов и 
клиентов возможно использование Linux, OpenBSD, FreeBSD,
NetBSD, Microsoft Windows 2000/XP and higher, Mac OS X, Solaris. 
Microsoft Windows 9x не поддерживаются, поддержка PocketPC,
возможно, появится после реализации для них драйвера TUN.

Для организации VPN в сети конфигурируется сервер, к которому
подсоединяются клиенты. Создаваемые каналы представляются в
виде виртуальных интерфейсов /dev/tunX (использовать TAP для Linux
не рекомендуется). На одном физическом сервер может быть запущено 
несколько серверов OpenVPN (на разных интерфейсах/портах), 
клиент может одновременно подключаться к нескольким серверам. 
При соответствующей настройке сервера подключённые клиенты могут
видеть друг друга.

В OpenVPN для авторизации используются сертификаты X.509.
Для этого создаётся CA или SubCA - по желанию. Создаётся 
серверный сертификат для сервера OpenVPN и клиентские сертификаты
в нужном количестве. Клиентам раздаются их сертификаты с 
ключами + сертификат CA. На сервере лежит сертификат сервера, 
его ключ и сертификат CA. По желанию - ещё список отзыва.

При установлении соединения сервер смотрит, выдан ли сертификат
клиента известным ему CA и есть у клиента ключ к нему.
Аналогичная проверка делается на стороне клиента. На ключ к 
сертификату клиента можно дополнительно наложить пароль, тогда 
при соединении он будет запрашиваться.

Ключ CA не нужен для работы ни серверу, ни тем более клиентам и
хранится отдельно. Сертификаты клиентов серверу тоже не нужны, 
они запрашиваются при соединении. Сертификат сервера на клиентах
также не хранится. 

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


Порядок настройки.
===========================
1. На сервере:  apt-get install openvpn
   По необходимости установить пакеты openvpn-docs с документаций
   и openvpn-plugins с расширениями для авторизации через PAM 
   и т.п.

2. Создать CA и выписать сертификаты для сервера. Для работы
   с CA можно использовать набор скриптов easy-rsa из 
   /usr/share/doc/openvpn-docs или графическую утилиту tinyca2.
   Работы с CA проводятся на рабочем месте администратора.
   Для tinyca:
2a. Установить пакет: apt-get install tinyca2. Запустить утилиту.
2b. Выбрать создание нового CA. Заполнить поля. Создать CA.
2c. Создать новый серверный сертификат. В качестве Common name
    задать DNS-имя сервера.
2d. Создать новый клиентский сертификат. В качестве Common name
    выбрать имя клиента.
2e. Экспортировать в pem-формате: сертификат CA, сертификат
    сервера, сертификат клиента, и ключи к сертификату сервера
    и клиента. Ключ сертификата сервера должен быть без пароля,
    клиента - по желанию.
2f. Перенести сертификат CA, сертификат сервера и ключ на сервер. 
    Положить в какой-либо подкаталог в /etc/openvpn. Для ключа
    разрешить только чтение и только для root. 

3. Переписать в /etc/openvpn пример конфигурации из 
   %doc/server.conf . 
   Имя файла может быть любым, расширение - .conf. 
   В файле отредактировать:
3a. Пути к сертификатам и ключам (параметры ca, cert, key)
3b. Диапазон адресов в директиве 'server'
3c. Путь к файлу dh.

4. Сгенерировать последний файл,  
   # openssl dhparam -out dh1024.pem 1024
   Подробнее см. в комментариях к примеру конфигурации. Длина
   ключа DH должена соответствовать длине ключа сертификата.

5. Разрешить работу с OpenVPN в настройках iptables.
   Используемый порт - 1194. Протоколы - udp и tcp. 
   Плюс настройки для создаваемого интерфейса tun0.

7. Запустить сервис openvpn, смотреть в логи на предмет ошибок в
   конфигурации.

8. Переписать на клиента его конфигурацию client.conf,
   сертификат CA, сертификат и ключ к сертификату для клиента.

9. В конфигурации клиента смотреть на директиву 'remote' с именем
   сервера и на пути к ключам.

10. Запустить openvpn на клиенте, наблюдать за установлением
    соединения.

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



Работа с несколькими каналами
=============================

OpenVPN поддерживает работу нескольких каналов на одном
компьютере. Конфигурация каналов должна лежать в /etc/openvpn.
Для каждого канала нужен:
- файл конфигурации XXX.conf
- опционально: скрипт, который будет запущен _перед_ 
  запуском канала: XXX-start.sh или XXX.sh
- опционально: скрипт, который будет запущен _после_ 
  остановки канала: XXX-stop.sh
- сертификаты и ключи, с именами, заданными в XXX.conf. Могут располагаться
  в произвольном месте, рекомендовано /etc/openvpn/keys или /etc/openvpn/keys-XXX.
- настройки клиентов в client-config-dir и пр. - см. ниже.

Также в /etc/openvpn присутствует скрипт openvpn-startup, запускающийся
перед запуском первого экземпляра openvpn и по-умолчанию загружающий
модуль ядра tun. 
После остановки последнего канала опционально вызывается скрипт openvpn-shutdown.

Управление запуском и остановкой каналов осуществляет скрипт /etc/init.d/openvpn.

Для запуска всех сконфигурированных каналов (имеющих файлы XXX.conf в /etc/openvpn/):
# service openvpn start

Если есть каналы, которые _не должны_ быть запущены при загрузке сервера, их имена
(без .conf) нужно внести в переменную MANUAL в /etc/sysconfig/openvpn. 

Для запуска всех каналов, включая перечисленные в MANUAL:
# service openvpn start ALL

Для запуска конкретного канала:
# service openvpn start XXX

Для остановки всех запущенных каналов:
# service openvpn stop

Для остановки конкретного канала:
# service openvpn stop XXX

Для перезапуска всех каналов:
# service openvpn restart

Для получения списка запущенных каналов:
# service openvpn list

Для получения статуса запущенных каналов:
# service openvpn status

Информация о каналах при этом будет записана в /var/log/messages.



Настройка конфигурации для отдельных клиентов
=============================================

В OpenVPN есть возможность задания настроек для конкретных клиентов. 
Для этого используется директива конфигурации 'client-config-dir'. 
Она задаёт путь к каталогу, в котором лежат отдельные файлы для
клиентов. Имя файла должно соответствовать полю CN сертификата клиента.
В простейшем случае клиенту может быть присвоен определённый адрес IP,
директивой вида

  ifconfig-push 192.168.XXX.101 192.168.XXX.102
  
OpenVPN для каждого клиента выделяет подсеть /30, подробнее см. в FAQ.

Также в файлах конфигурации клиентов можно указывать настройки маршрутизации,
устанавливать на клиенте переменные окружения для запускаемых на клиенте 
скриптов и т.д. - см. директиву 'push'.

По-умолчанию, если файл для клиента не находится, клиент получает
конфигурацию по-умолчанию (т.е. первый свободный диапазон адресов и т.д.).
Такое поведение можно отменить директивой 'ccd-exclusive'. В этом случае
наличие файлов конфигурации в client-config-dir является обязательным.

Клиент может отказаться получать конфигурацию, передаваемую ему 
сервером (за исключением IP). Для работы директив 'push' на стороне клиента
в файле конфигурации должна присутствовать директива 'pull'.



Особенности работы в chroot
===========================
С настройками по-умолчанию OpenVPN работает с пониженными 
привилегиями пользователя openvpn и в chroot (/var/lib/openvpn).
Это приводит к появлению ряда особенностей в его настройке и
работе. Отключить данное поведение можно, задав соответствующие 
переменные в /etc/sysconfig/openvpn, хотя это _не рекомендуется_.

При запуске OpenVPN для канала XXX происходит следующее:
- запускается процесс openvpn с ключами
    --config /etc/openvpn/XXX.conf --daemon \ 
    --writepid /var/run/openvpn-XXX.pid \
    --user openvpn --group openvpn \
    --persist-tun --persist-key \
    --chroot /var/lib/openvpn

- читается и анализируется файл конфигурации XXX.conf

- читаются и сохраняются в памяти ключи (из-за --persist-key)
  Далее обращения к этим файлам не происходит, поэтому они должны
  лежать внутри /etc/openvpn/, переносить их в chroot'е _не надо_.

- создаётся и конфигурируется /dev/tunX (из-за --persist-tun)
  Если запускается клиент, то происходит подключение к серверу и 
  авторизация. До успешного соединения с сервером (и получения с него
  настроек канала) openvpn работает под root.

- выполняется скрипт, задаваемый параметром 'up'.

- выполняется chroot, chuser, chgroup

- внутри chroot выполняется chdir('/')
  _После этого все пути из конфигурации отсчитываются от корня 
  chroot'а._
    
При подключении клиента смотрятся:
  - файл со списком отзыва сертификатов 
  - файл настройки конкретного клиента (ccd)
  - различные скрипты типа client-up, learn-address, tls-verify
    и пр. Стоит отметить, что данные скрипты выполняются 
    _внутри_ chroot и _от пользователя_ openvpn. Скорее всего,
    если такие скрипты действительно нужны, от запуска OpenVPN
    внутри chroot придётся отказаться, см. ниже.
    
Сделано это для возможности менять конфигурацию отдельных 
клиентов без необходимости перезапуска сервера в целом.
    
Все пути при работе в chroot отсчитываются от корня chroot. 
Есть опция --cd , но она применима _только_ при работе без chroot. 
    
Таким образом, в XXX.conf в директивах желательно писать _полные_ 
пути, отсчитанные от /var/lib/openvpn. Файлы должны быть доступны 
на чтение пользователю openvpn. 

Т.е., если в файле XXX.conf указан каталог для размещения конфигураций
клиентов в виде 'client-config-dir /etc/openvpn/ccd-XXX',
то расположен он должен быть в /var/lib/openvpn/etc/openvpn/ccd-XXX.

Для размещения файлов, перезаписываемых OpenVPN в процессе работы
(ifconfig-pool-persist, status) есть /var/lib/openvpn/cache.

Необходимые файлы надо располагать внутри /var/lib/openvpn вручную.
Автоматически сделать копирование всего необходимого хозяйства 
в chroot затруднительно без анализа (в общем случае многих) файлов
конфигурации.

При работе с пониженными привилегиями и внутри chroot возникает проблема
при необходимости переопределения маршрута по-умолчанию через создаваемый
канал: клиенту не хватает прав восстановить старый маршрут при закрытии 
канала. Для обхода этой ситуации следует использовать параметр 'def1' 
директивы 'redirect-gateway'. При этом на сервере в файле конфигурации 
(глобальном или конкретного клиента) переназначение маршрута задаётся 
строкой вида

 push "redirect-gateway def1"

Получив эту директиву (при наличии 'pull' в своей конфигурации), клиент
не удаляет старый маршрут, а добавляет в таблицу маршрутизации записи вида:

 0.0.0.0/1 via 192.168.231.5 dev tun0 
 128.0.0.0/1 via 192.168.231.5 dev tun0 

Оригинальный маршрут по-умолчанию при этом не используется пока существует
интерфейс tun0 канала.


Запуск OpenVPN вне chroot
=========================

При необходимости (вызванной, в-основном, потребностями запуска
различных скриптов при подключении клиентов) OpenVPN можно запускать
вне chroot. Для этого требуется указать параметр 'CHROOT=no' в 
/etc/sysconfig/openvpn. В этом случае при запуске вместо ключа
'--chroot=/var/lib/openvpn' используется ключ 
'--chdir=/var/lib/openvpn/cache'.

Параметр CHROOT глобальный и влияет на настройки всех каналов. Если есть
желание часть каналов всё-таки сконфигурировать для работы внутри chroot,
следует указать соответствующие настройки внутри файлов конфигурации 
конкретных каналов.


Возможные источники проблем
===========================

- Неверно указаны пути к client-config-dir и прочему, в результате
  OpenVPN, работающий в chroot, не может найти необходимые файлы 
  конфигурации. См. выше.

- Сообщения вида 'TLS error: unroutable control packet...' вызываются
  или расхождениями времени на сервере и клиенте, или ошибками в 
  сертификатах. Искать причины в настройках маршрутизации и межсетевых 
  экранов стоит в последнюю очередь.

- Корректность сертификатов желательно проверять 

$ openssl verify -CAfile ca.pem -purpose sslclient client.pem
$ openssl verify -CAfile ca.pem -purpose sslserver server.pem

- Сообщения вида 'TLS Error: cannot locate HMAC' вызываются 
  расхождениями в конфигурации клиента и сервера в области директивы 
  'tls-auth ta.key'.


Разное
===============
Управление пользователями можно осуществлять:
- Через выдачу сертификатов и управлением списком отзыва. 
  Список отзыва задаётся директивой crl-verify. При работе 
  в chroot список отзыва должен быть доступен openvpn - 
  он проверяется каждый раз при подключении клиента.
- Через отдельный вызываемый при подключении скрипт. 
  Имя скрипта задаётся директивой tls-verify.

Подсчёт трафика:
- Возможен, для каждого соединения передаётся в параметрах 
  скрипта client-disconnect.

Периодическая проверка сертификатов клиентов:
- Возникает при необходимости управления доступом уже подключённых 
  клиентов (т.е. даёт возможность периодической проверки сертификата 
  клиента по списку CRL). Для настройки использовать директивы 
  'reneg-sec' (повторная авторизация через определённый временной 
  интервал), 'reneg-pkts' (через определённое количество переданных 
  пакетов) или 'reneg-bytes' (через определённый объём трафика).



Ссылки:
==========================

Домашняя страница OpenVPN:
  http://www.openvpn.net

FAQ:
  http://openvpn.net/faq.html

HOWTO:
  http://openvpn.net/howto.html

Подборка информации по настройке и использованию OpenVPN:
  "http://www.ossg.ru/wiki/Admin/Настройка OpenVPN"

Форум Gentoo по OpenVPN: 
  http://forums.gentoo.org/viewtopic.php?t=233080

Сравнение различных решений для построения VPN: 
  http://mia.ece.uic.edu/~papers/volans/table.html


====Статьи====
"Introduction to OpenVPN" - статья с описанием установки и использования 
OpenVPN.
   http://www.osnews.com/story.php?news_id=5803
   
Статьи об использовании OpenVPN в различных условиях. 
   http://openvpn.sourceforge.net/articles.html

"OpenVPN 101: introduction to OpenVPN" - pdf-документ с описанием 
реализации каналов на базе OpenVPN в смешанном (Linux, Windows) окружении.
   http://www.net-security.org/article.php?id=723

"Meet OpenVPN"
   http://www.linuxjournal.com/article/7949
   
"Securing Your Wireless Network with OpenVPN" - общая статья о 
применении OpenVPN для защиты беспроводных соединений.
   http://www.informit.com/articles/article.asp?p=387173

"SSL VPNs and OpenVPN: A lot of lies and a shred of truth" - статья о 
достоинствах и недостатках VPN, основанных на SSL, и об OpenVPN в частности.
   http://software.newsforge.com/article.pl?sid=05/09/22/164231&tid=78&pagenum=1

"Установка Корпоративного VPN и прозрачного удалённого управления" -
в том числе описание методов создания дистрибутива устанавливаемого 
ПО, с преконфигурированным OpenVPN и VNC.
   http://www.securitylab.ru/analytics/240979.php



---------------------------------
Замечания и пожелания по содержимому данного файла приветствуются.
Nikolay A. Fetisov <naf@altlinux.ru>

Дата создания: 2006-05-24 18:56:49 (Фетисов Н. А. (naf))
Последнее изменение: 2007-04-18 11:34:14 (Фетисов Н. А. (naf))
Владелец: Фетисов Н. А. (naf)
Версия: 3  Все версии


  Не показывать комментарии


Wiki::APT   Карта раздела  Оглавление  Изменения за сутки  Изменения за неделю  Изменения за месяц



Быстрый поиск по Wiki:
И ИЛИ

На эту страницу ссылаются:

©2006-2024 OSS Group. All rights reserved. | Техническая поддержка: Открытые Информационные Технологии и Системы