Вступление
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
В этом файле нам нужно будет сделать четыре изменения (каждое будет объяснено подробно):
-
Безопасный сервер с более высоким уровнем шифрования
-
Переадресация интернет-трафика на место назначения
-
Запрет утечки DNS-запросов за пределы VPN-соединения
-
Настройка разрешений
Во-первых, мы удвоим длину ключа 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-адрес должен измениться.