Openvpn подключить сетевой диск
Статья описывает организацию удаленного доступа сотрудников на продуктах с открытым исходным кодом и может быть использована как для построения полностью автономной системы, так и окажется полезной для расширения, когда в имеющейся коммерческой системе возникает нехватка лицензий или ее производительность оказывается недостаточной.
Цель статьи — внедрить законченную систему предоставления удаленного доступа организации, что немного больше, чем «установка OpenVPN за 10 минут».
В результате мы получим систему, в которой для аутентификации пользователей будут использоваться сертификаты и (опционально) корпоративный каталог Active Directory. Т.о. мы получим систему с двумя факторами проверки — что имею (сертификат) и что знаю (пароль).
Признаком, что пользователю разрешено подключение, является его членство в группе myVPNUsr. Центр сертификации будет использован автономный.
Цена внедрения решения — только небольшие аппаратные ресурсы и 1 час работы системного администратора.
Мы будем использовать виртуальную машину с OpenVPN и Easy-RSA 3-й версии на CetntOS 7, которой из расчета на 100 подключений выдано 4 vCPU, 4 GiB RAM.
В примере сеть нашей организации 172.16.0.0/16, в которой VPN сервер с адресом 172.16.19.123 расположен в сегменте 172.16.19.0/24, DNS серверы 172.16.16.16 и 172.16.17.17, а для VPN клиентов выделена подсеть 172.16.20.0/23.
Категорически не рекомендуется отключать SELinux! OpenVPN работает без отключения политик безопасности.
Компоненты сети OpenVPN
Прежде чем мы перейдем от теории к практике, перечислим основные компоненты сети OpenVPN и объекты, с которыми нам придется иметь дело.
Удостоверяющий центр CA
Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.
Сервер OpenVPN
ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.
Клиент OpenVPN
ПО клиента OpenVPN устанавливается на все узлы, которым необходим защищенный канал передачи данный с сервером OpenVPN. При соответствующей настройке сервера OpenVPN возможна защищенная передача данных между клиентами OpenVPN, а не только между клиентами и сервером OpenVPN.
Сертификаты (публичные ключи) X.509
Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные.
Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.
Приватные ключи
Приватные ключи секретные. Они должны создаваться и храниться на каждом узле сети OpenVPN, предназначены для расшифрования данных и никогда не должны передаваться по сети.
Приватные ключи создаются на узлах сети OpenVPN одновременно с файлом запроса на получение сертификата.
Список отзыва сертификатов CRL
Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL.
После создания и каждого изменения список CRL переносится на серверы OpenVPN.
Файл Диффи-Хелмана
Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.
Статический ключ HMAC
Служит для проверки подлинности передаваемой информации. Обеспечивает защиту от DoS-атак и флуда. Создается на сервере OpenVPN.
Содержание
Установка ОС и прикладного ПО
Используем дистрибутив CentOS 7.8.2003. Нам нужна установка ОС в минимальной конфигурации. Удобно делать это с использованием kickstart, клонированием ранее установленного образа ОС и другими средствами.
После установки, назначения адреса сетевому интерфейсу (по условиям задачи 172.16.19.123), выполняем обновление ОС:
Также необходимо убедиться, что на нашей машине выполняется синхронизация времени.
Для установки прикладного ПО нужны пакеты openvpn, openvpn-auth-ldap, easy-rsa и vim как основной редактор (понадобится репозиторий EPEL).
Для виртуальной машины полезно установить гостевого агента:
для хостов VMware ESXi, или для oVirt
Настройка криптографии
Переходим в каталог easy-rsa:
Создаем файл переменных:
Далее настраиваем автономный центр сертификации.
Настройка включает экспорт переменных, инициализацию ЦС, выпуск корневых ключа и сертификата ЦС, ключ Диффи-Хеллмана, ключ TLS, а также ключа и сертификата сервера. Ключ центра сертификации необходимо тщательно оберегать и хранить в секрете! Все параметры при запросах можно оставить по умолчанию.
На этом основная часть настройки криптографического механизма закончена.
Настройка OpenVPN
Переходим в каталог OpenVPN, создаем служебные каталоги и добавляем ссылку на easy-rsa:
Создаем основной файл конфигурации OpenVPN:
Некоторые замечания по параметрам:
- если при выпуске сертификата было указно другое имя — укажите его;
- пул адресов указывайте под свои задачи*;
- маршрутов и DNS серверов может быть один или несколько;
- 2 последние строки нужны для реализации аутентификации в AD**.
**Если аутентификация в AD не нужна, закомментируйте их, следущий раздел — пропустите, а в шаблоне удалите строку auth-user-pass.
Аутентификация в AD
Для поддержки второго фактора будем использовать проверку учетной записи в AD.
Нам необходима учетная запись в домене с правами рядового пользователя и группа, членством в которой будет определяться возможность подключения.
Создаем конфигурационный файл:
- URL «ldap://ldap.abc.ru» — адрес контроллера домена;
- BindDN «CN=bindUsr,CN=Users,DC=abc,DC=ru» — каноническое имя для привязки к LDAP (УЗ — bindUsr в контейнере abc.ru/Users);
- Password b1ndP@SS — пароль пользователя для привязки;
- BaseDN «OU=allUsr,DC=abc,DC=ru» — путь, с которого начинать поиск пользователя;
- BaseDN «OU=myGrp,DC=abc,DC=ru» — контейнер разрешающей группы (группа myVPNUsr в контейнере abc.ru\myGrp);
- SearchFilter "(cn=myVPNUsr)" — имя разрешающей группы.
Запуск и диагностика
Теперь мы можем попробовать включить и запустить наш сервер:
Выпуск и отзыв сертификата
Т.к. помимо самих сертификатов нужны ключи и остальные настройки, очень удобно обернуть все это в один файл профиля. Этот файл затем передается пользователю и уже профиль импортируется на клиенте OpenVPN. Для этого создадим шаблон настроек и скрипт, формирующий профиль.
В профиль нужно добавить содержимое файлов корневого сертификата (ca.crt) и TLS ключ (ta.key).
Перед выпуском сертификатов пользователей не забудьте установить требуемый срок действия сертификатов в файле параметров. Не следует делать его слишком большим, рекомендую ограничиться максимум 180 днями.
- строки PUT YOUR. меняем на содержимое своих сертификатов;
- в директиве remote укажите имя/адрес своего шлюза;
- директива auth-user-pass используется для дополнительной внешней аутентификации.
Делаем файл исполняемым:
И можно выпустить наш первый сертификат.
Отзыв
В случае компрометации сертификата (утеря, кража) необходимо отозвать этот сертификат:
Просмотр выданных и отозванных сертификатов
Для просмотра выданных и отозванных сертификатов достаточно просмотреть индексный файл:
- первой строкой идет сертификат сервера;
- первый символ
- V (Valid) — действительный;
- R (Revoked) — отозванный.
Настройка сети
Последние шаги — настройка сети передачи — маршрутизации и межсетевых экранов.
Разрешение подключений в локальном брандмауэре:
Далее, включаем маршрутизацию IP трафика:
В корпоративной среде наверняка существует деление на подсети и нам необходимо сообщить маршрутизатору (-ам), каким образом отправлять пакеты, адресованные нашим VPN клиентам. В командной строке выполняем команду на манер (зависит от используемого оборудования):
и сохраняем конфигурацию.В случае, если в организации действуют строгие правила безопасности, на нашем VPN сервере необходимо также настроить межсетевой экран. На мой взгляд, наибольшую гибкость дает настройка iptables цепочек FORWARD, хотя настраивать их менее удобно. Немного подробнее о их настройке. Для этого удобнее всего использовать «прямые правила» — direct rules, хранимые в файле /etc/firewalld/direct.xml. Действующую конфигурацию правил можно узнать так:
Перед изменением файла сделайте его резервную копию:
Примерное содержимое файла таково:Пояснения
По существу это обычные правила iptables, иначе упакованные после появления firewalld.
Интерфейс назначения при настройках по умолчанию tun0, а внешний для туннеля может быть иным, напр., ens192, в зависимости от используемой платформы.
Последняя строка предназначена для журналирования отброшенных пакетов. Чтобы журналирование заработало, в конфигурации firewalld нужно изменить уровень отладки:
Применение настроек — обычная команда firewalld для перечитывания настроек:
Отброшенные пакеты можно просмотреть так:Что дальше
На этом настройка закончена!
Осталось на стороне клиента установить клиентское ПО, импортировать профиль и подключиться. Для ОС типа Windows дистрибутив размещен на сайте разработчика.
В завершение подключаем наш новый сервер к системам мониторинга и архивации, и не забываем регулярно устанавливать обновления.
Всем привет. Который день бьюсь над этой проблемой. Есть OpenVPN сервер у меня под Linux. Есть домен. Есть шары. Раздал пользователям флешки на которых OpenVPN Portable, устанавливать ее не надо для удобства, но запускать надо от имени администратора. В конфиге подключения:
То есть что-бы запустить скрипт, надо поднять права пользователя. Скрипт запускается, сетевые диски монтируются, но монтируются они администратору, а не пользователю который инициировал подключение.
Обновление
Он запускает другой скрипт, так как сразу монтирование не работает:
Готовим оборудование для установки OpenVPN
Если вы впервые настраиваете сеть VPN, лучше всего экспериментировать на виртуальных машинах VDS. Это могут быть VDS, созданные локально на вашем компьютере или на сервере в вашей сети, либо арендованные у провайдера. Перед арендой VDS поинтересуйтесь, поддерживается ли драйвер TUN/TAP. Некоторые провайдеры требуют дополнительной оплаты для подключения TUN/TAP.
На рис. 1. мы показали схему стенда, на котором будем устанавливать компоненты и узлы OpenVPN (имена и адреса IP хостов могут быть другими).
Рис. 1. Стенд для изучения OpenVPN.
Здесь изображены три узла (хоста), для каждого из которых потребуется отдельный VDS:
- сервер OpenVPN (vpnsrv, 192.168.0.54);
- клиент OpenVPN (vpnclient, 192.168.0.55);
- удостоверяющий центр CA (ca, 192.168.0.53)
Хосты клиента и сервера VPN соединены обычным, небезопасным каналом. В случае макета это может быть локальная сеть, в реальной жизни — канал сети Интернет. ПО OpenVPN создает в этой сети канал, обозначенный на рис. 1 красным цветом, внутри которого устанавливается безопасный шифрованный канал (обозначен зеленым цветом).
В макете хост удостоверяющего центра CA можно подключить к вашей локальной сети. Для реальной работы хост CA нужно отсоединить от сети, а обмен сертификатами и ключами осуществлять с помощью, например, USB флэш-диска.
Если к безопасности предъявляются повышенные требования, хост CA необходимо поместить в охраняемое помещение — расположенная на этой машине информация позволяет создавать ключи доступа к вашей сети VPN.
Мы проводили установку серверов OpenVPN в среде ОС Debian Linux и FreeBSD, клиентов OpenVPN в ОС Debian Linux, FreeBSD и Microsoft Windows.
Основная часть статьи посвящена установке компонентов OpenVPN для Debian Linux. Далее мы рассмотрим особенности установки для FreeBSD и Microsoft Windows.
По возможности на узлах сети OpenVPN используйте новые версии ОС. Перед тем как приступить к работе с OpenVPN, обновите пакеты Linux:
Установите на всех узлах пакет пакет zip, если он не был установлен ранее:
Этот пакет будет нужен для распаковки архива утилиты Easy-RSA, с помощью которой мы будем создавать ключи и сертификаты.
На всех узлах настройте обновление и синхронизацию времени.
Синхронизация времени необходима, т.к. сертификаты имеют период действия. Если часы, например, на хосте удостоверяющего центра CA и сервера OpenVPN не синхронны, может получиться так, что выданный удостоверяющим центром сертификат не будет действителен на узлах сети OpenVPN из-за ограничений по дате или времени.
Дальнейшие работы мы начнем с подготовки хоста удостоверяющего центра CA. Затем установим хосты сервера и клиента OpenVPN.
Список отзыва сертификатов
Иногда требуется блокировать доступ отдельных узлов к сети VPN компании, например, заблокировать доступ рабочей станции уволенного сотрудника.
Для упрощения этой процедуры в OpenVPN предусмотрен список отзыва сертификатов (Сertificate Revocation List, CRL) и простые средства для управления этим списком.
Список CRL создается в удостоверяющем центре CA и потом копируется на сервер OpenVPN. После внесения изменений в список CRL его необходимо повторно скопировать на сервер OpenVPN.
Статический ключ HMAC
Немного теории
Если раньше для создания безопасного канала передачи данных крупным компаниям и организациям приходилось прокладывать (либо арендовать) кабели и защищать их от физического доступа злоумышленников, то теперь в этом нет необходимости. С помощью VPN можно создавать защищенные виртуальные каналы, работающие через безопасный "туннель" в Интернете. Такое решение может позволить себе любая, даже очень небольшая компания.
Конечно, если предъявляются повышенные требования к защите данных, необходимо применять сертифицированные средства и обращаться к специалистам. Однако уровень защиты, обеспечиваемый OpenVPN, позволяет использовать эту технологию для многих коммерческих приложений.
Почему сеть VPN называется виртуальной и частной?
Виртуальная она потому, что узлы сети объединяются не физическими линиями, а виртуальными соединениями, которые создаются программным обеспечением (ПО) VPN.
Сеть VPN частная, так как к ней могут подключаться только узлы компании, создавшей эту сеть, а не все желающие. На каждом узле сети VPN должно работать ПО VPN. Еще там должны находиться ключи и сертификаты, обеспечивающие узлам доступ к сети VPN и криптографическую защиту передаваемых данных.
Таким образом, сеть VPN может объединять ресурсы (серверы и рабочие станции) компании в единую безопасную виртуальную сеть, созданную на базе Интернета. И теперь сотрудники, работающие удаленно (из дома или из другой страны) будут находиться как бы в общей сети своей компании. Сеть VPN подходит и для консолидации территориально разделенных офисов компании.
Обмен данными по сети
ПО OpenVPN передает данные по сети с помощью протоколов UDP или TCP с применением драйвера TUN/TAP. Протокол UDP и драйвер TUN позволяет подключаться к серверу OpenVPN клиентам, расположенным за NAT.
Для OpenVPN можно выбрать произвольный порт, что позволяет преодолевать ограничения файервола, через который осуществляется доступ из локальной сети в Интернет (если такие ограничения установлены).
[Solved] How to access windows shares via OpenVPN
Post by CraftyClown » Sun Jun 12, 2016 2:35 am
Ok, so for the past couple of years I have been successfully using OpenVPN to access SMB shares on my Freenas server. I have OpenVPN server installed on my DD-WRT router.
I now want to remotely access a number of shares I have set up on a Windows 10 machine. I have no problems accessing the shares within my LAN, however I am unable to access them remotely through OpenVPN, unless I turn off Windows firewall on the Windows 10 machine that contains the shares.
Could someone shed some light on what the problem might be?
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
server 10.8.0.0 255.255.255.0
dev tun2
proto udp
keepalive 10 120
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
management localhost 5001
verb 5Post by CraftyClown » Sun Jun 12, 2016 2:14 pm
So I've discovered that allowing the netlogon service through the Windows firewall on the destination machine, allows me to see my shares remotely.
Is this a massive security risk?
Still unsure exactly why I'm having this problem. As previously explained, all my Freenas CIF shares work flawlessly, it's just these Windows 10 shares that need a workaround
Post by CraftyClown » Mon Jun 13, 2016 8:11 pm
Still trying to troubleshoot this myself, but having absolutely no joy
This particular Windows 10 machine with the shares I need to access, can't even be pinged via OpenVPN
Local network connections work fine, as does the aforementioned allowing of the netlogon service through the windows 10 machines firewall
I'm totally baffled here and would really appreciate some pointers to help get to the bottom of it.
Post by int3nt » Mon Jun 13, 2016 9:16 pm
CraftyClown wrote: I have no problems accessing the shares within my LAN, however I am unable to access them remotely through OpenVPN, unless I turn off Windows firewall on the Windows 10 machine that contains the shares
Post by CraftyClown » Mon Jun 13, 2016 9:30 pm
CraftyClown wrote: I have no problems accessing the shares within my LAN, however I am unable to access them remotely through OpenVPN, unless I turn off Windows firewall on the Windows 10 machine that contains the shares
Well I'm glad my ignorance has entertained you
I just want to understand why this Firewall issue is only present when accessing the shares via OpenVPN and whether there is an adjustment I can maybe make server side to prevent it?
As I mentioned before, my setup has worked fine for the past couple of years when my shares were on a Freenas box, but now I need to access a Windows box I'm struggling.
Post by int3nt » Mon Jun 13, 2016 10:21 pm
Who said "ignorance" ..
You have pointed out exactly where the problem is .. Windows 10 Firewall ..
Just allow the packets from your VPN in your firewall .. or use NAT at your vpn server.
Post by CraftyClown » Mon Jun 13, 2016 11:15 pm
int3nt wrote: Who said "ignorance" ..
You have pointed out exactly where the problem is .. Windows 10 Firewall ..
Just allow the packets from your VPN in your firewall .. or use NAT at your vpn server.
Ha ha, I said ignorance, because when it comes to this vpn business I'm a bit clueless
Could you explain what you mean by "Just allow the packets from your VPN in your firewall .. or use NAT at your vpn server"?
Thanks for your time
Post by TinCanTech » Tue Jun 14, 2016 1:35 pm
CraftyClown wrote: I just want to understand why this Firewall issue is only present when accessing the shares via OpenVPN
This is due to the source IP of packets from the VPN not being in the same subnet as the Windows machine.
- Windows 10 IP subnet : 192.168.0.0/24
- VPN subnet : 10.8.0.0/24
Post by CraftyClown » Tue Jun 14, 2016 2:47 pm
CraftyClown wrote: I just want to understand why this Firewall issue is only present when accessing the shares via OpenVPN
This is due to the source IP of packets from the VPN not being in the same subnet as the Windows machine.
- Windows 10 IP subnet : 192.168.0.0/24
- VPN subnet : 10.8.0.0/24
That certainly makes sense.
I looked at the link you provided and added this line to the OpenVPN config: push "redirect-gateway def1"
Not sure if I understood that right though, as it has made no difference
Alternatively, what would I need to do to the Windows Firewall, to allow the packets that way?
OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.
Создайте пользователя с именем, например, openvpn-ca и перейдите в его домашний каталог:
Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:
Шаг 3. Настройка переменных центра сертификации
Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:
Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.
Пока мы в этом файле, отредактируем значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Для простоты зададим ему название vpnsrv2 :
Сохраните и закройте файл.
Шаг 4. Создание центра сертификации
Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.
Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars . В моем случае также потребовалось добавить симлинк к файлу openssl-1.0.0.cnf :
Вы должны увидеть следующий вывод:
Убедимся, что мы работаем в "чистой среде" выполнив следующую команду:
Теперь мы можем создать наш корневой центр сертификации командой:
Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора.
Теперь у нас есть центр сертификации, который мы сможем использовать для создания всех остальных необходимых нам файлов.
Шаг 5. Создание сертификата, ключа и файлов шифрования для сервера
Далее создадим сертификат, пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования, для нашего сервера.
Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:
Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.
Вывод опять будет содержать значения по умолчанию, переданные этой команде ( server ), а также значения из файла vars .
Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:
Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:
Для завершения этой команды может потребоваться несколько минут.
Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:
Шаг 6. Создание сертификата и пары ключей для клиента
Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера, но в этой статье для простоты мы сгенерируем подписанный ключ на сервере.
В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов, вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту.
Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars . Мы будем использовать параметр clientsrv2 для создания первого сертификата и ключа.
Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key :
В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.
Шаг 7. Настройка сервиса OpenVPN
Далее настроим сервис OpenVPN с использованием созданных ранее файлов.
Копирование файлов в директорию OpenVPN Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.
Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys , в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:
Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:
Настройка конфигурации OpenVPN Теперь, когда наши файлы находятся на своём месте, займёмся настройкой конфигурационного файла сервера:
Адрес сети VPN сервера
Найдём секцию HMAC поиском директивы tls-auth . Удалите ";" для того, чтобы раскомментировать строку с tls-auth . Далее добавьте параметр key-direction и установите его значение в "0":
Далее найдём секцию шифрования, нас интересуют закомментированные строки cipher . Удалите ";" для раскомментирования строки AES-256-CBC :
Под этой строкой добавьте строку auth и выберите алгоритм HMAC. Хорошим выбором будет SHA512 :
Наконец, найдите настройки user и group и удалите ";" для раскомментирования этих строк:
Необходимо закомментировать следующие директивы. Найдите секцию redirect-gateway и добавьте ";" в начало строки:
Чуть ниже находится секция dhcp-option .
(Опционально) Настройка порта и протокола По умолчанию OpenVPN использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку port .
(Опционально) Использование кастомного имени сертификата и ключа Если во время использования команды ./build-key-server чуть выше вы указали параметр, отличный от vpnsrv2 , измените настройки cert и key , чтобы они указывали на правильные файлы .crt и .key . Если вы использовали vpnsrv2 , эти настройки должны выглядеть таким образом:
Сохраните и закройте файл.
Шаг 8. Настройка сетевой конфигурации сервера
Далее нам необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик.
Настройка перенаправления IP Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.
Настроим это в файле /etc/sysctl.conf :
Сохраните и закройте файл.
Для применения настроек к текущей сессии наберите команду:
Настройка правил UFW для сокрытия соединений клиентов Вам нужно установить файрвол UFW. Нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat и будет скрывать весь трафик от VPN:
Сохраните и закройте файл.
Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw :
Найдите в файле директиву DEFAULT_FORWARD_POLICY . Мы изменим значение с DROP на ACCEPT :
Сохраните и закройте файл.
Открытие порта OpenVPN и применение изменений Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf , вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения. В моем случае это TCP порт 1194
Также добавьте ваш SSH порт
Теперь деактивируем и активируем UFW для применения внесённых изменений:
Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.
Шаг 9. Включение сервиса OpenVPN
Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.
Нам необходимо запустить сервер OpenVPN указав имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf , поэтому мы добавим @server в конец имени файла при его вызове:
Убедимся, что сервис успешно запущен командой:
Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:
Шаг 10. Создание инфраструктуры настройки клиентов
Далее настроим систему для простого создания файлов конфигурации для клиентов.
Создание структуры директорий конфигурации клиентов В домашней директории создайте структуру директорий для хранения файлов:
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
Создание базовой конфигурации Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
Откройте этот файл в вашем текстовом редакторе:
Сделаем несколько изменений в этом файле.
Сначала найдите директиву remote . Эта директива сообщает клиенту адрес нашего сервера OpenVPN. Это должен быть публичный IP адрес вашего сервера OpenVPN. Если вы изменили порт, который слушает сервер OpenVPN, измените порт по умолчанию 1194 на ваше значение:
Убедитесь, что протокол совпадает с настройками сервера:
Далее раскомментируйте директивы user и group удаляя ";":
Найдите директивы ca , cert и key . Закомментируйте эти директивы, так как мы будем добавлять сертификаты и ключи в самом файле:
Добавьте настройки cipher и auth согласно заданным в файле /etc/openvpn/server.conf :
Далее добавьте директиву key-direction в любое место в файле. Она должна иметь значение "1" для корректной работы сервера:
Создание скрипта генерации файлов конфигурации Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files .
Создайте и откройте файл make_config.sh внутри директории ~/client-configs :
Вставьте следующие текст в этот файл:
Сохраните и закройте файл.
Сделайте его исполняемым файлом командой:
Шаг 11. Генерация конфигураций клиентов
Теперь мы можем легко сгенерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат clientsrv2.crt и ключ клиента clientsrv2.key командой ./build-key clientsrv2 на шаге 6. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:
Если всё прошло успешно, мы должны получить файл clientsrv2.ovpn в директории ~/client-configs/files :
Доставка конфигураций на первый сервер Теперь мы должны переместить файл конфигурации первый сервер SRV1.
На первом сервере делаем все идентично, кроме следующих пунктов:
Интерфейс eth0 меняем на tun1 и адрес 10.8.1.0/24 на 10.8.0.0/24
Сохраните и закройте файл.
Перенаправление всего трафика через VPN сервер
Адрес сети VPN сервера
Протокол ставим udp4
Далее раскомментируйте следующие строки. Секция redirect-gateway :
и секция dhcp-option
также эту директиву
Прописываем правила маршрутизации на первом сервере:
Создадим скрипт /etc/openvpn/upstream-route.sh содержащий следующие команды:
Далее добавим их в файл конфигурации клиента который подключается ко второму серверу.
Также в этом файле необходимо указать чтобы OpenVPN клиент всегда занимал интерфейс tun1 :
Скопируем clientsrv2.ovpn в корневую папку OpenVPN и переиминуем его в client.conf
Настраиваем автозауск
Точно так же создаем инфраструктуру настройки клиентов. Шаг 10 И сгенерированный файл переносим на клиентскую машину.
Когда у нас появились сотрудники, работающие удаленно, пришлось думать над тем, как обеспечить им защищенный доступ к нашим хостинговым серверам, виртуальным выделенным серверам разработчиков Virtual Dedicated Server (VDS), сайтам обеспечения и сопровождения разработки и к другим ресурсам.
По соображениям безопасности доступ к этим ресурсам ограничен при помощи межсетевого экрана (файервола) по портам и адресам IP. Ежедневную перенастройку доступа при изменении динамических IP сотрудников едва ли можно назвать разумным решением.
Выход нашелся довольно быстро — это использование технологии виртуальных частных сетей Virtual Private Network (VPN) и ее свободной реализации OpenVPN. Эта реализация доступна практически для всех распространенных платформ, в том числе для планшетов и смартфонов. История развития OpenVPN насчитывает уже 12 лет (компания OpenVPN Technologies, Inc. была создана Francis Dinha и James Yona в 2002 году), так что это надежное и проверенное временем решение.
В нашей компании сеть VPN позволила предоставить защищенный доступ сотрудников к VDS, играющей роль сервера OpenVPN. И уже для фиксированного IP этого сервера был разрешен доступ к другим ресурсам компании. Попутно на сервере OpenVPN был установлен прокси Squid, что решило все проблемы доступа сотрудников с динамическими IP к защищенным ресурсам компании.
Надеюсь, что эта статья будет полезна тем, кто впервые столкнулся с необходимостью создания сети VPN или уже использует ее для решения тех или задач, а также тем, кто ищет замену коммерческим реализациям VPN.
С благодарностью приму замечания и предложения по содержимому статьи.
1 ответ 1
Подтверждаю актуальность проблемы. OpenVPN GUI для Windows с целью поднятия интерфейса и добавления маршрутов требует поднятия прав, в итоге указанный в конфиге скрипт монтирования дисков выполняется с правами администратора.
Внятного и аккуратного решения, похоже, не существует.
Придумал только костыльное решение, через журналы событий.
В конфиге подключения указываем путь до скрипта:
В скрипте up.vbs создаём запись в журнале событий c ID, равным 777 (можно выбрать любой другой ID на своё усмотрение):
На вкладке Триггеры указываем:
- начало задачи При событии
- журнал Application
- код события 777
На вкладке Действия указываем путь до скрипта монтирования дисков.
Можно сделать и проще. Конечно, если не смущают мигающие окна командной строки. Для этого можно воспользоваться фичей OpenVPN GUI для запуска скриптов. Вместо п.п. 1-2 положить в папку config файл xxxx_up.cmd (где хххх - имя OpenVPN-соединения) примерно того же содержания:
Тогда в конфиге вообще не надо ссылаться на скрипт. При установлении соединения на долю секунды появится чёрное окно командной строки, и событие будет добавлено в журнал приложений, после чего отработает планировщик задач и подмонтирует диски.
Описанный выше способ, может, и кривоват, но зато вполне нормально работает в продакшене. На время установления соединения особо не влияет. Пользователи ничего не замечают.
При желании можно создать свой отдельный журнал и писать события в него, но этот перфекционизм уже выходит за рамки решения проблемы.
[Solved] How to access windows shares via OpenVPN
Установка утилиты Easy-RSA
Все операции по созданию ключей и сертификатов можно выполнить с помощью утилиты openssl. Однако проще воспользоваться специально созданной для этого программой Easy-RSA, которая использует openssl для выполнения действий с ключами и сертификатами.
Ранее утилита Easy-RSA поставлялась вместе с OpenVPN, но теперь это отдельный проект.
Все операции с удостоверяющим центром и сертификатами можно (и нужно) проводить от имени непривилегированного пользователя.
Создайте пользователя с именем, например, ca и перейдите в его домашний каталог:
Сертификаты и удостоверяющий центр CA
Как мы уже сказали, при ассиметричной криптографии открытый ключ используется для зашифрования данных, а закрытый — для расшифрования. Чтобы избежать подделки открытого ключа, какая-то третья сторона должна его заверить. В результате этой процедуры создается так называемый сертификат открытого ключа.
Сертификат должна заверить организация, которой доверяют. Эта организация играет роль удостоверяющего центра (Certification authority, CA).
Если создается открытый ключ для публичного использования, в качестве удостоверяющего центра должна выступать коммерческая или государственная организация с неоспоримой репутацией. Эта организация публикует собственный открытый ключ, доступный всем.
Но для сети VPN, создаваемой для своей компании, вы можете самостоятельно создать свой удостоверяющий центр CA и выпускать так называемые самоподписанные сертификаты. Конечно, доверие к таким сертификатам не будет выходить за рамки вашей компании, но во-первых, этого будет вполне достаточно, а во-вторых, самоподписанные сертификаты совершенно бесплатны.
Самоподписанные сертификаты и будут играть роль публичных ключей, с помощью которых узлы вашей сети OpenVPN будут зашифровывать данные. Для расшифрования данных будут использованы приватные ключи.
Сертификаты создаются в соответствии со стандартом X.509. Этот стандарт определяет форматы данных и процедуры распределения открытых ключей с помощью сертификатов, снабженных электронными подписями.
Сертификат X.509 — это публичный ключ, содержащий такие данные, как субъект, владеющий сертификатом, имя узла, период действия, алгоритм и значение подписи сертификата, и т.д. Сертификат должен быть подписан приватным ключом удостоверяющего центра (Certification authority, CA).
Когда наш узел рабочей станции подключается к удаленному узлу (серверу) с использованием протокола TLS, сервер отправляет ему сертификат X.509. На нашем узле есть публичный ключ удостоверяющего центра CA, который подписал этот сертификат. Этот ключ используется для проверки подписи.
Таким образом, имеется способ проверки удаленного узла (сервера), к которому наш узел собирается подключиться, чтобы исключить "атаки посредника" MITM.
Создание удостоверяющего центра CA
Как мы уже говорили, задача удостоверяющего центра CA — выдача подписанных сертификатов для сервера и клиентов OpenVPN.
Чтобы получить сертификат, сервер или клиент на своем хосте генерирует файл запроса на сертификат. Этот файл запроса передается на хост CA, который создает сертификат и подписывает его. Далее подписанный сертификат передается на запросивший хост.
Одновременно с запросом сертификата создается приватный ключ. Приватные ключи создаются для всех узлов сети OpenVPN: для удостоверяющего центра CA, для сервера и всех клиентов OpenVPN.
Для безопасности файлы ключей никогда не должны покидать узлы, где они были созданы. Обмениваться можно только запросами на сертификаты и сертификатами, приватными ключами обмениваться нельзя и незачем.
На рис. 2 показан процесс получения подписанного сертификата для сервера OpenVPN.
Рис. 2. Получение сертификата для сервера OpenVPN
Сервер OpenVPN создает свой приватный ключ и файл запроса на получение сертификата. Файл запроса передается в удостоверяющий центр, например, на USB флеш-диске.
Удостоверяющий центр на основе запроса создает подписанный сертификат, который затем требуется перенести на сервер OpenVPN, также на USB флэш-диске.
Если к безопасности не предъявляется особых требований или вы только изучаете OpenVPN, можно подключить машину удостоверяющего центра к сети и передавать запросы и сертификаты, например, с помощью утилит SFTP или SCP. Можно даже совместить функции CA и, например, сервера OpenVPN в одном хосте.
Аналогичным образом необходимо получить сертификаты для всех клиентских узлов (рис. 3).
Рис. 3. Получение сертификата для клиента OpenVPN
Содержание
Установка ОС и прикладного ПО
Используем дистрибутив CentOS 7.8.2003. Нам нужна установка ОС в минимальной конфигурации. Удобно делать это с использованием kickstart, клонированием ранее установленного образа ОС и другими средствами.
После установки, назначения адреса сетевому интерфейсу (по условиям задачи 172.16.19.123), выполняем обновление ОС:
Также необходимо убедиться, что на нашей машине выполняется синхронизация времени.
Для установки прикладного ПО нужны пакеты openvpn, openvpn-auth-ldap, easy-rsa и vim как основной редактор (понадобится репозиторий EPEL).
Для виртуальной машины полезно установить гостевого агента:
для хостов VMware ESXi, или для oVirtНастройка криптографии
Переходим в каталог easy-rsa:
Создаем файл переменных:Далее настраиваем автономный центр сертификации.
Настройка включает экспорт переменных, инициализацию ЦС, выпуск корневых ключа и сертификата ЦС, ключ Диффи-Хеллмана, ключ TLS, а также ключа и сертификата сервера. Ключ центра сертификации необходимо тщательно оберегать и хранить в секрете! Все параметры при запросах можно оставить по умолчанию.
На этом основная часть настройки криптографического механизма закончена.
Настройка OpenVPN
Переходим в каталог OpenVPN, создаем служебные каталоги и добавляем ссылку на easy-rsa:
Создаем основной файл конфигурации OpenVPN:
Некоторые замечания по параметрам:- если при выпуске сертификата было указно другое имя — укажите его;
- пул адресов указывайте под свои задачи*;
- маршрутов и DNS серверов может быть один или несколько;
- 2 последние строки нужны для реализации аутентификации в AD**.
**Если аутентификация в AD не нужна, закомментируйте их, следущий раздел — пропустите, а в шаблоне удалите строку auth-user-pass.
Аутентификация в AD
Для поддержки второго фактора будем использовать проверку учетной записи в AD.
Нам необходима учетная запись в домене с правами рядового пользователя и группа, членством в которой будет определяться возможность подключения.
Создаем конфигурационный файл:
- URL «ldap://ldap.abc.ru» — адрес контроллера домена;
- BindDN «CN=bindUsr,CN=Users,DC=abc,DC=ru» — каноническое имя для привязки к LDAP (УЗ — bindUsr в контейнере abc.ru/Users);
- Password b1ndP@SS — пароль пользователя для привязки;
- BaseDN «OU=allUsr,DC=abc,DC=ru» — путь, с которого начинать поиск пользователя;
- BaseDN «OU=myGrp,DC=abc,DC=ru» — контейнер разрешающей группы (группа myVPNUsr в контейнере abc.ru\myGrp);
- SearchFilter "(cn=myVPNUsr)" — имя разрешающей группы.
Запуск и диагностика
Теперь мы можем попробовать включить и запустить наш сервер:
Выпуск и отзыв сертификата
Т.к. помимо самих сертификатов нужны ключи и остальные настройки, очень удобно обернуть все это в один файл профиля. Этот файл затем передается пользователю и уже профиль импортируется на клиенте OpenVPN. Для этого создадим шаблон настроек и скрипт, формирующий профиль.
В профиль нужно добавить содержимое файлов корневого сертификата (ca.crt) и TLS ключ (ta.key).
Перед выпуском сертификатов пользователей не забудьте установить требуемый срок действия сертификатов в файле параметров. Не следует делать его слишком большим, рекомендую ограничиться максимум 180 днями.
- строки PUT YOUR. меняем на содержимое своих сертификатов;
- в директиве remote укажите имя/адрес своего шлюза;
- директива auth-user-pass используется для дополнительной внешней аутентификации.
Делаем файл исполняемым:
И можно выпустить наш первый сертификат.Отзыв
В случае компрометации сертификата (утеря, кража) необходимо отозвать этот сертификат:
Просмотр выданных и отозванных сертификатов
Для просмотра выданных и отозванных сертификатов достаточно просмотреть индексный файл:
- первой строкой идет сертификат сервера;
- первый символ
- V (Valid) — действительный;
- R (Revoked) — отозванный.
Настройка сети
Последние шаги — настройка сети передачи — маршрутизации и межсетевых экранов.
Разрешение подключений в локальном брандмауэре:
Далее, включаем маршрутизацию IP трафика:
В корпоративной среде наверняка существует деление на подсети и нам необходимо сообщить маршрутизатору (-ам), каким образом отправлять пакеты, адресованные нашим VPN клиентам. В командной строке выполняем команду на манер (зависит от используемого оборудования):
и сохраняем конфигурацию.В случае, если в организации действуют строгие правила безопасности, на нашем VPN сервере необходимо также настроить межсетевой экран. На мой взгляд, наибольшую гибкость дает настройка iptables цепочек FORWARD, хотя настраивать их менее удобно. Немного подробнее о их настройке. Для этого удобнее всего использовать «прямые правила» — direct rules, хранимые в файле /etc/firewalld/direct.xml. Действующую конфигурацию правил можно узнать так:
Перед изменением файла сделайте его резервную копию:
Примерное содержимое файла таково:Пояснения
По существу это обычные правила iptables, иначе упакованные после появления firewalld.
Интерфейс назначения при настройках по умолчанию tun0, а внешний для туннеля может быть иным, напр., ens192, в зависимости от используемой платформы.
Последняя строка предназначена для журналирования отброшенных пакетов. Чтобы журналирование заработало, в конфигурации firewalld нужно изменить уровень отладки:
Применение настроек — обычная команда firewalld для перечитывания настроек:
Отброшенные пакеты можно просмотреть так:Что дальше
На этом настройка закончена!
Осталось на стороне клиента установить клиентское ПО, импортировать профиль и подключиться. Для ОС типа Windows дистрибутив размещен на сайте разработчика.
В завершение подключаем наш новый сервер к системам мониторинга и архивации, и не забываем регулярно устанавливать обновления.
Всем привет. Который день бьюсь над этой проблемой. Есть OpenVPN сервер у меня под Linux. Есть домен. Есть шары. Раздал пользователям флешки на которых OpenVPN Portable, устанавливать ее не надо для удобства, но запускать надо от имени администратора. В конфиге подключения:
То есть что-бы запустить скрипт, надо поднять права пользователя. Скрипт запускается, сетевые диски монтируются, но монтируются они администратору, а не пользователю который инициировал подключение.
Обновление
Он запускает другой скрипт, так как сразу монтирование не работает:
Файл Диффи-Хелмана
Файл Диффи-Хелмана (Diffie-Hellman) необходим для реализации одноименного протокола, позволяющего использовать небезопасный канал для получения общего секретного ключа. Этот ключ будет в дальнейшем использоваться для защищенного обмена данными с помощью алгоритмов симметричного шифрования.
В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Здесь имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей.
Файл Диффи-Хелмана создается на сервере OpenVPN.
Оглавление
Безопасность и шифрование
Безопасность и шифрование в OpenVPN обеспечивается библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (SSL).
В OpenSSL может использоваться симметричная и ассиметричная криптография.
В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.
Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).
Публичный ключ используется для зашифрования данных, а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.
Приватный ключ секретный, и должен оставаться в пределах узла, на котором он создан. Публичный ключ должен передаваться участникам обмена данными.
Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой "атаки посредника" (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.
Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.
Нужно осознавать, что расшифрование данных без наличия приватного ключа тоже возможно, например, методом последовательного перебора. Хотя такой метод и требует больших вычислительных ресурсов, это только вопрос времени, когда данные смогут быть расшифрованы.
Хотя размер ключа влияет на сложность расшифрования, никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.
Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.
Читайте также: