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

Вступление

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

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

Предпосылки

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

  • Одна свежая капля Debian 8.1

  • Пользователь root

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

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

Перед установкой любых пакетов обновите индекс пакетов apt.

apt-get update

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

apt-get install openvpn easy-rsa

Шаг 2 - Настройка OpenVPN

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

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

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

nano /etc/openvpn/server.conf

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

  1. Безопасный сервер с более высоким уровнем шифрования

  2. Переадресация интернет-трафика на место назначения

  3. Запрет утечки DNS-запросов за пределы VPN-соединения

  4. Настройка разрешений

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

/etc/openvpn/server.conf

# 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 + на + dh2048.pem +, чтобы строка теперь читала:

/etc/openvpn/server.conf

dh

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

/etc/openvpn/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-сервер передавал клиентский веб-трафик по назначению. Это должно выглядеть следующим образом:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

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

/etc/openvpn/server.conf

# 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.220.220 "+ и + push" dhcp-option DNS 208.67.220.220 "+. Это должно выглядеть следующим образом:

/etc/openvpn/server.conf

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

В-четвертых, мы определим права доступа в + server.conf +:

/etc/openvpn/server.conf

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

Раскомментируйте + user nobody + и + group nogroup +. Это должно выглядеть следующим образом:

/etc/openvpn/server.conf

user nobody
group nogroup

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

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

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

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

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

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

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

nano /etc/sysctl.conf

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

/etc/openvpn/server.conf

# Uncomment the next line to enable packet forwarding for IPv4

Раскомментируйте + net.ipv4.ip_forward +. Это должно выглядеть следующим образом:

/etc/openvpn/server.conf

# Uncomment the next line to enable packet forwarding for IPv4

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

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

UFW - это интерфейс для IPTables. Нам нужно только сделать несколько правил и изменений в конфигурации. Затем мы включим брандмауэр. В качестве справочного материала по дополнительному использованию UFW см. Https://www.digitalocean.com/community/articles/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud- сервер [Как настроить брандмауэр с UFW на Ubuntu и Debian Cloud Server].

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

apt-get install ufw

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

ufw allow ssh

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

ufw allow 1194/udp

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

nano /etc/default/ufw

Посмотрите на следующую строку:

/ И т.д. / по умолчанию / UFW

DEFAULT_FORWARD_POLICY=""

Это должно быть изменено с + DROP + на + ACCEPT +. Это должно выглядеть следующим образом:

/ И т.д. / по умолчанию / UFW

DEFAULT_FORWARD_POLICY=""

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

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

nano /etc/ufw/before.rules

Затем добавьте область для * OPENVPN RULES *:

/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
#










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

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

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

ufw enable

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

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

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

Firewall is active and enabled on system startup

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

ufw status

Команда 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.

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

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

mkdir /etc/openvpn/easy-rsa/keys

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

nano /etc/openvpn/easy-rsa/vars

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

/ И т.д. / OpenVPN / легко и РКА / вары

export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
export KEY_OU=""

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

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

/ И т.д. / OpenVPN / легко и РКА / вары

# X509 Subject Field
export KEY_NAME=""

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

/ И т.д. / OpenVPN / легко и РКА / вары

# X509 Subject Field
export KEY_NAME=""

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

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

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

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

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

Сначала мы перейдем в каталог + easy-rsa +.

cd /etc/openvpn/easy-rsa

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

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

. ./vars

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

./clean-all

Наконец, мы построим CA, используя команду OpenSSL. Эта команда запросит у вас подтверждение переменных «Отличительное имя», которые были введены ранее. Нажмите + ENTER +, чтобы принять существующие значения.

./build-ca

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

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

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

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

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

./build-key-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]

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

OutputWrite out database with 1 new entries
Data Base Updated

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

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

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

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

ls /etc/openvpn

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

На этом этапе сервер OpenVPN готов к работе. Запустите его и проверьте статус.

service openvpn start
service openvpn status

Команда 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)

Самое главное, что из вышеприведенного вывода вы должны найти + Active: active (выход), так как …​ + вместо + Active: неактивен (мертв), так как …​ +.

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

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

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

Шаг 8 - Генерация сертификатов и ключей для клиентов

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

Ключ и Сертификат

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

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

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

./build-key client1

Еще раз вас попросят изменить или подтвердить переменные Distinguished Name и эти два запроса, которые следует оставить пустыми. Нажмите + 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`. Это соответствует соглашению.

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 * как * school * и т. Д.

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

nano /etc/openvpn/easy-rsa/keys/

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

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

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

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

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

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

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

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

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

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

  • + / И т.д. / OpenVPN / простой RSA / ключи / .crt +

  • + / И т.д. / OpenVPN / простой RSA / ключи / .key +

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

  • + / И т.д. / OpenVPN / простой RSA / ключи / client.ovpn +

  • + / И т.д. / OpenVPN / ca.crt +

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

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

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

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

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

  • ` + `Client1 + .crt

  • ` + `Client1 + .key

  • + + Client.ovpn

  • + + Ca.crt

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

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

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

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

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

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

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

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

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

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

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

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

Теперь у нас есть унифицированный профиль клиента. Используя + scp +, вы можете скопировать файл + client.ovpn + в вашу вторую систему.

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

Различные платформы имеют более удобные приложения для подключения к этому серверу OpenVPN. Инструкции для конкретной платформы см. В шаге 5 в https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04#step-5- --install-the-client-profile [это руководство].

Заключение

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

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

Related