Debian настройка openvpn server

Обновлено: 04.07.2024

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

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

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

А вот в случае использования OpenVZ, необходимо активировать поддержку TUN/TAP в настройках контейнера. Чтобы проверить, что система поддерживает TUN-интерфейс, необходимо выполнить команду:

Установим OpenVPN на сервере:

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

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

Переходим в директорию:

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

Меняем следующие строки на свои значения:

После правки vars необходимо инициировать переменные:

Очищаем каталог keys/server от старых сертификатов и ключей:

Создаем корневой сертификат:

Далее генерируем сертификаты сервера и клиента:

Для каждого клиента нужно сгенерировать отдельные ключи.

Cоздаем ключ для tls-аутификации:

Все сгенерированные сертификаты и ключи находятся в директории:

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

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

На этом этапе установка OpenVPN закончена. Теперь выполним настройку сервера OpenVPN.

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

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

В зависимости от наших потребностей, изменяем настройки сервера OpenVPN:

Пример настройки OpenVPN:

Создадим директорию для клиентских настроек:

После завершения настройки OpenVPN, перезагружаем сервер:

В случае успешного запуска OpenVPN в системе должен появится новый tun0 интерфейс:

Это означает, что OpenVPN сервер запущен. В случае проблем с запуском OpenVPN, используем лог-файл:

Настройки маршрутизации для клиентов OpenVPN

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

Добавим в файл следующие параметры:

Первая строка добавляет маршрут в локальную сеть клиента. Вторая строка задает DNS-сервер, который будет использоваться после подключения.

Включаем NAT на OpenVPN сервере

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

Включаем поддержку IP forwarding, открываем в файл:

В котором необходимо раскомментировать строку:

Загрузим переменные ядра:

Прописываем правила iptables. Нужно разрешить клиентам из подсети 10.8.0.0/24 доступ в интернет, разрешить принимать пакеты из интернета и пропустить трафик клиентов через NAT.

Замените eth0 на имя своего внешнего интерфейса. Следует отметить, правило MASQUERADE создает нагрузку на процессор. Поэтому, предпочтительнее использовать SNAT :

Сохраним и добавим правила в автозагрузку:

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

Если OpenVPN не установлен, для установки клиента в Debian или Ubuntu необходимо выполнить команду:

Копируем на компьютер клиента ключи и сертификаты из списка ниже:

Переносим ключи и сертификаты в директорию OpenVPN:

Копируем и распаковываем пример конфигурационного файла в содержимое директории OpenVPN:

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

Добавим в содержимое файла следующие параметры:

Для Windows необходимо положить файл client.ovpn в папку:

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

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

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

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

В данном руководстве мы будем настраивать VPN на основе OpenVPN под управлением Linux Debian 6. Кроме того в тексте приведены длинные выдержки из логов, так как когда настраиваешь первый раз не известно как должно выглядеть нормальное содержимое лога. Также будем рассчитывать, что вы уже настроили сеть.

Проверка

Вторая команда не дала никакого вывода на моем сервере, но работе VPN это не помешало.

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

Предполагаем, что на сервере все действия производятся из-под рута.

В итоге на сервере использовались следующие версии ПО: Debian 6.0.7, OpenVPN 2.1.3-2, OpenSSL 0.9.8o

Генерация ключей

Создаём директорию под ключи:

В нее копируем утилиты и конфиги для работы с ключами:

cp: cannot stat '/usr/share/doc/openvpn/examples/easy-rsa/2.0/*': No such file or directory

Не стоит пугаться. Достаточно установить его из репозитория:

и скопировать файлы из другой директории:

Делается это для того, чтобы после обновления OpenVPN-сервера сделанные нами изменения не перезаписались.

Переходим в эту директорию:

В файле vars настраиваем параметры ключа:

Нас интересует только следующий блок:

Меняем на что-нибудь вроде:

Очищаем от старых сертификатов и ключей папку keys/server:

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

Генерируем ключ сервера:

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

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

Генерируем сертификат клиента:

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

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

Обратите внимание, что значения полей Common Name для сервера и клиента должны быть различными.

Генерируем ключ Диффи — Хеллмана:

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

Наконец, последний ключ для tls-аутификации:

После этого в директории /etc/openvpn/easy-rsa/keys/ образовалось достаточно некоторое количество файлов часть из которых нужна серверу, а часть - клиенту.

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

Клиенту же понадобятся следующие ключи:

user.crt
user.key
ca.crt
ta.key

Ключ ta.key понадобится для tls-аутентификации, которую мы будем настраивать на втором этапе.

Настройка OpenVPN-сервера

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

Правим конфигурационный файл VPN-сервера в Debian:

Задаем следующие параметры:

За счёт указанных параметров мы выбираем порт, протокол, тип соединения, указываем сертификаты, задаём параметры VPN-сети, указываем файл в котором хранить параметры соединений (чтобы можно было их восстановить после переподключения клиента), задаём параметры поддержания соединения, просим использовать сжатие передаваемых данных, указываем серверу при перезагрузке не подключаться к ресурсам которые могут быть недоступны из-за понижения привилегий, задаём файл статуса (содержит информацию о подключенных клиентах), лог-файл и уровень подробности отладочной информации.
Если нужно больше отладочной информации, то для параметра verb можно установить значение вплоть до 9. В большинстве случаев вам должно хватить значения 5 или максимум 6.

После этого для проверки запустите сервер из командной строки:

Хотя скорее всего после установки openvpn в Debian, демон будет уже запущен и чтобы он нам не мешался, его стоит остановить:

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

Sat Mar 30 19:04:57 2013 OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Feb 21 2012
Sat Mar 30 19:04:57 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Sat Mar 30 19:04:57 2013 Diffie-Hellman initialized with 1024 bit key
Sat Mar 30 19:04:57 2013 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
Sat Mar 30 19:04:58 2013 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
Sat Mar 30 19:04:58 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
Sat Mar 30 19:04:58 2013 ROUTE default_gateway=10.78.88.1
Sat Mar 30 19:04:58 2013 TUN/TAP device tun0 opened
Sat Mar 30 19:04:58 2013 TUN/TAP TX queue length set to 100
Sat Mar 30 19:04:58 2013 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Sat Mar 30 19:04:58 2013 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Sat Mar 30 19:04:58 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Mar 30 19:04:58 2013 Listening for incoming TCP connection on [undef]
Sat Mar 30 19:04:58 2013 TCPv4_SERVER link local (bound): [undef]
Sat Mar 30 19:04:58 2013 TCPv4_SERVER link remote: [undef]
Sat Mar 30 19:04:58 2013 MULTI: multi_init called, r=256 v=256
Sat Mar 30 19:04:58 2013 IFCONFIG POOL: base=10.8.0.4 size=62
Sat Mar 30 19:04:58 2013 IFCONFIG POOL LIST
Sat Mar 30 19:04:58 2013 user,10.8.0.4
Sat Mar 30 19:04:58 2013 MULTI: TCP INIT maxclients=1024 maxevents=1028
Sat Mar 30 19:04:58 2013 Initialization Sequence Completed

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

Я использовал дистрибутив Linux Mint 14 основанный на Ubuntu, который в свою очередь основан на Debian. На клиенте действия выполнялись под непривилегированным пользователем с применением команды sudo.

Напомню, клиенту нужно передать следующие ключи:

Затем на клиентской машине расположить их в директории /etc/openvpn/.

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

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

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

После этого, если все нормально то в консоли ничего не должно появляться и не должно отображаться приглашения командной строки. В логе клиента /var/log/openvpn.log долно появиться примерно следующее:

В логе сервера добавится следующее:

При этом с клиента должен пинговаться адрес 10.8.0.1 (можно открыть еще одну консоль):

Мы настроили OpenVPN-сервер в Debian по минимуму, проверили его работоспособность. Осталось добавить tls-шифрование и завернуть на VPN-сервер весь трафик клиента.

Добавляем tls-шифрование

На сервере пишем в /etc/openvpn/server.conf:

На клиенте в /etc/openvpn/client.conf:

Фактически разница только в первой строке. На сервере в конце строки ставим ноль, на клиенте - единицу.

Снова соединяемся, пингуем 10.8.0.1. Если пинг проходит, значит все хорошо.

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

Как видно, появились строки про ключ ta.key, также изменились строки про cipher.

Заворачиваем весь трафик на VPN-сервер

Тут требуется заменить конфигурационный файл только на сервере. Добавляем строки:

Первая строка меняет шлюз по умолчанию на заданный на VPN-сервере. После отключения будет возвращён шлюз, который был задан на клиенте ранее.

Вторая строка задает DNS-сервер, который будет использоваться после подключения к VPN-серверу.

Также нам необходимо на сервере задать правило для маршрутизации трафика из сети VPN-сервера в локальную сеть или сеть интернет-провайдера. В debian это можно сделать правилом для iptables:

Теперь можно по нормальному запустить openvpn-сервер и клиент:

Единственное неудобство, при запуске демона на клиенте будет постоянно поддерживаться VPN-соединение. О том, как отключить автозагрузку демона можно прочитать в статье про управление автозагрузкой в debian.

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

Дополнительные параметры

client-to-client - позволяет клиентам VPN-сервера связываться друг с другом.
duplicate-cn - параметр нужно добавить если вы для всех клиентов создали одинаковые ключи, но клиенты при этом представляются различными common name.
max-clients 100 - ограничение максимального числа одновременно подключенных клиентов

Для повышения безопасности на linux-системах можно понизить права VPN-сервера:

Как настроить сервер OpenVPN на Debian 9

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

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

OpenVPN - это полнофункциональное решение VPN с открытым исходным кодом Secure Socket Layer (SSL). Он реализует расширение защищенной сети уровня 2 или 3 OSI с использованием протокола SSL / TLS.

Прежде чем продолжить

Для выполнения этого урока вам понадобятся:

    к серверу Debian 9 с настроенным базовым брандмауэром UFW, на котором мы установим службу OpenVPN.
  • Отдельный выделенный компьютер, который будет служить вашим ЦС (центром сертификации). Если вы не хотите использовать выделенный компьютер для своего ЦС, вы можете создать ЦС на своем сервере OpenVPN или локальном компьютере. После завершения создания ЦС рекомендуется переместить каталог ЦС в безопасное место или автономно.

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

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

Создание CA с помощью EasyRSA

Первым шагом является создание инфраструктуры открытого ключа ( PKI ), включающей следующее:

  • Сертификат центра сертификации (CA) и закрытый ключ.
  • Отдельная пара сертификата и закрытого ключа для сервера, выданная нашим центром сертификации.
  • Отдельная пара сертификата и закрытого ключа для каждого клиента, выданная нашим центром сертификации.

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

Мы будем использовать утилиту CLI под названием EasyRSA для создания CA, генерации запросов на сертификаты и подписания сертификатов.

Выполните следующие шаги на вашем компьютере CA :

Начните с загрузки последней версии EasyRSA из репозитория проекта Github с помощью следующей команды wget :

После завершения загрузки распакуйте архив :

Перейдите в каталог EasyRSA и создайте файл конфигурации с именем vars , скопировав vars.example файл:

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

Перед созданием пары ключей CA сначала необходимо инициализировать новую PKI с помощью:

Следующим шагом будет создание центра сертификации:

Если вы не хотите быть предложено ввести пароль каждый раз , когда вы подписываете свои сертификаты, выполните build-ca команду с помощью nopass опции: ./easyrsa build-ca nopass .

Вам будет предложено установить пароль для ключа CA и ввести общее имя для вашего CA.

После завершения, скрипт создаст два файла - CA публичный сертификат ca.crt и закрытый ключ ЦС ca.key .

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

Установка OpenVPN и EasyRSA

Следующим шагом является установка пакета OpenVPN, доступного в репозиториях Debian, и загрузка последней версии EasyRSA на сервер OpenVPN.

Следующие шаги выполняются на сервере OpenVPN .

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

Загрузите последнюю версию EasyRSA:

После завершения загрузки введите следующую команду для извлечения архива:

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

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

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

Создание ключей Diffie-Hellman и HMAC

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

Сначала перейдите в каталог EasyRSA на вашем сервере OpenVPN .

Сгенерируйте ключ Diffie-Hellman:

Скопируйте dh.pem файл в /etc/openvpn каталог:

Создайте подпись HMAC:

После этого скопируйте ta.key файл в /etc/openvpn каталог:

Создание сертификата сервера и закрытого ключа

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

Перейдите в каталог EasyRSA на вашем сервере OpenVPN и сгенерируйте новый закрытый ключ для сервера и файл запроса сертификата:

Мы используем nopass аргумент, потому что хотим запустить сервер OpenVPN без ввода пароля. Также в этом примере мы используем server1 в качестве идентификатора имени сервера (объекта). Если вы выберете другое имя для своего сервера, не забудьте изменить приведенные ниже инструкции, где используется имя сервера.

Команда создаст два файла: закрытый ключ ( server1.key ) и файл запроса сертификата ( server1.req ).

Скопируйте закрытый ключ в /etc/openvpn каталог:

Перенесите файл запроса сертификата на компьютер CA:

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

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

Первый аргумент - это путь к файлу запроса сертификата, а второй - короткое имя (сущность) сервера. В нашем случае имя сервера server1 .

Эта команда просто копирует файл запроса в pki/reqs каталог.

Находясь в каталоге EasyRSA на компьютере CA, выполните следующую команду, чтобы подписать запрос:

Первый аргумент может быть server или, client а второй - короткое имя (сущность) сервера.

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

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

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

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

  • /etc/openvpn/ca.crt
  • /etc/openvpn/dh.pem
  • /etc/openvpn/ta.key
  • /etc/openvpn/server1.crt
  • /etc/openvpn/server1.key

Настройка службы OpenVPN

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

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

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

Откройте файл в своем любимом текстовом редакторе:

Найдите директивы параметров Certificate, Key и DH и измените имена файлов:

По умолчанию используются распознаватели OpenDNS. Вы можете изменить его и использовать CloudFlare, Google или любые другие преобразователи DNS, которые захотите.

Найдите user и group директивы и раскомментировать эти настройки путем удаления « ; » в начале каждой строки:

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

Запуск службы OpenVPN

В этом руководстве мы использовали server1.conf в качестве файла конфигурации. Чтобы запустить службу OpenVPN с этой конфигурацией, нам нужно указать имя файла конфигурации после имени файла модуля systemd:

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

Убедитесь, что служба успешно запущена, набрав:

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

Включите автоматический запуск службы при загрузке с помощью:

Если служба OpenVPN не запускается, проверьте журналы с помощью sudo journalctl -u openvpn@server1

При запуске OpenVPN Server создает устройство tun tun0 . Чтобы проверить это, используйте следующую команду ip :

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

На этом этапе ваш сервер OpenVPN настроен и работает правильно.

Конфигурация брандмауэра и сети сервера

Чтобы правильно пересылать сетевые пакеты, нам нужно включить пересылку IP.

Следующие шаги выполняются на сервере OpenVPN .

Откройте /etc/sysctl.conf файл и добавьте или раскомментируйте строку, которая гласит net.ipv4.ip_forward = 1 :

Как только вы закончите, сохраните и закройте файл.

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

Если вы выполнили предварительные требования, на вашем сервере уже должен быть запущен брандмауэр UFW .

Теперь нам нужно добавить правила брандмауэра, чтобы разрешить маскировку. Это позволит трафику покидать VPN, предоставляя вашим VPN-клиентам доступ в Интернет.

Перед добавлением правил вам необходимо знать общедоступный сетевой интерфейс вашего Debian OpenVPN Server. Вы можете легко найти интерфейс, выполнив следующую команду:

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

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

Откройте файл конфигурации UFW, найдите DEFAULT_FORWARD_POLICY ключ и измените значение с DROP на ACCEPT :

Затем нам нужно установить политику по умолчанию для POSTROUTING цепочки в таблице nat и установить правило маскарада.

Не забудьте заменить eth0 в -A POSTROUTING строке имя публичного сетевого интерфейса, которое вы нашли в предыдущей команде. Вставьте строки после последней строки, начиная с COMMIT .

Когда вы закончите, сохраните и закройте файл.

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

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

Наконец, перезагрузите правила UFW, отключив и снова включив UFW:

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

Создание инфраструктуры конфигурации клиента

В этом руководстве мы создадим отдельный сертификат SSL и сгенерируем отдельный файл конфигурации для каждого VPN-клиента.

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

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

  1. Сгенерируйте закрытый ключ и запрос сертификата на сервере OpenVPN.
  2. Отправьте запрос на машину CA для подписания.
  3. Скопируйте подписанный сертификат SSL на сервер OpenVPN и сгенерируйте файл конфигурации.
  4. Отправьте файл конфигурации на компьютер VPN-клиента.

Начнем с создания набора каталогов для хранения файлов клиентов:

  • base В каталоге будут храниться базовые файлы и конфигурация, которые будут использоваться всеми клиентскими файлами.
  • configs каталог будет хранить сгенерированную конфигурацию клиента.
  • files каталог будет хранить специфичную для клиента пару сертификат / ключ.

Скопируйте ca.crt и ta.key файлы в

Затем скопируйте образец файла конфигурации VPN-клиента в

/openvpn-clients/base каталог client- . Мы будем использовать этот файл в качестве базовой конфигурации:

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

Найдите удаленную директиву и замените заполнитель по умолчанию на общедоступный IP-адрес вашего сервера OpenVPN:

Найдите и комментируйте ca , cert и key директивы. Сертификаты и ключи будут добавлены в файл конфигурации:

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

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

Затем создайте простой сценарий bash, который объединит базовую конфигурацию и файлы с сертификатом и ключом клиента и сохранит сгенерированную конфигурацию в

Откройте текстовый редактор и создайте следующий скрипт:

Сохраните файл и сделайте его исполняемым с помощью chmod :

Создание закрытого ключа сертификата клиента и конфигурации

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

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

Перейдите в каталог EasyRSA на вашем сервере OpenVPN и сгенерируйте новый закрытый ключ и файл запроса сертификата для клиента:

Команда создаст два файла: закрытый ключ ( client1.key ) и файл запроса сертификата ( client1.req ).

Скопируйте закрытый ключ client1.key в

/openvpn-clients/files каталог, который вы создали в предыдущем разделе:

Перенесите файл запроса сертификата на компьютер CA:

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

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

Первый аргумент - это путь к файлу запроса сертификата, а второй - имя клиента.

Из каталога EasyRSA на компьютере CA выполните следующую команду, чтобы подписать запрос:

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

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

Затем перенесите client1.crt файл подписанного сертификата обратно на сервер OpenVPN. Вы можете использовать scp , rsync или любой другой безопасный метод:

Войдите на свой сервер OpenVPN и переместите client1.crt файл в

Последний шаг - сгенерировать конфигурацию клиента с помощью gen_config.sh скрипта. Перейдите в

/openvpn-clients каталог и запустите скрипт, используя имя клиента в качестве аргумента:

Сценарий создаст файл с именем client1.ovpn в

/client-configs/configs каталоге. Вы можете проверить, перечислив каталог:

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

Например, чтобы передать файл конфигурации на локальный компьютер, scp вы должны выполнить следующую команду:

Чтобы добавить дополнительных клиентов, просто повторите те же шаги.

Подключение клиентов

Linux

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

Установите OpenVPN в Ubuntu и Debian

Установите OpenVPN на CentOS и Fedora

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

macOS

Tunnelblick - это бесплатный графический пользовательский интерфейс с открытым исходным кодом для OpenVPN в OS X и macOS.

Windows

Загрузите и установите последнюю версию приложения OpenVPN на странице загрузок OpenVPN .

Скопируйте .ovpn файл в папку конфигурации OpenVPN ( \Users\<Name>\OpenVPN\Config или \Program Files\OpenVPN\config ).

Запустите приложение OpenVPN.

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

Android и iOS

Приложение VPN, разработанное OpenVPN, доступно как для Android, так и для iOS. Установите приложение и импортируйте .ovp файл клиента .


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

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

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

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

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

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

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

Используйте gen-crl параметр для создания списка отзыва сертификатов (CRL):

Загрузите файл CRL на сервер OpenVPN:

Войдите на свой сервер OpenVPN server и переместите файл в /etc/openvpn каталог:

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

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

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

Перезапустите службу OpenVPN, чтобы директива отзыва вступила в силу:

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

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

Заключение

В этом руководстве вы узнали, как установить и настроить сервер OpenVPN на машине Debian 9.

В данной статье подробно описывается, как получить подключение на OpenVPN с использованием Debian Linux. Эти команды запускаются от рута.

Что такое OpenVPN?

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

Почему использовать OpenVPN?

Говоря «безопасные подключения» - подразумеваем OpenVPN. Если вы не хотите, чтобы кто-либо шпионил (занимался снупингом) за вашим интернет трафиком, используйте OpenVPN для маршрутизации всего вашего трафика через сильно зашифрованный, безопасный туннель.

Системные требования

Для работы OpenVPN нужны минимальные требования. Система с 64 MB оперативной памяти и 1 GB места на жёстком диске достаточно для OpenVPN. OpenVPN работает почти на всех основных системах.

Установка и настройка OpenVPN на Debian

Установка OpenVPN on Мастер-сервер

Запустите следующую команду для установки OpenVPN.

По умолчанию скрипты easy-rsa scripts устанавливаются в директорию ‘/usr/share/easy-rsa/‘. Поэтому нам нужно скопировать эти скрипты в нужное расположение, например /root/easy-rsa.

Генерируем CA сертификат и CA ключ

Откройте файл ‘vars‘ и сделайте следующие изменения, но перед внесением изменений я предлагаю сделать резервную копию.

Используя ваш текстовый редактор измените значения по умолчанию для easy-rsa.

Например, добавьте в самый низ:

Здесь я использую 4096 битный ключ. Вы можете по своему использовать 1024, 2048, 4096 или 8192 битный ключ.

Экспортируем величины по умолчанию выполнив.

Очистим все сертификаты, которые были сгенерированы ранее.

Далее запустите следующую команду для генерации сертификата CA и ключа CA.

Сгенерируйте сертификат сервера следующей командой. Вместо «server» можно подставить любое имя сервера.

Сгенерируйте PEM сертификат Diffie Hellman PEM.

Сгенерируйте клиентский сертификат. Вместо «client» можно подставить ваше имя клиента.

Сгенерируйте код HMAC.

Скопируйте сертификаты на машины клиента и сервера следующим образом.

  • Убедитесь, что ca.crt присутствует и на клиентской и на серверной машинах.
  • Ключ ca.key должен быть на машине, сгенерировавшей ключ.
  • Сервер требует server.crt, dh4096.pem, server.key и ta.key.
  • client.crt, client.key и ta.key должны быть на клиенте.

Для установки сертификатов на сервере запустите команды.

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

Теперь вам нужно настроить OpenVPN. Откройте фйл ‘/etc/openvpn/server.conf‘. Пожалуйста, сделайте изменения, как написано ниже.

Запустите следующую команду для настройки OpenVPN запускаться при загрузке.

Запустите службу OpenVPN.

Включение перенаправления и IPTABLES

Создайте файл vpn_firewall.sh

B этот файл скопируйте следующее содержимое, отредактировав его под свои нужды. Обратите внимание на:

  • PRIVATE=10.8.0.0/24 – измените подсеть в соответствии с вашими настройками. Если делали по этой инструкции, то менять ничего не нужно.
  • имя интерфейса - eth0, у вас может быть другое значение, измените его на своё везде, где оно встречается
  • в строке iptables -A INPUT -p tcp --dport 22 -j ACCEPT мы открываем доступ к порту 22, чтобы могли подключиться по SSH, если у вас нестандартный порт, то обязательно отредактируйте его, поскольку может получиться так, что после применения этого файла вы не сможете подключиться к вашему серверу по сети, добавьте нужно количество строк с необходимыми вам портами

Проверить работу файла:

ОБЯЗАТЕЛЬНО проверьте работу файла ДО добавления его в автозагрузку. Отключитесь и подключитесь по SSH чтобы убедиться, что всё действительно работает.

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

Запустите следующую команду для установки OpenVPN на клиентской машине.

Настройки даны исходя из расположения файлов здесь:

  • /etc/openvpn/certs/ca.crt
  • /etc/openvpn/certs/client.crt
  • /etc/openvpn/certs/client.key
  • /etc/openvpn/certs/ta.key

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

Обратите внимание на строку remote 185.117.153.79 – вам обязательно нужно заменить это значение на IP вашего собственного VPN сервера!

Запустите следующую команду для настройки OpenVPN запускаться при загрузке.

Запустите службу OpenVPN на клиенте.

Как просматривать логи OpenVPN

Для наших настроек это делается так:

Ещё это можно делать, например, командой:

Настройка входа в OpenVPN по логину и паролю

Принцип работы с подключением по логину и паролю следующий:

  • OpenVPN не может проверять действительность логина и пароля;
  • вместо проверки OpenVPN сохраняет присланные ей логин и пароль в файл со случайным именем в директорию, которую мы указали в tmp-dir (в нашем случае это /tmp).
  • после этого OpenVPN запускает скрипт, который мы указали в auth-user-pass-verify (в нашем случае это /etc/openvpn/verify.sh), в качестве аргумента этому скрипту передаётся имя только что сохранённого файла с логином и паролем.
  • если от скрипта получен код выхода 0, то OpenVPN авторизует клиента, если 1, то считает, что логин или пароль неверны.
  • после этого OpenVPN удаляет временный файл.

Схема работы, мягко говоря, так себе. Поскольку предусматривает хранение паролей в открытом виде и на сервере и на клиенте…

Внесём изменения в конфигурационный файл сервера:

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

копируем туда следующий код (можете придумать свой механизм аутентификации):

Делаем файл исполнимым:

Файл с паролями /etc/openvpn/user.pass выглядит так:

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

В конфигурационный файл клиента добавляем такую строку:

и создаём соответственно файл pass.txt, где будет находится логин и пароль в таком виде:

Примечание: Если в параметре auth-user-pass убрать путь к файлу, будет запрашиваться логин/пароль.

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