Установка и настройка сервера OpenVPN.
В данной статье будет подробно описана установка и настройка сервера OpenVPN в Ubuntu.

Для более удобной навигации внутри страницы можете воспользоваться оглавлением.

Причины использовать OpenVPN. Краткий ликбез.

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

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

На деле все не так уж плохо. Все больше сайтов переходит на защищенный протокол HTTPS вместо привычного HTTP, что снижает вероятность утечки информации. Но есть и другие причины использовать OpenVPN, например, доступ к ресурсам, которые заблокировал провайдер. Кроме того, сайт или другой ресурс, к которому вы обращаетесь, не получит ваш IP, физические координаты, название провайдера и т. д. Впрочем, слишком уж полагаться на это не стоит: при наличии желания и возможностей найти можно кого угодно.

Вернуться к оглавлению ->

Установка сервера OpenVPN.

Я не буду описывать процесс выбора сервера, VPS/VDS за несколько долларов в месяц найти проще простого. Логин и пароль вам предоставит хостер. Я исхожу из того, что на удаленном сервере уже остановлена ОС Ubuntu 16.04 и вы можете действовать от имени пользователя с достаточным уровнем прав.

Подключаемся:

ssh логин@ip_вашего_сервера

После ввода пароля вы увидите приветствие удаленной машины, примерно такое:

Установка сервера OpenVPN

Теперь команды, которые мы будем вводить в терминале, выполнятся на сервере. Для начала обновимся и установим OpenVPN, easy-rsa и создадим папку для ключей и сертификатов.

apt-get update
apt-get install openvpn easy-rsa
make-cadir ~/openvpn-certificates
cd ~/openvpn-certificates

Вернуться к оглавлению ->

Генерируем сертификаты и ключи.

Утилита easy-rsa предназначена для создания и управления сертификатами и ключами. Третьей командой мы создаем директорию, где все это будет храниться. Четвертой — перемещаемся туда сами, чтобы каждый раз не вводить полный путь.

Теперь отредактируем конфигурационный файл, хранящий переменные:

nano vars

Нас интересует блок, расположенный в самом низу (он на скриншоте ниже). Вписываем страну, город, адрес электронной почты. Не обязательно использовать точные и правдивые данные. Чуть ниже, в строке export KEY_NAME впишите имя ключа. В нашем случае будет «server».

Чтобы сохранить изменения, нажмите F2 или CTRL + O, затем Y и Enter, чтобы подтвердить.

Генерируем сертификаты и ключи

Теперь можно выполнить отредактированный нами файл:

source vars
или
. vars

Генерируем сертификаты и ключи

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

./clean-all

Запускаем генерацию корневого сертификата:

./build-ca

Генерируем сертификаты и ключи

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

./build-key-server server

Снова подтверждаем правильность введенных ранее данных. В ответ на просьбу установить еще и пароль, а также указать название компании, нажимаем Enter. Подтверждаем согласие создать сертификат нажатием Y.

Еще пара команд для генерации сертификатов:

./build-dh
openvpn --genkey --secret keys/ta.key

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

./build-key home-pc

Заодно создадим сертификаты и ключи для планшета, смартфона, ноутбука:

./build-key tablet
./build-key smartphone
./build-key laptop

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

~/openvpn-certificates
source vars

Все сгенерированные нами ключи и сертификаты лежат в ~/openvpn-certificates/keys:

Генерируем сертификаты и ключи

Вернуться к оглавлению ->

Настройка сервера OpenVPN.

Итак, мы сгенерировали ключи и сертификаты. Переместимся в директорию, в которой они находятся и одной командой создадим их копии в нужном нам месте:

cd ~/openvpn-certificates/keys
sudo cp server.crt server.key ca.crt ca.key dh2048.pem ta.key /etc/openvpn

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

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

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

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

Для начала убедитесь, что названия файлов ключей и сертификатов соответствуют созданным вами. Нас интересуют строки, начинающиеся с:

  • ca
  • cert
  • key
  • dh

Просто убедитесь, что в названия файлов, которые мы недавно скопировали в /etc/openvpn/, совпадают с указанными здесь. Если это не так, измените значения в файле соответствующим образом.

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

Находим строку со следующим содержимым:

;tls-auth ta.key 0 # This file is secret

и удаляем точку с запятой в начале (раскомментируем строку).

Листаем дальше, пока не увидим строку „# Select a cryptographic cipher.“

Немного ниже, в этом же блоке, нам на выбор предлагается три варианта шифрования. Blowfish, первый из них, используется по умолчанию. Но в данном случае стандартный вариант не является лучшим. Сообщество OpenVPN рекомендует использовать AES 256 bit.

Последуем их совету, раскомментируем вторую строку и изменим 128 на 256:

cipher AES-256-CBC   # AES

Если такой строки нет, ее можно просто добавить.

Под ней добавим еще одну строку:

--tls-auth ta.key 0

Это обеспечит дополнительную защиту.

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

push "redirect-gateway def1 bypass-dhcp"

Чтобы сервер имел доступ к общедоступным DNS, раскомментируйте:

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

Еще ниже раскомментируйте строки

user nobody
group nogroup

чтобы OpenVPN запускался от имени пользователя с минимальными правами.

После этого нажмите F2, чтобы выйти из nano, затем Y, чтобы согласиться сохранить изменения и, наконец, Enter для окончательного подтверждения.

Вернуться к оглавлению ->

Настройка сервера Ubuntu.

Теперь нам необходимо скорректировать настройки самого сервера. Для этого выполним:

sudo nano /etc/sysctl.conf

В открывшемся файле находим и раскомментируем строку:

net.ipv4.ip_forward=1

Сохраняем файл тем же способом, что и раньше.

Теперь нам необходимо внести поправки в настройки файрвола.

Определяем сетевой интерфейс:

ip route

Нас интересует строка, которая начинается с default, а конкретнее — название интерфейса следующее за ip-адресом и словом dev. В моем случае это eth0.

Настройка сервера Ubuntu

Запоминаем и переходим к редактированию правил файрвола:

sudo nano /etc/ufw/before.rules

Вставляем следующие строки после первого блока, начинающегося с rules.before перед следующим блоком, который начинается с #Don't delete:

# 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

Настройка сервера Ubuntu

Не забываем сохранить перед выходом.

Еще немного настроек для файрвола.

Выполняем:

sudo nano /etc/default/ufw

и редактируем строку DEFAULT_FORWARD_POLICY="DROP", меняя «DROP» на «ACCEPT». Сохраняем.

Разрешим подключение к порту 1194, который OpenVPN использует по умолчанию. На всякий случай включим ведение логов — мало ли, какая информация нам потребуется в процессе отладки или позже, уже в процессе использования. Обязательно разрешим доступ ssh, чтобы не утратить контроль над сервером.

После этого включим файрвол:

sudo ufw allow 1194/udp
sudo ufw logging on
sudo ufw allow ssh
sudo ufw enable

После ввода последней команды потребуется подтверждение. Вводим Y и жмем Enter.

Если в конфигурационном файле /etc/openvpn/server.conf вы изменили номер порта, в вышеприведенной команде необходимо указать именно ваше значение вместо 1194.

Если кроме работы с OpenVPN сервер выполняет еще какие-либо задачи, может потребоваться разрешить работу с другими портами. Для большинства часто используемых сервисов у ufw есть готовые наборы настроек, которые можно включить так же, как мы сделали это для ssh.

Вернуться к оглавлению ->


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


Комментарии отключены