GrabDuck

Установка и первичная настройка OpenVPN на Ubuntu 16.04

:

Введение

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

OpenVPN легко настроить и легко использовать на любых компьютерах и мобильных устройствах — клиенты есть для Windows, Linux, MacOS, iOS и Android. В зависимости от настройки можно даже использовать его для обеспечения безопасности при Web-серфинге с публичных Wi-Fi точек и мобильных соединений. Также его можно использовать для обеспечения анонимности и смены собственного IP-адреса на IP-адрес удаленного сервера. Возможность использования AES-шифрования соединений позволяет обеспечить конфиденциальность передаваемых данных и делает бесполезным перехват трафика. Злоумышленник просто не сможет его расшифровать и использовать в своих целях.

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

Вначале создаем сервер VScale с любой конфигурацией и операционной системой Ubuntu 16.04 Через несколько секунд можно подключиться к нему любым SSH-клиентом.

Сменим пароль суперпользователя root

passwd root

Обновим источники приложений и операционную систему до актуального состояния

apt-get update
apt-get upgrade

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

apt-get install easy-rsa

Переходим в каталог с утилитой и подготавливаем переменные для генерации сертификатов

cd /usr/share/easy-rsa
nano ./vars

Задаем переменную длины ключа:

export KEY_SIZE= 1024

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

Остальные параметры заполняются в соответствие с вашими пожеланиями, например

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="MyCompany LTD."
export KEY_EMAIL="your_email_address"

Включаем использование наших переменных

source ./vars

Очищаем папку с ключами

./clean-all

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

./build-ca 

Генерируем таким же образом сертификат сервера. Отвечаем Y на запрос о подписывании сертификата.

./build-key-server server  

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

./build-key macbook

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

./build-dh

В результате в папке /usr/share/easy-rsa/keys у нас теперь лежат наши сертификаты и ключи.

Устанавливаем OpenVPN

apt-get install openvpn

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

cp -R /usr/share/easy-rsa/keys/ /etc/openvpn/

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

nano /etc/openvpn/server.conf

Вносим в него следующие строки:

port 1194
# порт который будет слушать демон OpenVPN
proto tcp
# используемый протокол
dev tun
# метод работы - создание туннеля
ca /etc/openvpn/keys/ca.crt
# указываем корневой сертификат
cert /etc/openvpn/keys/server.crt
# указываем сертификат сервера
key /etc/openvpn/keys/server.key
# указываем ключ сервера
dh /etc/openvpn/keys/dh1024.pem
# указываем ключ Диффи-Хеллмана
server 10.100.0.0 255.255.255.0
# указываем виртуальную подсеть - из нее сервер будет присваивать адреса клиентам
cipher AES-256-CBC
# обеспечиваем мощное шифрование трафика
ifconfig-pool-persist ipp.txt
# с помощью этого параметра можно раздавать статические IP
push "redirect-gateway def1"
# для пропуска трафика через шлюз сервера
push "dhcp-option DNS 8.8.8.8"
# и добавляем сервер имен империи добра
keepalive 10 120
# параметры соединения
comp-lzo
# включаем механизм сжатия трафика
persist-key
# чтобы ключи не пересылались повторно при разрыве соединения
persist-tun
# обеспечит работу туннеля в режиме persist
status /var/log/openvpn-status.log
# лог статуса
log /var/log/openvpn.log
# общий лог
verb 3
# уровень логирования

Сохраняем конфигурационный файл и проделаем еще несколько простых действий. Вначале следует разрешить форвардинг пакетов, для этого отредактируем /etc/sysctl.conf

nano /etc/sysctl.conf

Находим строку:

#net.ipv4.ip_forward = 1 

и убираем символ “#”.  Затем сохраняем файл. Но для того, чтобы через наш туннель можно было бы ходить в интернет на сервере нужно включить механизм NAT - трансляции сетевых адресов. Для этого воспользуемся iptables. ens3, в нашем примере, это внешний интерфейс сервера.

iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o ens3 -j MASQUERADE

Чтобы созданное нами правило пропуска трафика не удалилось после перезагрузки сервера установим пакет iptables-persistent:

apt-get install iptables-persistent

При установке на вопрос о сохранении текущих правил IPv4 отвечаем утвердительно. Теперь перезагружаем сервер и проверяем, что OpenVPN успешно запущен:

systemctl status openvpn

Приступаем к настройке со стороны клиента. Вне зависимости от используемой операционной системы нам всего лишь требуется четыре файла: корневой сертификат сервера (ca.crt), персональный сертификат клиента и соответствующий ему ключ (macbook.crt и macbook.key), а также конфигурационный файл для клиента. Первые три файла у нас уже есть на сервере в папке /etc/openvpn/keys - их можно легко скачать с сервера с помощью SFTP. А вот конфигурационный файл нам нужно создать вручную. Создаем на компьютере-клиенте отдельную папку и помещаем туда сертификаты. Затем создаем конфиг для клиента с любым именем и расширением ovpn:

client
# указываем что это настройка для клиента
dev tun
# будем поднимать туннель
proto tcp
# указываем протокол
remote XXX.XXX.XXX.XXX 1194
# вместо XXX.XXX.XXX.XXX вписываем IP-адрес и порт сервера
cipher AES-256-CBC
# поскольку на сервере используем шифрование указываем это и тут
resolv-retry infinite
# указываем сколько раз будем повторять запрос для поиска хостнейма
nobind
# не выполнять привязку локального IP-адреса и порта
persist-key
# чтобы ключи не пересылались повторно при разрыве соединения
persist-tun
# обеспечит работу туннеля в режиме persist
ca ca.crt
# указываем имя корневого сертификата
cert macbook.crt
# указываем имя клиентского сертификата
key macbook.key
# указываем имя ключа для сертификата клиента
ns-cert-type server
# опция безопасности для исключения MITM-атак
comp-lzo
# включаем поддержку сжатия трафика
verb 3
# указываем уровень логирования

Сохраняем файл и устанавливаем клиентское приложение. Вариантов множество - для Windows и Linux лучше использовать официальное приложение, которое можно скачать по ссылке https://openvpn.net/index.php/open-source/downloads.html

Пользователи MacOS могут воспользоваться прекрасной бесплатной программой TunnelBlick, которую можно скачать на сайте разработчика— https://tunnelblick.net/downloads.html

После установки клиента для Windows достаточно лишь скопировать конфигурационный файл и сертификаты в папку C:\Program Files\OpenVPN\config и запустить подключение. Пользователи Linux могут использовать Network Manager для создания нового VPN-соединения и указания пути к конфигурационному файлу. В случае MacOS с установленным TunnelBlick - достаточно двойного клика по ovpn-файлу и система сама импортирует новый профиль соединения.

Заключение

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