Данный файл описывает порядок настройки и особенности использования 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 Карта раздела Оглавление Изменения за сутки Изменения за неделю Изменения за месяц