Установка и настройка OpenVPN для Ubuntu

Настройка OpenVPN на Ubuntu: серверная часть

Установка и настройка OpenVPN для Ubuntu

04.01.2018 17:21

VPN — виртуальная частная сеть, которая позволяет обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например, Интернет).

В нашем случае мы рассмотрим создание надежной и защищенной сети VPN на основе ненадежной сети Интернет при помощи продукта OpenVPN в рамках операционной системы Ubuntu 16.04.

OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами.

Она позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек.

OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL (https://ru.wikipedia.org/wiki/OpenVPN).

Установка необходимых пакетов

Команды будем выполнять от суперпользователя.

Приступим к установке ПО:

apt-get update apt-get install easy-rsa openvpn

easy-rsa — программа которая служит для создания и ведения инфраструктуры открытых ключей (PKI) в командной строке (CLI). В нашем случае мы будем использовать ее для выполнения действий с ключами и сертификатами, необходимыми для работы OpenVPN.

Демон OpenVPN будет работать у нас от имени непривилегированного пользователя openvpn. Добавим его:

adduser –system –no-create-home –disabled-login –group openvpn

Создание инфраструктуры открытых ключей (PKI)

Далее займемся созданием ключей и сертификатов при помощи easy-rsa. Скопируем необходимые файлы в /etc/openvpn/ и перейдем в эту директорию:

cp -r /usr/share/easy-rsa/ /etc/openvpn/ cd /etc/openvpn/easy-rsa/

Далее для удобства создания сертификатов в /etc/openvpn/easy-rsa/vars изменим следующие строки:

Производить работу с текстовыми файлами вы можете, используя удобные Вам текстовые редакторы (например, vi или nano).

  • export KEY_COUNTRY=”US” # Страна
  • export KEY_PROVINCE=”CA” # Регион/Область
  • export KEY_CITY=”SanFrancisco” # Город
  • export KEY_ORG=”Fort-Funston” # Организация
  • export KEY_EMAIL=”me@myhost.mydomain” # Электронный адрес
  • export KEY_OU=”MyOrganizationalUnit” # Отдел в компании

Изменение данных переменных на работу VPN не повлияет, однако визуально может сделать подключение более информативным.

Затем необходимо инициализировать переменные, используемые при создании публичного ключа командой:

и удалить существующие ключи:

Приступаем к созданию удостоверяющего центра (CA):

В ходе установки Вам потребуется проверить корректность данных, используемых для запроса на создание сертификата (certificate request).

Если Вы предварительно изменили значения переменных в /etc/openvpn/easy-rsa/vars, то Вам достаточно будет просто нажимать Enter.

Также, по желанию, Вы сможете указать пароль, который будет защищать приватный ключ удостоверяющего центра. Хорошо запомните его или запишите в надежном месте!

Аналогичным образом создаем остальные ключи и сертификаты.

Сертификат сервера OpenVPN, где «server» – имя сервера:

./build-key-server server

Ключ Диффи-Хеллмана служит для использования одноименного криптографического протокола, который позволяет двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи (создание ключа может занимать от нескольких секунд до нескольких минут, не прерывайте процесс):

Ключ клиента, где «user_1» – имя клиента:

Ключ HMAC для дополнительной защиты от DoS-атак и флуда:

openvpn –genkey –secret keys/ta.key

Сертификаты с ключами будут помещаться в директорию /etc/openvpn/easy-rsa/keys:

Теперь необходимо создать каталог для конфигураций клиентов:

и перенести файлы:

# Клиентские

cp user_1.crt user_1.key ca.crt ta.key /etc/openvpn/ccd/

# Серверные

cp server.crt server.key ca.crt dh2048.pem ta.key /etc/openvpn/

Создание конфигурационного файла и запуск OpenVPN

Создаем директорию для логов OpenVPN:

И переходим к созданию конфигурационного файла:

vi /etc/openvpn/server.conf

Подробная информация по директивам в конфигурационном файле доступна в файле /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz.
 

# Пользователь и группа user openvpn group openvpn # Порт, на котором висит openvpn port 2216 # Протокол, который использует openvpn proto udp # Интерфейс, которой будет подниматься dev tun # Привязка ключей ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh2048.pem tls-auth /etc/openvpn/ta.key 0 # 0 – использование на стороне сервера, 1 – на стороне клиента # Файл отозванных сертификатов. Раскомментировать, когда такие сертификаты появятся. # Создание сертификата доступно при помощи /etc/openvpn/easy-rsa/revoke-full ;crl-verify /etc/openvpn/crl.pem # Тип шифрования cipher AES-256-CBC # Сжатие трафика comp-lzo # IP адреса, которые будут выдаваться клиентам (IP и маска) server 10.10.0.0 255.255.255.0 # Будет производится пинг каждые 10 секунд, если пинга нет 120 сек, то будет выполнена попытка повторного подключения к клиенту keepalive 10 120 # При падении туннеля не выключать интерфейсы, не перечитывать ключи persist-key persist-tun # Директория с клиентскими сертификатами client-config-dir ccd # Лог статуса сервера status /var/log/openvpn/status.log # Лог подключения log /var/log/openvpn/serv.log # Уровень логирования от 0 до 9, чем выше тем больше информации verb 3 # Защита от повторов (максимум 20 одинаковых сообщений подряд) mute 20 # Cнятие ограничения на размер буфера сокета sndbuf 0 rcvbuf 0 # Трафик идет через OpenVPN push “redirect-gateway def1” # Использование DNS сервера push “dhcp-options DNS 8.8.8.8”

На этом настройка конфигурации OpenVPN закончена.

Включаем поддержку ipv4_forwarding. Для этого в /etc/sysctl.conf раскомментируем

после чего заново прочитаем файл:

Помимо этого разрешаем маршрутизацию трафика через OpenVPN:

iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE

«eth0» – Ваш сетевой интерфейс для выхода в Интернет. Посмотреть его можно при помощи ifconfig.

Настраиваем iptables, чтобы после перезапуске ОС, настройки сохранились:

iptables-save > /etc/iptables.save echo -e “pre-up iptables-restore < /etc/iptables.save" >> /etc/network/interfaces

Перезапуск и проверка корректной работы OpenVPN

Перезапускаем демон:

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

Также Вам могут помочь логи, которые мы настроили, и syslog:

cat /var/log/openvpn/serv.log tail -50 /var/log/syslog

При необходимости Вы можете запустить OpenVPN вручную и проверить, возникают ли ошибки при запуске:

openvpn –config /etc/openvpn/server.conf

Следующая строка в логе /var/log/openvpn/serv.log будет означать корректный запуск VPN:

Fri Dec 8 07:19:47 2017 Initialization Sequence Completed

Заключение

Теперь Вы знаете, как установить и настроить OpenVPN на Ubuntu 16.04. Более подробную информацию смотрите в документации OpenVPN.

Источник: https://timeweb.com/ru/community/articles/nastroyka-openvpn-na-ubuntu-servernaya-chast-1

Установка и настройка консольного клиента OpenVPN в Ubuntu

Установка и настройка OpenVPN для Ubuntu

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

В предыдущей статье мы установили сервер openvpn и программу easy-rsa, необходимую для генерации сертификатов и ключей, сгенерировали сами ключи и сертификаты, выполнили настройку сервера, включили фаервол и разрешили подключения на нужный нам порт. В этой статье мы создадим файл конфигурации для клиента на Ubuntu, настроим и проверим, как все работает.

Установка и настройка клиента OpenVPN

Для настройки клиента OpenVPN на Ubuntu (в примере использовалась Ubuntu 16.04) нам понадобится тот же пакет, что и для установки сервера.

Соответственно, все команды мы будем выполнять на клиенте (например, на домашнем ПК).

Выполните в консоли:

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

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf Откроем его и внесем свои правки: “`bashsudo gedit /etc/openvpn/client.conf

Сначала измените значение параметра remote на IP вашего сервера. Если вы по каким-либо причинам изменили номер порта, впишите соответствующее значение вместо стандартного 1194.

Раскомментируйте следующие строки так же, как делали это на сервере:

user nobodygroup nogroup

Далее найдите блок, начинающийся с # SSL/TLS params. Внизу этого блока укажите пути к файлам ключей и сертификатов таким образом:

ca /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/home-pc.crtkey /etc/openvpn/keys/home-pc.key

Имена второго и третьего файлов могут быть другими — в зависимости от того, как вы назвали клиентский сертификат и ключ на первом этапе.

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

на эту:

tls-auth /etc/openvpn/keys/ta.key 1

В следующем блоке замените:

на строку:

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

Скачаем с сервера файлы ключей и сертификатов и разместим их в той директории, которую мы указали выше.
sudo mkdir /etc/openvpn/keyssudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/ca.crt /etc/openvpn/keys

Потребуется ввести пароль пользователя вашего сервера. Возможно, потребуется подтвердить согласие на подключение — для этого введите «yes». Далее тем же способом получим еще два файла:

sudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/home-pc.crt /etc/openvpn/keyssudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/home-pc.key /etc/openvpn/keyssudo sftp имя_пользователя@ip_вашего_сервера:openvpn-certificates/keys/ta.key /etc/openvpn/keys

Перезапустите сервис openvpn:

sudo systemctl restart openvpn

Для единоразового подключения используйте команду:

После перезагрузки соединение должно устанавливаться автоматически.

Воспользуйтесь любым сервисом проверки ip-адреса, чтобы узнать, все ли работает как нужно. Если с работающей и остановленной службой openvpn ваши IP различаются, значит, вы настроили все верно.

Решение проблем

В случае проблем первым делом проверьте логи:

grep OpenVPN /var/log/syslog

Если информации о проблеме в выводе команды нет, попробуйте увеличить значение параметра verb в самом конце файла /etc/openvpn/client.conf, чтобы сделать логи более подробными. Максимальное значение — 11. После этого снова перезапустите сервис openvpn и проверьте логи еще раз.

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

Если соединение слишком медленное, попробуйте добавить в файлы конфигурации клиента и сервера (в моей серии статей это etc/openvpn/client.conf и etc/openvpn/server.conf соответственно) строки:

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

Можно также попробовать отключить сжатие трафика, после чего сравнить результаты и оставить лучший вариант. Для этого и в /etc/openvpn/server.conf, и в /etc/openvpn/client.conf нужно закомментировать (поставить «;» в начале строки) параметр comp-lzo.

Обратите внимание: состояние этой и многих других директив на сервере и клиентах должно быть одинаковым!

P.S

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

Источник: https://linuxrussia.com/openvpn-client.html

Установка и настройка клиента OpenVPN в Ubuntu

Установка и настройка OpenVPN для Ubuntu

Когда-то давным-давно, когда арбузы на деревьях были совсем ещё зелёными, я познакомился с замечательным проектом OpenVPN, сделавшим мою работу по связыванию распределённых локальных сетей воедино. Первым опытом стала настройка сервера под FreeBSD, ну а дальше, как говорится, понеслось. На сегодняшний день почти все сервера, настроенные мной, работают под Ubuntu Linux той или иной версии.

И вот недавно я обратил внимание на то, что среди барахла, хранящегося в /etc/init.d, скромненько притаился скрипт с именем «openvpn». «Ну и чё?» — тут же спросит опытный администратор.

Всё дело в том, что до недавних пор поднятие сетевых интерфейсов, в том числе и TUN, я организовывал исключительно через /etc/network/interfaces, оперируя опциями pre-up для запуска демона OpenVPN и опциями pre-down для его останова.

Всё это «безобразие» повсеместно разбавлялось различными командами, манипулирующими таблицами маршрутизации… В общем, довольно громоздкая картинка получалась.

В принципе, всё работало вполне себе прилично, но раз есть предоставленный разработчиками иной (Ubuntu-way?) путь, то почему бы им не воспользоваться, тем более, что это позволит значительно разгрузить /etc/network/interfaces. Итак, что у меня получилось.

Установка OpenVPN

Установка OpenVPN в Ubuntu не требует каких-либо финтов ушами:

$ sudo apt-get install openvpn

Обязательно подтвердите установку всех зависимостей.

Тем же, кому хочется/нужно установить OpenVPN из исходных кодов, придётся ознакомиться с соответствующей информацией.

Если вас интересуют бинарные пакеты под другие платформы, посетите страницу загрузок проекта.

Размещение файлов ключей

Раз уж в этой в этой статье я решил рассказать о настройке клиентской части OpenVPN, то будем думать, что файлы ключей шифрования у вас уже имеются (вам их выдал администратор OpenVPN-сервера).

Количество и тип ключей зависит от того, как сконфигурирован OpenVPN-сервер, к которому вы подключаетесь.

В этой статье предполагается, что  для шифрования и аутентификации используются три файла:

  • закрытый ключ шифрования клиента  в формате .pem (назовём файл client.key);
  • подписанный центром сертификации сертификат клиента в формате .pem, (назовём файл client.crt);
  • сертификат центра сертификации сервера в формате .pem, которым был подписан файл client.crt (назовём файл ca.crt)

Получив ключ и сертификаты, обязательно позаботьтесь об их безопасности. Хорошим решением будет размещение всего этого добра на флешке, зашифрованной, например, TrueCrypt. В этой статье будем полагать, что ключи и сертификаты размещены в каталоге /media/keys. Также, обязательно оставьте минимум прав доступа к каталогу с ключом и сертификатами:

$ sudo chown -R root.root /media/keys$ sudo chmod 0700 /media/keys$ sudo chmod 0600 /media/keys/*# ls -la /media/keysdrwx—— 2 root root 1024 2010-08-18 15:32 .drwx—— 5 root root 1024 2010-08-18 15:24 ..-rw——- 1 root root 1265 2010-08-18 22:27 ca.crt-rw——- 1 root root 3821 2010-08-18 15:13 client.crt

-rw——- 1 root root 887 2010-08-18 15:13 client.key

Файл конфигурации

Фалы конфигурации OpenVPN, как правило, располагаются в каталоге /etc/openvpn или /usr/local/etc/openvpn. В этой статье я предполагаю, что вы установили OpenVPN из репозитариев Ubuntu и каталогом для хранения конфигурации является /etc/openvpn.

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

Допустим, что сервер, к которому вы подключаетесь, называется myvpnsrv.com.

Достаточно удобно называть файлы конфигурации (их может быть несколько, если вы пользуетесь несколькими подключениями или несколькими вариантами какого-либо подключения) в соответствии с именами серверов.

Так, в нашем примере файл конфигурации будет находится в /etc/openvpn/myvpnsrv.conf со следующим содержанием:

clientremote myvpnsrv.comca /media/keys/ca.crtkey /media/keys/client.keycert /media/keys/client.crtdaemondev tunproto udp

comp-lzo

Первая строка сообщает OpenVPN, что подключение будет осуществляться в режиме клиента.

Значение параметра remote определяет имя хоста или IP-адрес сервера.

Значения параметров ca, keys и cert определяют пути к файлу сертификата CA, закрытому ключу и сертификату клиента соответственно.

Указанием параметра daemon мы заставляем OpenVPN отцепиться от консоли и работать в фоновом режиме.

Параметр dev указывает тип сетевого интерфейса, который будет использоваться для обмена шифрованным трафиком с сервером. Может иметь значение tun или tap. Принципиальную разницу между этими двумя типами интерфейсов можно узнать здесь и здесь.

Параметр proto определяет протокол, в который будет заворачиваться шифрованный трафик. Предпочтительней использовать UDP.

Наличие параметра comp-lzo заставляет OpenVPN сжимать трафик, что очень полезно при наличии «узкого» канала передачи данных.

Маршрутизация и внешние скрипты

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

Сразу же отметьте себе один тонкий момент. Для того, чтобы OpenVPN-демон смог запускать внешние программы, ему необходимо это явно разрешить делать, передав параметр script-security со значением, не ниже 2. Безопасность, однако.

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

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

Теперь немного о специфике вызова внешних программ демоном OpenVPN. Дело в том, что они не просто «тупо» вызываются, а им передаются ещё некоторые параметры подключения, что очень удобно при работе с таблицами маршрутизации.

Формат вызова внешней программы демоном OpenVPN при инициализации tun-интерфейса следующий:

tun_dev tun_mtu link_mtu ifconfig_local_ip ifconfig_remote_ip [init|restart]

где

  • tun-dev — имя сетевого интерфейса, например tun1;
  • tun_mtu — MTU сетефого интерфейса;
  • link_mtu — MTU соединения;
  • ifconfig_local_ip — IP-адрес клиента (на «нашей» стороне);
  • ifconfig_remote_ip — IP-адрес клиента (на стороне сервера);
  • init — передаётся в случае, если программа вызывается во время запуска демона;
  • restart — передаётся, если программа вызывается во время перезапуска демона (например, если была потеря связи);

Для tap-интерфейса формат тот же, за исключением того, что вместо ifconfig_remote_ip передаётся ifconfig_netmask, содержащий маску подсети, в которой находится наш клиент.

Также, следует отметить, что все параметры, которые вы будете передавать внешней программе, при помощи up/down, будут подставлены перед параметрами, перечисленными выше.

Теории, думаю, достаточно, перейдём к делу. Допустим, вам необходимо, чтобы во время запуска/перезапуска/остановки демона OpenVPN каким-то образом видоизменялась таблица маршрутизации вашего хоста. Для двух сетевых интерфейсов я решил эту задачу следующим скриптом на bash:

#!/bin/bashcase ${1} in”up”) case ${2} in “tun0”) ip rule add … ip route add … ;; “tun1″) ip rule add … ip route add … ;; esac;;”down”) case ${2} in “tun0”) ip rule del … ip route del … ;; “tun1”) ip rule del … ip route del … ;; esac ;;esac

А вызов скрипта осуществляется двумя параметрами OpenVPN:

up '/usr/local/bin/routes.sh up'
down '/usr/local/bin/routes.sh down'

То есть, запускаемый скрипт получает примерно такие  параметры:

  • $1 — up или down;
  • $2 — имя интерфейса. В рассматриваемой мной системе им может быть tun0 или tun1;
  • $3 — например, 1500;
  • $4 — например, 1542
  • $5 — например, 10.8.0.5
  • $6 — например, 10.8.0.6
  • $7 — init или restart (параметр мной полностью игнорируемый, так что манипуляции с маршрутами выполняются всегда, даже если сетевой интерфейс не был отключён, а всего лишь имел место «штатный» перезапуск демона в связи с отсутствием связи).

Само-собой разумеется, можно (и нужно) использовать значения параметров $3 — $6. Например, если вы хотите какую-то часть трафика «завернуть» через VPN-туннель, то можно в скрипте использовать что-то вроде:

ip route add from 192.168.0.0/24 via ${6}

используя значение переменной $6, чтобы определить адрес маршрутизатора, через который необходимо направлять трафик.

Запуск и останов демона

Собственно, к чему все эти танцы с вызовом внешних скриптов и отказом от старого-доброго /etc/network/interfaces? А вот к чему.

Откройте файл /etc/default/openvpn и в переменной AUTOSTART укажите имя файла (или нескольких, через пробел) конфигурации из каталога /etc/openvpn, откусив расширение «.conf». Для нашего примера это будет выглядеть так:

AUTOSTART=”myvpnsrv”

Или же, если нужно, чтобы OpenVPN выполнил подключения на основе всех найденных файлов конфигурации:

AUTOSTART=”all”

Теперь «достаточно одной таблэтки» в виде:

sudo service openvpn start

и скрипт из /etc/init.d/openvpn заботливо запустит OpenVPN для всех найденных конфигураций.

Остановка демона также не очень сложна:

sudo service openvpn stop

И напоследок. Если вам понадобилось, чтобы ни один из существующих в /etc/openvpn конфигурационных файлов не обрабатывался, достаточно определить в /etc/default/openvpn:
AUTOSTART=”none”

Источник: http://ashep.org/2010/ustanovka-i-nastrojka-openvpn-klienta/

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

Установка и настройка OpenVPN для Ubuntu

Настоящая частная виртуальная сеть или Virtual Private Network (VPN)  – это зашифрованное соединенный туннель между двумя сетями, который соединяет две доверенные точки. Это не веб-протокол HTTPS, который считает доверенными всех клиентов. К VPN могут подключиться только те клиенты, которые имеют специальные ключи доступа.

Понятие VPN в наши дни стало очень растянутым, после появления частных виртуальных сетей, которые доверяют всем и распространения HTTPS.

Многие из сетей VPN представляют из себя коммерческие решения с минимальным количеством настроек для обеспечения удаленного доступа сотрудников. Но не все доверяют этим решениям.

Частная виртуальная сеть соединяет две сети в одну, например, сеть офиса и домашнюю сеть работника. Сервер VPN необходим для того чтобы сервер и клиент могли пройти аутентификацию друг с другом.

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

Вам понадобится два узла в разных сетях чтобы организовать тестовое окружение, например, можно использовать несколько виртуальных машин или реальные серверы.

Как вы уже поняли, в этой статье будет рассмотрена настройка OpenVPN в Ubuntu для создания полноценной частной виртуальной сети.

Настройка центра сертификации

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

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

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

Обратите внимание, что все секретные ключи должны находится в надежном месте. В OpenVPN открытый ключ называется сертификатом и имеет расширение .crt, а закрытый ключ так и называется ключом, его расширение – .key.

Сначала создайте папку для хранения сертификатов Easy-RSA. Фактически, конфигурация OpenVPN выполняется вручную, так что папку можно разместить где угодно:

sudo mkdir /etc/openvpn/easy-rsa

Затем скопируем в эту папку все необходимые скрипты easy-rsa:

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

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

cd /etc/openvpn/easy-rsa/

sudo -i# source ./vars# ./clear-all

# ./build-ca

Первой командной мы переключаемся в консоль от имени суперпользователя, второй загружаем переменные окружения из файла ./vars. Команда ./clear-all создает папку keys если ее нет и очищает ее содержимое. И последняя команда инициализирует наш центр сертификации. Теперь в папке .keys появились все необходимые ключи:

Настройка сертификатов клиента

Дальше нужно повторить процедуру копирования скриптов управления RSA, как мы это делали на сервере:

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

Теперь нам нужно скопировать сертификат, файл с расширением .crt в папку /etc/openvpn на всех клиентах. Например, скачаем этот файл для нашего клиента с помощью scp:

sudo scp пользователь@хост:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

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

cd /etc/openvpn/easy-rsa/

sudo -i# source ./vars

# build-req Sergiy

Обратите внимание, что ca.crt должен лежать в папке с ключами, иначе ничего не сработает. Теперь утилита создаст ключ, на основе которого, вы сможете подключиться к OpenVPN серверу, но вам еще осталось подписать его на сервере. Отправьте полученный .csr файл на сервер с помощью того же самого scp:

scp /etc/openvpn/easy-rsa/keys/Sergiy.csr пользователь@хост:~/

Затем уже на сервере в папке /etc/openvpn/easy-rsa нужно выполнить команду подписи сертификата:

./sign-req ~/Sergiy

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

sudo scp пльзователь@хост:/home/Sergiy.crt /etc/openvpn/easy-rsa/keys

Только после этого сервер и клиент имеют все необходимые ключи для подключения и установки связи. Осталось еще несколько настроек. Если вы планируете использовать шифрование TLS, то необходимо создать на сервере набор данных Диффи-Хафмана, для этого используйте команду:

./build-dh

Дальше будет рассмотрена настройка OpenVPN для сервера и клиента, осталось совсем немного до получения рабочей конфигурации.

Настройка OpenVPN

Теперь настройка сервера OpenVPN. По умолчанию, в папке конфигурационных файлов OpenVPN ничего нет. Их нужно создать самостоятельно в зависимости от того, что планируется настраивать, сервер или клиент. Нужный файл конфигурации OpenVPN можно найти по адресу /usr/share/doc/openvpn/examples/sample-config-files/. Сначала создадим конфигурационный файл для сервера:

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Здесь вам нужно настроить несколько параметров:

port и proto – порт и протокол, по которым будет работать программа;

port 1194
proto udp

Все созданные ключи нужно прописать в конфигурационном файле. Наши ключи хранятся по адресу /etc/openvpn/easy-rsa/keys:

ca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/ca.crtkey /etc/openvpn/easy-rsa/keys/ca.key

dh /etc/openvpn/easy-rsa/keys/dh.pem

Настраиваем диапазон адресов для виртуальной сети, наш сервер будет доступен по первому из них – 10.8.0.1:

server 10.8.0.0 255.255.255.0

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

port 1194proto udpcomp-lzodev tunca /etc/openvpn/easy-rsa/2.0/keys/ca.crtcert /etc/openvpn/easy-rsa/2.0/keys/ca.crtdh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pemtopology subnetserver 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

Настройка сервера OpenVPN завершена. Дальше необходимо запустить OpenVPN сервер. Это можно сделать прямо из командной строки, просто укажите адрес конфигурационного файла:

openvpn /etc/openvpn/server.conf

Дальше нам нужно настроить компьютер клиента. Вы можете аналогично скопировать конфигурационный файл из директории с примерами, только на этот раз его не нужно распаковывать:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf  /etc/openvpn/client.conf

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

remote – это ваш адрес сервера OpenVPN, адрес и порт должны совпадать с настроенными на сервере, например:

remote 194.67.215.125 1194

ca – ключ, который вы получили от центра сертификации, мы расположили его в папке /etc/openvpn/.

cert и key – это открытый и секретный ключи клиента, с помощью них вы и будете подключаться к серверу. Как вы помните, мы сохранили их в папке /etc/openvpn/easy-rsa/keys/.

ca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/Sergiy.crt

key /etc/openvpn/easy-rsa/keys/Sergiy.key

Остальные настройки можно оставить как есть. Вот файл настройки целиком, который вы можете скопировать:

clientdev tunproto udpremote 194.67.215.125 1194resolv-retry infinitenobindpersist-keypersist-tunca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/Sergiy.crtkey /etc/openvpn/easy-rsa/keys/Sergiy.keytls-auth ta.key 1comp-lzo

verb 3

Сохраните настройки, теперь клиент готов к подключению. Обратите внимание, что конфигурационные файлы должны максимально совпадать, отсутствие определенных опций в одном из файлов может привести к ошибкам. Это не значит, что файлы будут идентичны, но основные параметры openvpn должны быть одинаковыми. Вам осталось запустить OpenVPN на этой машине используя этот конфигурационный файл:

openvpn /etc/openvpn/client.conf

Готово, теперь все работает, если вы выполните ifconfig, то увидите что был добавлен интерфейс tun0:

ifconfig

Также вы можете попробовать выполнить ping адреса 10.8.0.1, именно этот адрес мы настроили для нашего сервера OpenVPN, пакеты ping будут нормально отправляться.

Если пакеты не идут, или еще что-то не работает, обратите внимание на вывод обоих программ, возможно, возникли какие-либо ошибки или предупреждения, также убедитесь, что брандмауэр сервера разрешает доступ извне по udp для порта 1194. Еще можно запустить сервер или клиент, настроив в конфиге уровень подробности на максимум verb 9.

Очень часто это помогает понять почему что-то не работает. Но вы еще не можете направлять трафик через туннель. Для этого нужно разрешить форвардинг и добавить несколько правил iptables. Сначала разрешаем транзит пакетов на сервере:

 sysctl -w net.ipv4.ip_forward=1

Затем добавьте такие правила. Разрешаем всем подключаться к нашему серверу:

 iptables -A INPUT -p udp –dport 1194 -j ACCEPT

Разрешаем пользователям OpenVPN доступ к интернету:

 iptables -I FORWARD -i tun0 -o eth0 -j ACCEPT# iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Выводы

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

Источник: https://losst.ru/nastrojka-openvpn-v-ubuntu

Установка и настройка OpenVPN в Linux – ИТ Проффи

Установка и настройка OpenVPN для Ubuntu

VPN – Virtual Private Network, т. е. защищённая частная сеть, которая объединяет в себе несколько разных сетей, соединённых через Интернет. OpenVPN – это свободная реализация этой технологии.

Сети VPN удобны тем, что позволяют получить доступ к частным сетям из любой точки в сети Интернет верифицированным клиентам. Многие организации таким образом строят свои локальные или интрасети, когда их офисы (сервера и компьютеры) расположены далеко (даже на разных континентах) друг от друга.

Это единственный вариант в такой ситуации поскольку аренда выделенного физического канала связи (кабели по дну моря например) — слишком дорогое удовольствие.

Таким образом сотрудники могут подключаться к сети своей организации из дома или из любой другой точки, имея только доступ в интернет и специальный ключ. Именно с помощью ключей шифрования организуется туннели связи, объединяющие разные сети в одну защищённую VPN-структуру.

Что для этого нужно?

Настройка OpenVPN требует наличия следующих компонентов:

  • несколько компьютеров-клиентов для организации, собственно, инфраструктуры сети VPN;
  • OpenVPN на всех компьютерах-клиентах;
  • Easy-RSA – для организации центров сертификации и работы с ключами, также на всех компьютерах;
  • корректно настроенный центр сертификации.

Следует отметить, что центр сертификации (ЦС) рекомендуется использовать на отдельной машине. ЦС служит для обслуживания запросов на сертификаты.

Установка ПО

Это, пожалуй самый простой этап. Здесь достаточно воспользоваться менеджером пакетов или системой управления пакетами (СУП) для установки требуемых пакетов ПО. Для любого из популярных дистрибутивов Linux они доступны из стандартный репозиториев. Например, для Ubuntu 18.04:

$ sudo apt install openvpn easy-rsa

В зависимости от используемого дистрибутива наименования пакетов могут различаться. Оба пакета нужно устанавливать и на сервере, и у клиентов.

Организация центра сертификации

Это очень важный этап, поскольку от наличия собственного ЦС зависит безопасность организуемой сети VPN. Также это удобно, поскольку собственный ЦС позволяет легко управлять ключами и сертификатами, а также распространять их для клиентов. Также отпадает необходимость хранения всех сертификатов клиентов, поскольку их подписи находятся у ЦС.

ЦС будет находиться в каталоге /etc/openvpn/easy-rsa. Вообще, ЦС можно разместить где угодно. Также необходимо скопировать в хранилище конфигурационные скрипты Easy-RSA:

sudo mkdir /etc/openvpn/easy-rsa sudo cp -R /usr/share/easy-rsa /etc/openvpn/easy-rsa

Теперь необходимо развернуть сам ЦС в каталоге /etc/openvpn/easy-rsa. Для этого следует выполнить в нём некоторые скрипты (которые ранее были сюда скопированы) для создания инфраструктуры для работы ЦС:

$ sudo -i # cd /etc/openvpn/easy-rsa # source ./vars # ./clean-all # ./build-ca

Для удобства командная консоль была переведена в «суперпользовательский» режим командой sudo -i. Вторая команда устанавливает все необходимые переменные окружения.

Третья команда проверяет, существует ли каталог keys/ и если его нет, то создаёт его. Если он существует, то производится очистка его содержимого. Далее устанавливаются необходимые режимы доступа.

Четвёртая команда помещает в keys/ серверные ключи и сертификаты по-умолчанию.

Генерация и настройка ключей клиентов

На данном этапе нужно произвести похожие настройки для Easy-RSA на клиентских машинах, с той лишь разницей, что генерировать ключи нужно на основе главного сертификата серверной машины, на которой работает OpenVPN-сервер. Главный сертификат нужно скопировать на клиентские машины. Но для начала следует создать инфраструктуру клиентского окружения для работы с ключами:

$ sudo cp -R /usr/share/easy-rsa /etc/openvpn/easy-rsa

Далее, нужно скопировать главный сертификат сервера (файл *.crt) на все клиентские компьютеры. Для этого удобно использовать утилиту scp:

$ sudo scp username@host:/etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/easy-rsa/keys

Далее можно создавать (генерировать) клиентские ключи, используя скопированный с сервера сертификат. Для этого на клиентском компьютере в каталоге /etc/openvpn/easy-rsa нужно выполнить следующие команды:

$ sudo -i # cd /etc/openvpn/easy-rsa # source ./vars # build-req JohnВажно понимать, что для того, чтобы генерация клиентских ключей была возможной, необходимо, чтобы серверный сертификат находился в каталоге keys/ у клиентов.

Сгенерированные в результате клиентские ключи позволяют подключаться к серверу OpenVPN. Однако, для того, чтобы сервер их принимал и предоставлял доступ к VPN-сети, необходимо, чтобы эти ключи (файлы *.

csr) были подписаны на самом сервере. Можно также, используя SCP, отправить их на сервер:

$ scp /etc/openvpn/easy-rsa/keys/John.csr username@host:~/

Теперь, на сервере, предварительно перейдя в каталог /etc/openvpn/easy-rsa, можно выполнить подпись переданного ключа John.csr:

$ sudo -i #  cd /etc/openvpn/easy-rsa # ./sign-req ~/John

В результате будет создан уже подписанный сервером сертификат, который необходимо отдать клиенту:

$ sudo scp username@host:/home/John.crt /etc/openvpn/easy-rsa/keys

На этом организация инфраструктуры для работы с ключами (и сертификатами) завершена. Теперь этого достаточно, чтобы сервер OpenVPN и клиенты установили защищённую связь.

Однако необходимо ещё произвести некоторые настройки самой системы OpenVPN.

Также, если планируется для более надёжной защиты использовать TLS-шифрование, то на стороне сервера всё в том же в каталоге /etc/openvpn/easy-rsa выполнить команду:

$ ./build-dh

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

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

Для более удобного задания конфигурации существуют файлы-шаблоны, доступные в /usr/share/doc/openvpn/examples/sample-config-files/. На их основе можно относительно быстро сконфигурировать целый сервер OpenVPN или его клиент:

$ zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Эта команда (точнее конвейер команд) извлечёт и архива server.conf.gz текстовые данные и создаст из них конфигурационный файл server.conf с базовыми настройками работы OpenVPN-сервера. Теперь нужно задать, собственно, актуальные опции. Протокол и номер порта:

port 1194 proto udp Серверные ключи и сертификаты из каталога /etc/openvpn/easy-rsa/keys также необходимо определить в конфигурации:
ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/ca.crt key /etc/openvpn/easy-rsa/keys/ca.key dh /etc/openvpn/easy-rsa/keys/dh.pem

Также нужно указать диапазон VPN-сети:

server 10.8.0.0 255.255.255.0

Эта запись определяет адрес самого OpenVPN-сервера (10.8.0.0), а также маску его сети. В итоге рабочая конфигурация должна выглядеть следующим образом:

port 1194 proto udp comp-lzo dev tun ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/ca.crt dh /etc/openvpn/easy-rsa/keys/dh.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt

Теперь можно сохранить файл server.conf. Настройка сервера OpenVPN завершена. Далее нужно выполнить его запуск с помощью команды openvpn, указав соответствующий конфигурационный файл:

$ openvpn /etc/openvpn/server.conf

Настройка клиентов OpenVPN

Теперь необходимо настроить клиентские машины. Также нужно воспользоваться файлами шаблонами, но они доступны без распаковки:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf

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

remote 194.67.215.125 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/John.crt key /etc/openvpn/easy-rsa/keys/John.key

Здесь remote задаёт IP-адрес сервера OpenVPN в Интернет, а также порт подключения, который должен совпадать с тем, что указан в серверной конфигурации. Параметр ca – это серверный сертификат, а cert – созданный на его основе ключ John.

csr, а теперь подписанный сертификат John.crt. Параметр key – это закрытый ключ клиента. Следует отметить, что именно при помощи параметров cert и key обеспечивается подключение клиентов к сети VPN.

Готовая рабочая клиентская конфигурация будет следующей:

client dev tun proto udp remote 194.67.215.125 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/John.crt key /etc/openvpn/easy-rsa/keys/John.key tls-auth ta.key 1 comp-lzo verb 3

Теперь можно запускать OpenVPN на клиентском компьютере:

$ openvpn /etc/openvpn/client.conf

После этого, если всё настроено правильно, клиенты подключатся к VPN. Но на этом ещё не всё. Необходимо настроить перенаправление для туннеля VPN, чтобы пользователи могли направлять и получать через него трафик. Для начала необходимо разрешить серверу пропускать пакеты:

$ sysctl -w net.ipv4.ip_forward=1

Затем разрешить всем подключаться к серверу OpenVPN:

$ iptables -A INPUT -p udp –dport 1194 -j ACCEPT

Ну а также разрешить клиентам доступ в интернет через туннель:

iptables -I FORWARD -i tun0-o eth0 -j ACCEPT iptables -I FORWARD -i eth0 -o tun0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Предыдущие три правила iptables стоит применять, когда в сети действует запрещающая политика. Также нужно следить за тем, чтобы брандмауэр не блокировал подключения по протоколу UDP к OpenVPN-серверу.

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.