Поиск по сайту:

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


Введение

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

С учетом сказанного, в этом руководстве вы узнаете, как настроить OpenVPN, VPN-решение с открытым исходным кодом Secure Socket Layer (SSL) на Debian 8.

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

См. эту страницу для получения дополнительной информации.

Предпосылки

В этом руководстве предполагается, что у вас есть следующее:

  • Одна свежая капля Debian 8.1
  • Привилегированный пользователь
  • Необязательно: после завершения этого руководства используйте учетную запись без полномочий root с поддержкой sudo для общего обслуживания; вы можете настроить его, выполнив шаги 2 и 3 этого руководства.

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

Прежде чем устанавливать какие-либо пакеты, обновите файл apt package index.

  1. apt-get update

Теперь мы можем установить сервер OpenVPN вместе с easy-RSA для шифрования.

  1. apt-get install openvpn easy-rsa

Шаг 2 — Настройте OpenVPN

Пример файла конфигурации VPN-сервера необходимо извлечь в /etc/openvpn, чтобы мы могли включить его в нашу настройку. Это можно сделать одной командой:

  1. gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

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

  1. nano /etc/openvpn/server.conf

В этом файле нам нужно будет внести четыре изменения (каждое будет подробно объяснено):

  1. Защищенный сервер с высокоуровневым шифрованием
  2. Перенаправить веб-трафик в пункт назначения
  3. Предотвратите утечку DNS-запросов за пределы VPN-подключения.
  4. Настройка разрешений

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

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

Измените dh1024.pem на dh2048.pem, чтобы теперь строка выглядела так:

dh  dh2048.pem

Во-вторых, мы обязательно перенаправим весь трафик в нужное место. Находясь в server.conf, прокрутите другие блоки комментариев и найдите следующий раздел:

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

Раскомментируйте push redirect-gateway def1 bypass-dhcp, чтобы VPN-сервер перенаправлял веб-трафик клиентов по назначению. Это должно выглядеть так, когда это сделано:

push "redirect-gateway def1 bypass-dhcp"

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

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

Раскомментируйте push dhcp-option DNS 208.67.222.222 и push dhcp-option DNS 208.67.220.220. Это должно выглядеть так, когда это сделано:

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

В-четвертых, мы определим разрешения в server.conf:

# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

Раскомментируйте как user Nobody, так и group nogroup. Это должно выглядеть так, когда это сделано:

user nobody
group nogroup

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

Теперь сохраните изменения и выйдите.

Шаг 3 — Включить пересылку пакетов

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

Включите пересылку пакетов во время выполнения, введя эту команду:

  1. echo 1 > /proc/sys/net/ipv4/ip_forward

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

  1. nano /etc/sysctl.conf

В верхней части файла sysctl вы увидите:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

Раскомментируйте net.ipv4.ip_forward. Это должно выглядеть так, когда это сделано:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Сохраните изменения и выйдите.

Шаг 4 — Установите и настройте ufw

UFW — это интерфейс для IPTables. Нам нужно только внести несколько правил и правок в конфигурацию. Затем мы включим брандмауэр. В качестве справки по дополнительным возможностям использования UFW см. Как настроить брандмауэр с UFW на облачном сервере Ubuntu и Debian.

Сначала установите пакет ufw.

  1. apt-get install ufw

Во-вторых, установите UFW для разрешения SSH:

  1. ufw allow ssh

В этом руководстве будет использоваться OpenVPN через UDP, поэтому UFW также должен разрешать трафик UDP через порт 1194.

  1. ufw allow 1194/udp

Также необходимо настроить политику переадресации UFW. Мы сделаем это в основном файле конфигурации.

  1. nano /etc/default/ufw

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

DEFAULT_FORWARD_POLICY="DROP"

Это должно быть изменено с DROP на ACCEPT. Это должно выглядеть так, когда это сделано:

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохранить и выйти.

Далее мы добавим дополнительные правила UFW для трансляции сетевых адресов и маскировки IP-адресов подключенных клиентов.

  1. nano /etc/ufw/before.rules

Затем добавьте выделенную красным область для ПРАВИЛ OPENVPN:

#
# 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, теперь мы можем включить его. Введите в командную строку:

  1. ufw enable

Включение UFW вернет следующее приглашение:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Ответьте y. Результатом будет этот вывод:

Firewall is active and enabled on system startup

Чтобы проверить основные правила брандмауэра UFW:

  1. ufw status

Команда состояния должна возвращать следующие записи:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

Шаг 5 — Настройте и создайте центр сертификации

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

В этом разделе мы настроим наш собственный центр сертификации (ЦС) в два этапа: (1) настроим переменные и (2) создадим ЦС.

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

Сначала скопируйте сценарии генерации Easy-RSA.

  1. cp -r /usr/share/easy-rsa/ /etc/openvpn

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

  1. mkdir /etc/openvpn/easy-rsa/keys

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

  1. nano /etc/openvpn/easy-rsa/vars

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

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="sammy@example.com"
export KEY_OU="MYOrganizationalUnit"

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

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

# X509 Subject Field
export KEY_NAME="EasyRSA"

Измените значение по умолчанию для KEY_NAME EasyRSA на желаемое имя сервера. В этом руководстве будет использоваться имя сервер.

# X509 Subject Field
export KEY_NAME="server"

Сохранить и выйти.

Далее мы создадим параметры Диффи-Хелмана, используя встроенный инструмент OpenSSL под названием dhparam; Это займет несколько минут.

Флаг -out указывает, где сохранить новые параметры.

  1. openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Теперь наш сертификат сгенерирован, и пришло время сгенерировать ключ.

Сначала мы переключимся в каталог easy-rsa.

  1. cd /etc/openvpn/easy-rsa

Теперь мы можем приступить к настройке самого ЦС. Сначала инициализируйте инфраструктуру открытых ключей (PKI).

Обратите внимание на точку (.) и пробел перед командой ./vars. Это означает текущий рабочий каталог (источник).

  1. . ./vars

Будет напечатано следующее предупреждение. Не волнуйтесь, так как каталог, указанный в предупреждении, пуст. ПРИМЕЧАНИЕ. Если вы запустите ./clean-all, я выполню rm -rf для /etc/openvpn/easy-rsa/keys.

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

  1. ./clean-all

Наконец, мы создадим ЦС с помощью команды OpenSSL. Эта команда предложит вам подтвердить переменные \Distinguished Name, которые были введены ранее. Нажмите ENTER, чтобы принять существующие значения.

  1. ./build-ca

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

Центр сертификации настроен.

Шаг 6 — Генерация сертификата и ключа для сервера

В этом разделе мы настроим и запустим наш сервер OpenVPN.

Во-первых, все еще работая с /etc/openvpn/easy-rsa, создайте свой ключ с именем сервера. Это было указано ранее как KEY_NAME в вашем файле конфигурации. По умолчанию для этого руководства используется server.

  1. ./build-key-server server

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

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

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

Два дополнительных запроса в конце требуют положительного ответа (y):

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

Затем вам будет предложено следующее, что указывает на успех.

Output
Write out database with 1 new entries Data Base Updated

Шаг 7 — Переместите сертификаты и ключи сервера

Теперь мы скопируем сертификат и ключ в /etc/openvpn, так как OpenVPN будет искать в этом каталоге ЦС, сертификат и ключ сервера.

  1. cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

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

  1. ls /etc/openvpn

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

На данный момент сервер OpenVPN готов к работе. Запустите его и проверьте статус.

  1. service openvpn start
  2. service openvpn status

Команда состояния вернет что-то со следующим эффектом:

Output
* openvpn.service - OpenVPN service Loaded: loaded (/lib/systemd/system/openvpn.service; enabled) Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2505 (code=exited, status=0/SUCCESS)

Самое главное, из приведенного выше вывода вы должны найти Активен: активен (вышел) с... вместо Активен: неактивен (мертв) с....

Ваш сервер OpenVPN теперь работает. Если в сообщении о состоянии говорится, что VPN не работает, проверьте файл /var/log/syslog на наличие таких ошибок, как:

Options error: --key fails with 'server.key': No such file or directory

Эта ошибка указывает на то, что server.key не был правильно скопирован в /etc/openvpn. Повторно скопируйте файл и повторите попытку.

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

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

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

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

Примечание. По умолчанию OpenVPN не разрешает одновременные подключения к серверу от клиентов, использующих один и тот же сертификат и ключ. (См. duplicate-cn в /etc/openvpn/server.conf.)

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

Как и в случае с ключом сервера, теперь мы создадим его для нашего примера client1. Вы все еще должны работать с /etc/openvpn/easy-rsa.

  1. ./build-key client1

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

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Как и прежде, эти два подтверждения в конце процесса сборки требуют ответа (y):

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

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

Write out database with 1 new entries.
Data Base Updated

Затем мы скопируем сгенерированный ключ в созданный ранее каталог Easy-RSA keys. Обратите внимание, что мы меняем расширение с .conf на .ovpn. Это соответствует соглашению.

  1. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Вы можете повторить этот раздел еще раз для каждого клиента, заменив client1 соответствующим именем клиента.

Примечание. Имя вашего дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора самого VPN-подключения. Вместо этого вы должны продублировать client.ovpn на то, что вы хотите, чтобы тег имени VPN был в вашей операционной системе. Например: work.ovpn будет идентифицирован как work, school.ovpn как школа и т. д.

Нам нужно изменить каждый клиентский файл, чтобы включить IP-адрес сервера OpenVPN, чтобы он знал, к чему подключаться. Откройте client.ovpn с помощью nano или вашего любимого текстового редактора.

  1. nano /etc/openvpn/easy-rsa/keys/client.ovpn

Сначала отредактируйте строку, начинающуюся с remote. Измените my-server-1 на your_server_ip.

# 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

Затем найдите область, показанную ниже, и раскомментируйте user Nobody и group nogroup, точно так же, как мы делали это в server.conf на шаге 1. Примечание: Это не относится к Windows, поэтому вы можете пропустить это. Это должно выглядеть так, когда это сделано:

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

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

Вспомним из предыдущих шагов, что мы создали клиентские сертификаты и ключи и что они хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.

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

В этом примере нашему устройству client1 требуются его сертификат и ключ, расположенные на сервере в:

  • /etc/openvpn/easy-rsa/keys/client1.crt
  • /etc/openvpn/easy-rsa/keys/client1.key

Файлы ca.crt и client.ovpn одинаковы для всех клиентов. Загрузите и эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге, чем остальные.

  • /etc/openvpn/easy-rsa/keys/client.ovpn
  • /etc/openvpn/ca.crt

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

Вот пример команды SCP с использованием нашего примера client1. Он помещает файл client1.key в каталог Downloads на локальном компьютере.

  1. scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

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

  • WinSCP
  • Как использовать SFTP для безопасной передачи файлов на удаленный сервер
  • Как использовать Filezilla для безопасной передачи файлов и управления ими на вашем VPS

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

  • "\client1.crt
  • "\client1.key
  • client.ovpn
  • ca.crt

Шаг 9 — Создание единого профиля OpenVPN для клиентских устройств

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

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

# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key

Сохраните изменения и выйдите. Мы добавим сертификаты по коду.

Сначала добавьте центр сертификации.

  1. echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

Во-вторых, добавьте сертификат.

  1. echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

В-третьих, и, наконец, добавьте ключ.

  1. echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
  2. cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
  3. echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

Теперь у нас есть единый профиль клиента. Затем с помощью scp вы можете скопировать файл client.ovpn на вторую систему.

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

Различные платформы имеют более удобные приложения для подключения к этому серверу OpenVPN. Инструкции для конкретных платформ см. в шаге 5 этого руководства.

Заключение

Поздравляем! Теперь у вас есть работающий сервер OpenVPN и файл клиента.

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