Для более удобной навигации внутри страницы можете воспользоваться оглавлением.
Причины использовать OpenVPN. Краткий ликбез.
Давайте представим, что вы с помощью смартфона входите в личный кабинет на сайте своего банка. Коварный сосед, через открытую точку доступа которого вы последние три года бесплатно пользуетесь интернетом, перехватывает трафик. Далее он добывает заветные авторизационные данные и обчищает ваши счета.
OpenVPN — это софт, предназначенный для создания безопасного тоннеля между клиентом и сервером. Клиентом будет выступать ваш смартфон, компьютер, ноутбук и любые другие подобные устройства. Сервером — собственно сервер с Ubuntu и OpenVPN, который мы с вами сегодня начнем подготавливать. Когда мы все настроим, ваши данные сначала будут отправляться на ваш же сервер, и лишь оттуда — к основной цели, например, в банк. Та же схема будет действовать и в обратном направлении. При этом ни провайдер, ни зловредный владелец открытой точки доступа, ни кто-либо еще не сможет легко завладеть данными.
На деле все не так уж плохо. Все больше сайтов переходит на защищенный протокол HTTPS вместо привычного HTTP, что снижает вероятность утечки информации. Но есть и другие причины использовать OpenVPN, например, доступ к ресурсам, которые заблокировал провайдер. Кроме того, сайт или другой ресурс, к которому вы обращаетесь, не получит ваш IP, физические координаты, название провайдера и т. д. Впрочем, слишком уж полагаться на это не стоит: при наличии желания и возможностей найти можно кого угодно.
Установка сервера OpenVPN.
Я не буду описывать процесс выбора сервера, VPS/VDS за несколько долларов в месяц найти проще простого. Логин и пароль вам предоставит хостер. Я исхожу из того, что на удаленном сервере уже остановлена ОС Ubuntu 16.04 и вы можете действовать от имени пользователя с достаточным уровнем прав.
Подключаемся:
ssh логин@ip_вашего_сервера
После ввода пароля вы увидите приветствие удаленной машины, примерно такое:
Теперь команды, которые мы будем вводить в терминале, выполнятся на сервере. Для начала обновимся и установим 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.
Для начала убедитесь, что названия файлов ключей и сертификатов соответствуют созданным вами. Нас интересуют строки, начинающиеся с:
- ca
- cert
- key
- dh
Просто убедитесь, что в названия файлов, которые мы недавно скопировали в /etc/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.
Запоминаем и переходим к редактированию правил файрвола:
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
Не забываем сохранить перед выходом.
Еще немного настроек для файрвола.
Выполняем:
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.
В следующих статьях нам предстоит создать конфигурационные файлы клиентов, настроить подключение и протестировать результат. Подписывайтесь на обновления, впереди много интересного.