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

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

Данный мануал научит вас настраивать OpenVPN на сервере Debian 8.

Требования

Для работы вам нужен свежий сервер Debian 8.1, полностью настроенный по этому мануалу.

1: Установка OpenVPN

Обновите индекс пакетов:

apt-get update

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

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

Затем откройте server.conf в текстовом редакторе:

nano /etc/openvpn/server.conf

В файл нужно внести пару изменений.

  • Защитить сервер более высоким уровнем шифрования
  • Перенаправить веб-трафик в пункт назначения
  • Предотвратить утечку DNS-запросов за пределы VPN-соединения
  • Установить права доступа.

Для начала увеличьте длину 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

И измените ее значение на dh2048.pem:

dh  dh2048.pem

Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер OpenVPN.

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

Также нужно позволить серверу использовать 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

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

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

3: Маршрутизация пакетов

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

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

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

nano /etc/sysctl.conf

Найдите строку net.ipv4.ip_forward.

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

Раскомментируйте ее:

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

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

4: Настройка брандмауэра ufw

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

Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian

Установите ufw:

apt-get install ufw

Включите поддержку SSH:

ufw allow ssh

В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.

ufw allow 1194/udp

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

nano /etc/default/ufw

Найдите DEFAULT_FORWARD_POLICY=»DROP». Значение в кавычках замените на ACCEPT.

DEFAULT_FORWARD_POLICY="ACCEPT"

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

Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.

nano /etc/ufw/before.rules

Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:

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

# NAT table rules


*nat


:POSTROUTING ACCEPT [0:0]


# Allow traffic from OpenVPN client to eth0


-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 enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Выберите y:

Firewall is active and enabled on system startup

Теперь проверьте правила и состояние брандмауэра:

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 использует сертификаты.

В этом разделе мы создадим ЦС в два этапа: первый – установка переменных, второй – генерирование ЦС.

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

Скопируйте сценарии Easy-RSA:

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

Создайте каталог для ключей:

mkdir /etc/openvpn/easy-rsa/keys

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

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="8host@example.com"
export KEY_OU="MYOrganizationalUnit"

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

# X509 Subject Field
export KEY_NAME="EasyRSA"

И измените ее значение:

# X509 Subject Field
export KEY_NAME="server"

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

Теперь нужно сгенерировать ключ Диффи-Хеллмана; это может занять несколько минут. Флаг -out указывает, куда сохранять новые параметры.

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

Перейдите в каталог:

cd /etc/openvpn/easy-rsa

Инициализируйте PKI (инфраструктуру открытого ключа). Обратите внимание на точку (.) и пробел перед ./varscommand. Это определяет текущий рабочий каталог.

. ./vars

Команда вернет такой результат. Поскольку в каталоге keys пока ничего нет, это нормальный вывод.

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

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

./clean-all

Эта последняя команда создает центр сертификации (CA), вызывая интерактивную команду OpenSSL. На выходе будет предложено подтвердить переменные, которые ранее вы определили в файле Easy-RSA (название страны, организация и т. д.).

./build-ca

Чтобы принять значения по умолчанию, просто нажмите Enter.

ЦС готов.

6: Генерирование ключей и сертификатов сервера

Оставаясь в каталоге /etc/openvpn/easy-rsa, теперь введите команду для создания ключа сервера. Значение server – это переменная export KEY_NAME, которую вы установили в файле Vars Easy-RSA.

./build-key-server server

Команда сгенерирует почти такой же вывод, как при запуске ./build-ca, и вы сможете снова нажать 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]

Последняя строка выведет:

Write out database with 1 new entries
Data Base Updated

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

OpenVPN будет искать ЦС, сертификат и ключ сервера в /etc/openvpn. Скопируйте их в правильное расположение.

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

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

ls /etc/openvpn

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

Теперь сервер OpenVPN готов к запуску. Запустите его и проверьте состояние:

service openvpn start
service openvpn status

Последняя команда ответит:

* 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, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN.

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

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

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

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

Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.

./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 и использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение .ovpn.

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

Повторите этот раздел для всех своих клиентов, меняя имя клиента.

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

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

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

Укажите вместо my-server-1 IP-адрес VPN в строке remote.

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

Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.

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

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

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

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

Например, в данном случае файлы должны располагаться в 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). Это передаст файлы клиента по зашифрованному соединению.

Ниже приведен пример команды SCP. Она помещает файл 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 для клиентов

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

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

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

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

Добавить сертификаты можно с помощью кода. Сначала добавьте ЦС:

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

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

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

На разных платформах есть более удобные приложения для подключения к серверу OpenVPN. Инструкции для установки клиентов на разных платформах вы найдете в разделе 5 мануала Настройка сервера OpenVPN в Ubuntu 14.04.

Заключение

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

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

Tags: , ,