Для более удобной навигации внутри страницы можете воспользоваться оглавлением.
Причины использовать OpenVPN. Краткий ликбез.
Давайте представим, что вы с помощью смартфона входите в личный кабинет на сайте своего банка. Коварный сосед, через открытую точку доступа которого вы последние три года бесплатно пользуетесь интернетом, перехватывает трафик. Далее он добывает заветные авторизационные данные и обчищает ваши счета.
OpenVPN — это софт, предназначенный для создания безопасного тоннеля между клиентом и сервером. Клиентом будет выступать ваш смартфон, компьютер, ноутбук и любые другие подобные устройства. Сервером — собственно сервер с Ubuntu и OpenVPN, который мы с вами сегодня начнем подготавливать. Когда мы все настроим, ваши данные сначала будут отправляться на ваш же сервер, и лишь оттуда — к основной цели, например, в банк. Та же схема будет действовать и в обратном направлении. При этом ни провайдер, ни зловредный владелец открытой точки доступа, ни кто-либо еще не сможет легко завладеть данными.
На деле все не так уж плохо. Все больше сайтов переходит на защищенный протокол HTTPS вместо привычного HTTP, что снижает вероятность утечки информации. Но есть и другие причины использовать OpenVPN, например, доступ к ресурсам, которые заблокировал провайдер. Кроме того, сайт или другой ресурс, к которому вы обращаетесь, не получит ваш IP, физические координаты, название провайдера и т. д. Впрочем, слишком уж полагаться на это не стоит: при наличии желания и возможностей найти можно кого угодно.
Установка сервера OpenVPN.
Я не буду описывать процесс выбора сервера, VPS/VDS за несколько долларов в месяц найти проще простого. Логин и пароль вам предоставит хостер. Я исхожу из того, что на удаленном сервере уже остановлена ОС Ubuntu 16.04 и вы можете действовать от имени пользователя с достаточным уровнем прав.
Подключаемся:
После ввода пароля вы увидите приветствие удаленной машины, примерно такое:
Теперь команды, которые мы будем вводить в терминале, выполнятся на сервере. Для начала обновимся и установим OpenVPN, easy-rsa и создадим папку для ключей и сертификатов.
Генерируем сертификаты и ключи.
Утилита easy-rsa предназначена для создания и управления сертификатами и ключами. Третьей командой мы создаем директорию, где все это будет храниться. Четвертой — перемещаемся туда сами, чтобы каждый раз не вводить полный путь.
Теперь отредактируем конфигурационный файл, хранящий переменные:
Нас интересует блок, расположенный в самом низу (он на скриншоте ниже). Вписываем страну, город, адрес электронной почты. Не обязательно использовать точные и правдивые данные. Чуть ниже, в строке export KEY_NAME впишите имя ключа. В нашем случае будет «server».
Чтобы сохранить изменения, нажмите F2 или CTRL + O, затем Y и Enter, чтобы подтвердить.
Теперь можно выполнить отредактированный нами файл:
Вы получите уведомление о том, каким образом очистить папку, содержащую ключи. Сейчас их там не должно быть, но на всякий случай рекомендуется все же выполнить это действие:
Запускаем генерацию корневого сертификата:
В процессе вас попросят подтвердить или изменить введенную информацию. Если вы отредактировали файл vars, достаточно просто нажимать Enter. Сгенерируем ключ и сертификат для сервера:
Снова подтверждаем правильность введенных ранее данных. В ответ на просьбу установить еще и пароль, а также указать название компании, нажимаем Enter. Подтверждаем согласие создать сертификат нажатием Y.
Еще пара команд для генерации сертификатов:
Теперь генерируем сертификат для клиента. Каждый клиент требует отдельного сертификата, поэтому давайте им соответствующие имена для удобства. Сгенерируем сертификат и ключ для домашнего компьютера:
Заодно создадим сертификаты и ключи для планшета, смартфона, ноутбука:
Это можно сделать и позже, но тогда на сервере придется снова перейти в нужную нам папку и экспортировать переменные из файла:
Все сгенерированные нами ключи и сертификаты лежат в ~/openvpn-certificates/keys:
Настройка сервера OpenVPN.
Итак, мы сгенерировали ключи и сертификаты. Переместимся в директорию, в которой они находятся и одной командой создадим их копии в нужном нам месте:
Ключи, созданные для клиентов, копировать сюда не нужно. Теперь необходимо подготовить конфигурационный файл OpenVPN. Разработчики советуют не создавать его с нуля, а использовать ими же предоставленный образец в качестве отправной точки. Так и поступим:
Если вы все сделали правильно, перед вами окажется содержимое конфигурационного файла сервера OpenVPN.
Для начала убедитесь, что названия файлов ключей и сертификатов соответствуют созданным вами. Нас интересуют строки, начинающиеся с:
- ca
- cert
- key
- dh
Просто убедитесь, что в названия файлов, которые мы недавно скопировали в /etc/openvpn/, совпадают с указанными здесь. Если это не так, измените значения в файле соответствующим образом.
Находим строку со следующим содержимым:
и удаляем точку с запятой в начале (раскомментируем строку).
Листаем дальше, пока не увидим строку „# Select a cryptographic cipher.“
Немного ниже, в этом же блоке, нам на выбор предлагается три варианта шифрования. Blowfish, первый из них, используется по умолчанию. Но в данном случае стандартный вариант не является лучшим. Сообщество OpenVPN рекомендует использовать AES 256 bit.
Последуем их совету, раскомментируем вторую строку и изменим 128 на 256:
Если такой строки нет, ее можно просто добавить.
Под ней добавим еще одну строку:
Это обеспечит дополнительную защиту.
Раскомментируйте следующую строку для того, чтобы весь трафик клиента проходил через сервер.
Чтобы сервер имел доступ к общедоступным DNS, раскомментируйте:
Еще ниже раскомментируйте строки
чтобы OpenVPN запускался от имени пользователя с минимальными правами.
После этого нажмите F2, чтобы выйти из nano, затем Y, чтобы согласиться сохранить изменения и, наконец, Enter для окончательного подтверждения.
Настройка сервера Ubuntu.
Теперь нам необходимо скорректировать настройки самого сервера. Для этого выполним:
В открывшемся файле находим и раскомментируем строку:
Сохраняем файл тем же способом, что и раньше.
Теперь нам необходимо внести поправки в настройки файрвола.
Определяем сетевой интерфейс:
Нас интересует строка, которая начинается с default, а конкретнее — название интерфейса следующее за ip-адресом и словом dev. В моем случае это eth0.
Запоминаем и переходим к редактированию правил файрвола:
Вставляем следующие строки после первого блока, начинающегося с rules.before перед следующим блоком, который начинается с #Don't delete:
Не забываем сохранить перед выходом.
Еще немного настроек для файрвола.
Выполняем:
и редактируем строку DEFAULT_FORWARD_POLICY="DROP", меняя «DROP» на «ACCEPT». Сохраняем.
Разрешим подключение к порту 1194, который OpenVPN использует по умолчанию. На всякий случай включим ведение логов — мало ли, какая информация нам потребуется в процессе отладки или позже, уже в процессе использования. Обязательно разрешим доступ ssh, чтобы не утратить контроль над сервером.
После этого включим файрвол:
После ввода последней команды потребуется подтверждение. Вводим Y и жмем Enter.
Если в конфигурационном файле /etc/openvpn/server.conf вы изменили номер порта, в вышеприведенной команде необходимо указать именно ваше значение вместо 1194.
Если кроме работы с OpenVPN сервер выполняет еще какие-либо задачи, может потребоваться разрешить работу с другими портами. Для большинства часто используемых сервисов у ufw есть готовые наборы настроек, которые можно включить так же, как мы сделали это для ssh.
В следующих статьях нам предстоит создать конфигурационные файлы клиентов, настроить подключение и протестировать результат. Подписывайтесь на обновления, впереди много интересного.