Разное

Настройка openvpn linux клиента: Вы заблудились на сайте компьютерного мастера

Содержание

OpenVPN: Клиент — Установка & Настройка — Linux

В этой статье я показываю, как установить клиент OpenVPN в RPM/DEB-based Linux дистрибутивах и настроить его на подключение к OpenVPN-серверу.

В частности, я покажу пример конфигурационного файла OpenVPN-клиента, который я использую для подключения к OpenVPN-серверу с аутентификацией по сертификатами и логину/паролю, как создать systemd-сервис для OpenVPN-клиента и как настроить его автозагрузку.

Установка Клиента OpenVPN

Используйте одну из приведенных ниже команд, в зависимости от вашего дистрибутива Linux, для установки OpenVPN.

Fedora/CentOS/RedHat:

$ sudo yum install openvpn

Ubuntu/Debian/Raspbian:

$ sudo apt install openvpn

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

Создайте конфигурационный файл OpenVPN-клиента и сохраните его в директории /etc/openvpn/client/.

Примеры Конфигов OpenVPN: В зависимости от вашего дистрибутива Linux, если вы установили OpenVPN из RPM или DEB пакета, то папку с примерами конфигов (sample-config-files) можно найти в /usr/share/doc/packages/openvpn (Fedora/CentOS/RedHat) или /usr/share/doc/openvpn (Ubuntu/Debian/Raspbian).

Пример конфига OpenVPN-клиента:

$ cat /etc/openvpn/client/connect-sample.conf
client
tls-client
ca /etc/openvpn/keys/connect-sample-ca.crt
cert /etc/openvpn/keys/connect-sample.crt
key /etc/openvpn/keys/connect-sample.key
auth-user-pass /etc/openvpn/keys/connect-sample-creds.conf
dev tun
proto tcp-client
remote <openvpn-server-fqdn> <port>
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA1
verb 4
redirect-gateway autolocal # Redirect all the traffic into the tunnel

В вышеприведенном примере мой OpenVPN-клиент настроен на подключение к OpenVPN-серверу с аутентификаций по сертификатам и username/password.

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

$ sudo mkdir /etc/openvpn/keys

Сохраните username/password в /etc/openvpn/keys/connect-sample-creds.conf:


$ cat /etc/openvpn/keys/connect-sample-creds.conf
<username>
<password>

Поместите сертификаты в папку /etc/openvpn/keys/ и установите более строгие права:

$ sudo chmod 0600 /etc/openvpn/keys/*
$ sudo ls -al /etc/openvpn/keys/
total 16
-rw------- 1 pi pi 1224 Apr 18 20:49 connect-sample-ca.crt
-rw------- 1 pi pi   24 Apr 18 21:55 connect-sample-creds.conf
-rw------- 1 pi pi 1237 Apr 18 20:49 connect-sample.crt
-rw------- 1 pi pi 1704 Apr 18 20:50 connect-sample.key

Запустите сервис OpenVPN-клиента:


$ sudo systemctl start openvpn-client@connect-sample

Для настройки автоматического запуска OpenVPN-клиента, выполните:


$ sudo systemctl enable openvpn-client@connect-sample

Устранение Неполадок при Подключении

Узнать публичный IP-адрес:

$ curl ifconfig.co

Проверить статус сервиса OpenVPN-клиента:

$ systemctl status openvpn-client@connect-sample

Проверить логи:

$ journalctl -u openvpn-client@connect-sample

OpenVPN-сервер c интернет-туннелированием на Ubuntu 12/Debian 7

OpenVPN — открытая реализация технологии виртуальных частных сетей (VPN — Virtual Private Network), предназначенной для создания защищенных виртуальных локальных сетей между группой территориально удаленных клиентов поверх публичного канала передачи данных (интернет). Этот инструмент отлично подходит для таких задач, как безопасное сетевое подключение извне к серверу без предоставления публичного интернет-доступа к нему. Безопасность соединения достигается за счет шифрования канала с помощью OpenSSL.

 

Содержание:

Как это работает?

После завершения настройки OpenVPN сервер сможет принимать и перенаправлять внешние защищенные SSL сетевые подключения к созданному при запуске VPN-сервиса виртуальному сетевому удаптеру (tun/tap), не затрагивая правила обработки трафика других интерфейсов (внешний интернет-адаптер и др.) Благодаря этой технологии вы можете обеспечить себе доступ к удаленному серверу и находящейся в его локальной сети группе устройств даже в том случае, если основной интернет-адаптер этого сервера не принимает входящие подключения из публичных сетей и/или не осуществляет их маршрутизацию до необходимых машин, находящихся в его LAN-сети.

При необходимости вы также можете настроить маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер (необходимые для этого действия описаны в данной инструкции). При такой переадресации обрабатывающий VPN-подключения хост будет выполнять и функцию прокси-сервера (Proxy) — унифицировать правила сетевой активности пользователей и осуществлять туннелирование клиентского интернет-трафика от своего имени.

Требования к системе

Прежде чем приступить к установке OpenVPN, убедитесь что на вашем сервере корректно настроены необходимые базовые параметры, приведенные ниже. (если вы используете виртуальный сервер 1cloud.ru, эти три пункта уже выполнены и их можно пропустить):

  1. Сервер имеет хотя бы один статичный внешний IP-адрес (в качестве альтернативы вы можете воспользоваться DynamicDNS-сервисами, автоматически обновляющими информацию о текущем IP-адресе устройства, например, DynDNS)
  2. Разрешена загрузка пакетов ПО из официальных репозиториев. Чтобы проверить это, откройте на сервере файл /etc/apt/sources.list и убедитесь в том, что сетевые адреса вида «deb http://…» присутствуют и не закомментированы (отсутствует # в начале строки с url репозитория). Так, например, выглядит добавленное в sources.list американское зеркало репозиториев Ubuntu Precise: # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to

    # newer versions of the distribution.

    deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted

    deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted
  3. Верно указаны сетевые параметры:hostname, ip-адрес (адреса) вашего сервера и его параметры DNS (последний параметр потребуется для маршрутизации интернет-трафика клиентов). Найти перечисленные сетевые настройки можно в файле /etc/hosts.

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

Установка OpenVPN на сервер

Чтобы установить пакет openvpn на сервер, необходимо последовательно выполнить приведенные ниже команды:

  1. Обновить репозитории пакетов:
    apt-get update
  2. Загрузить доступные обновления для установленных программ:
    apt-get upgrade
  3. Установить пакет openvpn:
    apt-get install openvpn
  4. OpenVPN включает в себя набор средств шифрования easy-rsa. Для нормальной работы демона скрипты easy-rsa следует разместить в директории /etc/openvpn:
    cd /etc/openvpn/ && make-cadir easy-rsa

Подготовка публичных ключей (PKI — Public Key Infrastructure)

На данном этапе нужно сгенерировать и подписать пары пользовательских и серверных ключей. Для заверения созданных пар мы будем использовать центр сертификации (CA — Certificate Authority), находящийся на самом VPN -сервере. Итак, создадим CA:

  1. Перейти в папку /etc/openvpn/easy-rsa: cd /etc/openvpn/easy-rsa
  2. Создать символьную ссылку openssl-1.0.0.cnf -> openssl.cnf: ln -s openssl-1.0.0.cnf openssl.cnf
  3. Инициализировать скрипт vars: source ./vars
  4. В ответ вы получите следующее уведомление: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
  5. Запустить скрипт clean-all: ./clean-all
  6. Выполнить скрипт build-ca для создания центра сертификации. В ответ на появляющиеся запросы введите необходимую информацию (латинскими символами). Если вы не укажите собственные значения для каких-то из требуемых полей, будет использовано значение по-умолчанию [представленное в квадратных скобках]: ./build-ca
  7. Теперь можно перейти к генерации пары публичного сертификата/секретного ключа VPN-сервера.
Генерация ключа/сертификата сервера
  1. Сгенерируйте ключ: ./build-key-server server Заполните информацию по аналогии с build-ca. Поля «Company Name» и «Challenge Password» могут быть оставлены пустыми.
  2. После успешной генерации ключа появится запрос на его подписание центром сертификации. Введите yes для подтверждения.
Генерация клиентских ключей
  1. Создайте пару ключей для пользователя: ./build-key client1 Примечание: созданный файл ключа client1.key по умолчаню незашифрован. Это позволяет любому пользователю, имеющему доступ к этому файлу, подключиться к вашей виртуальной частной сети. Для устранения этой особенности вы можете использовать команду ./build-key-pass client1 вместо ./build-key client1 . В этом случае ключ будет зашифрован выбранным вами паролем.
  2. Повторите процедуру генерации для каждого из будущих клиентов VPN, заменив client1 на желаемое имя. Внимание: имена ключей должны быть уникальными.

    Вы можете сгенерировать клиентские ключи и позднее. Для этого потребуется повторно инициализировать скрипт vars (команда source ./vars), а затем запустить процедуру генерации необходимого ключа.
Установка параметров протокола Диффи-Хеллмана

Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Создав файл .pem, мы укажем параметры, в соответствии с которыми сервер будет инициировать защищенные соединения с пользователями.

Сгенерировать .pem файл следует с помощью команды: ./build-dh В ответ будет отображен набор случайных символов, говорящий о том, что идет процесс генерации. После завершения процедуры в директории etc/openvpn/easy-rsa/keys появится файл dh2024.pem.

Перемещение ключей и сертификатов

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

На сервере:

  1. Перейдите в директорию, в которой хранятся созданные ключи: cd /etc/openvpn/easy-rsa/keys
  2. Скопируйте сертификат и ключ центра сертификации (CA), файл параметров DH, ключ и сертификат vpn-сервера в каталог /etc/openvpn: cp ca.crt ca.key dh2024.pem server.crt server.key /etc/openvpn ВАЖНО: Перечисленные выше файлы — основа работоспособности и безопасности VPN. Их компрометация может иметь неблагоприятные последствия. Храните их в надежном хранилище и не передавайте эти файлы по небезопасным каналам.

 

На клиентском устройстве:

Скопируйте файлы ca.crt, client1.crt, client1.key в используемую приложением OpenVPN папку клиентского устройства (например, для Linux это /etc/openvpn)

 

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

В этом разделе инструкции мы создадим два файла конфигурации. Первый — файл настроек для OpenVPN-сервера, второй — параметры vpn-подключения для клиентского устройства. Для каждого клиента OpenVPN необходимо использовать свой собственный файл конфигурации (исключение — подключение нескольких пользователей с использованием одной общей для всех пары ключей).

Настройки сервера:
  1. В качестве отправной точки в настройке вы можете использовать образец файла конфигурации OpenVPN-сервера, содержащий список доступных параметров работы программы и подробные пояснения этих параметров. Скопируйте этот документ в директорию /etc/openvpn/ для его редактирования и последующего запуска сервера VPN: gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
  2. Скопированный на предыдущем этапе файл server.conf является вполне работоспособной конфигурацией. Ее достаточно для нормальной работы сервера, если вам не требуется туннелирование всего клиентского интернет-трафика через VPN-сервер или другие специфические опции.

    Единственное, на что обязательно нужно обратить внимание — имена и пути файлов сертификата сервера (.crt) и его ключа (.key), а также сертификата CA (.crt).

    Имена ключей, находящихся в директории /etc/openvpn должны полностью совпадать с именами ключей в конфиге server.conf. Проверить это можно с помощью следующих команд:

    • Узнаем имена файлов ключей (два файла .crt и один .key) в папке /etc/openvpn с помощью команды: ls /etc/openvpn
    • Проверяем, соответствуют ли отобразившимся выше названиям файлов имена ключей в файле /etc/openvpn/server.conf (после блока # SSL/TLS root certificate (ca), certificate (cert), and private key (key)): nano /etc/server.conf В случае, если имена отличаются, внесите соответствующие корректировки в файл конфига (не в имена файлов в папке openvpn) и сохраните его (CTRL+X).
    • Перезапускаем OpenVPN для применения изменений: /etc/init.d/openvpn restart
Настройки клиента:
  1. Копируем образец файла конфигурации клиента в любую удобную директорию (в нашем случае домашнюю директорию пользователя (home), от имени которого выполняем команды: gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/client.conf.gz >/home/1cloud
  2. Переходим в папку keys и копируем необходимые файлы ключей (в нашем случае: client1.key, client1.crt, ca.crt) в эту же директорию (/home/1cloud): cd /etc/openvpn/easy-rsa/keys> cp client1.key client1.crt ca.crt /home/1cloud
  3. Открываем конфиг клиента: nano /home/1cloud/client.conf
  4. Находим блок # The hostname/IP and port of the server и вместо example.com указываем IP адрес OpenVPN-сервера: # The hostname/IP and port of the server.

    # You can have multiple remote entries

    # to load balance between the servers.

    remote example.com 1194
  5. В этом же файле находим блок #SSL/TLS parms. и проверяем названия файлов ключей пользователя (аналогично тому, как делали это в конфиге сервера): # SSL/TLS parms.

    # See the server config file for more

    # description. Its best to use

    # a separate .crt/.key file pair

    # for each client. A single ca

    # file can be used for all clients.

    ca ca.crt

    cert client1.crt

    key client1.key
  6. Сохраняем файл конфигурации клиента (CTRL+X).
  7. Теперь необходимо перенести пользовательские файлы client.conf, client1.key, client1.crt, ca.crt на клиентское устройство, с которого вы будете подключаться к VPN-серверу. Сделать это можно через FTP, SCP или просто создав на пользовательском устройстве (через nano на Linux, через блокнот на Windows) файлы с идентичными именами и полностью скопировать в них содержимое исходных документов с удаленного сервера.
    Внимание! Некоторые клиентские приложения OpenVPN (например на Andoid и IOS) работают с расширением файла конфигурации .ovpn, а не .conf. Если вы столкнетесь с этой проблемой — просто переименуйте файл настроек клиента соответствующим образом.

    Размещаем перенесенные файлы в папке, с которой работает используемое вами приложение OpenVPN (см. документацию к программе).
  8. Подключаемся к серверу. После успешного подключения на клиентском устройстве активируется виртуальный сетевой адаптер. Проверить это на Linux можно с помощью команды ifconfig (должен отображаться адаптер TUN), на ОС с графическим интерсейсом проверить корректность подключения можно непосредственно в программе подключения к VPN.

Внимание! Так как мы еще не настроили туннелировние всего интернет-трафика через VPN-сервер, доступ в интернет на клиентском устройстве после подключения его к виртуальной частной сети перестанет функионировать. Инструкция по маршрутизации интернет-трафика пользователей через VPN сервер представлена ниже.Б.

Туннелирование всего трафика клиентов виртуальной частной сети через VPN-сервер

В данной конфигурации мы настроим маршрутизацию всего трафика пользователей VPN через OpenVPN-сервер с сохранением SSL-шифрования от клиента до сервера.

  1. На сервере откройте файл конфигурации OpenVPN server.conf: nano /etc/openvpn/server.conf
  2. Расскоментируйте представленную ниже строку конфига (удалите символ ; в начале строки): push "redirect-gateway def1 bypass-dhcp"
  3. Сохраните и закройте файл (CTRL+X)
  4. Откройте файл /etc/sysctl.conf:
    nano /etc/sysctl.conf
  5. Расскоментируйте или добавьте представленную ниже строку в открытом файле, чтобы убедиться, что переадресация IPv4-трафика разрешена: net.ipv4.ip_forward=1
  6. Сохраните и закройте файл (CTRL+X)
  7. Введите команду для применения изменений в текущей сессии: echo 1 > /proc/sys/net/ipv4/ip_forward
  8. Последовательно введите следующие команды (одна строка=одна команда), для настройки фаерволла iptables на форвардинг трафика через VPN:

    iptables -A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT

    iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT

    iptables -A FORWARD -j REJECT

    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

    iptables -A INPUT -i tun+ -j ACCEPT

    iptables -A FORWARD -i tun+ -j ACCEPT

    iptables -A INPUT -i tap+ -j ACCEPT

    iptables -A FORWARD -i tap+ -j ACCEPT
  9. Добавьте такой же список правил iptables в файл /etc/rc.local , чтобы они применялись при каждом запуске системы: nano /etc/rc.local

    Содержание файла:
    #!/bin/sh -e

    #

    # [...]

    #

    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

    iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT

    iptables -A FORWARD -j REJECT

    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

    iptables -A INPUT -i tun+ -j ACCEPT

    iptables -A FORWARD -i tun+ -j ACCEPT

    iptables -A INPUT -i tap+ -j ACCEPT

    iptables -A FORWARD -i tap+ -j ACCEPT

    exit 0


    Сохраните и закройте документ (CTRL+X)
  10. Приведенные выше параметры активируют переадресацию всего клиентского трафика, кроме DNS-запросов, через VPN-сервер. Для форваринга DNS-запросов вам необходимо установить пакет dnsmasq и внести изменения в файл /etc/openvpn/server.conf
  11. Установим dnsmasq:

    Если вы используете Ubuntu 12.04: apt-get install dnsmasq && dpkg-reconfigure resolvconf Появится мастер настройки. На первом пункте (prepare /etc/resolv.conf for dynamic updates) отвечаем yes, затем no (Append original file to dynamic file?)

    Если вы используете Debian 7: apt-get install dnsmasq resolvconf
  12. Теперь нужно отредактировать dnsmasq: nano /etc/dnsmasq.conf Убедитесь, что указанные ниже параметры раскомментированы или добавлены в файл: listen-address=10.8.0.1

    bind-interfaces
  13. Далее необходимо добавить в файл /etc/network/interfaces информацию об используемых dns-серверах. Возможно, в вашем случае эта информация уже присутствует (как например в случае с серверами, арендованными в 1cloud.ru), если же нет — добавьте ее следующим образом:

    Откройте файл конфигурации интерфейсов: nano /etc/network/interfaces Добавьте строку dns-nameservers с указанием адресов используемых вами DNS-серверов (например одного сервера вашего интернет провайдера и одного публичного сервера google: 8.8.8.8): # The primary network interface

    auto eth0

    iface eth0 inet dhcp

    dns-nameservers 77.88.8.8 8.8.8.8
  14. При стандартных настройках утилита dnsmasq запускается до старта виртуального tun адаптера OpenVPN. Это приводит к ошибкам и завершению dnsmasq. Для устранения этой проблемы, необходимо добавить в файл /etc/rc.local строку с командой, перезапускающей dnsmasq после инициализации OpenVPN. Разместить эту строку в файле следует после параметров iptables, указанных нами ранее: nano /etc/rc.local

    Содержимое файла:
    ...

    iptables -A FORWARD -i tun+ -j ACCEPT

    iptables -A INPUT -i tap+ -j ACCEPT

    iptables -A FORWARD -i tap+ -j ACCEPT

    /etc/init.d/dnsmasq restart

    exit 0
  15. Последнее, что необходимо сделать — расскоментировать строку, разрешающую клиентам OpenVPN использовать DNS серверы, в файле /etc/openvpn/server.conf:
    nano /etc/openvpn/server.conf Содержимое файла: ....

    push "dhcp-option DNS 10.8.0.1"
  16. Перезапускаем сервер для применения всех настроек и проверки их корректности: reboot

Проверка OpenVPN-соединения

На этом настройку OpenVPN сервера на Ubuntu/Debian сервере можно считать завершенной. Для проверки соединения и туннелирования трафика через VPN-сервер вы можете воспользоваться любым интернет-сервисом, отображающим ваш IP-адрес (например, этот) — при корректной настройке на странице будет отображен адрес VPN-сервера.

 

P. S. Другие инструкции:

Поделиться в соцсетях:





Спасибо за Вашу оценку!
К сожалению, проголосовать не получилось. Попробуйте позже

ru


191014
Санкт-Петербург
ул. Кирочная, 9

+7(812)313-88-33

235
70

1cloud ltd

2018-12-07
Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7


191014
Санкт-Петербург
ул. Кирочная, 9

+7(812)313-88-33

235
70

1cloud ltd

2018-12-07
Настройка OpenVPN-сервера с туннелированием интернет-трафика на Ubuntu 12.04 / Debian 7

600
auto

Установка и настройка сервера OpenVPN в Ubuntu 20.04

Введение

Виртуальная частная сеть (VPN) позволит вам работать в незащищенных сетях, как если бы вы находились в частной сети. Она предоставляет возможность получить безопасный и защищенный доступ к сети Интернет со смартфона или ноутбука при подключении к недоверенной сети, например Wi-Fi в отеле или в кафе.

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

OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом, которое использует протокол TLS и позволяет использовать широкий круг конфигураций. В этом обучающем руководстве мы установим OpenVPN на сервере Ubuntu 20.04 и настроим его для доступа с клиентского компьютера.

Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.

Дополнительную информацию можно найти на этой странице.

Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

Примечание. Хотя технически возможно использовать ваш сервер OpenVPN или ваш локальный компьютер в качестве центра сертификации, делать это не рекомендуется, поскольку это открывает ваш VPN для ряда уязвимостей. Согласно официальной документации OpenVPN, вы должны разместить ЦС на отдельном компьютере, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш ЦС располагается на отдельном сервере Ubuntu 20.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.

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

После выполнения всех предварительных требований вы можете начать установку и настройку сервера OpenVPN в Ubuntu 20.04.

Примечание. Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, то можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего руководства. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере ЦС, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 20.04.

Шаг 1 — Установка OpenVPN и Easy-RSA

Первый шаг этого руководства подразумевает установку OpenVPN и Easy-RSA. Easy-RSA — это инструмент управления инфраструктурой открытых ключей (PKI), который вы будете использовать на сервере OpenVPN для генерации запроса сертификата, который вы затем будете проверять и подписывать на сервере ЦС.

Для начала обновите указатель пакетов сервера OpenVPN и установите OpenVPN и Easy-RSA. Оба пакета доступны в репозиториях Ubuntu по умолчанию, и поэтому вы можете использовать apt для установки:

  • sudo apt update
  • sudo apt install openvpn easy-rsa

Далее вам потребуется создать новую директорию на сервере OpenVPN от имени вашего пользователя non-root user с названием ~/easy-rsa:

Теперь вам нужно создать символьную ссылку из скрипта easyrsa, установленного пакетом в директории ~/easy-rsa, которую вы только что создали:

  • ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Примечание. Хотя другие руководства могут предписывать скопировать файлы пакета easy-rsa в директорию PKI, в этом обучающем руководстве мы используем подход на основе символьных ссылок. Таким образом, любые изменения пакета easy-rsa будут автоматически отражаться в ваших скриптах PKI.

В заключение убедитесь, что владельцем директории является ваш пользователь non-root user с привилегиями sudo, и ограничьте доступ с помощью команды chmod:

  • sudo chown sammy ~/easy-rsa
  • chmod 700 ~/easy-rsa

После установки этих программ и их перемещения в нужные локации в вашей системе следующим шагом будет создание инфраструктуры открытых ключей (PKI) на сервере OpenVPN, чтобы вы могли запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к вашему VPN.

Шаг 2 — Создание PKI для OpenVPN

Прежде чем вы сможете создавать закрытый ключ и сертификат вашего сервера OpenVPN, вам нужно создать локальную директорию инфраструктуры открытых ключей на сервере OpenVPN. Вы будете использовать эту директорию для управления запросами сертификата сервера и клиентов, вместо того чтобы получать их прямо на сервере ЦС.

Для создания директории PKI на сервере OpenVPN вам нужно указать в файле vars ряд значений по умолчанию. Используйте команду cd для перехода в каталог easy-rsa, а затем создайте и отредактируйте файл vars с помощью nano или другого предпочитаемого текстового редактора:

После открытия файла вставьте следующие две строки:

~/easy-rsa/vars

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"

Эти две строки потребуются вам в файле vars на сервере OpenVPN, поскольку он не будет использоваться в качестве ЦС. Они будут гарантировать, что ваши закрытые ключи и запросы сертификата будут настроены для использования современной криптографии на эллиптических кривых (Elliptic Curve Cryptography, ECC) при генерации ключей и защищенных подписей для ваших клиентов и сервера OpenVPN.

Под настройкой использования ECC для ваших серверов OpenVPN и ЦС подразумевается, что, когда клиент и сервер будут пытаться установить общий симметричный ключ, они будут использовать алгоритмы эллиптической кривой для обмена. Использование ECC для обмена ключами значительно быстрее, чем использование простого алгоритма Диффи — Хеллмана с классическим алгоритмом RSA, поскольку числа намного меньше, а вычисления выполняются быстрее.

Справка: когда клиенты подключаются к OpenVPN, они используют асимметричное шифрование (также известное как открытый/закрытый ключ) для выполнения TLS-рукопожатия. Однако при передаче шифрованного VPN-трафика сервер и клиенты используют симметричное шифрование, которое также известно как шифрование общедоступного ключа.

Симметричное шифрование требует гораздо меньшего количества вычислений по сравнению с асимметричным: используемые числа гораздо меньше, и современные процессоры имеют инструкции для выполнения оптимизированного симметричного шифрования. Для переключения с асимметричного на симметричное шифрование сервер OpenVPN и клиент будут использовать алгоритм Диффи — Хеллмана на эллиптических кривых для согласования общего секретного ключа в максимально короткие сроки.

После добавления в файл vars данных вы можете перейти к созданию директории PKI. Для этого воспользуйтесь скриптом easyrsa с опцией init-pki. Хотя вы уже использовали эту команду на сервере ЦС в соответствии с предварительными требованиями, необходимо запустить ее здесь, поскольку сервер OpenVPN и сервер ЦС имеют разные директории PKI.

Обратите внимание, что на сервере OpenVPN не нужно создавать центр сертификации. Ваш сервер ЦС отвечает за валидацию и подпись сертификатов. PKI на вашем сервере VPN используется только в качестве удобного и централизованного места хранения запросов сертификата и публичных сертификатов.

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

Шаг 3 — Создание запроса сертификата и закрытого ключа сервера OpenVPN

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

Для начала перейдите в директорию ~/easy-rsa на сервере OpenVPN, используя вашего пользователя non-root user:

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

Примечание. Если вы выберете любое другое имя, а не server, вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в директорию /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf, чтобы он указывал на соответствующие файлы .crt и .key.

  • ./easyrsa gen-req server nopass

Output

Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в директорию /etc/openvpn/server:

  • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

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

Шаг 4 — Подпись запроса сертификата сервера OpenVPN

На предыдущем шаге вы создали запрос на подпись сертификата (CSR) и закрытый ключ для сервера OpenVPN. Теперь сервер ЦС должен узнать о сертификате server и выполнить его валидацию. После подтверждения сертификата сервером ЦС и его отправки назад на сервер OpenVPN клиенты, которые доверяют вашему ЦС, также смогут доверять серверу OpenVPN.

На сервере OpenVPN от имени вашего пользователя non-root user воспользуйтесь запросом на передачу или другим методом передачи для копирования запроса сертификата server.req на сервер ЦС для подписи:

  • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

Если вы выполнили предварительное требование обучающего модуля «Установка и настройка Центра сертификации (ЦС) в Ubuntu 20.04», следующим шагом будет войти на сервер ЦС как пользователь без привилегий root, которого вы создали для управления ЦС. Вы использовали команду cd для перехода в каталог ~/easy-rsa, где вы создали и импортируйте запрос сертификата с помощью скрипта easyrsa:

  • cd ~/easy-rsa
  • ./easyrsa import-req /tmp/server.req server

Output

. . . The request has been successfully imported with a short name of: server You may now use this name to perform signing operations on this request.

Далее подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и стандартного имени. В качестве типа запроса может использоваться client или server. Поскольку мы работаем с запросом сертификата сервера OpenVPN, необходимо использовать тип запроса server:

  • ./easyrsa sign-req server server

В выводе вам будет нужно подтвердить, что запрос поступил из надежного источника. Введите yes, а затем нажмите ENTER для подтверждения:

Output

You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

Обратите внимание, что если вы зашифровали закрытый ключ ЦС, вам будет предложено ввести пароль в данный момент.

В результате выполнения этих шагов вы успешно подписали запрос сертификата сервера OpenVPN с помощью закрытого ключа сервера ЦС. Полученный файл server.crt​​​ содержит открытый ключ шифрования сервера OpenVPN, а также новую подпись от сервера ЦС. Смысл подписи состоит в том, чтобы сообщить всем, кто доверяет серверу ЦС, что они также могут доверять серверу OpenVPN при подключении к нему.

Для завершения настройки сертификатов скопируйте файлы server.crt и ca.crt с сервера ЦС на сервер OpenVPN:

  • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
  • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

Теперь вернитесь на ваш сервер OpenVPN, скопируйте файлы из /tmp в /etc/openvpn/server:

  • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

Теперь ваш сервер OpenVPN почти готов к принятию подключений. На следующем шаге вы выполните ряд дополнительных шагов для повышения безопасности сервера.

Шаг 5 — Настройка криптографических материалов OpenVPN

В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты, с помощью директивы OpenVPN tls-crypt. Эта опция используется, чтобы «затемнить» сертификат TLS, используемый, когда сервер и клиент первоначально подключаются друг к другу. Также она используется сервером OpenVPN для выполнения быстрых проверок входящих пакетов: если пакет подписан с помощью предварительно предоставленного ключа, сервер обрабатывает его, если подпись отсутствует, сервер понимает, что пакет получен из непроверенного источника, и может отклонить его, не выполняя дополнительную работу по расшифровке.

Эта опция поможет убедиться, что ваш сервер OpenVPN может справляться с неудостоверенным трафиком, сканированием портов и DoS-атаками, которые могут связывать ресурсы сервера. Она также затрудняет выявление сетевого трафика OpenVPN.

Для получения предварительно предоставленного ключа tls-crypt​​​ запустите следующую команду на сервере OpenVPN в директории ~/easy-rsa:

  • cd ~/easy-rsa
  • openvpn --genkey --secret ta.key

В результате вы получите файл с именем ta.key. Скопируйте его в директорию /etc/openvpn/server/:

  • sudo cp ta.key /etc/openvpn/server

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

Шаг 6 — Создание сертификата клиента и пары ключей

Хотя вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской системе и отправить их в ЦС для подписания, в этом обучающем руководстве мы рассмотрим процесс генерирования запроса сертификата на сервере OpenVPN. Преимущество этого подхода заключается в том, что мы можем создать скрипт, который будет автоматически генерировать файлы конфигурации клиентов, содержащие все необходимые ключи и сертификаты. Благодаря этому вам не нужно будет передавать ключи, сертификаты и файлы конфигурации на клиентские системы, и процесс подключения к VPN ускорится.

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

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

  • mkdir -p ~/client-configs/keys

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

  • chmod -R 700 ~/client-configs

Вернитесь в директорию EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:

  • cd ~/easy-rsa
  • ./easyrsa gen-req client1 nopass

Нажмите ENTER, чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданную директорию ~/client-configs/keys/​​​:

  • cp pki/private/client1.key ~/client-configs/keys/

Затем передайте файл client1.req на сервер ЦС, используя безопасный метод:

  • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

Теперь выполните вход на ваш сервер ЦС. Затем перейдите в директорию EasyRSA и импортируйте запрос сертификата:

  • cd ~/easy-rsa
  • ./easyrsa import-req /tmp/client1.req client1

Затем подпишите запрос, как вы делали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client:

  • ./easyrsa sign-req client client1

При запросе введите yes, чтобы подтвердить, что вы планируете подписать запрос сертификата и что он поступил из доверенного источника:

Output

Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

Если вы зашифровали свой ключ ЦС, вам будет предложено ввести пароль.

В результате будет создан файл клиентского сертификата с именем client1.crt. Переместите этот файл обратно на сервер.

  • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Вернитесь на ваш сервер OpenVPN, скопируйте клиентский сертификат в директорию ~/client-configs/keys/​​:

  • cp /tmp/client1.crt ~/client-configs/keys/

Затем скопируйте файлы ca.crt и ta.key в директорию ~/client-configs/keys/ и предоставьте соответствующие разрешения для вашего пользователя sudo:

  • cp ~/easy-rsa/ta.key ~/client-configs/keys/
  • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
  • sudo chown sammy.sammy ~/client-configs/keys/*

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

Шаг 7 — Настройка OpenVPN

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

Вначале скопируйте файл server.conf в качестве отправной точки для вашего собственного файла конфигурации:

  • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
  • sudo gunzip /etc/openvpn/server/server.conf.gz

Откройте новый файл для редактирования в текстовом редакторе по вашему выбору. В нашем случае мы будем использовать nano:

  • sudo nano /etc/openvpn/server/server.conf

Нам нужно изменить несколько строк в этом файле. Сначала необходимо найти раздел HMAC в конфигурации, выполнив поиск директивы tls-auth. Эта строка должна быть разкомментирована. Закомментируйте ее, добавив ; в начало строки. Затем добавьте после нее новую строку, содержащую только значение tls-crypt ta.key​​​:

/etc/openvpn/server/server.conf

;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key

Затем найдите раздел криптографических шифров, выполнив поиск строк с текстом cipher. По умолчанию установлено значение AES-256-CBC, однако шифр AES-256-GCM обеспечивает более высокий уровень шифрования, производительности и лучше поддерживается современными клиентами OpenVPN. Мы закомментируем значение по умолчанию, добавив ; в начало этой строки, а затем добавим другую строку после нее, содержащую обновленное значение AES-256-GCM:

/etc/openvpn/server/server.conf

;cipher AES-256-CBC
cipher AES-256-GCM

Сразу после этой строки добавьте директиву auth для выбора алгоритма выборки сообщений HMAC. Для этого хорошо подойдет SHA256:

/etc/openvpn/server/server.conf

auth SHA256

Затем найдите строку с директивой dh, которая определяет параметры алгоритма Диффи — Хеллмана. Поскольку мы настроили все сертификаты для использования криптографии на эллиптических кривых, нет необходимости в использовании файла прототипа Диффи — Хеллмана. Закомментируйте существующую строку dh dh3048.pem​​​ или dh dh.pem. Имя файла для ключа Диффи — Хеллмана может отличаться от того, что перечислено в примере файла конфигурации сервера. Затем добавьте строку после нее с содержанием dh none:

/etc/openvpn/server/server.conf

;dh dh3048.pem
dh none

Далее нам нужно запустить OpenVPN без привилегий, с которыми он запущен, поэтому нам нужно указать на необходимость запуска с пользователем nobody и группой nogroup. Чтобы активировать эту возможность, найдите и разкомментируйте строки user nobody и group nogroup, удалив ; в начале каждой строки:

/etc/openvpn/server/server.conf

user nobody
group nogroup

(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN

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

Для начала найдите и разкомментируйте строку push "redirect-gateway def1 bypass-dhcp". Она будет сообщать вашему клиенту о необходимости перенаправлять весь трафик через ваш сервер OpenVPN. Обратите внимание, что при активации этой функции могут возникать проблемы с подключением к другим сетевым службам, например SSH:

/etc/openvpn/server/server.conf

push "redirect-gateway def1 bypass-dhcp"

Под этой строкой найдите раздел dhcp-option. Удалите ; в начале обеих строк, чтобы разкомментировать эти строки:

/etc/openvpn/server/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Эти строки будут сообщать вашему клиенту о необходимости использования бесплатных интерпретаторов OpenDNS на перечисленных IP-адресах. Если вы предпочитаете использовать другие интерпретаторы DNS, вставьте их на место выделенных IP-адресов.

Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

(Необязательно) Изменение порта и протокола

По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила брандмауэра.

Чтобы заставить OpenVPN прослушивать порт 443, откройте файл server.conf и найдите строку, которая выглядит следующим образом:

/etc/openvpn/server/server.conf

port 1194

Измените ее, указав порт 443:

/etc/openvpn/server/server.conf

# Optional!
port 443

Довольно часто этот порт также ограничивает протокол. В этом случае найдите строку proto под строкой port и измените протокол с udp на tcp:

/etc/openvpn/server/server.conf

# Optional!
proto tcp

Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP.

Найдите строку explicit-exit-notify в конце файла и измените значение на 0:

/etc/openvpn/server/server.conf

# Optional!
explicit-exit-notify 0

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

(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию

Если вы выбрали другое имя при вводе команды ./easyrsa gen-req server ранее, измените строки cert и key​​​ в файле конфигурации server.conf​​, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию server, можно считать, что все уже настроено корректно:

/etc/openvpn/server/server.conf

cert server.crt
key server.key

После завершения редактирования сохраните и закройте файл.

Вы успешно завершили настройку общих параметров OpenVPN. На следующем шаге мы настроим сетевые параметры сервера.

Шаг 8 — Настройка конфигурации сети сервера OpenVPN

Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.

Чтобы изменить используемые по умолчанию настройки IP-передачи сервера OpenVPN, откройте файл /etc/sysctl.conf с помощью nano или предпочитаемого редактора:

  • sudo nano /etc/sysctl.conf

Добавьте следующую строку в конец файла:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

Сохраните файл и закройте его после завершения.

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

Output

net.ipv4.ip_forward = 1

Теперь ваш сервер OpenVPN сможет перенаправлять входящий трафик из одного сетевого устройства на другое. Эта настройка гарантирует, что сервер сможет направлять трафик от клиентов, подключенных к виртуальному интерфейсу VPN, на другие физические сетевые устройства. Эта конфигурация будет передавать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а открытый IP-адрес клиента будет фактически скрыт.

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

Шаг 9 — Настройка брандмауэра

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

Если вы выполнили предварительные требования, указанные в начале этого обучающего модуля, у вас на сервере должен быть установлен и запущен ufw. Чтобы разрешить OpenVPN через брандмауэр, вам нужно будет включить маскировку. Маскировка — это концепция таблиц iptables, на основе которой выполняется автоматическая трансляция сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.

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

Строка после слова «dev» в этой команде — это ваш публичный интерфейс. Например, в этом результате показан интерфейс с именем eth0, который выделен ниже:

Output

default via 159.65.160.1 dev eth0 proto static

Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

  • sudo nano /etc/ufw/before.rules

Правила UFW обычно добавляются с помощью команды ufw. Правила, перечисленные в файле before.rules, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING в таблице nat, и любой трафик из VPN будет маскироваться. Обязательно замените eth0 в строке -A POSTROUTING на интерфейс, определенный с помощью следующей команды:

/etc/ufw/before.rules

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Сохраните файл и закройте его после завершения.

Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw:

  • sudo nano /etc/default/ufw

Найдите в файле директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

/etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохраните файл и закройте его после завершения.

Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf, вам нужно будет открыть трафик UDP на порту 1194. Если вы изменили порт или протокол, замените выбранные здесь значения.

Если вы забыли добавить порт SSH при выполнении обязательного обучающего модуля, добавьте его сейчас:

  • sudo ufw allow 1194/udp
  • sudo ufw allow OpenSSH

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

  • sudo ufw disable
  • sudo ufw enable

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

Шаг 10 — Запуск OpenVPN

OpenVPN работает как служба systemd, поэтому мы можем использовать systemctl для управления. Мы настроим для OpenVPN запуск при загрузке, чтобы вы могли подключаться к вашей VPN в любое время, пока ваш сервер работает. Для этого активируйте службу OpenVPN, добавив ее в systemctl:

Затем запустите службу OpenVPN:

Еще раз проверьте, что служба OpenVPN активна, воспользовавшись следующей командой. Вы должны увидеть в выводе active (running):

Output

[email protected] - OpenVPN service for server Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 16872 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 1137) Memory: 1.0M CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected] └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c> . . . . . . Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed

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

Шаг 11 — Создание инфраструктуры конфигурации клиентских систем

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

Для начала создайте новую директорию для хранения файлов конфигурации клиентов в ранее созданной директории client-configs:

  • mkdir -p ~/client-configs/files

Затем скопируйте файл с образцом конфигурации клиента в директорию client-configs, чтобы использовать ее как базовую конфигурацию:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте новый файл в nano или предпочитаемом текстовом редакторе:

  • nano ~/client-configs/base.conf

Найдите в файле директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

~/client-configs/base.conf

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

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

~/client-configs/base.conf

proto udp

Разкомментируйте директивы user и group, удалив символ ; в начале каждой строки:

~/client-configs/base.conf

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Найдите директивы, задающие ca, cert и key. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:

~/client-configs/base.conf

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
;ca ca.crt
;cert client.crt
;key client.key

Затем закомментируйте директиву tls-auth, поскольку вы добавите ta.key прямо в файл конфигурации клиента (а сервер настроен на использование tls-crypt):

~/client-configs/base.conf

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

Создайте зеркало настроек cipher и auth, заданных в файле /etc/openvpn/server/server.conf​​​:

~/client-configs/base.conf

cipher AES-256-GCM
auth SHA256

Затем добавьте в файл директиву key-direction. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:

~/client-configs/base.conf

key-direction 1

В заключение добавьте несколько закомментированных строк для обработки различных методов, которые клиенты VPN на базе Linux будут использовать для разрешения DNS. Также мы добавим два похожих, но отдельных набора закомментированных строк. Первый набор предназначен для клиентов, которые не используют systemd-resolved для управления DNS. Эти клиенты используют утилиту resolvconf для обновления информации DNS для клиентов Linux.

~/client-configs/base.conf

; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf

Теперь добавьте другой набор строк для клиентов, которые используют systemd-resolved для разрешения DNS:

~/client-configs/base.conf

; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .

Сохраните файл и закройте его после завершения.

На шаге 13 «Установка конфигурации клиента» этого обучающего модуля вы узнаете, как определять, работает ли разрешение DNS для клиентов Linux, и какой раздел нужно разкомментировать.

Далее создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в директорию ~/client-configs/files. Откройте новый файл с именем make_config.sh в директории ~/client-configs:

  • nano ~/client-configs/make_config.sh

Добавьте в файл следующее:

~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-crypt>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-crypt>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Сохраните файл и закройте его после завершения.

Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:

  • chmod 700 ~/client-configs/make_config.sh

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

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

Шаг 12 — Создание конфигураций клиентов

Если вы следовали указаниям руководства, на шаге 6 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в директорию ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

  • cd ~/client-configs
  • ./make_config.sh client1

При этом файл client1.ovpn будет создан в директории ~/client-configs/files:

  • ls ~/client-configs/files

Output

client1.ovpn

Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.

Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

Здесь представлен пример команды SFTP, которую можно запустить с локального компьютера (под управлением macOS или Linux). Она будет копировать файл client1.ovpn, который мы создали на последнем шаге, в вашу домашнюю директорию:

  • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

Ниже представлено несколько инструментов и обучающих руководств для безопасной передачи файлов с сервера OpenVPN на локальный компьютер:

Шаг 13 — Установка клиентской конфигурации

В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.

Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn. В этом обучающем руководстве это означает, что соединение будет иметь имя client1.ovpn, что соответствует первому сгенерированному клиентскому файлу.

Windows

Установка

Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.

Примечание. Для установки OpenVPN требуются права администратора.

После установки OpenVPN, скопируйте файл .ovpn в:

C:\Program Files\OpenVPN\config

При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.

Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбирать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.

Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.

Подключение

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

После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn) и нажмите Подключиться.

Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.

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

macOS

Установка

Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды нажмите загруженный файл .dmg и следуйте указаниям по установке.

В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.

Подключение

Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.

Linux

Установка

Если вы используете Linux, существуют различные инструменты в зависимости от вашего дистрибутива. Диспетчер окон или среда рабочего стола также могут содержать утилиты для подключения.

Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.

В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:

  • sudo apt update
  • sudo apt install openvpn

В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:

  • sudo dnf install epel-release
  • sudo dnf install openvpn
Настройка клиентов, использующих

systemd-resolved

Вначале определите, использует ли ваша система systemd-resolved для разрешения DNS, проверив файл /etc/resolv.conf:

Output

# This file is managed by man:systemd-resolved(8). Do not edit. . . . nameserver 127.0.0.53 options edns0

Если ваша система настроена для использования systemd-resolved для разрешения DNS , IP-адрес после опции nameserver будет иметь значение 127.0.0.53. Также в файле должны быть комментарии, в частности информация о том, как systemd-resolved управляет файлом. Если у вас отображается не 127.0.0.53, а другой IP-адрес, то есть вероятность, что ваша система не использует systemd-resolved. В этом случае вы можете перейти к следующему разделу, предназначенному для настройки клиентов Linux, использующих скрипт update-resolv-conf.

Для поддержки этих клиентов нужно предварительно установить пакет openvpn-systemd-resolved. Он содержит скрипты, принудительно запускающие использование systemd-resolved для разрешения DNS сервером VPN.

  • sudo apt install openvpn-systemd-resolved

После установки пакета настройте клиент для его использования и отправки всех запросов DNS через интерфейс VPN. Откройте файл VPN клиента:

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

client1.ovpn

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
Настройка клиентов, использующих

update-resolv-conf

Если ваша система не использует systemd-resolved для управления DNS, проверьте наличие в вашем дистрибутиве скрипта /etc/openvpn/update-resolv-conf:

Output

update-resolv-conf

Если в вашем клиенте имеется файл update-resolv-conf, измените ранее переданный файл конфигурации клиента OpenVPN:

Разкомментируйте три добавленные вами строки для изменения настроек DNS:

client1.ovpn

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

client1.ovpn

group nobody

Сохраните и закройте файл.

Подключение

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

  • sudo openvpn --config client1.ovpn

Эта команда должна установить подключение к вашей VPN.

Примечание. Если ваш клиент использует systemd-resolved для управления DNS, проверьте правильность применения настроек, запустив команду systemd-resolve --status:

  • systemd-resolve --status tun0

Результат будет выглядеть следующим образом:

Output

Link 22 (tun0) . . . DNS Servers: 208.67.222.222 208.67.220.220 DNS Domain: ~.

Если вы видите IP-адреса серверов DNS, настроенные вами на сервере OpenVPN, и настройку ~. для DNS Domain в выводе, это означает, что вы правильно настроили клиент для управления DNS на сервере VPN. Также вы можете проверить отправку запросов DNS через VPN используя сайт DNS leak test.com или другой подобный сайт.

iOS

Установка

Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.

Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn в окно OpenVPN Documents.

Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите зеленый значок плюс, чтобы импортировать его.

Подключение

Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.

Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.

Android

Установка

Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.

Вы можете переместить профиль .ovpn, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, вы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.

Запустите приложение OpenVPN и нажмите меню FILE, чтобы импортировать профиль.

Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /storage/emulated/0/openvpn) и выберите файл .ovpn​​​. Нажмите кнопку IMPORT, чтобы завершить импорт этого профиля.

Подключение После добавления профиля вы увидите следующий экран:

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

Для отключения просто нажмите кнопку-переключатель слева еще раз. Вам будет предложено подтвердить, что вы хотите отключиться от VPN.

Шаг 14 — Тестирование соединения VPN (необязательно)

Примечание. Этот метод тестирования подключения VPN будет работать только в случае, если вы выбрали перенаправление всего трафика через VPN на шаге 7 при редактировании файла server.conf​​ для OpenVPN.

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

Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.

Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.

Шаг 15 — Отзыв сертификатов клиента

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

Для этго используйте пример из предварительного обучающего модуля «Установка и настройка центра сертификации в 20.04» из раздела «Отзыв сертификата».

После отзыва сертификата для клиента с помощью этих инструкций вам нужно будет скопировать созданный файл crl.pem на ваш сервер OpenVPN в директорию /etc/openvpn/server:

  • sudo cp /tmp/crl.pem /etc/openvpn/server/

Затем откройте файл конфигурации сервера OpenVPN:

  • sudo nano /etc/openvpn/server/server.conf

Добавьте в конце файла опцию crl-verify, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:

/etc/openvpn/server/server.conf

crl-verify crl.pem

Сохраните и закройте файл.

Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

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

Чтобы запретить доступ другим клиентам, повторите эту процедуру:

  1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
  2. Создайте новый список CRL.
  3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в директорию /etc/openvpn/server/, чтобы перезаписать старый список.
  4. Перезапустите службу OpenVPN.

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

Заключение

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

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

Для настройки большего числа клиентов вам нужно выполнить шаги 6 и 11–13 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 15.

Настройка сервера OpenVPN в Ubuntu 18.04

Предыдущая версия данного обучающего руководства была написана Джастином Эллингвудом

Введение

Хотите организовать безопасный и защищенный доступ к интернету на смартфоне или ноутбуке при подключении к ненадежной сети, например к сети WiFi в гостинице или кафе? Виртуальная частная сеть (VPN) позволит вам конфиденциально и безопасно работать в незащищенных сетях, как если бы вы находились в частной сети. Трафик поступает с сервера VPN и продолжает движение в пункт назначения.

В сочетании с соединениями HTTPS данная схема позволяет защитить учетные данные и транзакции в беспроводной сети. Вы можете обойти географические ограничения и цензуру и скрыть свое местоположение и любой нешифруемый трафик HTTP от незащищенной сети.

OpenVPN — полнофункциональное решение SSL VPN с открытым исходным кодом, поддерживающее широкий ассортимент конфигураций. В этом обучающем модуле вы настроите сервер OpenVPN на сервере Ubuntu 18.04, а затем настроите доступ к нему из Windows, macOS, iOS и/или Android. Приведенные в этом обучающем модуле шаги по установке и настройке максимально упрощены для каждого из вариантов.

Примечание. Если вы планируете настроить сервер OpenVPN на DigitalOcean Droplet, то мы, как и многие поставщики хостинга, будем взимать плату за превышение лимита пропускной способности. По этой причине необходимо следить за объемом трафика, который обрабатывает ваш сервер.

Дополнительную информацию можно найти на этой странице.

Предварительные требования

Чтобы пройти этот обучающий модуль вам потребуется доступ к серверу Ubuntu 18.04, где будет размещаться служба OpenVPN. Перед началом прохождения обучающего модуля вам нужно будет настроить пользователя без привилегий root с привилегиями sudo. Вы можете воспользоваться нашим руководством Начальная настройка сервера Ubuntu 18.04, чтобы создать пользователя с соответствующими разрешениями. Настоящий обучающий модуль предусматривает использование брандмауэра, описание настройки которого приведено в доступном по ссылке обучающем модуле.

Также вам потребуется отдельный компьютер для выполнения функций центра сертификации (CA). Хоте в качестве центра сертификации технически возможно использовать сервер OpenVPN на локальном компьютере, это делать не рекомендуется, поскольку при этом в вашей сети VPN могут возникнуть некоторые уязвимости системы безопасности. Согласно официальной документации OpenVPN, вы должны разместить CA на отдельном компьютер, который будет отвечать за импорт и подписание запросов сертификатов. По этой причине в данном обучающем модуле предполагается, что ваш CA располагается на отдельном сервере Ubuntu 18.04, где также имеются пользователь без привилегий root с привилегиями sudo и базовый брандмауэр.

Обратите внимание, что если вы отключите аутентификацию с помощью пароля при настройке этих серверов, вы можете столкнуться с трудностями при передаче файлов между ними, как предусматривается последующими разделами этого обучающего модуля. Чтобы устранить эту проблему, вам нужно будет заново включить аутентификацию с помощью пароля на каждом сервере. Также вы можете сгенерировать пару ключей SSH для каждого сервера и добавить публичный ключ SSH сервера OpenVPN в файл authorized_keys на компьютере CA, и наоборот. Дополнительные инструкции по этим решениям можно найти в обучающем модуле Настройка ключей SSH в Ubuntu 18.04.

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

Шаг 1 — Установка OpenVPN и EasyRSA

Для начала выполните обновление индекса пакетов вашего сервера VPN и установите OpenVPN. OpenVPN имеется в хранилищах Ubuntu по умолчанию, и поэтому вы можете использовать для установки apt:

  • sudo apt update
  • sudo apt install openvpn

OpenVPN — это VPN с TLS/SSL. Это означает, что она использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать собственный простой центр сертификации (CA). Для этого нужно загрузить последнюю версию EasyRSA, которую мы используем для создания инфраструктуры открытых ключей CA (PKI) из официального репозитория проекта на GitHub.

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

Чтобы начать построение CA и инфраструктуры PKI, используйте wget для загрузки последней версии EasyRSA на систему CA и на сервер OpenVPN. Чтобы получить последнюю версию, откройте страницу Релизы на официальном сервере EasyRSA на проекте GitHub, скопируйте ссылку для загрузки файла с расширением .tgz и вставьте ее в следующую команду:

  • wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

Затем извлеките tarball:

  • cd ~
  • tar xvf EasyRSA-3.0.4.tgz

Вы успешно установили все требуемое программное обеспечение на свой сервер и на систему CA. Далее необходимо настроить переменные для EasyRSA и каталог CA, откуда будут генерироваться ключи и сертификаты, необходимые вашему серверу и клиентам для доступа к VPN.

Шаг 2 — Настройка переменных EasyRSA и построение CA

В комплект установки EasyRSA входит файл конфигурации, в котором можно изменять или задавать определенные переменные CA.

Откройте на компьютере CA каталог EasyRSA:

В этом каталоге есть файл с именем vars.example. Создайте копию этого файла и присвойте ей имя vars без расширения:

Откройте новый файл в предпочитаемом текстовом редакторе:

Найдите настройки параметров по умолчанию для новых сертификатов. Он будет выглядеть примерно так:

~/EasyRSA-3.0.4/vars

. . .

#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "[email protected]"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

. . .

Уберите значки комментария из этих строк и замените выделенные значения предпочитаемыми, но не оставляйте их пустыми:

~/EasyRSA-3.0.4/vars

. . .

set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "Community"

. . .

После завершения редактирования сохраните и закройте файл.

В каталоге EasyRSA имеется скрипт easyrsa, который вызывается для выполнения разнообразных задач, связанных с построением и управлением CA. Запустите этот скрипт с опцией init-pki, чтобы запустить инфраструктуру открытых ключей на сервере CA:

Output

. . . init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/EasyRSA-3.0.4/pki

Затем снова запустите скрипт easyrsa с опцией build-ca. В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.

  • ca.crt — файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файла ca.crt потребуется для вашего сервера и для всех ваших клиентов.
  • ca.key — закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлу ca.key, он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файл ca.key должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать, когда он не используется для подписывания запросов сертификатов.

Если вы не хотите вводить пароль при каждом взаимодействии с CA, вы можете запустить команду build-ca с опцией nopass:

  • ./easyrsa build-ca nopass

После выполнения команды вам будет предложено подтвердить обычное имя CA:

Output

. . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

Обычное имя — это имя, которое будет использоваться для этой системы в контексте центра сертификации. Вы можете выбрать любое имя CA, но в данном случае проще всего нажать ENTER, чтобы принять имя по умолчанию.

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

Шаг 3 — Создание сертификата сервера, ключа и файлов шифрования

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

Для начала откройте каталог EasyRSA на сервере OpenVPN:

Запустите на сервере скрипт easyrsa с опцией init-pki. Хотя вы уже запускали эту команду в системе с CA, ее необходимо запустить здесь, потому что ваш сервер и центр сертификации используют разные каталоги PKI:

Вызовите скрипт easyrsa еще раз и используйте опцию gen-req с обычным именем этого компьютера. Вы можете использовать любое имя, но лучше всего выбрать запоминающийся вариант. В этом обучающем модуле для сервера OpenVPN мы будем использовать обычное имя «сервер». Обязательно добавьте опцию nopass. Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями:

Примечание. Если вы выберете любое другое имя, кроме «server», вы должны будете следовать некоторым из приведенных ниже инструкций с изменениями. Например, при копировании сгенерированных файлов в каталог /etc/openvpn вам нужно будет указать правильные имена. Позднее вам нужно будет изменить файл etc/openvpn/server.conf, чтобы он указывал на соответствующие файлы .crt и .key.

  • ./easyrsa gen-req server nopass

В результате будет создан закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в каталог /etc/openvpn/:

  • sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/

Используя безопасный метод (например, SCP как в примере ниже), переместите файл server.req на компьютер CA:

  • scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp

Откройте на компьютере CA каталог EasyRSA:

Снова запустите скрипт easyrsa и импортируйте файл server.req, добавив в путь к файлу обычное имя:

  • ./easyrsa import-req /tmp/server.req server

Затем подпишите запрос, запустив скрипт easyrsa с опцией sign-req и указанием типа запроса и обычного имени. Запрос может относиться к типу клиента или сервера, и для запроса сертификата сервера OpenVPN следует использовать запрос типа сервера:

  • ./easyrsa sign-req server server

В результатах вам будет предложено убедиться, что запрос поступил из надежного источника. Для подтверждения введите yes и нажмите ENTER:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

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

Затем переместите подписанный сертификат на сервер VPN, используя защищенный метод:

  • scp pki/issued/server.crt sammy@your_server_ip:/tmp

Прежде чем выполнять выход из системы на компьютере CA, переместите файл ca.crt на ваш сервер:

  • scp pki/ca.crt sammy@your_server_ip:/tmp

Затем снова выполните вход в систему на сервере OpenVPN и скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/:

  • sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

После этого перейдите в каталог EasyRSA:

Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:

Для этого может потребоваться несколько минут. После завершения сгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:

  • openvpn --genkey --secret ta.key

Когда команда будет выполнена, скопируйте два новых файла в каталог /etc/openvpn/:

  • sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
  • sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

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

Шаг 4 — Создание сертификата клиента и пары ключей

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

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

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

  • mkdir -p ~/client-configs/keys

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

  • chmod -R 700 ~/client-configs

Вернитесь в каталог EasyRSA и запустите скрипт easyrsa с опциями gen-req и nopass, указав обычное имя клиента:

  • cd ~/EasyRSA-3.0.4/
  • ./easyrsa gen-req client1 nopass

Нажмите ENTER, чтобы подтвердить обычное имя. Скопируйте файл client1.key в ранее созданный каталог /client-configs/keys/:

  • cp pki/private/client1.key ~/client-configs/keys/

Затем переместите файл client1.req на компьютер CA, используя безопасный метод:

  • scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

Войдите в систему на компьютере CA, откройте каталог EasyRSA и импортируйте запрос сертификата:

  • ssh sammy@your_CA_ip
  • cd EasyRSA-3.0.4/
  • ./easyrsa import-req /tmp/client1.req client1

Затем подпишите запрос, как сделали это для сервера на предыдущем шаге. Однако в этот раз обязательно укажите тип запроса client:

  • ./easyrsa sign-req client client1

В диалоге введите yes, чтобы подтвердить, что вы планируете подписать запрос сертификата, и что он поступил из доверенного источника:

Output

Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes

Если вы зашифровали свой ключ CA вам будет предложено ввести пароль.

В результате будет создан файл клиентского сертификата с именем client1.crt. Переместите этот файл обратно на сервер.

  • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Подключитесь к серверу OpenVPN через SSH и скопируйте клиентский сертификат в каталог /client-configs/keys/:

  • cp /tmp/client1.crt ~/client-configs/keys/

Затем скопируйте файлы ca.crt и ta.key в каталог /client-configs/keys/:

  • cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
  • sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Теперь вы сгенерировали ключи и сертификаты для сервера и клиента и сохранили их в соответствующих каталогах на вашем сервере. С этими файлами еще предстоит выполнить несколько действий, но к ним мы вернемся позднее. Сейчас же вы можете начать настройку OpenVPN на своем сервере.

Шаг 5 — Настройка службы OpenVPN

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

Прежде всего скопируйте файл с образцом конфигурации OpenVPN в каталог configuration и извлеките его, чтобы использовать в качестве основы:

  • sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
  • sudo gzip -d /etc/openvpn/server.conf.gz

Откройте файл конфигурации сервера в предпочитаемом текстовом редакторе:

  • sudo nano /etc/openvpn/server.conf

Найдите раздел HMAC, выполнив поиск директивы tls-auth. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:

/etc/openvpn/server.conf

tls-auth ta.key 0 # This file is secret

Затем найдите раздел криптографических шифров, выполнив поиск строк комментариев с текстом cipher. Шифр AES-256-CBC обеспечивает хороший уровень шифрования и хорошо поддерживается. Комментарии из этой строки должны быть уже удалены, но если строка еще закомментирована, уберите символ «;» в начале строки:

/etc/openvpn/server.conf

cipher AES-256-CBC

Добавьте под этой строкой директиву auth, чтобы выбрать алгоритм обработки сообщений HMAC. Для этого хорошо подойдет SHA256:

/etc/openvpn/server.conf

auth SHA256

Затем найдите строку с директивой dh, которая определяет параметры алгоритма Диффи-Хеллмана. В связи с недавними изменениями EasyRSA имя файла ключа Диффи-Хеллмана может отличаться от указанного в файле образца конфигурации сервера. Если потребуется, измените указанное здесь имя файла, удалив цифры 2048 для соответствия ключу, сгенерированному на предыдущем шаге:

/etc/openvpn/server.conf

dh dh.pem

Наконец, найдите настройки user и group и удалите «;» из начала каждой строки:

/etc/openvpn/server.conf

user nobody
group nogroup

Внесенные в файл образца server.conf изменения необходимы для работы OpenVPN. Описанные ниже изменения не обязательны, однако они также необходимы для многих распространенных вариантов использования.

(Необязательно) Изменение DNS для перенаправления всего трафика через сеть VPN

Вышеуказанные настройки создадут соединение VPN между двумя компьютерными системами, но не заставят никакие соединения использовать туннель. Если вы хотите использовать VPN для перенаправления всего вашего трафика, вам нужно будет передать настройки DNS на клиентские компьютеры.

В файле server.conf имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway и удалите точку с запятой «;» в начале строки redirect-gateway, чтобы убрать режим комментария:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Под этой строкой найдите раздел dhcp-option. Снова удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

(Необязательно) Изменение порта и протокола

По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила брандмауэра.

/etc/openvpn/server.conf

# Optional!
port 443

Довольно часто этот порт также ограничивает протокол. Если это так, измените значение proto с UDP на TCP:

/etc/openvpn/server.conf

# Optional!
proto tcp

Если вы действительно смените протокол на TCP, вам нужно будет изменить значение директивы explicit-exit-notify с 1 на 0, поскольку эта директива используется только протоколом UDP. В противном случае при запуске службы OpenVPN возможны ошибки протокола TCP :

/etc/openvpn/server.conf

# Optional!
explicit-exit-notify 0

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

(Необязательно) Указание на учетные данные, отличающиеся от используемых по умолчанию

Если вы выбрали другое имя при использовании команды ./build-key-server, измените строки cert и key так, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию «server», ничего изменять не нужно:

/etc/openvpn/server.conf

cert server.crt
key server.key

После завершения редактирования сохраните и закройте файл.

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

Шаг 6 — Настройка конфигурации сети сервера

Чтобы OpenVPN мог правильно перенаправлять трафик через сеть VPN, необходимо изменить некоторые параметры конфигурации сети сервера. Прежде всего нужно изменить параметр IP forwarding, который определяет необходимость перенаправления IP-трафика. Это необходимо для реализации функций VPN, обеспечиваемых вашим сервером.

Для изменения настройки переадресации IP по умолчанию на вашем сервере следует отредактировать файл /etc/sysctl.conf:

  • sudo nano /etc/sysctl.conf

Найдите в файле строку комментария с параметром net.ipv4.ip_forward. Удалите символ «#» из начала строки, чтобы убрать режим комментария для этой настройки:

/etc/sysctl.conf

net.ipv4.ip_forward=1

Сохраните файл и закройте его после завершения.

Чтобы прочитать файл и изменить значения для текущей сессии, введите:

Output

net.ipv4.ip_forward = 1

Если вы следовали указаниям обучающего модуля «Начальная настройка сервера Ubuntu 18.04», указанного в предварительных требованиях, у вас должен быть установлен брандмауэр UFW. Вне зависимости от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что нужно делать почти всегда), в этом обучающем модуле брандмауэр вам потребуется для определенных манипуляций с трафиком, поступающим на сервер. Некоторые правила брандмауэра нужно изменить, чтобы включить маскарадинг (это концепция iptables, обеспечивающая динамическую трансляцию сетевых адресов (NAT) для правильной маршрутизации клиентских соединений.

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

Публичный интерфейс компьютера показан в результатах выполнения этой команды после слова «dev». Например, в этом результате показан интерфейс с именем wlp11s0, который выделен ниже:

Output

default via 203.0.113.1 dev wlp11s0 proto static

Когда у вас будет интерфейс, связанный с маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию:

  • sudo nano /etc/ufw/before.rules

Правила UFW обычно добавляются с помощью команды ufw. Правила, перечисленные в файле before.rules, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию для цепочки POSTROUTING в таблице nat, и любой трафик из VPN будет маскироваться. Обязательно замените wlp11s0 в строке -A POSTROUTING на интерфейс, определенный с помощью следующей команды:

/etc/ufw/before.rules

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Сохраните файл и закройте его после завершения.

Затем вам нужно будет указать UFW разрешать перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw:

  • sudo nano /etc/default/ufw

Найдите в файле директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT:

/etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохраните файл и закройте его после завершения.

Затем измените настройки брандмауэра, чтобы разрешить трафик OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf, вам нужно будет открыть трафик UDP на порту 1194. Если вы изменили порт или протокол, замените выбранные здесь значения.

Если вы забыли добавить порт SSH при выполнении обязательного обучающего модуля, добавьте его сейчас:

  • sudo ufw allow 1194/udp
  • sudo ufw allow OpenSSH

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

  • sudo ufw disable
  • sudo ufw enable

Теперь ваш сервер настроен для правильной обработки трафика OpenVPN.

Шаг 7 — Запуск и активация службы OpenVPN

Теперь вы готовы запустить службу OpenVPN на своем сервере. Для этого нужно использовать утилиту systemd systemctl.

Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной экземпляра после имени файла systemd. Файл конфигурации вашего сервера имеет имя /etc/openvpn/server.conf, поэтому при его вызове в конец файла нужно добавить @server:

  • sudo systemctl start openvpn@server

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

  • sudo systemctl status openvpn@server

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

Output

[email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/[email protected] └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

Также вы можете проверить доступность интерфейса OpenVPN tun0 с помощью следующей команды:

Будет выведен настроенный интерфейс:

Output

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

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

  • sudo systemctl enable openvpn@server

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

Шаг 8 — Создание инфраструктуры конфигурации клиентских систем

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

Для начала создайте новый каталог для хранения файлов конфигурации клиентов в ранее созданном каталоге client-configs:

  • mkdir -p ~/client-configs/files

Затем скопируйте файл с образцом конфигурации клиента в каталог client-configs, чтобы использовать его как базовую конфигурацию:

  • cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте новый файл в текстовом редакторе:

  • nano ~/client-configs/base.conf

Найдите в файле директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Если вы решили изменить порт, который будет прослушивать сервер OpenVPN, вам нужно будет заменить 1194 на выбранный порт:

~/client-configs/base.conf

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

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

~/client-configs/base.conf

proto udp

Уберите режим комментариев для директив user и group, удалив символ «;» из начала каждой строки:

~/client-configs/base.conf

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Найдите директивы, задающие ca, cert и key. Поставьте знак комментария перед строками этих директив, поскольку вы вскоре добавите сертификаты и ключи в сам файл:

~/client-configs/base.conf

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

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

~/client-configs/base.conf

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Создайте зеркальное отражение настроек cipher и auth, заданных в файле /etc/openvpn/server.conf:

~/client-configs/base.conf

cipher AES-256-CBC
auth SHA256

Затем добавьте в файл директиву key-direction. Вы должны задать значение «1», чтобы VPN правильно работала на клиентском компьютере:

~/client-configs/base.conf

key-direction 1

В заключение, добавьте несколько строк комментариев. Хотя вы можете включить эти директивы в каждый файл конфигурации клиента, их нужно включать только для клиентов Linux с файлом /etc/openvpn/update-resolv-conf. Этот скрипт использует утилиту resolvconf для обновления данных DNS клиентов Linux.

~/client-configs/base.conf

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Если ваш клиент работает под управлением Linux, и на нем есть файл /etc/openvpn/update-resolv-conf, удалите знак комментария в начале этих строк файла конфигурации клиента, когда он будет сгенерирован.

Сохраните файл и закройте его после завершения.

Затем создайте простой скрипт, который скомпилирует базовую конфигурацию с соответствующим сертификатом, ключом и файлами шифрования, и поместите сгенерированную конфигурацию в каталог ~/client-configs/files. Откройте новый файл с именем make_config.sh в каталоге ~/client-configs:

  • nano ~/client-configs/make_config.sh

Добавьте в файл следующее:

~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Сохраните файл и закройте его после завершения.

Прежде чем продолжить, отметьте этот файл как исполняемый, введя следующую команду:

  • chmod 700 ~/client-configs/make_config.sh

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

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

Шаг 9 — Создание конфигураций клиентов

Если вы следовали указаниям руководства, на шаге 4 вы создали клиентский сертификат и ключ с именами client1.crt и client1.key соответственно. Вы можете сгенерировать файл конфигурации для этих учетных данных, перейдя в каталог ~/client-configs и запустив скрипт, созданный в конце предыдущего шага:

  • cd ~/client-configs
  • sudo ./make_config.sh client1

При этом файл client1.ovpn будет создан в каталоге ~/client-configs/files:

  • ls ~/client-configs/files

Output

client1.ovpn

Этот файл нужно будет переместить на устройство, которое вы планируете использовать в качестве клиента. Например, это может быть ваш локальный компьютер или мобильное устройство.

Хотя конкретные приложения для передачи зависят от операционной системы устройства и ваших предпочтений, один из наиболее надежных и безопасных способов — использовать SFTP (протокол передачи файлов SSH) или SCP (защищенное копирование) на стороне сервера. При этом файлы аутентификации VPN вашего клиента будут передаваться через шифрованное соединение.

Вот пример команды SFTP с использованием образца client1.ovpn, который можно запустить с локального компьютера (macOS или Linux). Он помещает файл .ovpn в домашний каталог:

  • sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

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

Шаг 10 — Установка конфигурации клиентов

В этом разделе рассказывается о том, как установить клиентский профиль VPN в Windows, macOS, Linux, iOS и Android. Эти инструкции не зависят друг от друга, так что вы можете сразу перейти к той, которая относится к вашему устройству.

Подключение OpenVPN будет иметь имя, совпадающее с именем файла .ovpn. В этом обучающем модуле это означает, что соединение будет иметь имя client1.ovpn, что соответствует первому сгенерированному клиентскому файлу.

Windows

Установка

Загрузите клиентское приложение OpenVPN для Windows со страницы загрузки OpenVPN. Выберите подходящую версию программы установки для вашей версии Windows.

Примечание. Для установки OpenVPN требуются привилегии администратора.

После установки OpenVPN, скопируйте файл .ovpn в:

C:\Program Files\OpenVPN\config

При запуске OpenVPN профиль будет автоматически обнаружен и сделан доступным.

Вы должны запускать OpenVPN от имени администратора каждый раз, даже если используете учетную запись администратора. Чтобы вам не нужно было при каждом запуске VPN нажимать правую кнопку мыши и выбриать Запуск от имени администратора, такой запуск следует настроить в учетной записи администратора. Это также означает, что обычным пользователям нужно будет ввести пароль администратора, чтобы использовать OpenVPN. Обычные пользователи не смогут правильно подключиться к серверу, если у приложения OpenVPN на клиентской системе нет прав администратора, поэтому необходим повышенный уровень привилегий.

Чтобы настроить приложение OpenVPN для запуска от имени администратора при каждом запуске, нажмите правой кнопкой мыши на его ярлык и выберите пункт Свойства. Внизу вкладки Совместимость нажмите кнопку Изменить параметры для всех пользователей. В новом окне установите отметку Запускать эту программу от имени администратора.

Подключение

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

После запуска OpenVPN нажмите правой кнопкой на значок OpenVPN в области задач, чтобы создать соединение. Откроется контекстное меню. Выберите client1 в верхней части меню (это ваш профиль client1.ovpn) и нажмите Подключиться.

Откроется окно состояния, где будут выведены данные журнала при установке соединения, и после подключения клиента будет выведено сообщение.

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

macOS

Установка

Tunnelblick — бесплатный клиент OpenVPN с открытым исходным кодом для macOS. Вы можете загрузить последний образ этого клиентского приложения со страницы загрузки Tunnelblick. Дважды щелкните загруженный файл .dmg и следуйте указаниям по установке.

В конце процесса установки Tunnelblick спросит, есть ли у вас файлы конфигурации. Укажите ответ У меня есть файлы конфигурации и дайте Tunnelblick завершить работу. Откройте окно Finder и дважды нажмите client1.ovpn. Tunnelblick установит клиентский профиль. Для этого требуются привилегии администратора.

Подключение

Запустите Tunnelblick, дважды щелкнув значок Tunnelblick в папке Приложения. После запуска Tunnelblick в панели меню в правом верхнем углу экрана появится значок Tunnelblick для управления соединениями. Нажмите на значок, а затем нажмите на пункт меню Подключить client1, чтобы создать соединение VPN.

Linux

Установка

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

Однако проще всего будет использовать для этой цели программное обеспечение OpenVPN.

В Ubuntu или Debian вы можете установить его так же, как и на сервере, введя следующую команду:

  • sudo apt update
  • sudo apt install openvpn

В CentOS вы можете активировать репозитории EPEL и выполнить установку, введя следующую команду:

  • sudo yum install epel-release
  • sudo yum install openvpn
Настройка

Проверьте, включен ли в ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf:

Output

update-resolv-conf

Затем отредактируйте перемещенный файл конфигурации клиента OpenVPN:

Если вы нашли файл update-resolv-conf, уберите значок комментария из начала трех строк, добавленных для изменения настроек DNS:

client1.ovpn

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Если вы используете CentOS, измените директиву group с nogroup на nobody для соответствия доступным группам дистрибутива:

client1.ovpn

group nobody

Сохраните и закройте файл.

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

  • sudo openvpn --config client1.ovpn

Эта команда должна установить подключение к вашей VPN.

iOS

Установка

Найдите в магазине приложений iTunes App Store приложение OpenVPN Connect, официальный клиент OpenVPN для iOS, и установите его. Чтобы переместить конфигурацию клиента iOS на устройство, подключите его к компьютеру напрямую.

Здесь описан процесс завершения передачи с помощью iTunes. Откройте iTunes на компьютере и нажмите iPhone > приложения. Прокрутите страницу до раздела Общий доступ к файлам и нажмите на приложение OpenVPN. Пустое окно справа OpenVPN Documents предназначено для общего доступа к файлам. Перетащите файл .ovpn в окно OpenVPN Documents.

Запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импортированию. Нажмите зеленый значок плюс, чтобы импортировать его.

Подключение

Приложение OpenVPN готово к использованию нового профиля. Установите соединение, передвинув кнопку Подключиться в положение Вкл. Для отключения передвиньте эту же кнопку в положение Выкл.

Примечание. Переключатель VPN в разделе Настройки нельзя использовать для подключения к VPN. Если вы попробуете сделать это, вы получите уведомление о том, что для подключения нужно использовать приложение OpenVPN.

Android

Установка

Откройте магазин приложений Google Play Store. Найдите приложение Android OpenVPN Connect, официальное клиентское приложение OpenVPN для Android, и установите его.

Вы можете переместить профиль .ovpn, подключив устройство Android к вашему компьютеру через интерфейс USB и скопировав файл. Если у вас в компьютере есть разъем для SD-карт, мы можете извлечь SD-карту из устройства, скопировать на нее профиль и вставить карту обратно в устройство Android.

Запустите приложение OpenVPN и нажмите на меню, чтобы импортировать профиль.

Затем перейдите в местоположение сохраненного профиля (на снимке экрана используется расположение /sdcard/Download/) и выберите файл. Приложение покажет, что профиль импортирован.

Подключение

Чтобы подключиться, просто нажмите кнопку Подключиться. Вам нужно будет указать, что вы доверяете приложению OpenVPN. Нажмите OK, чтобы установить соединение. Чтобы отключиться от VPN, вернитесь в приложение OpenVPN и выберите пункт Отключиться.

Шаг 11 — Тестирование соединения VPN (необязательно)

Примечание. Этот метод тестирования соединения VPN будет работать, только если вы настроите перенаправление всего трафика через VPN на шаге 5.

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

Сайт покажет IP-адрес, назначенный вашим интернет-провайдером и видный остальному миру. Чтобы проверить настройки DNS через этот же сайт, нажмите Расширенный тест, и вы увидите, какие серверы DNS вы используете.

Теперь подключите клиент OpenVPN к VPN вашего дроплета и обновите браузер. Вы увидите совершенно другой IP-адрес (адрес вашего сервера VPN), и именно этот адрес будет виден остальному миру. Итак, в приложении DNSLeakTest функция Расширенный тест проверит ваши настройки DNS и подтвердит, что вы используете параметры DNS, заданные вашей VPN.

Шаг 12 — Отзыв сертификатов клиента

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

Для этого перейдите в каталог EasyRSA на компьютере CA:

Затем запустите скрипт easyrsa с опцией revoke, а затем укажите имя клиента, у которого хотите отозвать сертификат:

Система предложит вам подтвердить отзыв сертификата. Введите yes:

Output

Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client2 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes

После подтверждения действия CA полностью отзовет сертификат клиента. Однако в текущий момент ваш сервер OpenVPN не может проверить, отозваны ли сертификаты каких-либо клиентов, и все клиенты будут иметь доступ к сети VPN. Чтобы устранить эту проблему, нужно создать на компьютере CA список отзыва сертификатов (CRL):

Эта команда генерирует файл crl.pem. Выполните защищенное перемещение этого файла на ваш сервер OpenVPN:

  • scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

На сервере OpenVPN скопируйте этот файл в каталог /etc/openvpn/:

  • sudo cp /tmp/crl.pem /etc/openvpn

Затем откройте файл конфигурации сервера OpenVPN:

  • sudo nano /etc/openvpn/server.conf

Добавьте в конце файла опцию crl-verify, чтобы сервер OpenVPN проверял созданный нами список отзыва сертификатов при каждой попытке подключения:

/etc/openvpn/server.conf

crl-verify crl.pem

Сохраните и закройте файл.

Перезапустите OpenVPN, чтобы завершить отзыв сертификата:

  • sudo systemctl restart openvpn@server

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

Чтобы запретить доступ другим клиентам, повторите эту процедуру:

  1. Для отзыва сертификата используется команда ./easyrsa revoke client_name.
  2. Создайте новый список CRL
  3. Переместите новый файл crl.pem на сервер OpenVPN и скопируйте его в каталог /etc/openvpn, чтобы перезаписать старый список.
  4. Перезапустите службу OpenVPN.

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

Заключение

Теперь вы можете безопасно использовать интернет, защитив данные о своей личности и расположении и свой трафик от снуперов и цензоров.

Для настройки других клиентских систем вам нужно будет повторить шаги 4 и 9-11 для каждого дополнительного устройства. Чтобы запретить доступ клиентским системам, следуйте указаниям в шаге 12.

Настройка OpenVPN руководство и видео в 2021 [АйТи бубен]

OpenVPN — это приложение для создания безопасного IP-туннеля через единый UDP- или Порты TCP-порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN, для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.

OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.

  1. Предустановленный ключ, — самый простой метод.

  2. С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).

OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT или через полноценный межсетевой экран (например, Правила iptables в Linux).

Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.

Основные компоненты сети 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) и асимметричную криптографию.

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

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

Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных, тем труднее будет его подобрать, но и тем заметнее получится замедление обмена данными.

Задача:

  1. Настроить сервер OpenVPN Ubuntu 18.04.4 LTS в облаке. Выбор Linux сервера для OpenVPN: Облачная технология от DigitalOcean, Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам, прекрасная связь с Украиной в этом центре.
  2. Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/ключами: создание, удаление и отзыв сертификатов клиентов OpenVPN

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

  1. Офис Московский: 4 локальных сети со шлюзом под управлением Debian GNU/Linux 7.11 (wheezy)

  2. Офис Данилевского: 1 локальная сеть шлюз MikroTik

  3. Офис Гагарина 1: 1 локальная сеть

Клиенты:

  1. Мобильные клиенты на Android

  2. Удаленные клиенты Windows 10

Создание нового сертификата пользователя, под правами обычного пользователя (не root).

cd ~/openvpn-ca
source vars
./build-key zabbix
cd ~/client-configs
./make_config.sh zabbix
cp /etc/openvpn/ccd/base.client /etc/openvpn/ccd/zabbix

Шаблон base.client содержит комментированные строки такого содержания

base.client
$ cat base.client
 
#ifconfig-push 10.8.0.21 10.8.0.22
#push "route 192.168.35.0 255.255.255.0"
#push "route 192.168.22.0 255.255.255.0"
#push "route 10.90.91.0 255.255.255.0"
#iroute 192.168.35.0 255.255.255.0
#iroute 192.168.22.0 255.255.255.0
#iroute 10.90.91.0 255.255.255.0
# all trafic to VPN
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 208.67.222.222"
#push "dhcp-option DNS 208.67.220.220"

Для отзыва дополнительных сертификатов выполните следующие шаги.

Настройка сетевой конфигурации Linux — сервера для безопасной работы сервера OpenVPN: iptables/UFW, ядро Linux.

Делаем первичную настройку безопасности Ubuntu. Iptables при помощи ufw разрешаем только SSH.

Многим удобнее смотреть, чем читать. Ниже видео версия этого руководства. Настоятельно рекомендую руководство прочитать!

Необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик. Инструкция применима для операционных систем на базе Linux ядра: Debian, Ubuntu, CentOS и т.д..

Разрешим серверу перенаправлять трафик, настройка производится в файле /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Найдите строку настройки net.ipv4.ip_forward. Удалите “#” из начала строки, чтобы раскомментировать её.
Для применения настроек к текущей сессии наберите команду:

sudo sysctl -p

В общем случае для корректной работы сервера OpenVPN вы должны открыть входящий порт для клиентов и включить NAT Маскарадинг (Masquerading) преобразование, если вы весь трафик клиента, хотите маршрутизировать через VPN.

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

Firewall iptables:
Открываем UDP порт 1194 и разрешаем пакеты приходящие с интерфейса TUN и TAP или tun.

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
or
iptables -A INPUT -i tun+ -j ACCEPT
# для динамического IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Если вы используете надстройку над iptables UFW, выполните нижеприведенные действия.

Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:

ip route | grep default

Публичный интерфейс должен следовать за словом «dev».
Зная название интерфейса откроем файл /etc/ufw/before.rules и добавим туда соответствующие настройки:

sudo nano /etc/ufw/before.rules

Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat.

Не забудьте заменить eth0 в строке -A POSTROUTING на имя интерфейса, найденное нами ранее.

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#
 
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
 
# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Далее настроим сам файрвол для разрешения трафика в OpenVPN.

Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.

sudo ufw allow 1194/udp

Теперь деактивируем и активируем UFW для применения внесённых изменений:

sudo ufw disable
sudo ufw enable

Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt для его установки. Также мы установим пакет easy-rsa, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.

Обновим список пакетов сервера и установим необходимые пакеты следующими командами:

sudo apt update
sudo apt full-upgrade
sudo apt install openvpn easy-rsa

OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.

Первый вариант копирования файлов easy-rsa

cp -r /usr/share/easy-rsa  /etc/openvpn/
cd /etc/openvpn/easy-rsa

Но я буду использовать второй вариант копирования файлов easy-rsa
Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:

make-cadir ~/openvpn-ca

Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию openvpn-ca для начала настройки центра сертификации:

cd ~/openvpn-ca

В этом каталоге есть файл с именем vars, создайте его копию.

cp vars vars.original

Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:

nano vars

Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.

Чтобы в дальнейшем, при создании сертификатов, не появлялась ошибка про отсутствие файла openssl.cnf, вы можете пойти двумя путями. Первый просто переименовать нужный файл.

cp openssl-1.0.0.cnf openssl.cnf

И второй путь, отредактировать в файле vars параметр export KEY_CONFIG:

# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
#export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf

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

~/openvpn-ca/vars
. . .
 
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
 
. . .

Замените значения, на что-нибудь другое, не оставляйте их не заполненными:

~/openvpn-ca/vars
. . .
 
export KEY_COUNTRY="UA"
export KEY_PROVINCE="NY"
export KEY_CITY="Kharkiv"
export KEY_ORG="Mirax"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyPersonal"
 
. . .

Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя:

~/openvpn-ca/vars
export KEY_NAME="server"

Сохраните и закройте файл.

Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.

Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars:

cd ~/openvpn-ca
source vars

Вы должны увидеть следующий вывод:

Вывод

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

Возможно вам нужно будет переименовать файл:

cp openssl-1.0.0.cnf openssl.cnf

Убедимся, что мы работаем в “чистой среде” выполнив следующую команду:

./clean-all

Теперь мы можем создать наш корневой центр сертификации командой:

./build-ca

Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:

В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.

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

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

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

Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:

Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.

./build-key-server server

Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.

Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:

Вывод

. . .

Certificate is to be certified until May  1 17:51:16 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами, командой:

./build-dh

Для завершения этой команды может потребоваться несколько минут.

Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:

openvpn --genkey --secret keys/ta.key

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

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

Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа.

Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:

cd ~/openvpn-ca
source vars
./build-key client1

Для создания файлов, защищённых паролем, используйте команду build-key-pass:

cd ~/openvpn-ca
source vars
./build-key-pass client1

В ходе процесса создания файлов все значения по умолчанию будут введены, вы можете нажимать ENTER. Не задавайте challenge password и введите y на запросы о подписи и подтверждении создания сертификата.

Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов.

Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.

Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh3048.pem /etc/openvpn

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

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Изменения вносимые в скопированный конфигурационный файл /etc/openvpn/server.conf. Приведенные ниже директивы, нужно или добавить или раскомментировать, а директиву cipher заменить.

tls-auth ta.key 0
key-direction
cipher AES-128-CBC
auth SHA256
user nobody
group nogroup

Рабочий конфигурационный файл OpenVPN сервера:

server.conf
;local a.b.c.d
local xxx.xxx.xxx.xxx
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh3048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
push "route 192.168.35.0 255.255.255.0"
client-config-dir ccd
route 192.168.35.0 255.255.255.0
route 192.168.22.0 255.255.255.0
route 10.90.91.0 255.255.255.0
# маршрут передается всем клиентам
push "route 192.168.35.0 255.255.255.0"
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
key-direction 0
cipher AES-128-CBC
auth SHA256
;compress lz4-v2
;push "compress lz4-v2"
;comp-lzo
max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
;log-append  /var/log/openvpn/openvpn.log
verb 3
;mute 20
explicit-exit-notify 1

Включим сервис OpenVPN с помощью systemd.

При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf, поэтому мы добавим @server в конец имени файла при его вызове:

sudo systemctl start openvpn@server

Убедимся, что сервис успешно запущен командой:

sudo systemctl status openvpn@server

Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:

sudo systemctl enable openvpn@server

Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:

mkdir -p ~/client-configs/files

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

chmod 700 ~/client-configs/files

Создание базовой конфигурации:
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте этот файл в вашем текстовом редакторе:

nano ~/client-configs/base.conf

Работающий base.conf. Я привел его одинаковым настройкам с сервером, изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote.

Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf нужно раскомментировать три нижние строчки.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
base.conf
client
dev tun
proto udp
;remote xxx.xxx.xxx.xxx 1194
remote vpn8.example.net 1194
resolv-retry infinite
nobind
#user nobody
#group nogroup
persist-key
persist-tun
#ca ca.crt
#cert client.crt
#key client.key
remote-cert-tls server
tls-auth ta.key 1
#cipher AES-256-CBC
cipher AES-128-CBC
auth SHA256
#comp-lzo
verb 3
;mute 20
key-direction 1
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files.

Создайте и откройте файл make_config.sh внутри директории ~/client-configs:

nano ~/client-configs/make_config.sh

Вставьте следующие текст в этот файл:

make_config.sh
~/client-configs/make_config.sh
#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
 
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Сохраните и закройте файл.

Сделайте его исполняемым файлом командой:

chmod 700 ~/client-configs/make_config.sh

Теперь легко и понятно можно генерировать файлы конфигурации клиентов.

Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на шаге 7. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:

cd ~/client-configs
./make_config.sh client1

Если всё прошло успешно, мы должны получить файл client1.ovpn в директории ~/client-configs/files:

ls ~/client-configs/files
 
client1.ovpn

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

Для Linux проще всего ставить этот же пакет OpenVPN, но настраивать его клиентом.

sudo apt install openvpn

Пример рабочего конфига для Ubuntu 20.04.1 LTS скачиваем файл (с расширением ovpn) созданный на этапе 10. Копируем его в директорию /etc/openvpn клиента (переименовываем расширение):

cp client1.ovpn client1.conf

Тестируем работу клиента:

sudo openvpn --config client1.conf

Если все ОК — настраиваем автозапуск клиента в Ubuntu. Для Ubuntu 18.04 LTS и выше нужно включить службу OpenVPN для запуска во время загрузки перечитать конфиг systemctl:

sudo systemctl enable openvpn
sudo systemctl daemon-reload

Запускаем клиента

sudo systemctl start openvpn

В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:

  1. добавляет клиенту маршрут к локальной подсети центрального офиса(push «route 192.168.1.0 255.255.255.0»)

  2. определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)

  3. привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push <IP-адрес клиента> <IP-адрес сервера>. Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).

# mkdir /etc/openvpn/ccd
# nano ccd/farm1c
push "route 192.168.1.0 255.255.255.0"
#push "route 192.168.35.0 255.255.255.0"
# static IP
ifconfig-push 192.168.14.21 192.168.14.22
#iroute 192.168.2.0 255.255.255.0

Сотрудники увольняются и им нужно запретить доступ к VPN. Значит нужно отозвать их сертификат. Команда revoke-full с именем клиента используется для отзыва ssl сертификата OpenVPN.

Если нет файла .rnd (это файл генератора псевдослучайных чисел) в каталоге пользователя, от имени которого вы создаете сертификаты, выполните командой:

$ cd
$ touch .rnd

Переходим в директорию центра сертификации и вводим команды:

$ cd ~/openvpn-ca
$ source vars

Отзываем сертификат используя команду revoke-full с именем клиента, например client1.

$ ./revoke-full client1

В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
Теперь нужно объяснить серверу OpenvPN, где ему брать информацию об отозванных сертификатах, для этого используется директива crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов из файла каждый раз crl.pem, когда кто-то устанавливает соединение с сервером.

Копируем crl.pem в каталог. В конце файла /etc/openvpn/server.conf задаем путь через директиву crl-verify

crl-verify crl.pem

Перезапускаем сервер OpenVPN

# service openvpn restart

Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат, в логе сервера будет появляться строка о том что сертификат отозван: VERIFY ERROR: depth=0, error=certificate revoked

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

Если у вас 2 сервера openvpn, вам следует переименовать crl.pem и в crl-verify задать файл со своим именем. Просто для второго сервера копируем и переименовываем crl.pem например в crltcp.pem. Если вы укажите один и тот же файл для разных OpebVPN серверов — ваши сервера будут падать.

Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN

Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE, в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:

# netstat -rn
Kernel IP routing table              
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0

Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:

# netstat -rn
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         91.196.96.35    255.255.255.255 UGH       0 0          0 ppp0

Решение: Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)

route add 0/0 gw 91.196.96.35

или в скрипте при загрузке системы, но после поднятия интерфейса ppp0

route del default
route add default gw 91.196.96.35 dev ppp0

Окружение: Клиент выходит в интернет с Хостинг VPS/VDS на Ubuntu 14.04.3 LTS + Настройка Dnsmasq Ubuntu установленной в FAQ VirtualBox. Сеть установлена в VirtualBox как сетевой мост. IP получается от Настройка DHCP сервера Linux, FreeBSD на интернет роутере (Netis WF2419R).

Проблема: Не работает push «dhcp-option DNS 10.26.95.254″. Соответственно все Что такое DNS Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные Что такое DNS.

Решение: Был доустановлен основной пакет

aptitude install dnsmasq

добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf

server=/gaga.lan/10.26.95.254
server=/m86a.lan/10.26.95.254
server=/atlex.lan/10.26.95.254
 
server=/95.26.10.in-addr.arpa/10.26.95.254
server=/168.192.in-addr.arpa/10.26.95.254
server=/85.161.10.in-addr.arpa/10.26.95.254

В файле /etc/logrotate.d/openvpn прописываем настройки для приложения logrotate, ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)

openvpn
etc/openvpn/servers/vpnluxor/logs/openvpn.log {
        daily
        rotate 8
        compress
        delaycompress
        missingok
        copytruncate
        notifempty
        create 640 root
}

Для управления сертификатами/клиентами сервера OpenVPN при помощи веб-интерфейса существует не так много программ:

ФайлМашинаНазначениеДоступ
ca.crtСервер и клиентыСертификат корневого САПубличный
ca.keyТолько на сервереНеобходим для подписи других сертификатовСекретный
dh{n}.pemТолько на сервереDiffie Hellman параметрыПубличный
vpnspar.crtТолько на сервереСертификат сервераПубличный
vpnspar.keyТолько на сервереКлюч сервераСекретный
darkfire.crtТолько на клиентеСертификат клиентаПубличный
darkfire.keyТолько на клиентеКлюч клиентаСекретный

Подборка руководств по настройке сервера и клиентов OpenVPN.

В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов, которым я доверяю.

Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)

Поскольку VPN действует только в режиме точка-точка, может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера, а не только с самим сервером.

Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.

Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:

push "route 10.66.0.0 255.255.255.0"

Далее, необходимо настроить на LAN— шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз – разные машины).

Убедитесь, что вы включили пересылку для IP (ip-forwarding) (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.

Проталкивание изменений DNS для перенаправления всего трафика через VPN.

Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.

Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.

Как Настроить VPN-сервер Linux с OpenVPN – Пошаговое Руководство

VPS

access_time

10 декабря, 2020

hourglass_empty

7мин. чтения

Аббревиатура VPN обозначает виртуальную частную сеть. Одной из программ VPN с открытым исходным кодом является OpenVPN. OpenVPN может работать как VPN-сервер Linux. На базовом уровне VPN создаёт защищённое соединение “точка-точка”. Хороший VPN для Linux – один из лучших способов защиты в Интернете или открытой сети. В этом руководстве мы покажем вам, как настроить собственный VPN-сервер Linux с помощью OpenVPN. Сделайте свой VPS безопасным!

Прокачайте ваш проект, воспользовавшись скидками на VPS-хостинг в Hostinger! Большой выбор планов, как для учебных, так и для крупных коммерческих проектов.

К предложению

Зачем использовать VPN-сервер Linux?

VPN имеет определённые преимущества. Некоторые из них выделены ниже:

  • Безопасность. VPN обеспечивает более надёжную защиту, поскольку все данные зашифрованы. Это обеспечивает дополнительную безопасность по сравнению с брандмауэрами.
  • Удалённый доступ. Чтобы обеспечить высокий уровень безопасности многие организации, правительственные и оборонные учреждения разрешают удалённый доступ только через их VPN.
  • ISP шифрование. ISP означает провайдер услуг Интернета. Если вы используете общедоступное соединение Wi-Fi, интернет-провайдер может прочитать все ваши незашифрованные данные. Используя VPN, вы можете сохранить свои данные в безопасности, зашифровав их.
  • Анонимность. VPN позволяет пользователям сохранять анонимность просмотров в Интернете. IP-адреса не отслеживаются.
  • Изменение IP-адреса. VPN позволяет пользователям изменять свои IP-адреса. В некоторых случаях это используется в регионах с ограничениями на основе местоположения.
  • Разблокировка сайтов. Некоторые сайты могут блокироваться в определённых географических регионах. VPN обеспечивает анонимность, поэтому часто используется для обхода интернет-цензуры и разблокировки веб-сайтов.
  • Регулирование. Определённые интернет-провайдеры регулируют пропускную способность пользователя в зависимости от содержимого. Этого можно избежать с помощью VPN.

На более высоком уровне, с помощью шифрования, VPN делает ваши транзакции безопасными.

Рассказав о преимуществах VPN, мы логически подходим к части, где покажем, как происходит установка и настройка OpenVPN в Linux. Мы расскажем о настройке VPN-сервера Linux через OpenVPN и о том, как подключить его к Windows, Android и другим устройствам. Если же на этом этапе вы хотите узнать больше о протоколе OpenVPN, мы предлагаем вам прочитать обзор OpenVPN.

Предусловия:

  1. У вас должны быть права доступа root или sudo
  2. OpenVPN не должен быть предварительно установлен 
  3. Брандмауэр должен разрешать трафик TCP через порт 943 и трафик UDP через порт 1194. Мы рекомендуем использовать UFW. Ознакомьтесь с нашим руководством по UFW, чтобы узнать всё необходимое

Настройка VPN-сервера Linux с Сервером Доступа OpenVPN

Во-первых, давайте обновим систему. Для CentOS:

yum -y update

Для Ubuntu и Debian обновите индексы, используя:

sudo apt update

Для установки OpenVPN вам потребуется пакет net-tools. Установите его, если он не был предварительно установлен. Пакет net-tools содержит ifcfg, необходимый для установки сервера OpenVPN.

Вы можете установить его для CentOS, используя:

sudo yum install net-tools

Для Ubuntu и Debian используйте следующую команду:

sudo apt install net-tools

Вы можете скачать клиент OpenVPN для вашего дистрибутива с веб-сайта OpenVPN. Получить ссылку можно здесь и использовать её вместе с командой curl. Пример команды curl для Ubuntu показан ниже:

curl -O http://swupdate.openvpn.org/as/openvpn-as-2.5.2-Debian9.amd_64.deb

Команда curl для CentOS:

 curl -O http://swupdate.openvpn.org/as/openvpn-as-2.7.3-CentOS7.x86_64.rpm 

Здесь вы можете добавить URL к вашему дистрибутиву. Убедитесь, что загружена правильная установка, напечатав контрольную сумму файла SHA256. Для этого используйте следующую команду:

sha256sum openvpn-as-*

Эта команда распечатает контрольную сумму:

6354ac41be811829e60b028d3a7a527e839232d7f782c1d29bb4d8bd32bf24d5  openvpn-as-2.7.3-CentOS7.x86_64.rpm

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

Для установки в CentOS используйте:

 sudo rpm --install openvpn-as-*.rpm 

Аналогично, для установки в Ubuntu и Debian введите следующую команду в командной строке:

 sudo dpkg -i openvpn-as-*.deb 

Установка OpenVPN займёт некоторое время. После завершения установки вы увидите интерфейс Администратора и детали интерфейса Клиента. Пользователь openvpn будет создан по умолчанию во время установки. Вы можете задать пароль для этого пользователя, используя:

passwd openvpn

Это действие установит новый пароль. Запомните его, так как он будет использоваться для входа в систему. Используйте URL администратора для входа и завершения процесса установки OpenVPN.  В нашем случае URL администратора – https://31.220.111.160:943/admin. Обычно URL – это просто ваш VPS-адрес, порт: 943 с /admin в конце, как в примере.

Вы увидите следующий экран:

Имя пользователя, как упоминалось ранее, openvpn, а пароль – тот, который вы только что установили для этого пользователя. Как только вы войдёте в систему, вы увидите страницу с условиями. Прочитайте их и нажмите кнопку Agree (Cогласен), чтобы продолжить. На следующей странице, вы найдёте информацию о настройках и состоянии сервера.

Настройки по умолчанию вполне адекватны и позволяют MacOS, Linux, Windows, Android и iOS подключиться к VPN-серверу Linux. Если вы хотите изменить какие-либо настройки, обязательно нажмите Apply (Применить) и Update Running Server (Обновить запущенный сервер), чтобы активировать изменения.

Это завершает установку по умолчанию. Далее мы настроим туннель OpenVPN.

Настройка VPN-сервера Linux с OpenVPN для Туннелирования

Включите переадресацию IP в вашем ядре с помощью следующей команды:

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.d/99-sysctl.conf

Это активирует переадресацию трафика через IPv4. Чтобы применить эти изменения, используйте следующую команду:

sudo sysctl -p

OpenVPN не поддерживает одновременные туннели через IPv6 и IPv4, поэтому вы можете отключить IPv6, используя:

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1

Чтобы отключить IPv6 вручную, добавьте следующие параметры, которые будут установлены при загрузке. Эти параметры должны быть добавлены в файл 99-sysctl.conf, расположенный в /etc/sysctl.d/. Просто используйте команду cd для доступа к папке и предпочитаемый текстовый редактор для редактирования файла. Не забудьте сохранить изменения!

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

net.ipv6.conf.eth0.disable_ipv6 = 1

Далее вы можете активировать новые настройки, используя:

sysctl -p

Далее, в файле hosts, расположенном в /etc/ прокомментируйте строку разрешения IPv6, как показано ниже:

::1     localhost ip6-localhost ip6-loopback

Таким образом, мы отключили IPv6. Затем снова войдите в систему по URL сервера Администратора и перейдите в настройки VPN.

В разделе Маршрутизация (Routing), напротив опции “Должны ли VPN-клиенты иметь доступ к частным подсетям (непубличным сетям на стороне сервера)?” должно быть указано “Нет”.

Напротив опции “Должен ли интернет-трафик клиента маршрутизироваться через VPN?” должно быть указано “Да”.

Чтобы избежать утечки DNS, измените настройки распознавателя DNS. Выберите “Клиенты должны использовать те же DNS-сервера, что и Access Server хост.

Сохраните эти настройки и не забудьте нажать на Update Running Server (Обновить запущенный сервер). Вы можете перезапустить сервер OpenVPN, используя вкладку Status (Состояние) в консоли администратора. Отсюда вы можете остановить сервер, а затем запустить его снова.

На этом наша настройка сервера OpenVPN завершена. Далее мы можем проверить клиентские установки.

Как Подключить VPN-сервер Linux к Другим Устройствам с OpenVPN

Теперь, когда ваш сервер запущен и работает, мы можем подключить к нему несколько устройств! Мы рассмотрим наиболее популярные варианты операционной системы:

Установка и Подключение Клиента OpenVPN на Windows

Откройте URL-адрес клиента OpenVPN, вы сможете показывать ссылки на клиентские загрузки на разных операционных системах.

Выберите версию Windows и запустите установку.

После завершения установки вам будет предложено ввести имя пользователя и пароль OpenVPN. IP-адрес сервера будет заполнен автоматически.

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

Установка и Подключение Клиента OpenVPN на MacOS

Подключитесь к пользовательскому интерфейсу Клиента OpenVPN и щёлкните по ссылке, чтобы загрузить программное обеспечение OpenVPN для MacOS. После загрузки этого пакета откроется окно со значком пакета установщика.

Следуйте стандартной процедуре установки приложения MacOS.

Дважды щёлкните по иконке этого установщика и нажмите “Открыть”, чтобы запустить установку.

После завершения установки вы увидите иконку OpenVPN на панели задач macOS. Вы можете щёлкнуть правой клавишей мыши по иконке, чтобы увидеть доступные опции и подключиться к OpenVPN.

После того, как вы выберите опцию “Подключиться к”, вы увидите всплывающее окно с запросом имени пользователя и пароля OpenVPN. Здесь вы должны ввести учётные данные и нажать “Подключиться”, чтобы установить соединение с VPN-сервером Linux.

Установка и Подключение Клиента OpenVPN на Linux

Установка клиента на Linux немного отличается. Загрузите и установите клиентское программное обеспечение OpenVPN в CentOS, используя следующую команду:

sudo yum install OpenVPN

Аналогично, вы можете установить клиентское программное обеспечение OpenVPN на Debian или Ubuntu, используя следующую команду:

 sudo apt-get install openvpn 

Откройте клиентский интерфейс OpenVPN и загрузите соответствующий профиль для вашей ОС. Кроме того, вы можете использовать команду wget или curl и указать URL-адрес для загрузки программного обеспечения.

Скопируйте загруженный профиль в папку /etc/openvpn и переименуйте его в client.conf. Запустите сервис туннелей OpenVPN, где вам будет предложено ввести имя пользователя и пароль. Начните операцию с помощью:

sudo service openvpn start

Вы можете использовать ipconfig или ip addr, чтобы просмотреть сетевые подключения. Как только интерфейс VPN станет доступным, вы увидите, что интерфейс tun0 добавлен в существующий список, показанный в выводе.

Установка и Подключение Клиента OpenVPN на Android

Сначала перейдите в магазин Google Play и найдите OpenVPN Connect. Установите приложение OpenVPN Connect.

Открыв, вы увидите три параметра: Частный туннель (Private Tunnel), Сервер доступа (Access Server) и Профиль OVPN (OVPN Profile).

Выберите Access Server и заполните все данные вручную:

  • Title – укажите предпочитаемое имя подключения.
  • Access Server Hostname – IP-адрес вашего VPN-сервера Linux
  • Port – порт 934 вашего VPN-сервера Linux
  • Username – имя пользователя, установленное на вашем сервере (openvpn по умолчанию)
  • Password – пароль, который вы задали в консоли при настройке VPN-сервера Linux в терминальной среде

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

Установка и Подключение Клиента OpenVPN на iOS  

Как и в случае с Android, вы можете установить программное обеспечение OpenVPN из App Store.

Завершите установку и откройте только что установленное приложение. Оно попросит вас заполнить данные профиля или загрузить файл профиля, как и версия Android.

Как только они будут добавлены, вы можете начать использовать OpenVPN на вашем iPhone или iPad.

Настройки Сжатия VPN-сервера Linux

Если вы подключены к VPN, а Интернет не работает, вы можете проверить журналы OpenVPN по адресу /var/log/openvpnas.log в VPS. Если вы обнаружите записи, аналогичные приведённым ниже, вы, скорее всего, столкнулись с проблемой сжатия:

2019-03-23 18:24:05+0800 [-] OVPN 11 OUT: 'Mon Mar 23 08:59:05 2016 guest/123.45.67.89:55385 Bad compression stub decompression header byte: 251'

Чтобы решить эту проблему, вы можете отключить сжатие. Это можно сделать из интерфейса Администратора. Откройте интерфейс Администратора и нажмите на опцию Advanced VPN.

Перейдите к настройкам сжатия по умолчанию (Default Compression Settings). Здесь отключите опцию Поддержка сжатия на клиентских VPN-соединениях (Support compression on client VPN connection).

Примените изменения и нажмите на опцию Update Running Server. Проблема должна исчезнуть.

Добавление Пользователей на VPN-сервер Linux c OpenVPN

Бесплатный клиент OpenVPN поддерживает двух пользователей. Чтобы создать больше пользователей, вам придётся выбрать любой из платных планов. Вы можете добавить дополнительных пользователей из интерфейса администратора. Перейдите во вкладку “Управление пользователями” и нажмите ссылку “Права пользователя”.

Введите новое имя пользователя, как показано ниже:

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

Сохраните эти настройки и нажмите на “Обновить запущенный сервер” (Update Running Server).

Настройка Профилей Автоматического Входа для VPN-сервера Linux с OpenVPN

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

Чтобы настроить автоматический вход в систему, откройте интерфейс Администратора и выберите ссылку “Права пользователя” (User Permissions). Здесь установите флажок напротив “Разрешить автоматический вход” (Allow Auto-login).

Как Проверить Linux VPN-сервер с Запущенным OpenVPN

Чтобы проверить, работает ли OpenVPN должным образом, подключите VPN-клиент и проверьте свой IP-адрес. Вы можете воспользоваться сайтом проверки утечки DNS в браузере. Он должен показать вам IPv4-адрес сервера OpenVPN.

Далее вы можете выбрать Расширенный тест. В результате вы должны получить IP-адреса для DNS-резольвера, который вы выбрали для своего клиентского устройства.

Вы также можете подтвердить, что трафик не использует IPv6. Чтобы проверить это, воспользуйтесь сайтом проверки IPv6. На странице результатов вы должны увидеть IP-адрес сервера и сообщение о том, что IPv6-адрес не был обнаружен.

В Завершение

В этом руководстве вы узнали, как настроить VPN-сервер Linux с OpenVPN и как подключить его с помощью различных клиентов, таких как Windows, Linux, Android, iPhone или iPad и MacOS.

Теперь, когда вы знаете главные нюансы, вы можете безопасно пользоваться Интернетом с помощью своего нового Linux VPN-сервера. Чтобы узнать больше, прочитайте официальное руководство OpenVPN, которое можно найти в интерфейсе администратора. На этом мы завершаем вашу первую конфигурацию OpenVPN в режиме server-client. Наслаждайтесь безопасным Интернетом с помощью OpenVPN!

Настройка OpenVPN в Ubuntu

Настоящая частная виртуальная сеть или Virtual Private Network (VPN)  — это зашифрованное соединенный туннель между двумя сетями, который соединяет две доверенные точки. Это не веб-протокол HTTPS, который считает доверенными всех клиентов. К VPN могут подключиться только те клиенты, которые имеют специальные ключи доступа.

Понятие VPN в наши дни стало очень растянутым, после появления частных виртуальных сетей, которые доверяют всем и распространения HTTPS. Многие из сетей VPN представляют собой коммерческие решения с минимальным количеством настроек для обеспечения удаленного доступа сотрудников. Но не все доверяют этим решениям. Частная виртуальная сеть соединяет две сети в одну, например, сеть офиса и домашнюю сеть работника. Сервер VPN необходим для того чтобы сервер и клиент могли пройти аутентификацию друг с другом.

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

Установка OpenVPN

На обеих машинах должен быть установлен OpenVPN, это довольно популярная программа, поэтому вы можете установить ее из официальных репозиториев. Также нам понадобится Easy-RSA для работы с секретными ключами. Для установки программ в Ubuntu используйте такую команду:

sudo apt install openvpn easy-rsa

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

Настройка центра сертификации

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

Обратите внимание, что все секретные ключи должны находится в надежном месте. В OpenVPN открытый ключ называется сертификатом и имеет расширение .crt, а закрытый ключ так и называется ключом, его расширение — .key.

Сначала создайте папку для хранения сертификатов Easy-RSA. Фактически, конфигурация OpenVPN выполняется вручную, так что папку можно разместить где угодно:

sudo mkdir /etc/openvpn/easy-rsa

Затем скопируем в эту папку все необходимые скрипты easy-rsa:

sudo cp -R /usr/share/easy-rsa /etc/openvpn/

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

cd /etc/openvpn/easy-rsa/

sudo -i

# source ./vars

# ./clear-all

# ./build-ca

Первой командной мы переключаемся в консоль от имени суперпользователя, второй загружаем переменные окружения из файла ./vars. Команда ./clear-all создает папку keys если ее нет и очищает ее содержимое. И последняя команда инициализирует наш центр сертификации. Теперь в папке .keys появились все необходимые ключи:

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

Дальше нужно повторить процедуру копирования скриптов управления RSA, как мы это делали на сервере:

sudo cp -R /usr/share/easy-rsa /etc/openvpn/

Теперь нам нужно скопировать сертификат, файл с расширением .crt в папку /etc/openvpn на всех клиентах. Например, скачаем этот файл для нашего клиента с помощью scp:

sudo scp пользователь@хост:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

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

cd /etc/openvpn/easy-rsa/

sudo -i

# source ./vars

# build-req Sergiy

Обратите внимание, что ca.crt должен лежать в папке с ключами, иначе ничего не сработает. Теперь утилита создаст ключ, на основе которого, вы сможете подключиться к OpenVPN серверу, но вам еще осталось подписать его на сервере. Отправьте полученный .csr файл на сервер с помощью того же самого scp:

scp /etc/openvpn/easy-rsa/keys/Sergiy.csr пользователь@хост:~/

Затем уже на сервере в папке /etc/openvpn/easy-rsa нужно выполнить команду подписи сертификата:

./sign-req ~/Sergiy

Подпись сертификата нужно подтвердить. Затем программа сообщит что он был подписан и добавлен в базу данных. В папке с сертификатом csr появится файл .crt, который нужно вернуть назад на клиентскую машину:

sudo scp пльзователь@хост:/home/Sergiy.crt /etc/openvpn/easy-rsa/keys

Только после этого сервер и клиент имеют все необходимые ключи для подключения и установки связи. Осталось еще несколько настроек. Если вы планируете использовать шифрование TLS, то необходимо создать на сервере набор данных Диффи-Хафмана, для этого используйте команду:

./build-dh

Дальше будет рассмотрена настройка OpenVPN для сервера и клиента, осталось совсем немного до получения рабочей конфигурации.

Настройка OpenVPN

Теперь настройка сервера OpenVPN. По умолчанию, в папке конфигурационных файлов OpenVPN ничего нет. Их нужно создать самостоятельно в зависимости от того, что планируется настраивать, сервер или клиент. Нужный файл конфигурации OpenVPN можно найти по адресу /usr/share/doc/openvpn/examples/sample-config-files/. Сначала создадим конфигурационный файл для сервера:

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Здесь вам нужно настроить несколько параметров:

port и proto — порт и протокол, по которым будет работать программа;

port 1194

proto udp

Все созданные ключи нужно прописать в конфигурационном файле. Наши ключи хранятся по адресу /etc/openvpn/easy-rsa/keys:

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/ca.crt

key /etc/openvpn/easy-rsa/keys/ca.key

dh /etc/openvpn/easy-rsa/keys/dh.pem

Настраиваем диапазон адресов для виртуальной сети, наш сервер будет доступен по первому из них — 10.8.0.1:

server 10.8.0.0 255.255.255.0

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

port 1194

proto udp

comp-lzo

dev tun

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/ca.crt

dh /etc/openvpn/easy-rsa/2.0/keys/dh3048.pem

topology subnet

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

Настройка сервера OpenVPN завершена. Дальше необходимо запустить OpenVPN сервер. Это можно сделать прямо из командной строки, просто укажите адрес конфигурационного файла:

openvpn /etc/openvpn/server.conf

Дальше нам нужно настроить компьютер клиента. Вы можете аналогично скопировать конфигурационный файл из директории с примерами, только на этот раз его не нужно распаковывать:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf  /etc/openvpn/client.conf

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

remote — это ваш адрес сервера OpenVPN, адрес и порт должны совпадать с настроенными на сервере, например:

remote 194.67.215.125 1194

ca — ключ, который вы получили от центра сертификации, мы расположили его в папке /etc/openvpn/.

cert и key — это открытый и секретный ключи клиента, с помощью них вы и будете подключаться к серверу. Как вы помните, мы сохранили их в папке /etc/openvpn/easy-rsa/keys/.

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/Sergiy.crt

key /etc/openvpn/easy-rsa/keys/Sergiy.key

Остальные настройки можно оставить как есть. Вот файл настройки целиком, который вы можете скопировать:

client

dev tun

proto udp

remote 194.67.215.125 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/Sergiy.crt

key /etc/openvpn/easy-rsa/keys/Sergiy.key

tls-auth ta.key 1

comp-lzo

verb 3

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

openvpn /etc/openvpn/client.conf

Готово, теперь все работает, если вы выполните ifconfig, то увидите что был добавлен интерфейс tun0:

ifconfig

Также вы можете попробовать выполнить ping адреса 10.8.0.1, именно этот адрес мы настроили для нашего сервера OpenVPN, пакеты ping будут нормально отправляться. Если пакеты не идут, или еще что-то не работает, обратите внимание на вывод обеих программ, возможно, возникли какие-либо ошибки или предупреждения, также убедитесь, что брандмауэр сервера разрешает доступ извне по udp для порта 1194. Еще можно запустить сервер или клиент, настроив в конфиге уровень подробности на максимум verb 9. Очень часто это помогает понять почему что-то не работает. Но вы еще не можете направлять трафик через туннель. Для этого нужно разрешить форвардинг и добавить несколько правил iptables. Сначала разрешаем транзит пакетов на сервере:

 sysctl -w net.ipv4.ip_forward=1

Затем добавьте такие правила. Разрешаем всем подключаться к нашему серверу:

 iptables -A INPUT -p udp --dport 1194 -j ACCEPT

Разрешаем пользователям OpenVPN доступ к интернету:

 iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT

# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

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

Источник: losst.ru

Руководство по подключению Linux для OpenVPN Access Server

Выбор клиентского программного обеспечения

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

Обсуждаемые пакеты Linux

9003

OpenVPN

Открытый клиент

Проект OpenVPN 3 Linux — это новый клиент, созданный на основе базовой библиотеки OpenVPN 3.Этот клиент является официальной программой OpenVPN Linux Client. Вы можете найти обзор функций, часто задаваемые вопросы и инструкции по установке пакета openvpn3 на нашем сайте OpenVPN 3 для Linux.

После выполнения инструкций по установке клиента вам понадобится профиль подключения. Это файл, созданный вашей установкой OpenVPN Access Server для вашей конкретной учетной записи. Он содержит необходимые сертификаты и настройки подключения.Перейдите в клиентский веб-интерфейс вашего сервера доступа (основной адрес, а не часть / admin). Войдите в систему, используя свои учетные данные. Вам будет показан список файлов, доступных для загрузки. Выберите профиль с блокировкой пользователя или профиль с автоматическим входом, и вам будет отправлен файл client.ovpn . Сохраните этот файл в своей операционной системе Linux.

После того, как вы переместили файл в систему Linux, вы можете импортировать его.

 openvpn3 config-import --config $ {client.ovpn} 

Вы можете начать новый сеанс VPN:

 openvpn3 session-start --config $ {client.ovpn} 

Вы можете управлять запущенным сеансом VPN:

 openvpn3 список сеансов 

И так далее. Более подробную информацию можно найти здесь: OpenVPN3Linux.

OpenVPN Программа OpenVPN CLI с открытым исходным кодом

Клиентская программа проекта с открытым исходным кодом также может подключаться к серверу доступа. Пакет доступен в большинстве дистрибутивов и известен просто как openvpn . Он поддерживает возможность одновременного подключения к нескольким серверам OpenVPN и поставляется с сервисным компонентом, который может автоматически и незаметно запускать любые профили автоматического входа, которые он находит в папке / etc / openvpn , даже до того, как пользователь вошел в систему.Этот служебный компонент может быть настроен на автоматический запуск во время загрузки с помощью инструментов, доступных в вашем дистрибутиве Linux, если они поддерживаются. В Ubuntu и Debian при установке пакета openvpn он автоматически настраивается для запуска во время загрузки.

Чтобы установить клиент OpenVPN в Linux, во многих случаях можно просто использовать версию, которая находится в репозитории программного обеспечения самого дистрибутива Linux. Если у вас возникнут какие-либо проблемы с подключением при использовании устаревшего программного обеспечения, это может быть связано с возможным отсутствием поддержки более высоких версий TLS в более старых версиях OpenVPN.Следуйте инструкциям на вики-странице сообщества openvpn с открытым исходным кодом, если вы хотите установить клиент OpenVPN в своей системе Linux.

После установки вам понадобится профиль подключения. Это файл, созданный вашей установкой OpenVPN Access Server для вашей конкретной учетной записи. Он содержит необходимые сертификаты и настройки подключения. Перейдите в клиентский веб-интерфейс вашего сервера доступа (основной адрес, а не часть / admin). Войдите в систему, используя свои учетные данные.Вам будет показан список файлов, доступных для загрузки. Выберите профиль с блокировкой пользователя или профиль с автоматическим входом, и вам будет отправлен файл client.ovpn . Сохраните этот файл где-нибудь в вашей операционной системе Linux. Сервер доступа OpenVPN поддерживает профили с блокировкой сервера и пользователя и профили автоматического входа, но клиент командной строки OpenVPN может подключаться только с профилями подключения с блокировкой пользователя или с автоматическим входом.

Мы предполагаем, что вы собираетесь установить соединение либо через командную строку как пользователь root, либо через сервисный демон.Если вы хотите, чтобы непривилегированные пользователи могли устанавливать соединение, загляните в вики сообщества для получения дополнительной информации о том, как это реализовать. Здесь мы сосредоточимся на простейшей реализации; запустите соединение напрямую от имени пользователя root или через сервисный демон.

Запустить соединение с профилем автоматического входа вручную:

 openvpn --config client.ovpn 

Запустить соединение с заблокированным пользователем профилем вручную:

 openvpn --config client.ovpn --auth-user-pass 

Если вы используете Google Authenticator или другой дополнительный фактор аутентификации, добавьте параметр auth-retry :

 openvpn --config client.ovpn --auth-user-pass --auth-retry interact 

Чтобы запустить соединение с автоматическим входом через сервисный демон, поместите client.ovpn в / etc / openvpn / и переименуйте файл. Он должен заканчиваться расширением файла .conf . Убедитесь, что сервисный демон разрешен для запуска после перезагрузки, а затем просто перезагрузите систему.Профиль типа автоматического входа будет выбран автоматически, и соединение запустится само. В этом можно убедиться, проверив вывод команды ifconfig ; вы должны увидеть в списке сетевой адаптер tun0 .

Одна из основных функций, отсутствующих в клиенте командной строки, — это возможность автоматически реализовывать DNS-серверы, которые подталкиваются сервером VPN. Это возможно, но для этого необходимо установить программу управления DNS, такую ​​как resolvconf или openresolv, и она может конфликтовать или не конфликтовать с существующим программным обеспечением для управления сетью в вашей ОС.Идея здесь, однако, заключается в том, что вы используете сценарий, который запускается, когда соединение устанавливается, и когда оно отключается, который использует resolvconf или openresolv для реализации DNS-серверов за вас. Причина, по которой этот клиент не может полностью управлять им самостоятельно, в основном состоит в том, что в такой операционной системе, как Windows, Macintosh, Android или iOS, уже существует единый метод управления DNS. Поэтому нам легко создать программный клиент для тех операционных систем, которые уже знают, как обрабатывать DNS.Но Linux доступен во многих вариантах, а также поддерживает различные программы и методы реализации DNS-серверов, поэтому было разумно исключить встроенную поддержку DNS из программы OpenVPN и вместо этого предоставить, где это возможно, сценарий, который обрабатывает Реализация DNS. Такой сценарий можно даже написать самостоятельно, чтобы выполнять любые задачи, необходимые для реализации DNS-серверов в вашей уникальной ситуации.

К счастью, в Ubuntu и Debian, например, есть сценарий / etc / openvpn / update-resolv-conf , который поставляется с пакетом openvpn, который обрабатывает реализацию DNS для этих операционных систем.Вам нужно только активировать их использование, следуя инструкциям:

Откройте файл client.ovpn в текстовом редакторе:

 нано client.ovpn 

В самом низу просто добавьте эти строки:

 скрипт безопасности 2
вверх / и т.д. / openvpn / update-resolv-conf
вниз / etc / openvpn / update-resolv-conf
 

Первая строка позволяет использовать внешние сценарии для обработки задач реализации DNS. Линии «вверх» и «вниз» предназначены для реализации DNS-серверов, выдвигаемых сервером VPN, когда соединение увеличивается, а затем для его отмены, когда соединение прерывается.

Программа управления сетью Ubuntu

Существует также возможность подключения через графический интерфейс с использованием расширения openvpn для подключаемого модуля сетевого менеджера Gnome. Но в настоящее время это немного сложно настроить. Например, существует неверное предположение, что все виртуальные частные сети смогут перенаправлять Интернет-трафик, а более старые версии могут не понимать формат файла .ovpn, что требует от вас разделения встроенного в него сертификата в отдельный файл. И вам, вероятно, придется копаться в вариантах, чтобы гарантировать, что маршрут Интернет-трафика по умолчанию, проходящий через сервер VPN, не всегда включен по умолчанию, особенно для серверов, где вы предоставляете доступ только к некоторым внутренним ресурсам, а не ко всему Интернету.Однако преимущество использования компонента графического интерфейса заключается в том, что вы можете запускать / останавливать соединение из среды рабочего стола в Linux.

How To Guide: Set Up & Configure OpenVPN client / server VPN

OpenVPN — это полнофункциональная SSL VPN, которая реализует расширение сети OSI уровня 2 или 3 с использованием стандартного протокола SSL / TLS, поддерживает гибкие методы аутентификации клиента на основе сертификаты, смарт-карты и / или учетные данные имени пользователя и пароля, а также позволяет использовать политики управления доступом для конкретных пользователей или групп с использованием правил брандмауэра, применяемых к виртуальному интерфейсу VPN.OpenVPN не является прокси-сервером веб-приложения и не работает через веб-браузер.

OpenVPN 2.0 расширяет возможности OpenVPN 1.x, предлагая масштабируемый режим клиент / сервер, позволяющий нескольким клиентам подключаться к одному процессу сервера OpenVPN через один порт TCP или UDP. OpenVPN 2.3 включает в себя большое количество улучшений, включая полную поддержку IPv6 и поддержку PolarSSL.

Этот документ предоставляет пошаговые инструкции по настройке OpenVPN 2.x клиент / сервер VPN, в том числе:

Этот HOWTO предполагает, что читатели обладают предварительным пониманием основных сетевых концепций, таких как IP-адреса, имена DNS, маски сети и т. Д. подсети, IP-маршрутизация, маршрутизаторы, сетевые интерфейсы, локальные сети, шлюзы и правила брандмауэра.

Оригинальный OpenVPN 1.x HOWTO по-прежнему доступен и остается актуальным для конфигураций точка-точка или статических ключей.

Хотя этот HOWTO поможет вам настроить масштабируемую клиент-серверную VPN с использованием X509 PKI (инфраструктура открытого ключа с использованием сертификатов и закрытых ключей), это может оказаться излишним, если вы ищете только простую настройку VPN с сервером, который может справиться с одним клиентом.

Если вы хотите быстро запустить VPN с минимальной конфигурацией, вы можете проверить Static Key Mini-HOWTO.

Исходный код OpenVPN и установщики Windows можно скачать здесь. Последние выпуски (2.2 и новее) также доступны в виде пакетов Debian и RPM; подробности см. в вики OpenVPN.

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

Исполняемый файл OpenVPN должен быть установлен как на сервере, так и на клиентском компьютере, поскольку один исполняемый файл обеспечивает как клиентские, так и серверные функции.

Если вы используете дистрибутив Linux, который поддерживает пакеты RPM (SuSE, Fedora, Redhat и т. Д.), лучше всего использовать этот механизм. Самый простой способ — найти существующий двоичный файл RPM для вашего дистрибутива. Вы также можете создать свой собственный двоичный файл RPM:

Кроме того, если вы создаете свой собственный двоичный пакет RPM, существует несколько дополнительных зависимостей:

Дополнительные примечания по созданию пакета RPM для Red Hat Linux см. В файле openvpn.spec. 9 или здание с уменьшенными зависимостями.

Если вы используете Debian, Gentoo или дистрибутив Linux, не основанный на RPM, используйте специфичный для вашего дистрибутива механизм упаковки, такой как apt-get в Debian или emerge в Gentoo.

Также можно установить OpenVPN в Linux, используя универсальный метод ./configure . Сначала разверните файл .tar.gz:

OpenVPN для Windows можно установить из самоустанавливающегося exe-файла на странице загрузки OpenVPN. Помните, что OpenVPN будет работать только в Windows XP или более поздней версии. Также обратите внимание, что OpenVPN должен быть установлен и запущен пользователем с правами администратора (это ограничение налагается Windows, а не OpenVPN). Ограничение можно обойти, запустив OpenVPN в фоновом режиме в качестве службы, и в этом случае даже пользователи без прав администратора смогут получить доступ к VPN после ее установки.Дополнительное обсуждение проблем с привилегиями OpenVPN + Windows.

Официальные установщики OpenVPN для Windows включают OpenVPN-GUI, который позволяет управлять подключениями OpenVPN из апплета на панели задач. Также доступны другие приложения с графическим интерфейсом.

После того, как вы запустите установщик Windows, OpenVPN готов к использованию и свяжется с файлами с расширением .ovpn . Чтобы запустить OpenVPN, вы можете:

Некоторые примечания доступны в файле INSTALL для определенных ОС. В общем, можно использовать метод

, или вы можете искать порт или пакет OpenVPN, специфичный для вашей ОС / дистрибутива.

Обзор маршрутизации по сравнению с мостом Ethernet см. В разделе часто задаваемых вопросов. См. Также страницу OpenVPN Ethernet Bridging для получения дополнительных примечаний и деталей по мосту.

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

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

Настройка VPN часто влечет за собой соединение частных подсетей из разных мест.

Internet Assigned Numbers Authority (IANA) зарезервировал следующие три блока пространства IP-адресов для частных сетей (кодифицировано в RFC 1918):

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

Например, предположим, что вы используете популярную подсеть 192.168.0.0/24 в качестве частной подсети LAN.Теперь вы пытаетесь подключиться к VPN из интернет-кафе, которое использует ту же подсеть для своей локальной сети Wi-Fi. У вас будет конфликт маршрутизации, потому что ваш компьютер не будет знать, относится ли 192.168.0.1 к локальному шлюзу WiFi или к тому же адресу в VPN.

В качестве другого примера предположим, что вы хотите связать вместе несколько сайтов с помощью VPN, но каждый сайт использует 192.168.0.0/24 в качестве своей подсети LAN. Это не будет работать без добавления сложного уровня преобразования NAT, потому что VPN не знает, как маршрутизировать пакеты между несколькими сайтами, если эти сайты не используют подсеть, которая их однозначно идентифицирует.

Лучшее решение — избегать использования 10.0.0.0/24 или 192.168.0.0/24 в качестве адресов частной сети LAN. Вместо этого используйте то, что с меньшей вероятностью будет использоваться в Wi-Fi-кафе, аэропорту или отеле, откуда вы можете рассчитывать на удаленное подключение. Лучшими кандидатами являются подсети в центре огромного сетевого блока 10.0.0.0/8 (например, 10.66.77.0/24).

И чтобы избежать межсайтовых конфликтов IP-нумерации, всегда используйте уникальную нумерацию для своих подсетей LAN.

Первый шаг в создании OpenVPN 2.x заключается в создании PKI (инфраструктуры открытого ключа). PKI состоит из:

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

И сервер, и клиент будут аутентифицировать друг друга, сначала проверив, что представленный сертификат был подписан главным центром сертификации (ЦС), а затем проверив информацию в заголовке теперь аутентифицированного сертификата, такую ​​как общее имя сертификата или тип сертификата. (клиент или сервер).

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

В этом разделе мы сгенерируем главный сертификат / ключ CA, сертификат / ключ сервера и сертификаты / ключи для 3 отдельных клиентов.

Для управления PKI мы будем использовать easy-rsa 2 , набор скриптов, который входит в состав OpenVPN 2.2.x и более ранних версий. Если вы используете OpenVPN 2.3.x, вам необходимо загрузить easy-rsa 2 отдельно отсюда.

Для управления PKI мы будем использовать easy-rsa 2, набор скриптов, который входит в состав OpenVPN 2.2.x и ранее. Если вы используете OpenVPN 2.3.x, вам может потребоваться загрузить easy-rsa 2 отдельно от страницы проекта easy-rsa-old. Пакет easy-rsa 2 также доступен для Debian и Ubuntu в репозиториях программного обеспечения OpenVPN. На платформах * NIX вам следует вместо этого использовать easy-rsa 3; обратитесь к его собственной документации для получения подробной информации.

Если вы используете Linux, BSD или unix-подобную ОС, откройте оболочку и перейдите к подкаталогу easy-rsa . Если вы установили OpenVPN из файла RPM или DEB, каталог easy-rsa обычно можно найти в / usr / share / doc / packages / openvpn или / usr / share / doc / openvpn (лучше всего скопировать это каталог в другое место, например, / etc / openvpn , перед любыми изменениями, чтобы будущие обновления пакета OpenVPN не перезаписали ваши изменения).Если вы установили из файла .tar.gz, каталог easy-rsa будет находиться в каталоге верхнего уровня расширенного дерева исходных текстов.

Если вы используете Windows, откройте окно командной строки и перейдите по адресу \ Program Files \ OpenVPN \ easy-rsa . Запустите следующий командный файл, чтобы скопировать файлы конфигурации на место (это перезапишет все существующие файлы vars.bat и openssl.cnf):

Теперь отредактируйте файл vars (в Windows он называется vars.bat ) и установите KEY_COUNTRY , Параметры KEY_PROVINCE, KEY_CITY, KEY_ORG и KEY_EMAIL.Не оставляйте ни один из этих параметров пустым.

Затем инициализируйте PKI. В Linux / BSD / Unix:

Последняя команда ( build-ca ) создаст сертификат и ключ центра сертификации (CA) путем вызова интерактивной команды openssl :

Обратите внимание, что в приведенной выше последовательности наиболее запрашиваемые для параметров по умолчанию были установлены значения, установленные в файлах vars или vars.bat . Единственный параметр, который необходимо ввести явно, — это Common Name .В приведенном выше примере я использовал «OpenVPN-CA».

Далее мы сгенерируем сертификат и закрытый ключ для сервера. В Linux / BSD / Unix:

Как и в предыдущем шаге, для большинства параметров можно установить значения по умолчанию. При запросе Common Name введите «сервер». Два других запроса требуют положительного ответа: «Подписать сертификат? [y / n] »и« 1 из 1 запросов на сертификат сертифицирован, совершить? [да / нет] ».

Создание клиентских сертификатов очень похоже на предыдущий шаг.В Linux / BSD / Unix:

Если вы хотите защитить паролем ключи клиента, замените сценарий build-key-pass .

Помните, что для каждого клиента обязательно введите соответствующее Common Name при появлении запроса, то есть «client1», «client2» или «client3». Всегда используйте уникальное общее имя для каждого клиента.

Параметры Диффи Хеллмана должны быть сгенерированы для сервера OpenVPN. В Linux / BSD / Unix:

Теперь мы найдем наши вновь сгенерированные ключи и сертификаты в подкаталоге keys .Вот объяснение соответствующих файлов:

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

А теперь подождите, скажете вы. Разве нельзя установить PKI без уже существующего безопасного канала?

Якобы да. В приведенном выше примере для краткости мы сгенерировали все закрытые ключи в одном месте. Приложив немного больше усилий, мы могли бы сделать это иначе.Например, вместо создания клиентского сертификата и ключей на сервере мы могли бы заставить клиент генерировать свой собственный закрытый ключ локально, а затем отправить запрос на подпись сертификата (CSR) на машину для подписи ключей. В свою очередь, машина для подписания ключей могла обработать CSR и вернуть подписанный сертификат клиенту. Это можно было сделать, даже не требуя, чтобы секретный файл .key покинул жесткий диск машины, на которой он был создан.

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

. Обратите внимание, что в Linux, BSD или unix-подобных операционных системах образцы файлов конфигурации называются server.conf и client.conf . В Windows они называются server.ovpn и client.ovpn .

Образец файла конфигурации сервера является идеальной отправной точкой для конфигурации сервера OpenVPN. Он создаст VPN с использованием виртуального сетевого интерфейса TUN (для маршрутизации), будет прослушивать клиентские соединения на UDP-порту 1194 (официальный номер порта OpenVPN) и распределять виртуальные адреса для подключенных клиентов с 10.8.0.0 / 24 подсеть.

Перед использованием примера файла конфигурации необходимо сначала отредактировать параметры ca , cert , key и dh , чтобы они указывали на файлы, созданные в разделе PKI выше.

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

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

Пример файла конфигурации клиента ( client.conf в Linux / BSD / Unix или client.ovpn в Windows) отражает директивы по умолчанию, установленные в примере файла конфигурации сервера.

Сначала убедитесь, что сервер OpenVPN доступен из Интернета. Это означает:

Чтобы упростить устранение неполадок, лучше сначала запустить сервер OpenVPN из командной строки (или щелкнуть правой кнопкой мыши файл .ovpn в Windows), а не запускать его как демон или службу:

A нормальный запуск сервера должен выглядеть так (вывод будет зависеть от платформы):

Запуск клиента

Как и в конфигурации сервера, лучше всего изначально запустить сервер OpenVPN из командной строки (или в Windows, щелкнув правой кнопкой мыши на клиенте .ovpn файл), а не запускать его как демон или службу:

  openvpn [файл конфигурации клиента]  

Обычный запуск клиента в Windows будет похож на вывод сервера выше и должен заканчиваться сообщением Initialization Sequence Completed .

Теперь попробуйте выполнить эхо-запрос через VPN от клиента. Если вы используете маршрутизацию (например, dev tun в файле конфигурации сервера), попробуйте:

  пинг 10.8.0,1  

Если вы используете мост (т. Е. dev, нажмите в файле конфигурации сервера), попробуйте проверить связь с IP-адресом машины в подсети Ethernet сервера.

Поздравляем, если пинг прошел успешно! Теперь у вас есть работающая VPN.

Устранение неполадок

Если проверка связи не удалась или инициализация клиента OpenVPN не была завершена, вот контрольный список общих симптомов и их решений:

  • Вы получаете сообщение об ошибке: Ошибка TLS: не удалось согласовать ключ TLS в течение 60 секунд (проверьте подключение к сети) .Эта ошибка указывает на то, что клиенту не удалось установить сетевое соединение с сервером. Решения :
    • Убедитесь, что клиент использует правильное имя хоста / IP-адрес и номер порта, которые позволят ему подключиться к серверу OpenVPN.
    • Если сервер OpenVPN представляет собой блок с одной сетевой картой в защищенной локальной сети, убедитесь, что вы используете правильное правило переадресации портов на межсетевом экране шлюза сервера. Например, предположим, что ваш OpenVPN-сервер находится по адресу 192.168.4.4 внутри брандмауэра и прослушивает клиентские подключения на UDP-порту 1194.Шлюз NAT, обслуживающий подсеть 192.168.4.x, должен иметь правило переадресации портов, которое гласит, что перенаправляет UDP-порт 1194 с моего общедоступного IP-адреса на 192.168.4.4 .
    • Откройте брандмауэр сервера, чтобы разрешить входящие подключения к порту UDP 1194 (или к любому другому порту TCP / UDP, который вы настроили в файле конфигурации сервера).
  • Вы получаете сообщение об ошибке: Последовательность инициализации завершена с ошибками — Эта ошибка может возникнуть в Windows, если (а) у вас не запущена служба DHCP-клиента или (б) вы используете определенные сторонние персональные брандмауэры на XP SP2. Решение : Запустите сервер DHCP-клиента и убедитесь, что вы используете персональный брандмауэр, который, как известно, правильно работает на XP SP2.
  • Вы получаете сообщение Initialization Sequence Completed , но тест ping не проходит. Обычно это означает, что брандмауэр на сервере или клиенте блокирует сетевой трафик VPN путем фильтрации на интерфейсе TUN / TAP. Решение : Отключите брандмауэр клиента (если он существует) от фильтрации интерфейса TUN / TAP на клиенте.Например, в Windows XP SP2 вы можете сделать это, перейдя в Центр безопасности Windows -> Брандмауэр Windows -> Расширенный и сняв флажок, соответствующий адаптеру TAP-Windows (отключение брандмауэра клиента от фильтрации адаптера TUN / TAP обычно разумно с точки зрения безопасности, поскольку вы, по сути, говорите брандмауэру не блокировать аутентифицированный трафик VPN). Также убедитесь, что интерфейс TUN / TAP на сервере не фильтруется брандмауэром (при этом обратите внимание, что выборочный брандмауэр интерфейса TUN / TAP на стороне сервера может дать определенные преимущества безопасности.См. Раздел политики доступа ниже).
  • Соединение останавливается при запуске при использовании конфигурации proto udp , файл журнала сервера показывает эту строку:

     TLS: начальный пакет от x.x.x.x: x, sid = xxxxxxxx xxxxxxxx 

    , однако в журнале клиента нет эквивалентной строки.

    Решение : У вас одностороннее соединение от клиента к серверу. Направление от сервера к клиенту блокируется брандмауэром, обычно на стороне клиента.Брандмауэр может быть (а) персональным программным брандмауэром, работающим на клиенте, или (б) шлюзом маршрутизатора NAT для клиента. Измените брандмауэр, чтобы разрешить возвращающим UDP-пакетам с сервера достичь клиента.

Дополнительные сведения об устранении неполадок см. В разделе часто задаваемых вопросов.


Настройка OpenVPN для автоматического запуска при запуске системы

Отсутствие стандартов в этой области означает, что большинство операционных систем имеют другой способ настройки демонов / служб для автозапуска при загрузке.Лучший способ настроить эту функцию по умолчанию — установить OpenVPN в виде пакета, например, через RPM в Linux или с помощью установщика Windows.

Linux

Если вы устанавливаете OpenVPN через пакет RPM или DEB в Linux, установщик установит исходный сценарий . При выполнении сценарий инициализации будет сканировать файлы конфигурации .conf в / etc / openvpn и, если они найдены, запустит отдельный демон OpenVPN для каждого файла.

Окна

Программа установки Windows настроит служебную оболочку, но оставит ее отключенной по умолчанию.Чтобы активировать его, перейдите в Панель управления / Администрирование / Службы, выберите службу OpenVPN, щелкните правой кнопкой мыши свойства и установите для параметра Тип запуска значение Автоматический. Это настроит службу для автоматического запуска при следующей перезагрузке.

При запуске служебная оболочка OpenVPN просканирует папку \ Program Files \ OpenVPN \ config на наличие файлов конфигурации .ovpn , запустив отдельный процесс OpenVPN для каждого файла.


Управление запущенным процессом OpenVPN

Работает в Linux / BSD / Unix

OpenVPN принимает несколько сигналов:

  • SIGUSR1 — Условный перезапуск, предназначенный для перезапуска без привилегий root
  • SIGHUP — Жесткий перезапуск
  • SIGUSR2 — Вывод статистики подключений в файл журнала или системный журнал
  • SIGTERM , SIGINT — Выход

Используйте директиву writepid для записи PID демона OpenVPN в файл, чтобы вы знали, куда отправить сигнал (если вы запускаете openvpn с исходным скриптом , сценарий может уже передавать –writepid в командной строке openvpn ).

Запуск в Windows как графический интерфейс

См. Страницу с графическим интерфейсом OpenVPN.

Запуск в окне командной строки Windows

В Windows вы можете запустить OpenVPN, щелкнув правой кнопкой мыши файл конфигурации OpenVPN (файл .ovpn, ) и выбрав «Запустить OpenVPN в этом файле конфигурации».

После запуска в этом режиме доступны несколько клавиатурных команд:

  • F1 — Условный перезапуск (не закрывает / не открывает повторно адаптер TAP)
  • F2 — Показать статистику подключений
  • F3 — Жесткий перезапуск
  • F4 — Выход

Запуск в качестве службы Windows

Когда OpenVPN запускается как служба в Windows, единственный способ управлять им — это:

  • Через диспетчер управления службами (Панель управления / Администрирование / Службы), который обеспечивает управление запуском / остановкой.
  • Через интерфейс управления (см. Ниже).

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

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

client-config-dir — Эта директива устанавливает каталог конфигурации клиента, который сервер OpenVPN будет сканировать при каждом входящем соединении в поисках файла конфигурации для конкретного клиента (дополнительную информацию см. На странице руководства).Файлы в этом каталоге можно обновлять «на лету» без перезапуска сервера. Обратите внимание, что изменения в этом каталоге вступят в силу только для новых подключений, но не для существующих. Если вы хотите, чтобы изменение файла конфигурации, зависящее от клиента, немедленно вступило в силу для подключенного в данный момент клиента (или того, который отключился, но у которого сервер не прервал тайм-аут своего объекта экземпляра), уничтожьте объект экземпляра клиента, используя команду управления интерфейс (описан ниже). Это заставит клиента повторно подключиться и использовать новый файл client-config-dir .

crl-verify — Эта директива именует файл со списком отзыва сертификатов , описанный ниже в разделе «Отзыв сертификатов». Файл CRL можно изменять на лету, и изменения вступят в силу немедленно для новых подключений или существующих подключений, которые повторно согласовывают свой канал SSL / TLS (по умолчанию происходит один раз в час). Если вы хотите убить подключенного в данный момент клиента, чей сертификат только что добавлен в CRL, используйте интерфейс управления (описанный ниже).

Файл состояния

В файле server.conf по умолчанию есть строка

.

  статус openvpn-status.log  

, который будет выводить список текущих клиентских подключений в файл openvpn-status.log один раз в минуту.

Использование интерфейса управления

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

Чтобы включить интерфейс управления на сервере или клиенте OpenVPN, добавьте это в файл конфигурации:

  управление localhost 7505  

Это указывает OpenVPN прослушивать TCP-порт 7505 для клиентов интерфейса управления (порт 7505 — произвольный выбор — вы можете использовать любой свободный порт).

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

 ai: ~ # telnet localhost 7505
Пробуем 127.] '.
> ИНФОРМАЦИЯ: Версия 1 интерфейса управления OpenVPN - введите help для получения дополнительной информации
помощь
Интерфейс управления для OpenVPN 2.0_rc14 i686-suse-linux [SSL] [LZO] [EPOLL] построен 15 февраля 2005 г.
Команды:
echo [on | off] [N | all]: Аналогично журналу, но отображаются только сообщения в буфере эха.
exit | quit: закрыть сеанс управления.
help: распечатать это сообщение.
hold [on | off | release]: установить / показать флаг удержания в состояние включения / выключения, или
                         отпустить текущую задержку и начать туннель.kill cn: убить клиентские экземпляры с общим именем cn.
kill IP: port: убить экземпляр клиента, подключающийся с IP: port.
log [on | off] [N | all]: включить / выключить отображение журнала в реальном времени.
                         + показать последние N строк или «все» для всей истории.
mute [n]: установить уровень отключения звука журнала на n или показать уровень, если n отсутствует.
net: (только для Windows) Показать информацию о сети и таблицу маршрутизации.
тип пароля p: введите пароль p для запрашиваемого пароля OpenVPN.signal s: отправить сигнал s демону,
                         s = SIGHUP | SIGTERM | SIGUSR1 | SIGUSR2.
state [on | off] [N | all]: как журнал, но показывает историю состояний.
status [n]: показать информацию о текущем статусе демона в формате #n.
test n: вывести n строк вывода для тестирования / отладки.
username type u: введите имя пользователя u для запрашиваемого имени пользователя OpenVPN.
verb [n]: установить уровень детализации журнала на n или показать, если n отсутствует.версия: показать номер текущей версии.
КОНЕЦ
выход
Соединение прервано внешним хостом.
ai: ~ # 

Для получения дополнительной информации см. Документацию по интерфейсу управления OpenVPN.


Расширение области VPN за счет включения дополнительных машин в подсети клиента или сервера.

Включение нескольких машин на стороне сервера при использовании маршрутизируемой VPN (dev tun)

После того, как VPN будет работать в режиме «точка-точка» между клиентом и сервером, может быть желательно расширить сферу действия VPN, чтобы клиенты могли подключаться к нескольким машинам в серверной сети, а не только к самому серверу.

Для целей этого примера мы предположим, что LAN на стороне сервера использует подсеть 10.66.0.0/24 , а пул IP-адресов VPN использует 10.8.0.0/24 , как указано в директиве server . в файле конфигурации сервера OpenVPN.

Во-первых, вы должны объявить подсеть 10.66.0.0/24 клиентам VPN как доступную через VPN. Это легко сделать с помощью следующей директивы файла конфигурации на стороне сервера:

  push "маршрут 10.66.0.0 255.255.255.0 " 

Затем вы должны настроить маршрут на серверном шлюзе LAN для маршрутизации подсети VPN-клиента ( 10.8.0.0/24 ) на сервер OpenVPN (это необходимо только в том случае, если сервер OpenVPN и шлюз LAN отличаются машины).

Убедитесь, что вы включили пересылку IP и TUN / TAP на сервере OpenVPN.

Включение нескольких машин на стороне сервера при использовании мостовой VPN (подключение для разработчиков)

Одним из преимуществ использования моста Ethernet является то, что вы получаете его бесплатно без какой-либо дополнительной настройки.

Включение нескольких машин на стороне клиента при использовании маршрутизируемой VPN (dev tun)

В типичном сценарии «дорожный воин» или удаленного доступа клиентский компьютер подключается к VPN как единый компьютер. Но предположим, что клиентская машина является шлюзом для локальной LAN (например, домашнего офиса), и вы хотите, чтобы каждая машина в клиентской LAN могла маршрутизировать через VPN.

В этом примере мы предположим, что клиентская LAN использует подсеть 192.168.4.0/24 , а VPN-клиент использует сертификат с общим именем client2 .Наша цель — настроить VPN таким образом, чтобы любой компьютер в клиентской локальной сети мог связываться с любым компьютером в серверной локальной сети через VPN.

Перед настройкой необходимо выполнить несколько основных условий:

  • Клиентская подсеть LAN (192.168.4.0/24 в нашем примере) не должна экспортироваться в VPN сервером или любыми другими клиентскими сайтами, которые используют ту же подсеть. Каждая подсеть, подключенная к VPN через маршрутизацию, должна быть уникальной.
  • Клиент должен иметь уникальное общее имя в своем сертификате («client2» в нашем примере), и флаг duplicate-cn не должен использоваться в файле конфигурации сервера OpenVPN.

Сначала убедитесь, что на клиентском компьютере включена пересылка IP и TUN / TAP.

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

  каталог конфигурации клиента ccd  

В приведенной выше директиве ccd должно быть именем каталога, который был предварительно создан в каталоге по умолчанию, в котором запускается демон сервера OpenVPN.В Linux это обычно / etc / openvpn , а в Windows это обычно \ Program Files \ OpenVPN \ config . Когда новый клиент подключается к серверу OpenVPN, демон проверяет этот каталог на наличие файла, который соответствует общему имени подключающегося клиента. Если соответствующий файл найден, он будет прочитан и обработан для применения дополнительных директив файла конфигурации к указанному клиенту.

Следующим шагом является создание файла с именем client2 в каталоге ccd .Этот файл должен содержать строку:

  iroute 192.168.4.0 255.255.255.0  

Это сообщит серверу OpenVPN, что подсеть 192.168.4.0/24 должна быть маршрутизирована на client2 .

Затем добавьте следующую строку в файл конфигурации основного сервера (не файл ccd / client2 ):

  маршрут 192.168.4.0 255.255.255.0  

Почему избыточные операторы route и iroute могут спросить? Причина в том, что route управляет маршрутизацией от ядра к серверу OpenVPN (через интерфейс TUN), а iroute управляет маршрутизацией от сервера OpenVPN к удаленным клиентам.Оба необходимы.

Затем спросите себя, хотите ли вы разрешить сетевой трафик между подсетью client2 (192.168.4.0/24) и другими клиентами сервера OpenVPN. Если да, добавьте в файл конфигурации сервера следующее.

  от клиента к клиенту
нажмите "маршрут 192.168.4.0 255.255.255.0"  

Это приведет к тому, что сервер OpenVPN объявит подсеть client2 другим подключающимся клиентам.

Последний шаг, о котором часто забывают, — это добавить маршрут к шлюзу локальной сети сервера, который направляет 192.168.4.0 / 24 в серверный ящик OpenVPN (он вам не понадобится, если серверный ящик OpenVPN является шлюзом для локальной сети сервера). Предположим, вы пропустили этот шаг и пытались пропинговать машину (не сам сервер OpenVPN) в локальной сети сервера с адреса 192.168.4.8? Исходящий пинг, вероятно, достигнет машины, но тогда он не будет знать, как маршрутизировать ответ, потому что не будет знать, как достичь 192.168.4.0/24. Эмпирическое правило, которое следует использовать, заключается в том, что при маршрутизации всей локальной сети через VPN (когда сервер VPN не совпадает с шлюзом локальной сети), убедитесь, что шлюз для локальной сети направляет все подсети VPN на машину сервера VPN.

Точно так же, если клиентский компьютер, на котором запущен OpenVPN, не является также шлюзом для клиентской LAN, тогда шлюз для клиентской LAN должен иметь маршрут, который направляет все подсети, которые должны быть доступны через VPN, на клиентский компьютер OpenVPN.

Включение нескольких машин на стороне клиента при использовании мостовой VPN (подключение для разработчиков)

Это требует более сложной настройки (возможно, не более сложной на практике, но более сложной для подробного объяснения):

  • Вы должны соединить клиентский TAP-интерфейс с сетевым адаптером, подключенным к локальной сети, на клиенте.
  • Необходимо вручную установить IP / маску сети TAP-интерфейса на клиенте.
  • Вы должны настроить клиентские машины для использования IP / сетевой маски, которая находится внутри мостовой подсети, возможно, запросив DHCP-сервер на стороне сервера OpenVPN VPN.

Передача параметров DHCP клиентам

Сервер OpenVPN может передавать клиентам такие параметры DHCP, как адреса серверов DNS и WINS (о некоторых предостережениях следует помнить). Клиенты Windows могут принимать проталкиваемые параметры DHCP изначально, в то время как клиенты, отличные от Windows, могут принимать их с помощью клиентского сценария , который анализирует список переменных среды foreign_option_ n на стороне клиента.См. Справочную страницу для документации и примеров сценариев, отличных от Windows foreign_option_ n .

Например, предположим, что вы хотите подключать клиентов для использования внутреннего DNS-сервера 10.66.0.4 или 10.66.0.5 и WINS-сервера 10.66.0.8. Добавьте это в конфигурацию сервера OpenVPN:

  push "dhcp-option DNS 10.66.0.4"
нажмите "dhcp-option DNS 10.66.0.5"
нажмите "dhcp-option WINS 10.66.0.8"  

Чтобы протестировать эту функцию в Windows, запустите следующее из окна командной строки после того, как машина подключится к серверу OpenVPN:

  ipconfig / все  

Запись для адаптера TAP-Windows должна отображать параметры DHCP, которые были переданы сервером.


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

Предположим, мы настраиваем корпоративную VPN и хотим установить отдельные политики доступа для 3 разных классов пользователей:

  • Системные администраторы — полный доступ ко всем машинам в сети
  • Сотрудники — доступ только к Samba / почтовому серверу
  • Контрагенты — доступ только к специальному серверу

Основной подход, который мы выберем, будет (а) выделить каждый класс пользователей в свой собственный диапазон виртуальных IP-адресов и (б) контролировать доступ к машинам, настроив правила брандмауэра, которые отключают виртуальный IP-адрес клиента.

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

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

Во-первых, давайте создадим карту виртуальных IP-адресов в соответствии с классом пользователя:

Сервер доступа OpenVPN openvpn-as
Клиент OpenVPN 3 Linux openvpn3
OpenVPN с открытым исходным кодом openvpn

0

Класс Виртуальный диапазон IP-адресов Разрешенный доступ к локальной сети Общие названия
Сотрудники 10.8.0.0/24 Samba / почтовый сервер на 10.66.4.4 [переменная]
Системные администраторы 10.8.1.0 / 24 Вся подсеть 10.66.4.0/24 системный администратор
Подрядчики 10.8.2.0/24 Сервер подрядчика по адресу 10.66.4.12 подрядчик1, подрядчик2

Теперь давайте переведем эту карту в конфигурацию сервера OpenVPN. Прежде всего, убедитесь, что вы выполнили описанные выше действия, чтобы сделать подсеть 10.66.4.0/24 доступной для всех клиентов (пока мы настроим маршрутизацию, чтобы разрешить клиентский доступ ко всем 10.66.4.0 / 24, мы наложим ограничения доступа с помощью правил брандмауэра для реализации приведенной выше таблицы политик).

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

  dev tun0  

В файле конфигурации сервера определите пул IP-адресов сотрудников:

  сервер 10.8.0.0 255.255.255.0  

Добавьте маршруты для диапазонов IP-адресов системного администратора и подрядчика:

  маршрут 10.8.1.0 255.255.255.0
маршрут 10.8.2.0 255.255.255.0  

Поскольку мы будем назначать фиксированные IP-адреса для конкретных системных администраторов и подрядчиков, мы будем использовать каталог конфигурации клиента:

  каталог конфигурации клиента ccd  

Теперь поместите специальные файлы конфигурации в подкаталог ccd , чтобы определить фиксированный IP-адрес для каждого VPN-клиента, не являющегося сотрудником.

ccd / sysadmin1

  ifconfig-push 10.8.1.1 10.8.1.2  

ccd / подрядчик1

  ifconfig-push 10.8.2.1 10.8.2.2  

ccd / подрядчик2

  ifconfig-push 10.8.2.5 10.8.2.6  

Каждая пара адресов ifconfig-push представляет конечные IP-точки виртуального клиента и сервера. Они должны быть взяты из последовательных подсетей / 30 для совместимости с клиентами Windows и драйвером TAP-Windows. В частности, последний октет 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]
[241 242] [245 246] [249 250] [253 254] 

На этом настройка OpenVPN завершена.Последний шаг — добавить правила брандмауэра для завершения политики доступа. В этом примере мы будем использовать правила брандмауэра в синтаксисе Linux iptables :

  # Правило сотрудников
iptables -A ВПЕРЕД -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ПРИНЯТЬ

# Правило системного администратора
iptables -A ВПЕРЕД -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ПРИНЯТЬ

# Правило подрядчика
iptables -A ВПЕРЕД -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ПРИНЯТЬ  

Использование альтернативных методов аутентификации

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

Чтобы использовать этот метод аутентификации, сначала добавьте в конфигурацию клиента директиву auth-user-pass . Он направит клиент OpenVPN запросить у пользователя имя пользователя / пароль, передав его на сервер по безопасному каналу TLS.

Затем настройте сервер на использование подключаемого модуля проверки подлинности, который может быть сценарием, общим объектом или DLL.Сервер OpenVPN будет вызывать плагин каждый раз, когда VPN-клиент пытается подключиться, передавая ему имя пользователя / пароль, введенные на клиенте. Плагин аутентификации может контролировать, разрешает ли сервер OpenVPN клиенту соединение, возвращая значение ошибки (1) или успеха (0).

Использование подключаемых модулей сценариев

Плагины

Script можно использовать, добавив директиву auth-user-pass-verify в файл конфигурации на стороне сервера. Например:

  auth-user-pass-verify auth-pam.pl через-файл  

будет использовать Perl-скрипт auth-pam.pl для аутентификации имени пользователя и пароля подключающихся клиентов. См. Описание auth-user-pass-verify на странице руководства для получения дополнительной информации.

Сценарий auth-pam.pl включен в дистрибутив исходного файла OpenVPN в подкаталог sample-scripts . Он будет аутентифицировать пользователей на сервере Linux с помощью модуля аутентификации PAM, который, в свою очередь, может реализовать теневой пароль, аутентификацию RADIUS или LDAP. auth-pam.pl в первую очередь предназначен для демонстрационных целей. Для реальной аутентификации PAM используйте плагин общего объекта openvpn-auth-pam , описанный ниже.

Использование общих объектов или подключаемых модулей DLL

Плагины общих объектов или DLL обычно представляют собой скомпилированные модули C, которые загружаются сервером OpenVPN во время выполнения. Например, если вы используете пакет OpenVPN на основе RPM в Linux, плагин openvpn-auth-pam должен быть уже собран. Чтобы использовать его, добавьте это в файл конфигурации на стороне сервера:

  плагин / usr / share / openvpn / plugin / lib / openvpn-auth-pam.так что войдите  

Это укажет серверу OpenVPN проверить имя пользователя / пароль, введенные клиентами с использованием модуля login PAM.

Для реального производственного использования лучше использовать плагин openvpn-auth-pam , потому что он имеет несколько преимуществ перед скриптом auth-pam.pl :

  • Общий объект openvpn-auth-pam Плагин использует модель выполнения с разделенными привилегиями для повышения безопасности. Это означает, что сервер OpenVPN может работать с ограниченными привилегиями, используя директивы user nobody , group nobody и chroot , и по-прежнему сможет аутентифицироваться в файле теневых паролей, доступном только для чтения root.
  • OpenVPN может передавать имя пользователя / пароль плагину через виртуальную память, а не через файл или среду, что лучше для локальной безопасности на сервере.
  • Скомпилированные на C подключаемые модули обычно работают быстрее, чем скрипты.

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

Чтобы собрать подключаемый модуль openvpn-auth-pam в Linux, перейдите в каталог plugin / auth-pam в исходном дистрибутиве OpenVPN и запустите make .

Использование аутентификации по имени пользователя и паролю как единственная форма аутентификации клиента

По умолчанию, использование auth-user-pass-verify или подключаемого модуля проверки имени пользователя / пароля на сервере включит двойную аутентификацию, требуя, чтобы аутентификация как по сертификату клиента, так и по имени пользователя / паролю прошла успешно, чтобы клиент мог быть аутентифицированным.

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

  клиент-сертификат не требуется  

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

  имя пользователя как общее имя  

, который сообщает серверу использовать имя пользователя для целей индексации, поскольку он будет использовать общее имя клиента, который аутентифицировался через сертификат клиента.

Обратите внимание, что client-cert-not-required не устраняет необходимость в сертификате сервера, поэтому клиент, подключающийся к серверу, который использует client-cert-not-required , может удалить cert и ключ директивы из файла конфигурации клиента, но не директива ca , потому что клиенту необходимо проверить сертификат сервера.


Как добавить двухфакторную аутентификацию в конфигурацию OpenVPN с использованием клиентских смарт-карт

См. Также статью: Смарт-карта OpenVPN HOWTO

О двухфакторной аутентификации

Двухфакторная аутентификация — это метод аутентификации, который сочетает в себе два элемента: то, что у вас есть, и то, что вы знаете.

Что-то у вас должно быть устройством, которое нельзя дублировать; таким устройством может быть криптографический токен, содержащий закрытый секретный ключ.Этот закрытый ключ создается внутри устройства и никогда не покидает его. Если пользователь, владеющий этим токеном, пытается получить доступ к защищенным службам в удаленной сети, процесс авторизации, который предоставляет или запрещает доступ к сети, может с высокой степенью уверенности установить, что пользователь, ищущий доступ, физически владеет известным сертифицированным токеном. .

Что-то, что вы знаете, может быть паролем, представленным криптографическому устройству. Без правильного пароля вы не сможете получить доступ к закрытому секретному ключу.Еще одна особенность криптографических устройств — запретить использование закрытого секретного ключа, если неправильный пароль был представлен более разрешенного количества раз. Такое поведение гарантирует, что если пользователь потеряет свое устройство, то его использование другим человеком будет невозможным.

Криптографические устройства обычно называются «смарт-картами» или «токенами» и используются вместе с PKI (инфраструктурой открытых ключей). Сервер VPN может проверить сертификат X.509 и убедиться, что пользователь владеет соответствующим секретным секретным ключом.Поскольку устройство не может быть дублировано и требует действующего пароля, сервер может аутентифицировать пользователя с высокой степенью уверенности.

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

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

Что такое PKCS # 11?

Этот стандарт определяет API, называемый Cryptoki, для устройств, которые хранят криптографическую информацию и выполняют криптографические функции.Cryptoki, произносится как «криптографический ключ» и сокращенно от интерфейса криптографического токена, следует простому объектно-ориентированному подходу, решая задачи технологической независимости (любого типа устройства) и совместного использования ресурсов (несколько приложений имеют доступ к нескольким устройствам), предоставляя приложениям общее логическое представление устройства, называемое криптографическим токеном.

Источник: RSA Security Inc. https://www.emc.com/emc-plus/rsa-labs/standards-initiatives/pkcs-11-cryptographic-token-interface-standard.htm.

Подводя итог, PKCS # 11 — это стандарт, который может использоваться прикладным программным обеспечением для доступа к криптографическим токенам, таким как смарт-карты и другие устройства. Большинство поставщиков устройств предоставляют библиотеку, реализующую интерфейс поставщика PKCS # 11 — эта библиотека может использоваться приложениями для доступа к этим устройствам. PKCS # 11 — это кроссплатформенный бесплатный стандарт, не зависящий от производителя.

Поиск библиотеки поставщика PKCS # 11

Первое, что вам нужно сделать, это найти библиотеку провайдера, она должна быть установлена ​​вместе с драйверами устройств.У каждого поставщика есть своя библиотека. Например, поставщик OpenSC PKCS # 11 находится в /usr/lib/pkcs11/opensc-pkcs11.so в Unix или в opensc-pkcs11.dll в Windows.

Как настроить криптографический токен

Вы должны следовать процедуре регистрации:

  • Инициализировать токен PKCS # 11.
  • Сгенерировать пару ключей RSA на токене PKCS # 11.
  • Создайте запрос сертификата на основе пары ключей, для этого вы можете использовать OpenSC и OpenSSL.
  • Отправьте запрос сертификата в центр сертификации и получите сертификат.
  • Загрузите сертификат в маркер, отмечая при этом, что атрибуты id и label сертификата должны совпадать с атрибутами закрытого ключа.

Настроенный маркер — это маркер, который имеет объект закрытого ключа и объект сертификата, причем оба имеют одинаковые атрибуты id и label.

Простая утилита регистрации — Easy-RSA 2.0, которая является частью серии OpenVPN 2.1.Следуйте инструкциям, указанным в файле README, а затем используйте pkitool для регистрации.

Инициализируйте токен с помощью следующей команды:

 $ ./pkitool --pkcs11-слоты / usr / lib / pkcs11 /
$ ./pkitool --pkcs11-init / usr / lib / pkcs11 /
 

Зарегистрируйте сертификат, используя следующую команду:

 $ ./pkitool --pkcs11 / usr / lib / pkcs11 / client1
 

Как изменить конфигурацию OpenVPN для использования криптографических токенов

У вас должен быть OpenVPN 2.1 или выше, чтобы использовать функции PKCS # 11.

Определите правильный объект

Каждый провайдер PKCS # 11 может поддерживать несколько устройств. Для просмотра списка доступных объектов вы можете использовать следующую команду:

 $ openvpn --show-pkcs11-ids / usr / lib / pkcs11 /

Следующие объекты доступны для использования.
Каждый объект, показанный ниже, может использоваться как параметр для
--pkcs11-id, пожалуйста, не забудьте использовать одинарные кавычки.

Сертификат
       DN: / CN = Пользователь1
       Серийный номер: 490B82C4000000000075
       Серийный идентификатор: aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600 

Каждая пара сертификат / закрытый ключ имеет уникальную строку «Сериализованный идентификатор».Строка сериализованного идентификатора запрошенного сертификата должна быть указана для параметра pkcs11-id с использованием одинарных кавычек.

  pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600'
  
Использование OpenVPN с PKCS # 11
Типичный набор опций OpenVPN для PKCS # 11
  pkcs11-провайдеры / usr / lib / pkcs11 /
pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600'
  

Будет выбран объект, соответствующий строке pkcs11-id.

Расширенные параметры OpenVPN для PKCS # 11
  pkcs11-провайдеры /usr/lib/pkcs11/provider1.so /usr/lib/pkcs11/provider2.so
pkcs11-id 'aaaa / bbb / 41545F5349474E415455524581D2A1A1B23C4AA4CB17FAF7A4600'
pkcs11-контактный кэш 300
демон
auth-retry nointeract
удержание управления
сигнал управления
управление 127.0.0.1 8888
управление-запрос-пароли
  

Это загрузит двух провайдеров в OpenVPN, будет использовать сертификат, указанный в опции pkcs11-id , и использовать интерфейс управления для запроса паролей.Демон вернется в состояние удержания при наступлении события, когда к токену будет невозможно получить доступ. Токен будет использоваться в течение 300 секунд, после чего пароль будет повторно запрошен, сеанс будет отключен, если сеанс управления отключится.

Рекомендации по реализации PKCS # 11

Многие поставщики PKCS # 11 используют потоки, чтобы избежать проблем, вызванных реализацией LinuxThreads (setuid, chroot), настоятельно рекомендуется обновить glibc до Native POSIX Thread Library (NPTL), если вы собираетесь использовать PKCS #. 11.

OpenSC PKCS # 11 провайдер

Поставщик OpenSC PKCS # 11 находится в /usr/lib/pkcs11/opensc-pkcs11.so в Unix или в opensc-pkcs11.dll в Windows.

Разница между PKCS # 11 и Microsoft Cryptographic API (CryptoAPI)

PKCS # 11 — это бесплатный кроссплатформенный стандарт, независимый от производителя. CryptoAPI — это специальный API Microsoft. Большинство поставщиков смарт-карт поддерживают оба интерфейса. В среде Windows пользователь должен выбрать, какой интерфейс использовать.

Текущая реализация OpenVPN, использующая MS CryptoAPI (опция cryptoapicert ), работает хорошо, пока вы не используете OpenVPN как службу. Если вы хотите запустить OpenVPN в административной среде с помощью службы, реализация не будет работать с большинством смарт-карт по следующим причинам:

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

Используя интерфейс PKCS # 11, вы можете использовать смарт-карты с OpenVPN в любой реализации, поскольку PKCS # 11 не имеет доступа к магазинам Microsoft и не обязательно требует прямого взаимодействия с конечным пользователем.


Маршрутизация всего клиентского трафика (включая веб-трафик) через VPN

Обзор

По умолчанию, когда клиент OpenVPN активен, через VPN будет проходить только сетевой трафик к сайту сервера OpenVPN и от него.Например, общий просмотр веб-страниц будет осуществляться с помощью прямых подключений в обход VPN.

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

Реализация

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

  push "redirect-gateway def1"  

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

  push "локальный def1 шлюз перенаправления"  

Передача клиентам опции redirect-gateway приведет к тому, что весь сетевой трафик IP, исходящий на клиентских машинах, будет проходить через сервер OpenVPN.Сервер необходимо настроить так, чтобы он каким-то образом обрабатывал этот трафик, например, путем преобразования его в Интернет с помощью NAT или маршрутизации через прокси-сервер HTTP на сайте.

В Linux вы можете использовать такую ​​команду для NAT трафика клиента VPN в Интернет:

  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE  

Эта команда предполагает, что подсеть VPN — это 10.8.0.0/24 (взято из директивы server в конфигурации сервера OpenVPN) и что локальный интерфейс Ethernet — eth0 .

Когда используется шлюз перенаправления , клиенты OpenVPN будут маршрутизировать DNS-запросы через VPN, и VPN-серверу потребуется их обрабатывать. Это может быть выполнено путем передачи адреса DNS-сервера подключающимся клиентам, который заменит их обычные настройки DNS-сервера в течение времени, когда VPN активен. Например:

  push "dhcp-option DNS 10.8.0.1"  

настроит клиентов Windows (или клиентов, отличных от Windows с некоторыми дополнительными сценариями на стороне сервера) для использования 10.8.0.1 в качестве их DNS-сервера. Любой адрес, доступный для клиентов, может использоваться в качестве адреса DNS-сервера.

Предупреждения

Перенаправление всего сетевого трафика через VPN не совсем без проблем. Вот несколько типичных ошибок, о которых следует знать:

  • Многие клиентские машины OpenVPN, подключенные к Интернету, будут периодически взаимодействовать с DHCP-сервером, чтобы продлить аренду своих IP-адресов. Параметр redirect-gateway может помешать клиенту достичь локального DHCP-сервера (поскольку сообщения DHCP будут маршрутизироваться через VPN), что приведет к потере аренды IP-адреса.
  • Существуют проблемы с отправкой DNS-адресов клиентам Windows.
  • Скорость просмотра веб-страниц на клиенте будет заметно ниже.

Для получения дополнительной информации о механизме директивы redirect-gateway см. Страницу руководства.


Запуск сервера OpenVPN на динамическом IP-адресе

Хотя клиенты OpenVPN могут легко получить доступ к серверу через динамический IP-адрес без какой-либо специальной настройки, все становится более интересным, когда сам сервер находится на динамическом адресе.Хотя у OpenVPN нет проблем с обработкой ситуации с динамическим сервером, требуется некоторая дополнительная настройка.

Первый шаг — получить динамический DNS-адрес, который можно настроить так, чтобы он «следил» за сервером при каждом изменении IP-адреса сервера. Доступно несколько поставщиков услуг динамического DNS, например dyndns.org.

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

  • Используйте устройство маршрутизатора NAT с поддержкой динамического DNS (например, Linksys BEFSR41 ). Большинство недорогих устройств NAT-маршрутизатора, которые широко доступны, имеют возможность обновлять динамическое DNS-имя каждый раз, когда от ISP получена новая аренда DHCP. Эта установка идеальна, когда сервер OpenVPN представляет собой машину с одним сетевым адаптером внутри брандмауэра.
  • Используйте клиентское приложение динамического DNS, такое как ddclient, для обновления динамического адреса DNS при изменении IP-адреса сервера.Эта установка идеальна, когда машина, на которой запущен OpenVPN, имеет несколько сетевых адаптеров и действует как межсетевой экран / шлюз для всего сайта. Чтобы реализовать эту настройку, вам необходимо настроить сценарий, который будет запускаться вашим клиентским программным обеспечением DHCP каждый раз, когда происходит изменение IP-адреса. Этот сценарий должен (а) запустить ddclient , чтобы уведомить вашего поставщика динамических DNS о вашем новом IP-адресе, и (б) перезапустить демон сервера OpenVPN.

Клиент OpenVPN по умолчанию распознает изменение IP-адреса сервера, если в конфигурации клиента используется удаленная директива , которая ссылается на динамическое DNS-имя.Обычная цепочка событий состоит в том, что (а) клиент OpenVPN не может своевременно получать сообщения поддержки активности со старого IP-адреса сервера, вызывая перезапуск, и (б) перезапуск вызывает повторное изменение имени DNS в директиве remote . разрешено, что позволяет клиенту повторно подключиться к серверу по его новому IP-адресу.

Дополнительную информацию можно найти в FAQ.


Подключение к серверу OpenVPN через HTTP-прокси.

OpenVPN поддерживает соединения через прокси-сервер HTTP со следующими режимами аутентификации:

  • Без аутентификации прокси
  • Базовая проверка подлинности прокси-сервера
  • Проверка подлинности прокси NTLM

Прежде всего, использование прокси-сервера HTTP требует, чтобы вы использовали TCP в качестве протокола передачи туннеля.Поэтому добавьте следующее в конфигурацию клиента и сервера:

  протокол протокола TCP  

Убедитесь, что все строки proto udp в файлах конфигурации удалены.

Затем добавьте директиву http-proxy в файл конфигурации клиента (полное описание этой директивы см. На странице руководства).

Например, предположим, что у вас есть прокси-сервер HTTP в клиентской локальной сети по адресу 192.168.4.1 , который прослушивает соединения на порту 1080 .Добавьте это в конфигурацию клиента:

  http-прокси 192.168.4.1 1080  

Предположим, прокси-сервер HTTP требует базовой проверки подлинности:

  http-прокси 192.168.4.1 1080 stdin базовый  

Предположим, прокси-сервер HTTP требует проверки подлинности NTLM:

  http-прокси 192.168.4.1 1080 stdin ntlm  

Два приведенных выше примера аутентификации заставят OpenVPN запрашивать имя пользователя / пароль из стандартного ввода.Если вместо этого вы хотите поместить эти учетные данные в файл, замените stdin именем файла и поместите имя пользователя в строку 1 этого файла и пароль в строку 2.


Подключение к общему ресурсу Samba через OpenVPN

Этот пример предназначен для демонстрации того, как клиенты OpenVPN могут подключаться к общему ресурсу Samba через маршрутизируемый туннель dev tun . Если вы используете мост Ethernet ( dev tap ), вам, вероятно, не нужно следовать этим инструкциям, поскольку клиенты OpenVPN должны видеть серверные машины в своем сетевом окружении.

В этом примере мы предположим, что:

  • серверная LAN использует подсеть 10.66.0.0/24 ,
  • пул IP-адресов VPN использует 10.8.0.0/24 (как указано в директиве server в файле конфигурации сервера OpenVPN),
  • , сервер Samba имеет IP-адрес 10.66.0.4 и
  • , сервер Samba уже настроен и доступен из локальной сети.

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

Затем отредактируйте файл конфигурации Samba ( smb.conf ). Убедитесь, что хосты разрешают директиву разрешить подключение клиентов OpenVPN из подсети 10.8.0.0/24 . Например:

  хостов позволяют = 10.66.0.0/24 10.8.0.0/24 127.0.0.1  

Если вы используете серверы Samba и OpenVPN на одном компьютере, вам может потребоваться отредактировать директиву interfaces в файле smb.conf , чтобы также прослушивать подсеть интерфейса TUN 10.8.0.0 / 24 :

  интерфейсов = 10.66.0.0/24 10.8.0.0/24  

Если вы используете серверы Samba и OpenVPN на одном компьютере, подключитесь с клиента OpenVPN к общему ресурсу Samba, используя имя папки:

  \ 10.8.0.1 \ Sharename  

Если серверы Samba и OpenVPN находятся на разных машинах, используйте имя папки:

  \ 10.66.0.4 \ sharename  

Например, из окна командной строки:

  чистое использование z: \ 10.66.0.4 \ sharename / ПОЛЬЗОВАТЕЛЬ: myusername  

Реализация конфигурации балансировки нагрузки / аварийного переключения

Клиент

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

  удаленный server1.mydomain
удаленный server2.mydomain
удаленный server3.mydomain  

укажет клиенту OpenVPN попытаться установить соединение с server1, server2 и server3 в указанном порядке.Если существующее соединение разорвано, клиент OpenVPN повторит попытку последнего подключенного сервера и, если это не удастся, перейдет к следующему серверу в списке. Вы также можете указать клиенту OpenVPN рандомизировать свой список серверов при запуске, чтобы клиентская нагрузка была вероятностно распределена по пулу серверов.

  удаленно-случайный  

Если вы также хотите, чтобы из-за сбоев разрешения DNS клиент OpenVPN перешел на следующий сервер в списке, добавьте следующее:

  resolv-retry 60  

Параметр 60 указывает клиенту OpenVPN попытаться разрешить каждое удаленное DNS-имя в течение 60 секунд, прежде чем перейти к следующему серверу в списке.

Список серверов также может относиться к нескольким демонам сервера OpenVPN, запущенным на одном компьютере, каждый из которых прослушивает соединения на другом порту, например:

  удаленный smp-server1.mydomain 8000
удаленный smp-server1.mydomain 8001
удаленный smp-server2.mydomain 8000
удаленный smp-server2.mydomain 8001  

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

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

Сервер

Самый простой подход к конфигурации балансировки нагрузки / переключения при отказе на сервере — использовать эквивалентные файлы конфигурации на каждом сервере в кластере, за исключением использования разных пулов виртуальных IP-адресов для каждого сервера.Например:

сервер1

  сервер 10.8.0.0 255.255.255.0  

сервер2

  сервер 10.8.1.0 255.255.255.0  

сервер3

  сервер 10.8.2.0 255.255.255.0  

Повышение безопасности OpenVPN

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

tls-auth

Директива tls-auth добавляет дополнительную подпись HMAC ко всем пакетам подтверждения SSL / TLS для проверки целостности. Любой пакет UDP, не имеющий правильной подписи HMAC, может быть отброшен без дальнейшей обработки. Подпись tls-auth HMAC обеспечивает дополнительный уровень безопасности, превышающий уровень, обеспечиваемый SSL / TLS. Может защитить от:

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

Использование tls-auth требует, чтобы вы сгенерировали общий секретный ключ, который используется в дополнение к стандартному сертификату / ключу RSA:

  openvpn --genkey --secret ta.ключ  

Эта команда сгенерирует статический ключ OpenVPN и запишет его в файл ta.key . Этот ключ следует скопировать по уже существующему защищенному каналу на сервер и все клиентские машины. Его можно разместить в том же каталоге, что и файлы RSA .key и .crt .

В конфигурации сервера добавить:

  tls-auth ta.key 0  

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

  tls-auth ta.ключ 1  

прото udp

Хотя OpenVPN позволяет использовать протокол TCP или UDP в качестве VPN-соединения, протокол UDP обеспечивает лучшую защиту от DoS-атак и сканирования портов, чем TCP:

  протокол протокола udp  

пользователь / группа (только не для Windows)

OpenVPN был очень тщательно разработан, чтобы позволить отбрасывать привилегии root после инициализации, и эту функцию всегда следует использовать в Linux / BSD / Solaris.Без привилегий root запущенный демон сервера OpenVPN предоставляет злоумышленнику гораздо менее заманчивую цель.

  пользователь никто
группа никто  

Непривилегированный режим (только Linux)

В Linux OpenVPN можно запускать совершенно непривилегированно. Эта конфигурация немного сложнее, но обеспечивает лучшую безопасность.

Для работы с этой конфигурацией OpenVPN должен быть настроен для использования интерфейса iproute, это делается путем указания –enable-iproute2 для скрипта настройки.Пакет sudo также должен быть доступен в вашей системе.

Эта конфигурация использует возможность Linux для изменения разрешения устройства tun, чтобы непривилегированный пользователь мог получить к нему доступ. Он также использует sudo для выполнения iproute, чтобы можно было изменить свойства интерфейса и таблицу маршрутизации.

Конфигурация OpenVPN:

    • Напишите следующий сценарий и поместите его в: / usr / local / sbin / unpriv-ip:
  #! / Bin / sh
sudo / sbin / ip $ *
  
    • Выполните visudo и добавьте следующее, чтобы разрешить пользователю «user1» выполнить / sbin / ip:
  user1 ALL = (ALL) NOPASSWD: / sbin / ip  
    • Вы также можете включить группу пользователей с помощью следующей команды:
 % пользователей ALL = (ALL) NOPASSWD: / sbin / ip  
    • Добавьте в конфигурацию OpenVPN следующее:
  разработчик tunX / tapX
iproute / usr / местные / sbin / unpriv-ip  
    • Обратите внимание, что вы должны выбрать постоянный X и указать tun или tap не одновременно.

    • В качестве пользователя root добавьте постоянный интерфейс и разрешите пользователю и / или группе управлять им, выполните следующие действия: создайте tunX (замените своим собственным) и разрешите пользователям user1 и group доступ к нему.
  openvpn --mktun --dev tunX --type tun --user user1 --group users  
  • Запустите OpenVPN в контексте непривилегированного пользователя.

Можно добавить дополнительные ограничения безопасности, изучив параметры в сценарии / usr / local / sbin / unpriv-ip.

chroot (только не для Windows)

Директива chroot позволяет заблокировать демон OpenVPN в так называемой chroot jail , где демон не сможет получить доступ к какой-либо части файловой системы хост-системы, за исключением определенного каталога, указанного в качестве параметра для директива. Например,

  chroot jail  

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

Предостережения: поскольку chroot переориентирует файловую систему (только с точки зрения демона), необходимо поместить все файлы, которые могут понадобиться OpenVPN после инициализации, в каталог jail , например:

  • файл crl-verify или
  • каталог client-config-dir .

Большие ключи RSA

Размер ключа RSA управляется переменной KEY_SIZE в файле easy-rsa / vars , которая должна быть установлена ​​до создания любых ключей. В настоящее время по умолчанию установлено 1024, это значение может быть разумно увеличено до 2048 без отрицательного влияния на производительность VPN-туннеля, за исключением немного более медленного квитирования повторного согласования SSL / TLS, которое происходит один раз для каждого клиента в час, и гораздо более медленного одноразового подтверждения Диффи. Процесс генерации параметров Хеллмана с помощью сценария easy-rsa / build-dh .

Симметричные ключи большего размера

По умолчанию OpenVPN использует Blowfish , 128-битный симметричный шифр.

OpenVPN автоматически поддерживает любой шифр, который поддерживается библиотекой OpenSSL, и, как таковой, может поддерживать шифры с ключами большого размера. Например, 256-битную версию AES (Advanced Encryption Standard) можно использовать, добавив следующее в файлы конфигурации сервера и клиента:

  шифр AES-256-CBC  

Сохранить корневой ключ (

ок.ключ ) на автономном компьютере без сетевого подключения

Одним из преимуществ безопасности использования PKI X509 (как это делает OpenVPN) является то, что корневой ключ CA ( ca. key ) не обязательно должен присутствовать на сервере OpenVPN. В среде с высоким уровнем безопасности вам может потребоваться специально назначить машину для целей подписания ключей, обеспечить хорошую физическую защиту машины и отключить ее от всех сетей. При необходимости можно использовать дискеты для перемещения файлов ключей вперед и назад.Такие меры крайне затрудняют злоумышленнику кражу корневого ключа, за исключением физического кражи машины для подписи ключей.


Сертификаты отзыва

Отзыв сертификата означает аннулирование ранее подписанного сертификата, чтобы его больше нельзя было использовать для целей аутентификации.

Типичные причины отзыва сертификата:

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

Пример

В качестве примера мы отзовем сертификат client2 , который мы сгенерировали выше в разделе «генерация ключей» HOWTO.

Сначала откройте оболочку или окно командной строки и перейдите в каталог easy-rsa , как вы это делали в разделе «Генерация ключей» выше. В Linux / BSD / Unix:

 ../vars
./revoke-full client2
  

В Windows:

  варов
revoke-full client2
  

Вы должны увидеть следующий результат:

 Используя конфигурацию из /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
ОТЛАДКА [load_index]: unique_subject = "да"
Отзыв сертификата 04.
База данных обновлена
Используя конфигурацию из /root/openvpn/20/openvpn/tmp/easy-rsa/openssl.cnf
ОТЛАДКА [load_index]: unique_subject = "да"
клиент2.crt: /C=KG/ST=NA/O=OpenVPN-TEST/CN=client2/[email protected]
ошибка 23 при поиске глубины 0: сертификат отозван 

Обратите внимание на «ошибку 23» в последней строке. Это то, что вы хотите увидеть, поскольку это указывает на то, что проверка сертификата отозванного сертификата не удалась.

Сценарий revoke-full создаст файл CRL (список отзыва сертификатов) с именем crl.pem в подкаталоге keys . Файл должен быть скопирован в каталог, в котором сервер OpenVPN может получить к нему доступ, затем проверка CRL должна быть включена в конфигурации сервера:

  crl-verify crl.pem  

Теперь все подключающиеся клиенты будут проверять свои клиентские сертификаты по списку отзыва сертификатов, и любое положительное совпадение приведет к разрыву соединения.

CRL Примечания

  • Когда опция crl-verify используется в OpenVPN, файл CRL будет перечитываться каждый раз, когда подключается новый клиент или существующий клиент повторно согласовывает соединение SSL / TLS (по умолчанию один раз в час). Это означает, что вы можете обновлять файл CRL во время работы демона сервера OpenVPN, а новый CRL немедленно вступает в силу для вновь подключающихся клиентов.Если клиент, чей сертификат вы отзываете, уже подключен, вы можете перезапустить сервер с помощью сигнала (SIGUSR1 или SIGHUP) и сбросить все клиенты, или вы можете telnet к интерфейсу управления и явно убить конкретный объект экземпляра клиента на сервере, не мешая другие клиенты.
  • Хотя директива crl-verify может использоваться как на сервере OpenVPN, так и на клиентах, обычно нет необходимости распространять файл CRL клиентам, если сертификат сервера не был отозван.Клиентам не нужно знать о других клиентских сертификатах, которые были отозваны, потому что клиенты не должны принимать прямые подключения от других клиентов в первую очередь.
  • Файл CRL не является секретным и должен быть доступен для чтения всем, чтобы демон OpenVPN мог читать его после того, как были отброшены привилегии root.
  • Если вы используете директиву chroot , обязательно поместите копию файла CRL в каталог chroot, поскольку в отличие от большинства других файлов, которые читает OpenVPN, файл CRL будет прочитан после выполнения вызова chroot, а не до .
  • Распространенная причина, по которой необходимо отозвать сертификаты, заключается в том, что пользователь шифрует свой закрытый ключ паролем, а затем забывает его. Отозвав исходный сертификат, можно сгенерировать новую пару сертификат / ключ с исходным общим именем пользователя.

Важное примечание о возможной атаке «Человек посередине», если клиенты не проверяют сертификат сервера, к которому они подключаются.

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

  • [OpenVPN 2.1 и выше] Создайте сертификаты сервера с конкретным использованием ключей и расширенным использованием ключей. RFC3280 определяет, что для TLS-соединений должны быть предоставлены следующие атрибуты:

    Mode Использование ключа Использование расширенного ключа
    Клиент цифровая подпись Аутентификация веб-клиента TLS
    ключ Соглашение
    цифровая Подпись, ключ Договор
    Сервер цифровая подпись, ключ шифрования Аутентификация веб-сервера TLS
    цифровая Подпись, ключ Договор

    Сертификаты сервера можно создать с помощью сценария build-key-server (дополнительную информацию см. В документации easy-rs).Это будет обозначать сертификат как сертификат только для сервера путем установки правильных атрибутов. Теперь добавьте следующую строку в конфигурацию вашего клиента:

      удаленный сервер сертификатов tls  
  • [OpenVPN 2.0 и ниже] Создайте сертификаты сервера с помощью сценария build-key-server (дополнительную информацию см. В документации easy-rsa). Это обозначит сертификат как сертификат только для сервера, установив nsCertType = server.Теперь добавьте следующую строку в конфигурацию вашего клиента:

      сервер нс-сертификата  

    Это заблокирует подключение клиентов к любому серверу, в сертификате которого отсутствует обозначение сервера nsCertType =, даже если сертификат был подписан файлом ca в файле конфигурации OpenVPN.

  • Используйте директиву tls-remote на клиенте, чтобы принять / отклонить соединение с сервером на основе общего имени сертификата сервера.
  • Используйте сценарий или подключаемый модуль tls-verify , чтобы принять / отклонить соединение с сервером на основе пользовательской проверки сведений о субъекте X509, встроенных в сертификат сервера.
  • Подписывайте сертификаты сервера с одним ЦС и сертификаты клиента с другим ЦС. Директива конфигурации клиента ca должна ссылаться на файл CA, подписывающего сервер, тогда как директива конфигурации сервера ca должна ссылаться на файл CA, подписывающий клиента.

Клиент OpenVPN 3 для Linux

Фон

Проект OpenVPN 3 Linux — это новый клиент, созданный на основе базовой библиотеки OpenVPN 3, которая также используется в различных клиентах OpenVPN Connect и OpenVPN для Android (необходимо включить на странице настроек в приложении).

Этот клиент построен на совершенно другой архитектуре в отношении использования. Он в значительной степени основан на D-Bus и позволяет непривилегированным пользователям запускать и управлять своими собственными туннелями VPN прямо из коробки. Системные администраторы, желающие большего контроля, также могут контролировать и ограничивать этот доступ, как путем усиления политики OpenVPN 3 D-Bus по умолчанию, так и за счет упрощения функций в OpenVPN 3 Linux.

Несмотря на то, что название проекта содержит «Linux», это не означает, что он ограничен только Linux.Любая платформа, на которой есть D-Bus, теоретически должна поддерживать этот клиент. Но поскольку D-Bus чаще всего используется в среде Linux, это, естественно, будет основным направлением проекта.

Примечания к выпуску хранятся в тегах git в репозитории проекта git. Их также можно посмотреть здесь: https://github.com/OpenVPN/openvpn3-linux/releases (разверните тег, чтобы увидеть полный текст)

Установка в качестве коннектора для OpenVPN Cloud

Установка клиента OpenVPN 3 в качестве коннектора для облачного хоста OpenVPN или сети была упрощена и задокументирована здесь.

Установка для Debian и Ubuntu

Выполните следующие действия, чтобы установить клиент OpenVPN 3 в Linux для Debian и Ubuntu:

  1. Откройте Терминал, нажав ctrl + alt + T

  2. Введите в Терминал следующую команду: sudo apt install apt-transport-https . Это сделано для того, чтобы ваш apt поддерживал транспорт https. Введите пароль root, как предложено

  3. Введите в Терминал следующую команду: sudo wget https: // swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub . Это установит ключ репозитория OpenVPN, используемый пакетами OpenVPN 3 Linux

    .

  4. Введите в Терминал следующую команду: sudo apt-key add openvpn-repo-pkg-key.pub

  5. Введите в Терминал следующую команду: sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-$DISTRO.list . Это установит правильный репозиторий.Замените $ DISTRO на имя выпуска в зависимости от вашего дистрибутива Debian / Ubuntu (таблицу названий выпусков для каждого дистрибутива можно найти ниже). В этом случае выбирается focal , поскольку используется Ubuntu 20.04

  6. Введите в Терминал следующую команду: sudo apt update

  7. Введите в Терминал следующую команду: sudo apt install openvpn3 . Это, наконец, установит пакет OpenVPN 3

Ubuntu

Распространение Выпуск Название выпуска ($ DISTRO)
Debian 9 stretch
Debian 10
buster 16.04 xenial
Ubuntu 18.04 bionic
Ubuntu 19.10 eoan
Ubuntu 20.04 focal

Установка для Linux Fedora, Red Hat Enterprise , CentOS или Scientific Linux

Пакеты для этих дистрибутивов предоставляются через репозиторий Fedora Copr. Поддерживаемые версии:

Распространение Версии выпуска
Fedora 30, 31, 32
Red Hat Enterprise Linux / CentOS 7, 8

Для установки Клиент OpenVPN 3 для Fedora, Red Hat Enterprise Linux, CentOS или Scientific Linux, выполните следующие действия:

  1. Откройте терминал, набрав терминал в строке поиска.
  2. Если вы используете Red Hat Enterprise Linux или его клоны, вам необходимо сначала установить репозиторий Fedora EPEL.Вот список команд для каждой версии:
    (исходную статью о Fedora EPEL можно найти здесь)
    RHEL / CentOS 6: sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release -latest-6.noarch.rpm
    RHEL / CentOS 7: sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    На RHEL 7 это рекомендуется также включить репозитории optional, extras и HA, поскольку пакеты EPEL могут зависеть от пакетов из этих репозиториев: sudo subscription-manager repos --enable "rhel - * - optional-rpms" --enable "rhel - * - extras-rpms "--enable" rhel-ha-for-rhel - * - server-rpms "
    RHEL / CentOS 8: sudo yum install https: // dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    В RHEL 8 также требуется включить репозиторий codeready-builder-for-rhel-8 — $ {ARCH} -rpms , поскольку Пакеты EPEL могут зависеть от пакетов из него: sudo ARCH = $ (/ bin / arch), за которым следует sudo subscription-manager repos --enable "codeready-builder-for-rhel-8 - $ {ARCH} -rpms"
    Вкл. CentOS 8 рекомендуется также включить репозиторий PowerTools, поскольку пакеты EPEL могут зависеть от пакетов из него: sudo dnf config-manager --set-enabled PowerTools
  3. Сначала необходимо установить модуль yum copr, выполнив следующую команду : sudo yum install yum-plugin-copr . Примечание. В выпусках Fedora обычно предустановлен модуль yum / dnf copr.
  4. Когда доступен модуль Copr, пора включить репозиторий OpenVPN 3 Copr, выполнив следующую команду: sudo yum copr enable dsommers / openvpn3
  5. Наконец, клиент OpenVPN 3 Linux можно установить, выполнив следующую команду : sudo yum install openvpn3-client

Использование профиля .ovpn

Обратите внимание, что к этому моменту вы должны были загрузить файл.ovpn на вашу машину.

Обязательные команды

  1. Для запуска одноразового профиля конфигурации введите в Терминал следующую команду: openvpn3 session-start --config $ {MY_CONFIGURATION_FILE}. Важно: «Профиль однократной конфигурации» означает, что файл конфигурации анализируется, загружается и удаляется из диспетчера конфигурации сразу после попытки запуска сеанса VPN. После этого подхода файл конфигурации недоступен для повторного использования.Это достигается путем передачи файла конфигурации непосредственно команде openvpn3 session-start .

  2. Чтобы импортировать файл конфигурации для повторного использования и начать сеанс VPN, введите в Терминал следующую команду: openvpn3 config-import --config $ {MY_CONFIGURATION_FILE} . Примечание: при таком подходе импортированный файл конфигурации можно использовать несколько раз, и доступ к самому файлу конфигурации не требуется для запуска туннелей VPN.По умолчанию импортированные профили конфигурации доступны только пользователю, импортировавшему файл конфигурации. Но OpenVPN 3 Linux также предоставляет функцию списка контроля доступа через openvpn3 config-acl для предоставления доступа определенным или всем пользователям в системе. Важно: загружает профиль конфигурации и сохраняет его только в памяти. Это означает, что при перезагрузке системы профиль конфигурации не сохраняется. Если в приведенную выше командную строку добавлен аргумент –persistent, профиль конфигурации будет сохранен на диск в каталоге, доступном только пользователю OpenVPN.При каждом запуске Configuration Manager файлы конфигурации, импортированные с параметром –persistent, также будут загружаться автоматически.

  3. Чтобы начать новый сеанс VPN из импортированного профиля конфигурации, выполните следующую команду: openvpn3 session-start --config $ {CONFIGURATION_PROFILE_NAME} . Примечание: Когда профиль конфигурации доступен через openvpn3 configs-list, его можно легко запустить через openvpn3 session-start, используя имя профиля конфигурации (обычно имя файла, используемое во время импорта)

Дополнительные команды

  1. Чтобы вывести список всех доступных профилей конфигурации, выполните следующую команду: openvpn3 configs-list . Важно: файл конфигурации обычно содержит общие параметры для подключения к определенному серверу, независимо от самого устройства. OpenVPN 3 Linux также поддерживает установку дополнительных настроек для конкретного хоста в профиле конфигурации. Это осуществляется через интерфейс `openvpn3 config-manage`. Любые настройки здесь также будут сохранены при загрузке, если профиль конфигурации был импортирован с аргументом --persistent .
  2. Обратите внимание, что можно использовать путь D-Bus к профилю конфигурации: openvpn3 session-start --config-path / net / openvpn / v3 / configuration /... . Примечание: в любом из этих случаев необходим доступ к профилю конфигурации на диске. Пока профили конфигурации доступны через openvpn3 configs-list , все необходимое для запуска сеанса VPN должно присутствовать.

Управление запущенным сеансом

  1. После запуска сеанса VPN его следует увидеть в списке сеансов: openvpn3 sessions-list
  2. Используя openvpn3 session-manage, можно сделать несколько вещей, но чаще всего это –disconnect или –перезапустить наиболее часто используемые альтернативы. openvpn3 session-manage --config $ {CONFIGURATION_PROFILE_NAME} --restart . Это отключает и снова подключается к серверу, повторно устанавливая соединение. $ {CONFIGURATION_PROFILE_NAME} — это имя конфигурации, отображаемое в списке сеансов openvpn3
  3. Также можно использовать путь D-Bus к сеансу: openvpn3 session-manage --session-path / net / openvpn / v3 / sessions / ..... - отключить . Эта команда выше отключит запущенный сеанс.Как только эта операция будет завершена, она будет удалена из обзора списка сеансов openvpn3. Важно: вы сможете начать новый сеанс с этим или другим профилем OpenVPN только после того, как отключитесь от текущего сеанса с помощью команды на этом шаге.
  4. Также возможно получить статистику туннелей в реальном времени из запущенных сеансов. : openvpn3 session-stats --config $ {CONFIGURATION_PROFILE_NAME} или openvpn3 session-stats --session-path / net / openvpn / v3 / sessions /...
  5. А чтобы получать события журнала в реальном времени по мере их возникновения, выполните следующую команду: openvpn3 log --config $ {CONFIGURATION_PROFILE_NAME}. Это может быть довольно тихим, поскольку он не предоставляет никаких событий журнала из прошлого. Выполните openvpn3 session-manage –restart с другого терминала, и события журнала будут происходить. Вы можете повысить уровень журнала с помощью –log-level 6. Допустимые уровни журнала — от 0 до 6, где 6 — самый подробный. Примечание. сеансов VPN также принадлежат пользователю, который их запустил.Но диспетчер сеансов также предоставляет свою собственную функцию списка управления доступом через openvpn3 session-acl

Изменение профиля OpenVPN для сеанса VPN с автозагрузкой

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

  1. Запустите команду: sudo openvpn3 sessions-list . Он покажет информацию о вашем активном сеансе.Проверьте значение параметра Path
  2. Запустите команду: sudo openvpn3 session-manage --session-path YOUR_PATH --disconnect , где YOUR_PATH — значение параметра Path из шага 1
  3. Запустите команду: список сеансов sudo openvpn3 . Вы не должны видеть никаких активных сеансов.
  4. Выполните команду: sudo openvpn3 configs-list . Он покажет информацию о ваших активных конфигурациях. Проверьте имя, присвоенное вашей активной конфигурации.В данном случае это OpenVPN Cloud
  5. Выполните команду: sudo openvpn3 config-remove --config "YOUR_CONFIG_NAME" , где YOUR_CONFIG_NAME — имя файла конфигурации из шага 4. Вам будет предложено подтвердить удаление конфигурации. Введите YES (в верхнем регистре) для подтверждения
  6. Выполните команду: sudo openvpn3 configs-list . Вы не должны видеть никаких активных конфигураций.
  7. Выполните команду: sudo nano / etc / openvpn3 / autoload / connector.conf . Это профиль, на который будет дан ответ. Обратите внимание, что он использует регион eu-central
  8. Нажмите ctrl + End , затем удерживайте ctrl + shift + ↑ , пока не будет выделен весь файл, и, наконец, нажмите ctrl + K
  9. Откройте профиль OpenVPN вы хотите использовать вместо существующего. Нажмите ctrl + A , а затем ctrl + C . Обратите внимание, что он использует область ca-east
  10. Вернитесь в Терминал, нажмите правую кнопку мыши и выберите Вставить. Обратите внимание на разницу между старым и новым профилем
  11. После замены профиля нажмите ctrl + X и подтвердите изменения, набрав y и нажав Enter
  12. Вы можете запустить cat / etc / openvpn3 / autoload / connector.conf для проверки сохранения изменений
  13. Выполните команду: sudo openvpn3 config-import --config /etc/openvpn3/autoload/connector.conf --name "OpenVPN Cloud"
  14. Запустить команда: sudo openvpn3 session-start --config "OpenVPN Cloud"
  15. Выполните команду: sudo openvpn3 sessions-list .Он покажет, что новый сеанс активен и подключен к региону ca-east , региону нового профиля
  16. Перезагрузите компьютер и проверьте, действительно ли профиль автозапуска был изменен. Просто запустите команду sudo openvpn3 sessions-list еще раз. Действительно, теперь для нового профиля настроена автозагрузка!

Настройка клиентов Linux для подключения к серверу OpenVPN

Если вы настроили сервер OpenVPN для обеспечения безопасного доступа удаленных сотрудников, вы выиграли половину битвы.Следующим шагом будет подготовка систем ваших пользователей (или ваших) к подключению обратно к базовому кораблю. Не волнуйтесь, Linux легко настроить для подключения к серверу OpenVPN, это займет всего несколько шагов.

Хотя это не так просто, как навести и щелкнуть графический интерфейс, клиент OpenVPN не так уж и сложен в настройке и запуске. Это будет основной темой данной статьи; но для удобства мы добавим упоминание о нескольких хороших инструментах с графическим интерфейсом, которые также могут справиться с этой задачей. Для получения информации о том, как настроить сервер OpenVPN, ознакомьтесь с предыдущей статьей «Установка и настройка сервера OpenVPN в Linux.”

Установка

На клиенте необходимо установить OpenVPN. Устанавливаемый пакет, как и ожидалось, — openvpn. Чтобы установить на Ubuntu, выполните следующие простые шаги:

  1. Откройте окно терминала.
  2. Запустите sudo apt-get install openvpn .
  3. Введите пароль sudo и нажмите Enter.
  4. Примите все необходимые зависимости и дождитесь завершения установки.

Вы не поверите, но на этом установка OpenVPN закончилась.

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

Как обсуждалось в предыдущей статье, сертификаты будут созданы (на сервере) специально для клиентской машины. В каталог клиента / etc / openvpn необходимо безопасно скопировать следующие файлы:

  • /etc/openvpn/ca.crt
  • /etc/openvpn/ta.key
  • /etc/openvpn/easy-rsa/keys/hostname.crt (где hostname — это имя хоста клиента).
  • /etc/openvpn/easy-rsa/keys/hostname.key (где hostname — имя хоста клиента).

Скопируйте эти файлы с помощью такого инструмента, как scp , с сервера на клиент. Если у сервера нет прямого доступа к клиенту, просто поместите их на флешку и скопируйте оттуда.

Первым шагом в настройке клиента является копирование образца файла конфигурации клиента в соответствующий каталог с помощью команды sudo cp / usr / share / doc / openvpn / examples / sample-config-files / client.конф / и т.д. / openvpn . Теперь, когда файл готов, пора внести несколько изменений. Откройте /etc/openvpn/client.conf с помощью текстового редактора (например, Nano или vi) и взгляните на следующий раздел:

 
разработчик тап
удаленный vpn.example.com 1194
сертификат hostname.crt
ключ hostname.key
tls-auth ta.key 1
  

Внесите изменения где:

  • vpn.example.com — это адрес сервера OpenVPN.
  • 1194 — это порт, настроенный на сервере OpenVPN.
  • hostname. * — это фактическое имя сертификата и имен ключевых файлов.

Хотите верьте, хотите нет, но это все. Единственный оставшийся шаг — перезапустить OpenVPN с помощью команды sudo /etc/init.d/openvpn restart . После перезапуска этой службы удаленная локальная сеть должна быть доступна. Проверьте, чтобы убедиться в этом, выполнив эхо-запрос известного адреса в локальной сети за VPN.

Инструменты графического интерфейса для подключения к OpenVPN

И KDE, и GNOME предлагают плагины для своих апплетов сетевого менеджера, которые позволяют VPN-соединение с сервером OpenVPN.Необходимые плагины:

  • KDE: сетевой менеджер-openvpn-kde
  • GNOME: сетевой менеджер-openvpn-gnome

Скорее всего, эти плагины не будут установлены в дистрибутив по умолчанию. Быстрый поиск с помощью утилиты «Добавить / удалить программное обеспечение» позволит установить любой плагин. После установки использовать апплеты сетевого менеджера довольно просто, просто выполните следующие действия (я продемонстрирую использование апплета сетевого менеджера KDE):

  1. Откройте апплет диспетчера сети, щелкнув значок сети в области уведомлений (также известный как системный лоток.)
  2. Нажмите кнопку «Управление подключениями».
  3. Выберите вкладку VPN.
  4. Нажмите кнопку «Добавить», чтобы открыть раскрывающийся список типа VPN.
  5. Выберите OpenVPN из списка.
  6. Заполните необходимую информацию на вкладке OpenVPN (имя подключения, шлюз, тип подключения, расположение файлов сертификата). См. Рисунок 1 для иллюстрации этой вкладки.
  7. Если необходим статический IP-адрес, установите его, выбрав «Вручную» в раскрывающемся списке «Метод» (на вкладке «IP-адрес»).
  8. Нажмите ОК, чтобы сохранить настройки и закрыть окно «Параметры подключения».

Если этот клиент должен быть всегда подключен, можно установить флажок «Подключаться автоматически».

Теперь, чтобы подключиться к серверу OpenVPN, используя апплет сетевого менеджера KDE, сделайте следующее:

  1. Щелкните апплет диспетчера сети.
  2. Нажмите кнопку «Виртуальная частная сеть» во всплывающем меню.
  3. Выберите только что созданное соединение OpenVPN.
  4. Разрешить соединению согласовывать аутентификацию.

После согласования аутентификации VPN-соединение будет указано как Connected в апплете управления сетью. Теперь сеть VPN должна быть доступна.

Клиент Gadmin OpenVPN

Если используется альтернативный рабочий стол или инструмент сетевого менеджера KDE или GNOME не соответствует требованиям, есть еще один инструмент, который отлично справляется с подключением к серверу OpenVPN. Этот инструмент — Gadmin OpenVPN Client.Этот инструмент можно легко установить из Synaptic, Ubuntu Software Center, PackageKit и других. После установки остается лишь запустить инструмент (если его нет в структуре меню на рабочем столе, Gadmin OpenVPN Client можно запустить с помощью команды sudo gadmin-openvpn-client .)

Когда инструмент откроется, первое, что нужно сделать, это ввести информацию о соединении (см. Рисунок 2).

Не нажимайте сначала кнопку «Добавить»!

Обязательно прокрутите вниз и введите всю необходимую информацию, в том числе:

  • Имя соединения: удобочитаемое имя соединения.
  • Адрес сервера: Адрес сервера OpenVPN.
  • Порт сервера: порт, настроенный на сервере.
  • CA cert / Cert / Key / DH Key / TA key: расположение сертификатов, созданных на сервере и затем размещенных на клиенте. Эта конфигурация находится в нижней части экрана конфигурации.

После того, как все это настроено, нажмите кнопку «Добавить», и соединение будет добавлено. Чтобы установить соединение, выберите используемое VPN-соединение, а затем нажмите кнопку «Активировать», что запустит процесс согласования сертификата.После завершения процесса согласования сеть VPN должна быть доступна.

Как и ожидалось, существует множество способов подключения к серверу OpenVPN. И хотя это далеко не исчерпывающий ресурс (в вашем инструменте добавления / удаления программного обеспечения можно найти больше инструментов с графическим интерфейсом), с помощью приведенного выше руководства соединение может быть выполнено как из командной строки, так и из графического интерфейса. Обратите внимание: если у вас есть пользователи Windows и Mac, у OpenVPN также есть клиенты для них.

Командная строка

— Как автоматически запустить openvpn (клиент) в Ubuntu CLI?

Я немного застрял на этом и в итоге написал все инструкции по настройке с помощью systemd вручную.

Это сработало для меня с использованием Ubuntu 16.10 и openvpn 2.3.11

Настройка vpn для запуска из bash

В этих примерах используется expressvpn, но большинство из них будет работать так же

Загрузите файл конфигурации ovpn вашего провайдера vpn, например my_express_vpn_amsterdam_2 . овпн

переместите это в / etc / openvpn / и переименуйте его так, чтобы он закончился в .conf

  sudo mv ~ / Downloads / my_express_vpn_amsterdam_2.ovpn / etc / openvpn / a Amsterdam-2.конф
  

Ваш провайдер VPN предоставит вам имя пользователя и пароль для подключения через openvpn. Сохраните имя пользователя, а затем пароль, каждое в отдельной строке

  судо vim /etc/openvpn/express-vpn-crednetials.txt
# добавить эти строки
ВАШЕ_VPN_USERNAME
ВАШ_VPN_PASSWORD
# сохраняем файл
  

теперь отредактируйте /etc/openvpn/amsterdam-2.conf
найдите строку с надписью auth-user-pass и замените ее на путь к вашему файлу учетных данных

  auth-user-pass / etc / openvpn / express-vpn-crednetials.текст
  

Проверьте свою конфигурацию! Запустите openvpn так

  sudo openvpn --config /etc/openvpn/amsterdam-2.conf
  

openvpn должен подключаться без запроса имени пользователя или пароля

Удалить существующую (сломанную) конфигурацию службы для openvpn

  sudo rm /etc/systemd/system/multi-user.target.wants/openvpn.service
  

Настройте openvpn для работы в качестве службы systemd

Конфигурация, поставляемая с openvpn, была сломана, поэтому я удалил ее и создал новую на основе этого ответа

Создать сервис systemd для openvpn

  судо vim / usr / lib / systemd / system / openvpn @ service
  

добавьте этот конфиг:

  [Единица]
Описание = OpenVPN Надежное и очень гибкое приложение для туннелирования на% I
После = syslog.target network.target

[Служба]
PrivateTmp = true
Тип = разветвление
PIDFile = / var / run / openvpn /% i.pid
ExecStart = / usr / sbin / openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd / etc / openvpn / --config% i.conf

[Установить]
WantedBy = multi-user.target
  

% i используется как подстановочный знак, поэтому эту службу можно использовать для нескольких конфигураций VPN. Настройте его для файла a Amsterdam-2.conf , который мы создали ранее

  sudo systemctl start openvpn @ Амстердам-2.служба
  

, теперь служба systemd должна работать на амстердамском vpn. проверьте его статус так

  sudo systemctl status [email protected]
  

, вы должны увидеть несколько строк вывода, оканчивающихся на Initialization Sequence Completed , и ваш vpn должен быть запущен.

Надеюсь, это поможет! связанное чтение:

vpn — Какова цель каталогов OpenVPN / etc / openvpn / {client, server}?

vpn — Для чего нужны каталоги OpenVPN / etc / openvpn / {client, server}? — Спросите Ubuntu

Сеть обмена стеками

Сеть Stack Exchange состоит из 176 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.

Посетить Stack Exchange

  1. 0

  2. +0

  3. Авторизоваться
    Подписаться

Ask Ubuntu — это сайт вопросов и ответов для пользователей и разработчиков Ubuntu.Регистрация займет всего минуту.

Зарегистрируйтесь, чтобы присоединиться к этому сообществу

Кто угодно может задать вопрос

Кто угодно может ответить

Лучшие ответы голосуются и поднимаются наверх

Спросил

Просмотрено
7к раз

Пакет Ubuntu / Debian OpenVPN содержит 2 загадочных каталога:

  dpkg -L openvpn
...
/ и т. д. / openvpn / клиент
/ и т. д. / openvpn / сервер
...
  

Мне интересно, каково назначение этих каталогов? Все руководства советуют размещать файлы непосредственно в / etc / openvpn / , а сценарии init / systemd также выбирают файлы конфигурации оттуда.

Chroot? Но тогда почему 2?

Создан 21 июн.

ezaquariiezaquarii

23322 серебряных знака66 бронзовых знаков

В v2.4 они представили новые сервисные профили systemd, адаптированные для клиентов, соответственно. серверные приложения.

Начиная с OpenVPN v2.4, апстрим поставляет файлы модулей systemd для предоставления
детальный контроль каждой конфигурации OpenVPN, а также попытки
чтобы ограничить возможности процесса OpenVPN в системе.

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

Обычно профиль клиента не может связываться ни с одним портом ниже 1024 порта.
и конфигурация клиента всегда начинается с —nobind.

источник

Он остается обратно совместимым, то есть вы все еще можете хранить свой файл .conf в / etc / openvpn .

  • Если ваша конфигурация находится в /etc/openvpn/MyVpn.conf ,
    используйте systemctl start openvpn @ MyVpn для запуска службы

  • Если ваша конфигурация находится в / etc / openvpn / client / MyVpn.conf ,
    используйте systemctl start openvpn-client @ MyVpn для запуска службы

  • Если ваша конфигурация находится в /etc/openvpn/server/MyVpn.conf ,
    используйте systemctl start openvpn-server @ MyVpn для запуска службы

Создан 23 окт.

3dGrabber3dGrabber

17611 серебряный знак55 бронзовых знаков

2

Я не могу опубликовать комментарий выше в ответ на ответ 3dGrabber, так как моя репутация в этом шее юго-восточного леса слишком низка.Я хотел указать на ошибку в указанном ответе для тех, кто пришел через поиск, чтобы они не перестали чесать в затылках, когда это несколько загадочно терпит неудачу.

systemctl start [email protected] должно быть:

systemctl start openvpn-client @ MyVpn

и

systemctl start [email protected] должно быть:

systemctl start openvpn-server @ MyVpn

Модель .суффикс service , вероятно, был ошибочно принят из файла, созданного при systemctl enable ...

Создан 20 фев.

szrszr

4133 бронзовых знака

Спросите Ubuntu лучше всего работает с включенным JavaScript

Ваша конфиденциальность

Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в ​​отношении файлов cookie.

Принимать все файлы cookie

Настроить параметры

Как настроить клиент OpenVPN для Linux

Винсент Данен дополняет свой совет по настройке сервера OpenVPN следующими шагами по настройке клиента Linux на OpenVPN.

В предыдущем сообщении на прошлой неделе мы рассмотрели настройку сервера OpenVPN. Теперь я расскажу вам о настройке клиента Linux OpenVPN. (Я также рассмотрел настройку клиента OS X на OpenVPN в блоге Macs in Business). Клиент Linux будет основан на CentOS 5 с использованием OpenVPN 2.0.9.

Для каждого клиента вам необходимо скопировать сертификат и ключ клиента, а также сертификат CA с сервера.Это должно быть сделано безопасным способом, чтобы вы могли гарантировать, что файлы не будут изменены каким-либо образом, например, с использованием SSH для передачи или USB-накопителя, находящегося в вашем распоряжении. Когда они будут на клиенте, скопируйте их в каталог / etc / openvpn /:

 # cd / и т. Д. / Openvpn 
 # cp ~ / client. {Ключ, crt}. 
 # cp ~ / ca.crt. 
 # cp /usr/share/doc/openvpn-2.0.9/sample-config-files/client.conf. 
 # vim client.conf 

В client.conf вам нужно раскомментировать директивы «user» и «group», чтобы openvpn запускался от имени непривилегированного пользователя «none», а не root.Кроме того, если ваши файлы ключей и сертификатов не имеют имен «client.key» и «client.crt», вам также необходимо изменить директивы crt и key в файле.

Далее следует файл конфигурации клиента без комментариев, который служит примером:

 клиент 
 dev tun 
 протокол udp 
 удаленный linsec.ath.cx 1194 
 resolv-retry infinite 
 nobind 
 пользователь никто 
 группа никто 
 постоянный ключ 
 персист-тун 
 ок. Ок.крт 
 сертификат client1.crt 
 ключ client1.key 
 comp-lzo 
 тянуть dhcp-опции 

Чтобы запустить тест при запуске, выполните:

 # openvpn client.conf 
 Вт, 14 сентября 17:18:14 2010 OpenVPN 2.0.9 x86_64-redhat-linux-gnu [SSL] [LZO] [EPOLL] построено 8 марта 2007 г. 
 ... 
 Вт, 14 сентября, 17:18:15 2010 [сервер] Одноранговое соединение, инициированное с помощью 1.2.3.4:1194 
 Вт, 14 сентября, 17:18:16 2010 SENT CONTROL [сервер]: 'PUSH_REQUEST' (status = 1) 
 Вт, 14 сентября, 17:18:16 2010 PUSH: Получено управляющее сообщение: 'PUSH_REPLY, route 192.168.10.0 255.255.254.0, маршрут 10.8.0.0, ping 10, ping-restart 120, ifconfig 10.8.0.6 10.8.0.5 '
 ... 
 Вт, 14 сентября 17:18:16 2010 / sbin / ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5 
 Вт, 14 сентября 17:18:16 2010 / sbin / ip route добавить 192.168.10.0/23 через 10.8.0.5 
 Вт, 14 сентября 17:18:16 2010 / sbin / ip route добавить 10.8.0.0/32 через 10.8.0.5 
 Вт, 14 сентября, 17:18:16 2010 GID не установлен никому 
 Вт, 14 сентября, 17:18:16 2010 UID не задан как none 
 Вт, 14 сентября 17:18:16 2010 Последовательность инициализации завершена 

Выходных данных намного больше, но вышеперечисленное включает важные биты.Здесь мы видим, что установлено соединение с удаленным сервером с IP-адресом 1.2.3.4. Мы также видим, что были добавлены маршруты для удаленной сети 192.168.10.0/23 и сети 10.8.0.0/32, специфичной для VPN. Теперь вы можете убедиться, что ссылка активна, используя:

 # ifconfig tun0 
 tun0 Link encap: UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
 inet адрес: 10.8.0.6 P-t-P: 10.8.0.5 Маска: 255.255.255.255 
 UP POINTOPOINT RUNNING NOARP MULTICAST MTU: 1500 Метрическая система: 1 
 пакетов RX: 0 ошибок: 0 отброшено: 0 переполнений: 0 кадров: 0 
 пакетов TX: 0 ошибок: 0 отброшено: 0 переполнений: 0 несущая: 0 
 коллизий: 0 txqueuelen: 100 
 байтов приема: 0 (0.0 б) байты передачи: 0 (0,0 б) 

И, наконец, убедитесь, что он работает:

 # пинг 10.8.0.1 -c 2 
 PING 10.8.0.1 (10.8.0.1) 56 (84) байтов данных. 
 64 байта из 10.8.0.1: icmp_seq = 1 ttl = 64 time = 21,1 мс 
 64 байта из 10.8.0.1: icmp_seq = 2 ttl = 64 time = 14,8 мс 

Соединение с удаленным сервером OpenVPN успешно установлено. И если вы следовали предыдущему совету по настройке сервера OpenVPN, на этом этапе вы также должны иметь возможность выполнить эхо-запрос и установить соединение с любой другой доступной системой в локальной сети сервера.

Чтобы получить доступ к машинам в удаленной сети по их FQDN (Полное доменное имя), вам необходимо изменить /etc/resolv.conf, чтобы добавить сервер имен из удаленной сети в начало списка. Это может и, вероятно, должно быть написано в сценарии, чтобы DNS-сервер использовался всякий раз, когда устанавливается VPN-соединение. Это позволит вам подключаться к server.foo.com вместо того, чтобы всегда использовать IP-адреса, например 192.168.10.23. На стороне сервера убедитесь, что запросы из этого диапазона IP-адресов (10.8.0.0 / 32) не блокируются списками ACL DNS-сервера — это важно помнить, поскольку это укусило меня и стоило мне дня разочарования.

На этом этапе клиент Linux настроен.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *