Как настроить сервер OpenVPN в Ubuntu 16.04 #2
@Torchik_RuШаг 8. Настройка сетевой конфигурации сервера
Далее нам необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик.
Настройка перенаправления IP
Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.
Настроим это в файле /etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
Найдите строку настройки net.ipv4.ip_forward
. Удалите "#" из начала строки, чтобы раскомментировать её:
net.ipv4.ip_forward=1
Сохраните и закройте файл.
Для применения настроек к текущей сессии наберите команду:
sudo sysctl -p
Настройка правил UFW для сокрытия соединений клиентов
Если вы следовали статье о настройке Ubuntu 16.04, упомянутой в начале этой статьи, у вас должен быть установлен и настроен файрвол UFW. Вне зависимости от того, используете ли вы файрвол для блокировки нежелательного трафика (что вам стоит делать практически всегда), в этой статье нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).
Перед тем, как изменить этот файл, мы должны найти публичный интерфейс сети (public network interface). Для этого наберите команду:
ip route | grep default
Публичный интерфейс должен следовать за словом "dev". Например, в нашем случае этот интерфейс называется wlp11s0
:
default via 203.0.113.1 dev wlp11s0 proto static metric 600
Зная название интерфейса откроем файл /etc/ufw/before.rules
и добавим туда соответствующие настройки:
sudo nano /etc/ufw/before.rules
Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING
в таблице nat
и будет скрывать весь трафик от VPN:
Внимание: не забудьте заменитьeth0
в строке-A POSTROUTING
на имя интерфейса, найденное нами ранее.
#
# 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, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw
:
sudo nano /etc/default/ufw
Найдите в файле директиву DEFAULT_FORWARD_POLICY
. Мы изменим значение с DROP
на ACCEPT
:
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните и закройте файл.
Открытие порта OpenVPN и применение изменений
Далее настроим сам файрвол для разрешения трафика в OpenVPN.
Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf
, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.
Даже мы добавим порт SSH на случай, если вы не сделали этого ранее.
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
Теперь деактивируем и активируем UFW для применения внесённых изменений:
sudo ufw disable
sudo ufw enable
Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.
Шаг 9. Включение сервиса OpenVPN
Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.
Нам необходимо запустить сервер OpenVPN указав имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf
, поэтому мы добавим @server
в конец имени файла при его вызове:
sudo systemctl start openvpn@server
Убедимся, что сервис успешно запущен командой:
sudo systemctl status openvpn@server
Если всё получилось, вывод должен выглядеть примерно следующим образом:
● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
└─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup
May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST
May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
Вы также можете проверить доступность интерфейса OpenVPN tun0
следующей командой:
ip addr show tun0
Вы должны увидеть конфигурацию интерфейса:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:
sudo systemctl enable openvpn@server
Шаг 10. Создание инфраструктуры настройки клиентов
Далее настроим систему для простого создания файлов конфигурации для клиентов.
Создание структуры директорий конфигурации клиентов
В домашней директории создайте структуру директорий для хранения файлов:
mkdir -p ~/client-configs/files
Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:
chmod 700 ~/client-configs/files
Создание базовой конфигурации
Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Откройте этот файл в вашем текстовом редакторе:
nano ~/client-configs/base.conf
Сделаем несколько изменений в этом файле.
Сначала найдите директиву remote
. Эта директива сообщает клиенту адрес нашего сервера OpenVPN. Это должен быть публичный IP адрес вашего сервера OpenVPN. Если вы изменили порт, который слушает сервер OpenVPN, измените порт по умолчанию 1194
на ваше значение:
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote server_IP_address 1194
. . .
Убедитесь, что протокол совпадает с настройками сервера:
proto udp
Далее раскомментируйте директивы user
и group
удаляя ";":
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Найдите директивы ca
, cert
и key
. Закомментируйте эти директивы, так как мы будем добавлять сертификаты и ключи в самом файле:
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
Добавьте настройки cipher
и auth
согласно заданным в файле /etc/openvpn/server.conf
:
cipher AES-128-CBC
auth SHA256
Далее добавьте директиву key-direction
в любое место в файле. Она должна иметь значение "1" для корректной работы сервера:
key-direction 1
Наконец, добавьте несколько закомментированных строк. Мы ходим добавить эти строки в каждый файл конфигурации, но они будут включены только для клиентов на Linux, которые используют файл /etc/openvpn/update-resolv-conf
. Этот скрипт использует утилиту resolvconf
для обновление информации DNS на клиентах Linux.
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf
, вы должны раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.
Сохраните и закройте файл.
Создание скрипта генерации файлов конфигурации
Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files
.
Создайте и откройте файл make_config.sh
внутри директории ~/client-configs
:
nano ~/client-configs/make_config.sh
Вставьте следующие текст в этот файл:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn
Сохраните и закройте файл.
Сделайте его исполняемым файлом командой:
chmod 700 ~/client-configs/make_config.sh
Шаг 11. Генерация конфигураций клиентов
Теперь мы можем легко сгенерировать файлы конфигурации клиентов.
Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt
и ключ клиента client1.key
командой ./build-key client1
на шаге 6. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs
и используя только что созданный нами скрипт:
cd ~/client-configs
./make_config.sh client1
Если всё прошло успешно, мы должны получить файл client1.ovpn
в директории ~/client-configs/files
:
ls ~/client-configs/files
client1.ovpn
Доставка конфигураций клиентам
Теперь мы должны переместить файл конфигурации на клиентское устройство. Например, на компьютер или смартфон.
Способ доставки файла зависит от операционной системы вашего устройства и программного обеспечения, которое вы захотите использовать для перемещения файла. Мы рекомендуем передавать файл по защищённому соединению, например, с использованием SFTP или SCP.
Ниже мы приводим пример передачи файла client1.ovpn с использованием SFTP. Следующую команду можно использовать на вашем локальном компьютере под управлением Mac OS или Linux. Она перемещает файл .ovpn
в вашу домашнюю директорию:
sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
Ниже представлено несколько ссылок на инструменты и статьи о безопасном переносе файлов с сервера на локальный компьютер:
- WinSCP
- Как использовать SFTP для безопасной передачи файлов с удалённого сервера
- Как использовать Filezilla для передачи и управления файлами на удалённом сервере
Шаг 12. Установка файлов конфигураций клиентов
Теперь мы поговорим о том, как устанавливать клиентские профили VPN на Windows, Mac OS, iOS и Android. Процесс установки уникален для каждой платформы, поэтому пропускайте платформы, которые вы не планируете использовать.
Название соединения OpenVPN зависит от того, как вы называли свой .ovpn
файл. В нашем примере это будет client1.ovpn
.
Windows
Установка
Вы можете загрузить клиент для работы с OpenVPN для Windows со страницы загрузок OpenVPN. Выберите необходимую вам версию установщика.
Внимание: установка OpenVPN требует администраторской учётной записи.
После установки OpenVPN скопируйте ваш .ovpn
файл в эту директорию:
C:\Program Files\OpenVPN\config
Запустите OpenVPN, клиент должен автоматически увидеть ваш профиль.
Клиент OpenVPN требует запуска с правами администратора даже для аккаунтов администратора. Для запуска сделайте щелчок правой кнопкой мыши на клиенте и выберите Run as administrator каждый раз при запуске клиента. Это также означает, что обычные пользователи должны будут вводить пароль администратора для использования OpenVPN.
Для того, чтобы приложение OpenVPN всегда запускалось с правами администратора, сделайте щелчок правой кнопкой мыши на иконке клиента и перейдите в раздел Properties. В нижней части вкладки Compatibility нажмите на кнопку Change settings for all users. В открывшемся окне выберите Run this program as an administrator.
Соединение
Каждый раз при запуске клиента OpenVPN Windows будет спрашивать, хотите ли вы разрешить программе внести изменения в настройки вашего компьютера. Нажмите Да. Запуск клиента OpenVPN просто помещает приложение в системный трей, при этом само соединение не устанавливается автоматически.
Для установки соединения сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее. В открывшемся контекстном меню выберите client1 (это наш профиль client1.ovpn
) и нажмите Connect.
Откроется окно статуса, которое будет отображать лог соединения. При завершении соединения вы увидите соответствующее сообщение.
Закрыть VPN соединение можно точно так же: сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее, выберите профиль клиента и нажмите Disconnect.
Mac OS
Установка
Tunnelblick - это бесплатный OpenVPN клиент для Mac OS с открытым исходным кодом. Вы можете загрузить его со страницы загрузок Tunnelblick. Сделайте двойной щелчок на загруженном .dmg
файле и следуйте инструкциям в процессе установки.
В конце процесса установки Tunnelblick спросит, есть ли у вас конфигурационные файлы. Проще всего ответить No и завершить установку Tunnelblick. Откройте Finder и сделайте двойной щелчок на client1.ovpn
. Tunnelblick установит клиентский профиль. Для этого необходимы права администратора.
Соединение
Запустите Tunnelblick двойным щелчком из папки Applications. После запуска в панели меню в правой верхней части экрана появится иконка Tunnelblick. Для установки соединения нажмите на иконку, а затем Connect. Далее выберите соединение client1.
Linux
Установка
В зависимости от используемой вами версии Linux, вы можете использовать самые разные программы для установки соединения. Возможно, это умеет делать даже ваш менеджер окон.
Наиболее универсальным способом установки соединения, тем не менее, является программное обеспечение OpenVPN.
В Ubuntu или Debian вы можете установить его точно так же, как и на сервере:
sudo apt-get update
sudo apt-get install openvpn
В CentOS вы можете активировать EPEL репозитории и затем ввести следующие команды:
sudo yum install epel-release
sudo yum install openvpn
Настройка
Сначала проверьте, содержит ли ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf
:
ls /etc/openvpn
Вывод
update-resolve-conf
Далее отредактируйте полученный с сервера файл конфигурации клиента OpenVPN:
nano client1.ovpn
Если вам удалось найти файл update-resolv-conf
, раскомментируйте следующие строки файла:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Если вы используете CentOS, измените group
с nogroup
на nobody
:
group nobody
Сохраните и закройте файл.
Теперь вы можете соединиться с VPN используя команду openvpn
следующим образом:
sudo openvpn --config client1.ovpn
iOS
Установка
Найдите в iTunes App Store официальный клиент OpenVPN Connect и установите его. Для переноса файла конфигурации клиента на ваше устройство, подключите устройство к компьютеру.
Запустите iTunes на компьютере и выберите iPhone > apps. Найдите секцию File Sharing и нажмите на приложение OpenVPN. Перенесите ваш файл .ovpn
в правую часть окна OpenVPN Documents.
Далее запустите приложение OpenVPN на iPhone. Вы получите уведомление, что новый профиль готов к импорту. Нажмите на зелёный плюсик для импорта профиля.
Соединение
OpenVPN готов к использованию с новым профилем. Для установки соединения потяните слайдер Connect в позицию On. Для остановки соединения переместите этот же слайдер в положение Off.
Внимание
Переключатель VPN в приложении Settings нельзя использовать для установки соединения с VPN. Если вы попытаетесь это сделать, вы получите сообщение о том, что это возможно только в приложении OpenVPN.
Android
Установка
Откройте Google Play Store. Найдите и установите официальное приложение OpenVPN Android OpenVPN Connect.
Передать профиль с компьютера на телефон можно подключив Android устройство к компьютеру через USB и скопировав файл. Вы также можете переместить файл профиля с помощью SD карты, скопировав профиль на карту и вставив карту в Android устройство.
Запустите приложение OpenVPN и нажмите на меню для импорта профиля.
Далее найдите файл в файловой системе (в нашем примере это /sdcard/Download/
) и выберите найденный файл. Приложение сообщит, что профиль был импортирован.
Соединение
Для установки соединения нажмите кнопку Connect. Вам будет задан вопрос, доверяете ли вы приложению OpenVPN. Ответьте OK для установки соединения. Для остановки соединения зайдите в приложение OpenVPN и выберите Disconnect.
Шаг 13. Тестирование VPN соединения
После того, как всё установлено и настроено, убедимся, что всё работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest.
Этот сайт вернёт IP адрес, назначенный вам вашим Интернет-провайдером. Для того, чтобы проверить, какие DNS сервера используются, нажмите на Extended Test.
Теперь установите соединение, используя ваш VPN клиент и обновите страницу в браузере. Выдаваемый вам IP адрес должен быть совершенно другим. Теперь для всех в Интернете вы используете этот новый IP адрес. Нажмите Extended Test ещё раз, чтобы проверить ваши настройки DNS и убедитесь, что теперь вы используете DNS сервера вашего VPN.
Шаг 14. Отзыв клиентских сертификатов
Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN&
Для этого зайдите в вашу директорию центра сертификации и введите команды:
cd ~/openvpn-ca
source vars
Далее используйте команду revoke-full
с именем клиента, сертификат которого вы хотите отозвать:
./revoke-full client3
Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn
Далее откройте файл конфигурации сервера OpenVPN:
sudo nano /etc/openvpn/server.conf
Добавьте в конец файла строку crl-verify
. Сервер OpenVPN будет проверять список отозванных сертификатов каждый раз, когда кто-то устанавливает соединение с сервером.
crl-verify crl.pem
Сохраните и закройте файл.
Перезапустите OpenVPN для завершения процесса отзыва сертификата:
sudo systemctl restart openvpn@server
Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат.
Для отзыва дополнительных сертификатов выполните следующие шаги:
- Сгенерируйте новый список отозванных сертификатов используя команду
source vars
в директории~/openvpn-ca
и выполняя командуrevoke-full
с именем клиента. - Скопируйте новый список отозванных сертификатов в директорию
/etc/openvpn
перезаписав тем самым старый список. - Перезапустите сервис OpenVPN.
Эта процедура может быть использована для отзыва любых созданных вами ранее сертификатов.
Заключение
Поздравляем! Теперь вы можете безопасно выходить в Интернет, весь ваш трафик защищён от прослушки цензоров и злоумышленников.
Для конфигурации дополнительных клиентов повторите шаги 6 и 11-13 для каждого нового устройства. Для отзыва доступа того или иного клиента используйте шаг 14.