Файл tls auth отсутствует

Обновлено: 01.07.2024

Что же делать, если необходимо обеспечить настоящую безопасность, и быть уверенным в защищенности трафика и IP-адреса? Ответ прост – отказаться от Proxy-серверов использовать более надежную и продвинутую технологию – подключение через VPN.

В интернете полно статей о настройке сервера OpenVPN для подключения пользовательских компьютеров к удаленной сети, и создается впечатление, что это его единственное применение. Кто-то даже считает, что с появлением WireGuard он вовсе утратил свою актуальность. Однако в OpenVPN есть много менее известных возможностей, и он все еще остается одним из самых гибких, многофункциональных и простых в настройке решений.

К примеру, если указать несколько опций remote в конфиге клиента, клиент автоматически переключится на следующий адрес сервера, если не сможет подключиться к первому. Именно гибкость настройки и разнообразие опций позволяют OpenVPN успешно конкурировать с другими похожими проектами.

Кратко о настройке и установке OpenVPN сервера

Взять скрипт Nyr/openvpn-install, запустить от root.

В процесс запуска будет задано несколько вопросов.

  • протокол udp
  • порт 1194
  • DNS-сервера — локальные
  • external ip — адрес шлюза в интернете, через который будет доступен vpn-сервер

Добавление пользователя

В случае, если не используются токены, добавление пользователя осуществляется через тот же скрипт. Скрипт по сути генерит пользовательский ovpn-конфиг и вставляет туда сертификат, подписанный корневым сертификатом.

Если используются токены (см. ниже раздел про токены) тогда сертификат выписывается руками на основе запроса на сертификат, который генерится на токене. Пользовательский конфиг надо делать руками из имеющегося шаблона (из того же самого, из которого генерит конфиг скрипт). Шаблон лежит тут /etc/openvpn/client-common.txt . Он не входит в поставку openvpn и генерится скриптом в процессе настройки.

Удаление пользователя
Удаление пользователей производится через тот же скрипт установки. Сертификат добавляется в CRL, новый CRL подпихивается vpn-серверу. Все сертификаты, которые есть в CRL сервер считает недействительными и принимать отказывается.

Как отозвать сертификат вручную:

А теперь о возможностях

tls-auth

Параметр tls-auth добавляет использование еще одной подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Теперь пакет, не имеющий такой подписи, будет отбрасываться, не обрабатываясь. Это обеспечит дополнительный уровень безопасности протокола SSL/TLS, защищая систему от таких атак, как:

  • Сканирование прослушиваемых VPN-сервером портов
  • Инициация SSL/TLS-соединения несанкционированной машиной (хотя подобные рукопожатия не проходят и при стандартной конфигурации OpenVPN, tls-auth отсекает их на значительно более раннем этапе)
  • DoS-атаки и флуд на порты OpenVPN
  • Переполенение буфера SSL/TLS

Для активации tls-auth необходимо сгенерировать дополнительный секретный ключ, который будет использоваться совместно со стандартной парой ключей RSA.Сделать это можно с помощью следующей команды:

Теперь в стандартной директории, в которой хранятся сгенерированные ключи (easy-rsa) появится еще один файл ta.key, который нужно перенести на все устройства сети OpenVPN через защищенный канал (в те же директории, в которых хранятся пользовательские ключи .crt и .key. Затем следует добавить или расскоментировать в файле конфигурации сервера (server.conf) следующую строку:

tls-auth ta.key 0

Также нужно в файле настроек клиента (client.ovpn) добавить/расскоментировать аналогичную строку:

tls-auth ta.key 1

Site to site

OpenVPN — очень простой способ соединить два хоста или сети безопасным туннелем типа точка — точка.

Еще менее известный факт: в этом режиме OpenVPN может работать со статическими ключами (pre-shared key), без сертификатов. Более того, чтобы сгенерировать такой ключ, тебе не понадобится никаких инструментов, кроме самого OpenVPN.

Предположим, что мы хотим постоянное подключение к удаленной машине с адресом 203.0.113.100. Сгенерируем ключ:

Настроим локальную сторону:

Теперь скопируем файл ключа на удаленную машину и напишем там противоположный конфиг:

По желанию можно добавить туда опции для работы в режиме демона:

Осталось сохранить конфиг в файл вроде /etc/ openvpn / s2s . conf и запустить openvpn -- config / etc / openvpn / s2s . conf .

Идентификация соединений происходит только по ключу, адреса хостов никак не учитываются. Указать опцию remote нужно только на одной стороне — «клиенте». Сторона без опции remote будет ждать подключения. Из-за этого OpenVPN удобен для соединений site to site с хостами, у которых нет статического адреса, и даже хостами за NAT.

Подключение удаленных сетей в OpenVPN

Режим site to site хорош для небольшого числа соединений. Если у вас десятки или сотни удаленных сетей, настраивать туннель к каждой крайне утомительно. Можно автоматизировать этот процесс с помощью Ansible или чего-то еще, но в OpenVPN есть встроенный механизм для этой задачи.

Предположим, что сеть вашей организации — 10.0.0.0/16, а для удаленных клиентов у вас выделена 10.0.0.0/21. Пусть ваш сервер OpenVPN использует сетевой интерфейс tun0.

Прежде всего нужно создать маршрут ко всей сети через этот интерфейс. В Linux команда будет такой:

Тонкий момент: ядро Linux удаляет маршруты, когда интерфейс исчезает или уходит в down. По этой причине нужно сделать, чтобы этот маршрут создавался при перезапуске OpenVPN. Самое чистое решение — использовать демон маршрутизации вроде Quagga/FRRouting или BIRD, который сам следит за состояниями сетевых интерфейсов и пересоздает маршруты по необходимости. Самое простое — добавить команду в скрипт запуска.

Одну подсеть мы выделим для клиентских интерфейсов и укажем ее в опции server. Кроме того, нужно указать в конфиге topology subnet. Чтобы указывать, какая сеть какому клиенту принадлежит, нам снова понадобится client-config-dir.

Разумеется, клиентам потребуется доступ к корпоративной сети, поэтому мы выдадим им маршрут к 10.0.0.0/16 с помощью push.

Добавим следующее в конфиг сервера:

Теперь создадим конфиг клиента. Предположим, вы хотите подключить офис с сетью 10.0.1.0/24 и вы создали для его маршрутизатора сертификат с CN=my-remote-office.

Пропишите следующее в /etc/openvpn/client-configs/my-remote-office:

Теперь, когда этот клиент подключится, OpenVPN ассоциирует сеть 10.0.1.0/24 с его подключением.

proto udp

Несмотря на то, что OpenVPN предусматривает использование как TCP, так и UDP-протокола для подключения, рекомендуем использовать UDP, так как он обеспечивает более высокий уровень защиты от DoS-атак и сканирования портов сравнительно с протоколом TCP. Выбор протокола устанавливается опцией proto в файле конфигурации сервера. Установите proto udp.

Внимание! Если вы сменили протокол на уже работающем сервере, не забудьте сделать это также в файлах конфигурации клиентов, а затем проверить разрешение для используемого порта UDP (по-умолчанию 1194) в вашем Firewall и перезапустить VPN-сервер.

user/group (не работает на Windows)

user nobody
group nobody

Работа VPN в непривилегированном режиме (только для Linux)

Настройка OpenVPN на работу в непривилегированном режиме:

Добавьте представленный ниже скрипт в файл /usr/local/sbin/unpriv-ip (не забудьте указать этому файлу права на исполнение):

1cloud ALL=(ALL) NOPASSWD: /sbin/ip

Вы можете дать разрешения также и для группы пользователей:

%users ALL=(ALL) NOPASSWD: /sbin/ip

Теперь необходимо добавить в файл конфигурации OpenVPN следующие строки:

dev tunX/tapX
iproute /usr/ local /sbin/unpriv-ip
(Необходимо выбрать один из интерфейсов (tun или tap) и заменить X на номер вашего интерефейса.

От имени пользователя root активируйте сетевой адаптер и дайте разрешение на управление им для пользователя и/или группы. Команда, приведенная ниже, создаст интерфейс tunX (необходимо заменить на название вашего адаптера) и даст требуемые разрешения для пользователя 1cloud и группы users.

Теперь вы можете запустить OpenVPN от имени указанного выше рядового пользователя.

Хранение всех настроек клиента в одном файле

Очень часто можно получить от удаленной стороны конфиг OpenVPN для подключения к серверу и отдельные файлы с CA, клиентским сертификатом и ключом. Это приемлемо для админов, но крайне неудобно для конечных пользователей.

К счастью, ключи и сертификаты можно хранить вместе с настройками. Например:

Пользователю достаточно сохранить этот файл (к примеру, в my-vpn.ovpn) и запустить openvpn —config my-vpn.ovpn или указать этот файл в графическом интерфейсе клиента.

chroot (не работает на Windows)

Внимание: т.к. опция chroot изменяет домашнюю директорию для сервиса OpenVPN, следует перенести в jail-каталог все используемые при инициализации OpenVPN файлы.

Увеличение размера RSA-ключа

Размер RSA-ключа шифрования устанавливается директивой KEY_SIZE файла easy-rsa/vars, значение которой должно быть установлено до создания любых ключей OpenVPN. По-умолчанию этот параметр имеет значение 1024 bit , но может быть увеличен до 2048 bit без заметного влияния на производительность виртуальной частной сети, за исключением едва заметного увеличения времени рукопожатия (handshake).

Увеличение размера симметричных ключей

Общение с процессом OpenVPN через сокет

OpenVPN предоставляет интерфейс, через который вы можете просмотреть информацию о подключениях и выполнить ряд административных задач. Взаимодействовать с ним можно через сокет: либо TCP/IP, либо UNIX.

Есть вариант подключаться к сокету IP через Telnet. Это удобно, но нужно следить за безопасностью доступа к этому сокету. Обеспечить безопасность UNIX domain socket куда проще, поэтому мы выберем именно этот способ.

Нужно добавить в конфиг сервера следующее:

Подключиться к этому сокету можно с помощью утилиты socat:

В выводе help вы найдете целый ряд полезных команд. К примеру, kill jrandomuser принудительно разорвет все подключения клиента с CN=jrandomuser. В выводе команды status можно увидеть информацию о всех текущих подключениях.

Если вас интересует именно информация о клиентских туннелях и вы хотите получать ее без необходимости каждый раз подключаться к сокету, можете добавить вот эту опцию в конфиг:

Данные в файл /tmp/openvpn.status будут писаться в таком же формате, как вывод команды status, вроде:

Хранение закрытого ключа CA на отдельной машине

Дело в том, что корневой CA-сертификат не обязательно должен находиться на сервере OpenVPN. Вы вполне можете использовать отдельную машину для подписи ключей, держа ее физически изолированной, и перенося ключи с использованием отличных от интернет каналов, например съемных дисков. Это существенно осложнит потенциальному злоумышленнику задачу кражи ключа Центра Сертификации.

Отзыв сертификатов

Процедура отзыва сертификата подразумевает досрочное прекращение активности ранее созданного и заверенного сертификата пользователя во избежание его дальнейшего использования . Ниже представлены самые распространенные предпосылки для отзыва:

  • Закрытый клиентский ключ (.key), связанный с отзываемым сертификатом (.crt), скомпрометирован или украден
  • Пользователь забыл пароль пароль для своего ключа
  • Вы хотите по собственной инициативе прекратить доступ пользователя к виртуальной частной сети

В рамках данного примера, мы отзовем сертификат пользователя client1.

Войдите в терминал (Linux) или командную строку (Windows) и откройте директорию easy-rsa, аналогично тому, как вы делали это при первичной генерации ключей сервера и клиентов OpenVPN. Введите следующие команды:

Вы должны увидеть результат, похожий на этот:

Валидация серверного сертификата

Для исключения атак типа Man-in-the-Middle, когда машина злоумышленника выдает себя за VPN-сервер для клиента, следует указать пользователям на необходимость проверки серверного сертификата. Для этого существует несколько способов. В данном примере мы рассмотрим метод, применимый для OpenVPN версий 2.1 и выше:

При генерации сертификата сервера укажите значения полей key usage и extended key usage (см. документацию easy-rsa для получения более подробных сведений). Затем добавьте/расскоментируйте следующую строку в файле параметров клиента:
remote-cert-tls server

Используйте перечисленные выше инструменты для повышения уровня безопасности вашей виртуальной частной сети и обращайте внимание на сохранность других элементов: используемых каналов передачи ключей и сертификатов, физическая сохранность узлов сети VPN, настройки Firewall и антивирусного ПО, права доступа пользователей к рабочим директориям.

Данная статья о том как настроить OpenVPN сервер на Windows Server 2008R2 и сконфигурировать OpenVPN клиента. А также, как организовать с его помощью каналы между удалёнными офисами. Бывает, что необходимо построить связь между удалёнными компьютерами без лишних затрат на оборудование и ПО. В этом поможет такая бесплатная и известная программа, как OpenVPN - свободная реализация технологии виртуальной частной сети (VPN).


Настройка OpenVPN Серверная часть:

Установка OpenVPN на сервере, настройка происходит на сервере Windows Server 2008R2:



Для установки сервера важно установить галочку “ EasyRSA 2 Certificate Manager Scripts ”




Во время установки в систему устанавливается виртуальный сетевой адаптер TAP - Windows Adapter V 9 – ему и будет выдаваться ваш IP -адрес и маска вашей виртуальной сети.



ВАЖНО! Возможные проблемы с адаптер TAP - Windows Adapter V 9:

Бывает что сетевой адаптер автоматически не создался, его можно создать или удалить в ручную.



Либо если драйвер адаптера в устройствах установился не корректно



В таком случае надо отключить установку драйверов без цифровой подписи.Как это сделать:

Способ №1 . Командная строка

Запустите командную строку с правами администратор, и в ней последовательно наберите следующие команды:

bcdedit.exe -set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON

Если данные команды не помогли, и ошибка 52 продолжает наблюдаться, тогда вновь запустите командную строку, и там наберите:

bcdedit.exe /deletevalue loadoptions

bcdedit.exe -set TESTSIGNING OFF

Способ № 2 . Отключите проверку цифровых подписей (для Windows 8, 10)

Этот способ позволит вам установить драйвера для проблемных устройств без проверки их подписи. Выполните следующее:

На главном экране нажмите на кнопку «Пуск», там кликните на кнопку «Выключение» (Power), зажмите клавишу «Shift», а затем кликните на «Перезагрузка» (клавишу «Shift» не отжимайте);

Не отжимайте указанную клавишу пока ПК не перезагрузится, и вы не увидите опции меню восстановления (Advanced Recovery Options). В нём выберите «Диагностика», далее «Дополнительные параметры», затем «Параметры загрузки», и здесь кликаем на «Перезагрузить». В открывшемся перечне опций необходимо выбрать опцию "Отключить обязательную проверку подписи драйверов".

Перезагрузите ПК в данном режиме, и вы сможете легко установить ранее проблемный драйвер.

Способ № 3 . Временно отключите проверку цифровой подписи драйверов

Эффективным способом избавиться от ошибки 52 является выбор опции отключения проверки подписи драйверов при загрузке ОС. Для этого в начале загрузки ПК быстро жмите на F8, и после того, как появится меню дополнительных параметров загрузки, выберите опцию "Отключение обязательной проверки подписи драйверов". Загрузите систему в данном режиме, и проблема с ошибкой 52 временно исчезнет..

Способ № 4 . Задействуйте административные шаблоны

Нажмите на Win+R, там наберите gpedit.msc. Перейдите по пути «Конфигурация пользователя», затем «Административные шаблоны», далее «Система» — «Установка драйвера». Справа выбираем опцию «Цифровая подпись драйверов устройств».

Выберите указанную опцию

Выберите указанную опцию

Дважды кликаем на ней, и в появившемся окне слева выбираем «Отключено». Нажимаем на «Применить», и перезагружаем ПК.

Способ № 4 . Использование утилиты "Driver Signature Enforcement Overrider"

Устанавливаем драйвера в обычном режиме проблемы не будет.

Преступаем к настройке OpenVPN сервеной части:

Запускаем командную строку от имени администратора, нажимаем пуск вводим «командная строка» правой кнопкой мыши «запустить от имени администратора»


ВАЖНО! Далее все команды будут вводиться поочерёдно без закрытия командной строки.

1. Переходим в папку с установленной программой OpenVPN , если стандартный путь не изменялся, то он должен быть («C:\Program Files\OpenVPN\easy-rsa\»)

Вводим команду в командную строку:

cd C:\Program Files\OpenVPN\easy-rsa


2. Далее выполняем команду

init - config . bat – эта команда создает файл vars . bat .

По умолчанию после установки файл vars . bat . sample (образец, шаблон) уже есть в папке его можно сделать в ручную скопировав и убрав расширение «. sample », либо сразу командой “ copy vars . bat . sample vars . bat ”



После этого необходимо отредактировать файл Vars . bat своими данным, но этого можно и не делать на данном этапе т. к. в дальнейшем при формировании сертификатов их можно будет отредактировать либо задать по новой, да и на работе VPN сервера это не как не отразится они служат в основном для информативности.


Еще одна важная настройка которую необходимо проверить, в новых версиях идет по умолчанию.

В каталоге “C:\Programm Files\OpenVPN\easy-rsa”, есть конфигурационный файл “openssl-1.0.0.cnf”, открываем его с помощью notepad и изменяем настройку, отвечающую за срок жизни сертификатов, по умолчанию 365 дней, продлим срок жизни до 3650 дней.


3. Далее выполняем команду

Vars – команда заносит переменные из отредактированного файла ( vars . bat ) в память

И запускаем скрипт перед созданием ключей

Clean - all - о чищаем каталог “C:\Program Files\OpenVPN\easy-rsa\keys” c последующим созданием файла“index.txt” (база клиентов, она же database) и “serial” (ключ))


В итоге окон должно иметь такой вид:


Далее переходим к генерации ключей:

dh1024.pem — ключ Диффи Хельмана позволяющий двум и более сторонам получить общий секретный ключ

ca.crt — Собственный доверенный сертификат (Certificate Authority — далее CA) для подписи клиентских сертификатов и для их проверки при авторизации клиента.

server vpn .crt , server vpn .c s t, server vpn .key — сертификат сервера и ключ сервера

clientvpn .crt , clientvpn .c s t, clientvpn .key – сертификаты и ключи клиента

ta.key — дополнительный ключ для tls-аутентификации (повышение безопасности соединения), сервер и каждый клиент должны иметь копию этого ключа

dh1024.pem - ключ Диффи Хельмана

Выполняем команду: build-dh

ВАЖНО. Если при выполнении команды у вас вышла ошибка :


То необходимо выполнить следующие действия для решение проблемы:




После того как добавили переменную PATH , командную строку надо перезапустить и выполнить все предыдущие команды повторно по порядку:

cd C:\Program Files\OpenVPN\easy-rsa

init-config.bat (copy vars.bat.sample vars.bat)

И повторно команду build-dh команда должна выполниться без ошибок


В результате будет создан файл “ dh 2048. pem ” в папке Keys


ca.crt — Собственный доверенный сертификат

Выполняем команду: build-ca

после этого будут заданы вопросы по редактированию ранее заданных данных в файле ( vars . bat )

Можно их пропустить нажав “ Enter ”, если вы указали их ранее, либо заполнить щас, после чего в папке будет создан сертификат:


Формирование серверных ключей ( servervpn.crt , servervpn.cst, servervpn.key):

выполняем команду : build-key-server ServerVPN

ServerVPN – имя нашего сервер (любое наименование может быть не имя компьютера)

Так же будет список вопросов при создании сертификата их можно пропустить “ Enter ” либо указать данные.

В конце будут заданы 2 вопроса, на них надо ответить «Да»:

1. Sign the sertificate? [y/n] ( Подписать сертификат ?)

2. 1 out of 1 certificate requests certificated, commit? (1 из 1 запроса сертификата сертифицирован, зафиксировать?)

Формирование клиентских ключей ( clientvpn .crt , clientvpn .c s t, clientvpn .key )

выполняем команду : build-key ClientVPN

ClientVPN – имя нашего клиента (может быть задано любое для удобства идентификации клиентов)

Важно при создании ключа указать имя клиента в поле « Common Name »


В конце будут заданы 2 вопроса, на них надо ответить «Да»:


ВАЖНО! Для каждого клиента создается новый сертификат только с другим наименованием.

ta.key — дополнительный ключ для tls-аутентификации.

выполняем команду : openvpn --genkey --secret keys/ta.key


На этом создание ключей закончено.

Настройка и конфигурирование сервера

Переходим в папку с установленной программ OpenVpN (C:\Program Files\OpenVPN) в папку “ config ” и в ней создаем текстовый документ сохраняем его и называем и расширением « Server . ovpn »

Содержание и описание к онфигурационного файла сервера :


Пробуем запустит сервер, запускаем ярлык на рабочем столе, в трее на значке OpenVPN правой кнопкой «Подключиться»



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

Лог файл находится в папке пользователя (C:\Users\Пользователь\OpenVPN\log)


Содержание и описание к онфигурационного файла клиента:

Переходим в папку с установленной программ OpenVpN (C:\Program Files\OpenVPN) в папку “ config ” и в ней создаем текстовый документ сохраняем его и называем без расширения « ClientVPN » - ВАЖНО назвать также как как клиента

ВАЖНО! При задании настроек ifconfig-push:

Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). С учетом перечисленных условий для клиентов и сервера подойдут пары IP-адресов со следующими парами последних октетов:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]

[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]

[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106] [109,110] [113,114] [117,118]

[121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158]

[161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198]

[201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238]

Проще говоря к 1 и 2 прибавляем 4 разряда и получаем следующий адрес 5-6, 9-10 и т. д., задав диапазон 3-4 работать не будет.


Настройка OpenVPN Клиентской части:

На компьютере клиента также устанавливаем OpenVPN настройки можно оставить по умолчанию без изменений.

После установки с сервера с папки (C:\Program Files\OpenVPN\easy-rsa\keys) на компьютер клиента копируем следующие файлы:


И переносим их на клиентский компьютер в папку (C:\Program Files\OpenVPN\config):


В этой же папке создаем файл « Client . ovpn »

Конфигурационный файл клиента :


Дальше вы сможете попасть в сеть на сервере либо же по RDP на адрес сервера в нашем случае это был (10.10.10.1)

Также необходимо настроить если есть проблем с доступом, брандмауэры, антивирусы, сетевые экраны и прочее.

Автоматический запуск OpenVPN канала под Windows


Настроить автоматическое поднятие OpenVPN канала на Windows. На примере Windows Server 2008 R2, аналогично делается и на любой другой версии Windows.

Достаточно настроить службу OpenVPN Service, которая по умолчанию отключена, на автозапуск. Для этого переходим в "Управление компьютером" -> "Службы" и находим там "OpenVPN Service". В свойствах службы следует выставить "Тип запуска" -> "Автоматически".

После перезагрузки или потере связи, служба OpenVPN будет автоматически переподключаться к VPN серверу.

Если вы не нашли службы OpenVPN Service в списке, то скорее всего вы просто не указали её при установке OpenVPN. Доустановите службу или просто переустановите OpenVPN с нужными опциями (теперь можно снять галочку и с установки OpenVPN GUI за ненадобностью).

В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.

Установка

Windows

Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:

Скачиваем OpenVPN для Windows

Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».

Linux CentOS

Устанавливаем репозиторий EPEL:

yum install epel-release

yum install openvpn

Linux Ubuntu

apt-get install openvpn

Android

Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect - нажимаем установить и принимаем условия.

Настройка

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

В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.

* имя файла может быть любым, расширение должно быть .ovpn.

Для создания конфигурационного файла в Linux выполняем команду:

* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.

Пример конфигурационного файла

client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0

Параметры конфигурационного файла

Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn --help (в Linux и Windows).

Сертификаты

Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.

Давайте еще раз вернемся к примеру из пятой части, где мы обеспечивали связь двух локальных сетей, расположенных далеко друг от друга. Но добавим еще одну локальную сеть и обеспечим доступ к ресурсам этих сетей для удаленных сотрудников. Кроме того, аутентификация клиентов на сервере у нас будет не с использованием сертификатов, а по логину и паролю.


Аутентификация по логину и паролю

В файл конфигурации сервера нужно добавить директивы

Часто можно встретить директиву client-cert-not-required вместо verify-client-cert none — но так делать не рекомендуется. Директива client-cert-not-required уже устарела и будет удалена в следующих версиях OpenVPN. Кроме значения none директива verify-client-cert допускает значения optional и require . Другими словами, мы можем сделать двойную аутентификацию клиентов — по логину-паролю + по сертификату.

Когда клиент подключается к серверу, сервер запишет логин и пароль во временный файл, а затем выполнит скрипт verify.sh с аргументом пути к этому файлу. Временный файл содержит две строки: первая строка — логин, вторая срока — пароль. Если скрипт возвращает ноль — проверка пройдена успешно. Скрипт verify.sh может выглядеть примерно так

В файл конфигурации клиента нужно добавить директиву

В этом случае клиент будет запрашивать у пользователя логин и пароль, передавая их на сервер по безопасному каналу TLS. Это не подходит для случаев, когда подключение клиента к серверу должно происходить без участия человека. Но директиве auth-user-pass можно передать имя файла с логином и паролем. Этот файл должен содержать две строки: первая строка — логин, вторая строка — пароль.

При использовании ovpn-файла имя пользователя и пароль задаются с помощью

Создание центра сертификаци

Нам по-прежнему нужен сертификат сервера — так что создаем на gateway1 центр сертификации, выпускаем корневой сертификат и сертификат сервера. Центр сертификации мы уже создавали много раз, так что без подробностей.

Запускаем скрипт easyrsa с опцией init-pki для инициализации инфраструктуры:

Создаем корневой сертификат удостоверяющего центра:

Корневой сертификат — это файл pki/ca.crt , а приватный ключ — это файл pki/private/ca.key .

Создание ключей сервера

Создаем закрытый ключ и запрос на подпись сертификата для VPN-сервера:

Подписываем сертификат VPN-сервера:

Теперь создаем ключ Диффи-Хеллмана:

Это может занять несколько минут. Наконец, создаем ключ TLS для дополнительной защиты:

Копируем ключи и сертификаты в директорию /etc/openvpn/keys/ :

Файл конфигурации сервера

Тут для нас опять ничего нового, так что без подробностей:

Здесь мы девять ip-адресов 10.8.0.2…10.8.0.10 резервируем для подключения филиалов, а еще 100 ip-адресов 10.8.0.11…10.8.0.110 выделяем для подключения сотрудников, которые работают удаленно. И сообщаем всем клиентам маршруты до сетей 192.168.150.0/24 , 192.168.250.0/24 и 192.168.50.0/24 .

С маршрутами получается такая ситуация. С одной стороны, мы должны всем клиентам предоставить маршруты до сетей 192.168.150.0/24 , 192.168.250.0/24 и 192.168.50.0/24 . Чтобы сотрудники, которые работают удаленно, могли получить доступ к ресурсам этих трех сетей. С другой стороны, VPN-клиенту gateway2 не нужен маршрут до сети 192.168.250.0/24 , а VPN-клиенту gateway3 — не нужен маршрут до сети 192.168.50.0/24 .

Эту проблему можно решить тремя способами:

  • Первый — сообщим клиентам маршруты в файлах конфигурации в директории client-config-dir . Тогда для gateway2 и gateway3 мы пропишем два маршрута, а для прочих клиентов — три (до каждой сети). А из файла конфигурации сервера уберем директивы push .
  • Второй — сообщим клиентам маршруты в файлах конфигурации самих клиентов. Тогда для gateway2 и gateway3 мы пропишем два маршрута, а для прочих клиентов — три (до каждой сети). А из файла конфигурации сервера уберем директивы push .
  • Третий — с помощью push в файле конфигурации сервера отправим всем клиентам три маршрута, а для клиентов gateway2 и gateway3 лишние маршруты отбросим в файлах конфигурации с помощью pull-filter . Этот способ и будем использовать.

Конфигурация клиентов на сервере

Создаем два файла в директории client-config-dir для двух VPN-клиентов — gateway2 и gateway3 .

Скрипт аутентификации клиентов

Создаем скрипт проверки verify.sh и даем ему права на выполнение:

Предоставляем права на запись в директорию tmp-dir временного файла с логином и паролем — когда сервер уже будет работать от nobody и nogroup :

Читайте также: