После завершения настройки OpenVPN сервер сможет принимать и перенаправлять внешние защищенные SSL сетевые подключения к созданному при запуске VPN-сервиса виртуальному сетевому удаптеру (tun/tap), не затрагивая правила обработки трафика других интерфейсов (внешний интернет-адаптер и др.) Благодаря этой технологии вы можете обеспечить себе доступ к удаленному серверу и находящейся в его локальной сети группе устройств даже в том случае, если основной интернет-адаптер этого сервера не принимает входящие подключения из публичных сетей и/или не осуществляет их маршрутизацию до необходимых машин, находящихся в его LAN-сети.
При необходимости вы также можете настроить маршрутизацию интернет-трафика OpenVPN-клиентов через VPN-сервер (необходимые для этого действия описаны в данной инструкции). При такой переадресации обрабатывающий VPN-подключения хост будет выполнять и функцию прокси-сервера (Proxy) - унифицировать правила сетевой активности пользователей и осуществлять туннелирование клиентского интернет-трафика от своего имени.
Прежде чем приступить к установке OpenVPN, убедитесь что на вашем сервере корректно настроены необходимые базовые параметры, приведенные ниже. (если вы используете виртуальный сервер , эти три пункта уже выполнены и их можно пропустить):
Для обеспечения приемлемого уровня безопасности машины рекомендуем также предварительно ознакомиться с содержанием нашей вводной статьи по конфигурации инструментов безопасности Linux.
Чтобы установить пакет openvpn на сервер, необходимо последовательно выполнить приведенные ниже команды:
На данном этапе нужно сгенерировать и подписать пары пользовательских и серверных ключей. Для заверения созданных пар мы будем использовать центр сертификации (CA - Certificate Authority) , находящийся на самом VPN -сервере. Итак, создадим CA:
Параметры протокола Диффи-Хеллмана определяют метод обмена данными между сервером и клиентами OpenVPN. Создав файл .pem , мы укажем параметры, в соответствии с которыми сервер будет инициировать защищенные соединения с пользователями.
Сгенерировать.pem файл следует с помощью команды: ./build-dh В ответ будет отображен набор случайных символов, говорящий о том, что идет процесс генерации. После завершения процедуры в директории etc/openvpn/easy-rsa/keys появится файл dh1024.pem .
После генерации ключей необходимо перенести их в директории, используемые серверным/клиентскими приложениями OpenVPN.
На сервере:
На клиентском устройстве:
Скопируйте файлы ca.crt, client1.crt, client1.key в используемую приложением OpenVPN папку клиентского устройства (например, для Linux это /etc/openvpn)
В этом разделе инструкции мы создадим два файла конфигурации. Первый - файл настроек для OpenVPN-сервера, второй - параметры vpn-подключения для клиентского устройства. Для каждого клиента OpenVPN необходимо использовать свой собственный файл конфигурации (исключение - подключение нескольких пользователей с использованием одной общей для всех пары ключей).
Внимание! Так как мы еще не настроили туннелировние всего интернет-трафика через VPN-сервер, доступ в интернет на клиентском устройстве после подключения его к виртуальной частной сети перестанет функионировать. Инструкция по маршрутизации интернет-трафика пользователей через VPN сервер представлена ниже.Б.
В данной конфигурации мы настроим маршрутизацию всего трафика пользователей VPN через OpenVPN-сервер с сохранением SSL-шифрования от клиента до сервера.
OpenVPN — это программный комплекс, позволяющий защитить от «прослушки» интернет-трафик пользователя, обеспечивая зашифрованную передачу данных от устройства клиента до сервера с установленным OpenVPN. Отлично подходит при использования публичных wifi точек доступа, где информация может быть перехвачена третьими лицами. Или в случае, когда ваш ip заблокирован на определённом сайте и нужно безопасно обойти это ограничение.
Помимо установки и настройки ОпенВПН на сервере, необходимо уметь настроить клиент для доступа с компьютера, где в качестве операционной системы будет использоваться Windows.
Используя стандартный менеджер пакетов, установим openvpn.
# aptitude install openvpn
ОпенВПН в обязательном порядке требует генерации сертификатов для сервера и клиентов. Это и логично, ведь соединение от клиента до сервера должно быть зашифровано.
Перейдите в папку openvpn:
# cd /etc/openvpn
Генерировать ключи мы будем с помощью easy-rsa.
Создаём папку с конфигурационными файлами и ссылками на скрипты генерации сертификатов:
# make-cadir rsa # cd rsa
Откройте конфигурационный файл vars и измените параметры:
Export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="[email protected]"
KEY_COUNTRY
— укажите код страны (RU, UA и т.д.);
KEY_PROVINCE
— данный пункт не актуален, если вы не проживаете в США. :) Можно заменить на XX;
KEY_CITY
— ваш город, где вы проживаете;
KEY_EMAIL
— адрес вашей электропочты.
А также раскомментируйте строку export KEY_CN, в качестве значения для которой укажите имя сервера:
Export KEY_CN="example.com"
Все переменные заполняются латиницей.
Сохраните файл и запустите его выполнение:
# . vars
Затем запустите удаление старых сертификатов:
# ./clean-all
Создайте корневой сертификат:
# ./build-ca
Если при генерации корневого сертификата вы получите ошибку error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 198 , добавьте в файл vars строку:
Export KEY_ALTNAMES="something"
А после заново выполните предыдущие команды: . vars, ./clean-all, ./build-ca.
Следующий шаг — создание ключа и сертификата сервера.
# ./build-key-server server
После чего создайте сертификат и ключ для клиента:
# ./build-key client
Обратите внимание: для каждого клиента следует генерировать собственные сертификат и ключ. Нужно лишь указывать разные имена (вместо client) и изменять пути к ним в конфигурационных файлах. При этом, вы можете защитить ключи клиентов паролем, для этого используйте команду build-key-pass вместо build-key.
# ./build-dh
И ключ для tls-аутентификации:
# openvpn --genkey --secret /etc/openvpn/ta.key
Теперь необходимо скопировать серверные сертификаты и ключи в папку настроек OpenVPN:
# cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/
А также выставить на них права, разрешающие чтение и изменение только для их владельца.
# chmod 0600 /etc/openvpn/ca.crt /etc/openvpn/server.crt /etc/openvpn/server.key /etc/openvpn/dh2048.pem /etc/openvpn/ta.key
Обязательно скопируйте себе на компьютер, например, на рабочий стол, из папки keys ключи, необходимые для подключения клиента: client.crt , client.key , ca.crt , ta.key .
На этом процесс подготовки сертификатов закончен.
В каталоге /usr/share/doc/openvpn/ располагается файл-пример для настройки сервера Openvpn. Скопируйте его в каталог /etc/openvpn/ и разархивируйте:
Cd /etc/openvpn;cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/;gunzip server.conf.gz
Теперь рассмотрим необходимые для работы openvpn параметры.
Порт, на котором Openvpn будет принимать соединения. По-умолчанию, 1194. Рекомендую изменить его в целях сокрытия. Можно даже замаскировать опенвпн под Web-сервер, указав порт 80.
Port 20100
Прописываем пути к файлам сертификатов и ключа сервера.
Ca ca.crt cert server.crt key server.key
Путь к ключу Диффи-Хеллмана.
Dh dh2048.pem
Могут быть указаны как пути относительно каталога /etc/openvpn (если файлы размещены в нём), так и абсолютные.
Находим и раскомментируем строку:
Push "redirect-gateway def1 bypass-dhcp"
Она нужна для возможности выхода в интернет через сервер ОпенВПН. Если её не раскомментировать, то будут доступны лишь компьютеры внутри сети.
Также нужно указать dns-серверы для подключающихся клиентов.
Push "dhcp-option DNS 213.183.57.55" push "dhcp-option DNS 87.98.175.85"
В зависимости от местоположения сервера, можно подобрать другие dns-серверы, например, на проекте OpenNIC .
Tls-auth ta.key 0
Внимание! В настройках клиента последняя цифра этого параметра должна быть заменена на 1 — tls-auth ta.key 1 .
Чуть ниже в конфигурационном файле следует перечисление доступных шифров. Раскомментируйте шифр AES-128-CBC .
Cipher AES-128-CBC # AES
При необходимости, его можно заменить на AES-256-CBC . В конфигурационном файле клиента шифр должен быть идентичен серверному шифру.
Также добавьте параметр auth. По-умолчанию, для аутентификации используются ключи sha1 длиной 160 бит, но алгоритм sha1 признан уязвимым. При указании нижеследующего параметра будут использоваться ключи SHA512 длиной 512 бит.
Auth SHA512
А также параметр tls-version-min, который определяет используемую версию tls. В данном случае, последнюю версию 1.2. Внимание! Network Manager не поддерживает (на момент написания статьи) этот параметр. Поэтому, если вы планируете подключаться к ВПН серверу через Network Manager, то этот параметр НЕ прописываем в настройках сервера.
Tls-version-min 1.2
OpenVPN не следует запускать от имени root. Поэтому раскомментируйте строки:
User nobody group nogroup
Не лишним будет включение логов для OpenVPN. Особенно, на первых порах использования после настройки для поиска ошибок и т.д.
Log /var/log/openvpn.log
Все остальные параметры конфигурационного файла /etc/openvpn/server.conf оставьте со значениями по-умолчанию. На этом настройка сервера OpenVPN закончена.
Активируйте openvpn командой:
# systemctl enable openvpn
И перезапустите:
# service openvpn restart
Также нелишним будет проверить лог на наличие ошибок.
Чтобы иметь возможность выхода в интернет через сервер опенвпн, необходимо кое-что сделать для этого.
1. Настроить sysctl
В консоли запустите команду:
# sysctl net.ipv4.ip_forward
Если вывод команды будет равным net.ipv4.ip_forward = 1 , то изменять что-либо не требуется. Если же значение переменной будет равно 0, то в файл /etc/sysctl.conf нужно добавить строку:
Net.ipv4.ip_forward = 1
И перезагрузить правила командой:
# sysctl -p
2. Настроить iptables
Поочерёдно выполните в консоли следующие команды:
# iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT # iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Таким образом, мы разрешим пропускать трафик через сервер OpenVPN для подсети 10.8.0.0 в рамках уже установленных соединений.
Если клиенту openvpn нужно присвоить определённый внешний ip адрес сервера, то вместо последней команды из списка предыдущих для iptables, необходимо выполнить эту:
A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 127.0.0.1
Где после параметра —to-source следует указать внешний ip сервера.
Приступаем к настройке Openvpn клиента на Windows. Здесь всё просто: с официального сайта, устанавливаем, создаём конфигурационный файл и запускаем.
Стоит отметить, что запускать опенвпн на Windows следует с правами администратора, если активен контроль учётных записей.
Если вы не меняли путь установки, то примеры конфигурационных файлов на вашем ПК располагаются в каталоге C:\Program Files\OpenVPN\sample-config . Скопируйте отсюда файл client.ovpn и поместите его в каталог C:\Program Files\OpenVPN\config .
Помните о созданных для клиента сертификатах? Их тоже следует скачать с сервера и скопировать в этот каталог.
Откройте конфигурационный файл client.ovpn и найдите параметр remote my-server-1 1194 . Вместо my-server укажите ip или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:
Ca ca.crt cert client.crt key client.key
Также следует раскомментировать параметр, который указывает путь к tls-ключу.
Tls-auth ta.key 1
Ранее уже говорилось о том, что последняя цифра на сервере должна быть 0, на клиенте — 1.
И последние параметра — это шифры, которые вы установили на сервере.
Cipher AES-128-CBC auth SHA512 tls-version-min 1.2
Это всё, что требуется для настройки клиента. Попробуйте запустить клиент OpenVPN и подключиться к вашему серверу. Необходимая информация о подключении будет отображена в окошке openvpn gui.
Устанавливаем графический интерфейс для Network Manager.
# aptitude install network-manager-openvpn-gnome
И перезапускаем.
# service network-manager restart
Копируем сгенерированные для клиента сертификаты в произвольную папку на комьютере. Например, в /home/user/.openvpn/.
Кликаем правой клавишей мыши на значке network manager, выбираем пункт «изменить соединения», добавляем новое подключение типа «OpenVPN».
Указываем:
Сертификат пользователя — сертификат, который мы сгенерировали в начале для клиента (client.crt).
Сертификат ЦС — файл ca.crt.
Личный ключ — ключ клиента (client.key).
Нажимаем на кнопку «Дополнительно». В открывшемся окне, во вкладке «Общие» потребуется изменить несколько пунктов.
Переключаемся на вкладку «Безопасность». Выбираем шифр, как в параметрах сервера. В качестве значения параметра «Аутентификация hmac» следует указать алгоритм, как в значении auth сервера. В статье мы выбрали SHA512.
Открываем вкладку «Аутентификация TLS» и отмечаем галочкой пункты:
Для последнего параметра указываем путь к файлу ta.key, в качестве направления ключа из выпадающего списка выбираем 1. Аналогично конфигурационному файлу для Windows.
Сохраняем соединение и пытаемся подключиться. :)
На всякий случай, смотрим, что пишет NM при подключении в системный лог:
# tail -f /var/log/syslog
Вконтакте
Июнь 19, 2018 11:32 дп 2 171 views | Комментариев нетОбновите индекс пакетов:
Пакет OpenVPN доступен в репозиториях по умолчанию, поэтому для установки можно использовать apt. Также вам понадобится пакет easy-rsa, который поможет создать внутренний центр сертификации (ЦС или CA) для VPN.
apt-get install openvpn easy-rsa
Образец конфигурационного файла VPN нужно извлечь из /etc/openvpn и добавить его в свою установку. Для этого используйте команду:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Затем откройте server.conf в текстовом редакторе:
nano /etc/openvpn/server.conf
В файл нужно внести пару изменений.
Для начала увеличьте длину RSA-ключа вдвое. Для этого найдите строку:
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem
И измените ее значение на dh2048.pem:
dh dh2048.pem
Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер OpenVPN.
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"
В итоге строка должна выглядеть так:
push "redirect-gateway def1 bypass-dhcp"
Также нужно позволить серверу использовать OpenDNS для разрешения DNS, если это возможно. Это поможет предотвратить утечку DNS-запросов за пределы VPN-соединения.
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
Раскомментируйте строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220».
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Теперь определите права доступа в server.conf:
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup
Раскомментируйте обе строки:
user nobody
group nogroup
По умолчанию OpenVPN работает как пользователь root и, таким образом, имеет полный корневой доступ к системе. OpenVPN нужно ограничить в правах, и для этого нужно использовать nobody и nogroup. Это непривилегированный пользователь, не имеющий возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений.
Сохраните и закройте файл.
Это параметр sysctl, который сообщает ядру сервера пересылать трафик с клиентских устройств в Интернет. В противном случае трафик остановится на сервере. Включить пересылку пакетов можно с помощью этой команды:
echo 1 > /proc/sys/net/ipv4/ip_forward
Сделайте это значение постоянным, чтобы оно восстанавливалось после перезагрузки:
nano /etc/sysctl.conf
Найдите строку net.ipv4.ip_forward.
#net.ipv4.ip_forward=1
Раскомментируйте ее:
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Сохраните и закройте файл.
ufw является интерфейсом iptables. Настройка ufw довольно проста. Вам нужно добавить несколько правил и внести пару изменений в конфигурации, а затем включить его.
Установите ufw:
apt-get install ufw
Включите поддержку SSH:
В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.
ufw allow 1194/udp
Необходимо также настроить политику маршрутизации UFW. Мы сделаем это в главном файле конфигурации UFW.
nano /etc/default/ufw
Найдите DEFAULT_FORWARD_POLICY=»DROP». Значение в кавычках замените на ACCEPT.
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните и закройте файл.
Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.
nano /etc/ufw/before.rules
Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:
# 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
# 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 enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Выберите y:
Firewall is active and enabled on system startup
Теперь проверьте правила и состояние брандмауэра:
ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
1194/udp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
1194/udp (v6) ALLOW Anywhere (v6)
Для шифрования трафика OpenVPN использует сертификаты.
В этом разделе мы создадим ЦС в два этапа: первый – установка переменных, второй – генерирование ЦС.
OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен аутентифицировать сертификат сервера, а сервер должен аутентифицировать сертификат клиента для установления взаимного доверия.
Скопируйте сценарии Easy-RSA:
cp -r /usr/share/easy-rsa/ /etc/openvpn
Создайте каталог для ключей:
mkdir /etc/openvpn/easy-rsa/keys
Easy-RSA предоставляет файл переменных, который можно редактировать, чтобы создавать сертификаты с заранее определенными значениями по умолчанию. Эта информация копируется в сертификаты и ключи и поможет идентифицировать ключи позже.
nano /etc/openvpn/easy-rsa/vars
Значения, выделенные красным, нужно заменить своими данными:
export KEY_COUNTRY="US
"
export KEY_PROVINCE="TX
"
export KEY_CITY="Dallas
"
export KEY_ORG="My Company Name
"
export KEY_EMAIL="[email protected]
"
export KEY_OU="MYOrganizationalUnit
"
В том же файле vars отредактируйте строку, приведенную ниже. Для простоты мы в качестве имени рекомендуется использовать server. Если вы хотите использовать другое имя, вам необходимо будет обновить файлы конфигурации OpenVPN, ссылающиеся на server.key и server.crt. Найдите:
# X509 Subject Field
export KEY_NAME="EasyRSA
"
И измените ее значение:
# X509 Subject Field
export KEY_NAME="server
"
Сохраните и закройте файл.
Теперь нужно сгенерировать ключ Диффи-Хеллмана; это может занять несколько минут. Флаг -out указывает, куда сохранять новые параметры.
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Перейдите в каталог:
cd /etc/openvpn/easy-rsa
Инициализируйте PKI (инфраструктуру открытого ключа). Обратите внимание на точку (.) и пробел перед./varscommand. Это определяет текущий рабочий каталог.
Команда вернет такой результат. Поскольку в каталоге keys пока ничего нет, это нормальный вывод.
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Теперь нужно очистить рабочий каталог от любых возможных старых ключей или образцов файлов, чтобы освободить место для новых ключей.
Эта последняя команда создает центр сертификации (CA), вызывая интерактивную команду OpenSSL. На выходе будет предложено подтвердить переменные, которые ранее вы определили в файле Easy-RSA (название страны, организация и т. д.).
Чтобы принять значения по умолчанию, просто нажмите Enter.
ЦС готов.
Оставаясь в каталоге /etc/openvpn/easy-rsa, теперь введите команду для создания ключа сервера. Значение server – это переменная export KEY_NAME, которую вы установили в файле Vars Easy-RSA.
./build-key-server server
Команда сгенерирует почти такой же вывод, как при запуске./build-ca, и вы сможете снова нажать Enter для подтверждения значений по умолчанию. Однако на этот раз есть еще две строки:
A challenge password :
An optional company name :
Обе строки оставьте пустыми, просто нажав Enter.
В конце появится еще две строки, в которых нужно ответить y:
Sign the certificate?
Последняя строка выведет:
Data Base Updated
OpenVPN будет искать ЦС, сертификат и ключ сервера в /etc/openvpn. Скопируйте их в правильное расположение.
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
Вы можете убедиться, что операция прошла успешно:
Вы должны увидеть сертификат и файлы ключей сервера.
Теперь сервер OpenVPN готов к запуску. Запустите его и проверьте состояние:
service openvpn start
service openvpn status
Последняя команда ответит:
* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled)
Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago
Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2505 (code=exited, status=0/SUCCESS)
Сервер OpenVPN работает!
Если же команда сообщает, что VPN не работает, проверьте /var/log/syslog:
Options error: --key fails with "server.key": No such file or directory
Эта ошибка говорит, что server.key был скопирован в /etc/openvpn некорректно. Скопируйте его снова и попробуйте запустить сервер.
Ранее вы установили и настроили сервер OpenVPN, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN.
Примечание : По умолчанию OpenVPN не поддерживает одновременных клиентских подключений к серверу, созданных с помощью одного сертификата и ключа (см. duplicate-cn в /etc/openvpn/server.conf).
Чтобы создать индивидуальные учетные данные для каждого устройства, которое вы собираетесь подключить к VPN, вы должны повторить этот раздел для каждого из них (но при этом нужно менять имя клиента, например client2 или iphone2). При наличии индивидуальных учетных данных устройства можно впоследствии деактивировать в индивидуальном порядке. В этом руководстве в примерах используется имя клиента client1.
Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.
./build-key client1
Вам будет снова предложено изменить или подтвердить переменные и эти две строки, которые должны быть пустыми. Нажмите Enter, чтобы принять значения по умолчанию.
Please enter the following "extra" attributes
to be sent with your certificate request
A challenge password :
An optional company name :
Как и раньше, следующие две строки в конце процесса сборки требуют ответа y:
Sign the certificate?
1 out of 1 certificate requests certified, commit?
Если сборка ключей была успешной, результат снова будет выглядеть так:
Write out database with 1 new entries
Data Base Updated
Пример конфигурационного файла клиента нужно скопировать в каталог ключей Easy-RSA и использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение.ovpn.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf
Повторите этот раздел для всех своих клиентов, меняя имя клиента.
Примечание: Имя дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора для самого VPN-соединения. Скопируйте client.ovpn с таким названием, которое будет использовать VPN в вашей операционной системе. Например: work.ovpn будет определяться как рабочая сеть, school.ovpn – как школьная и т.д.
Также нужно изменить каждый файл клиента и указать IP-адрес сервера OpenVPN, чтобы клиент знал, к чему подключаться. Откройте client.ovpn, используя nano или другой текстовый редактор.
nano /etc/openvpn/easy-rsa/keys/client.ovpn
Укажите вместо my-server-1 IP-адрес VPN в строке remote.
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1
1194
Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.
# Downgrade privileges after initialization (non-Windows only)
user nobody
group no group
Напомним, что клиентские сертификаты и ключи хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.
Теперь необходимо перенести файлы сертификата клиента, ключа и профиля в папку на этом клиентском устройстве.
Например, в данном случае файлы должны располагаться в etc/openvpn/easy-rsa/keys/client1.crt и /etc/openvpn/easy-rsa/keys/client1.key
Файлы ca.crt и client.ovpn одинаковы для всех клиентов. Загрузите эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге.
Выбор приложения для передачи зависит от вас и от операционной системы устройства, но рекомендуется выбирать приложения с поддержкой SFTP (протокол передачи файлов SSH) или SCP (Secure Copy). Это передаст файлы клиента по зашифрованному соединению.
Ниже приведен пример команды SCP. Она помещает файл client1.key в каталог Downloads на локальном компьютере.
scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/
Также вы можете использовать следующие приложения и мануалы:
Затем убедитесь, что на клиентском устройстве есть эти файлы:
Существует несколько способов управления клиентскими файлами, но самый простой – это использовать единый профиль. Профиль создается путем изменения файла шаблона client.ovpn и добавления центра сертификации сервера, сертификата клиента и его ключа. После этого в приложение OpenVPN клиента необходимо импортировать только профиль client.ovpn.
В приведенном ниже разделе нужно закомментировать три строки, чтобы включить сертификат и ключ непосредственно в файл client.ovpn. Это должно выглядеть следующим образом:
# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key
Сохраните и закройте файл client.ovpn.
Добавить сертификаты можно с помощью кода. Сначала добавьте ЦС:
echo "
cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
Затем добавьте сертификат:
echo "
cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
В конце добавьте ключ:
echo "
cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo "
Теперь у вас есть единый профиль, который можно скопировать на клиентское устройство.
На разных платформах есть более удобные приложения для подключения к серверу OpenVPN. Инструкции для установки клиентов на разных платформах вы найдете в разделе 5 мануала .
Теперь у вас есть полностью рабочая виртуальная частная сеть на сервере OpenVPN. Вы можете просматривать веб-страницы и загружать контент, не беспокоясь о злоумышленниках, отслеживающих вашу деятельность.
После того, как вы установили успешное соединение с клиентом, вы можете убедиться, что трафик маршрутизируется через VPN,
Данная хаутушка является выдержкой многих статей с минимальным описанием шагов и без воды. Подразумевается, что центр сертификации и OpenVPN сервер находятся на одном хосте. К тому же, надоело каждый раз гуглить по данной теме, т.к. подавляющее большинство руководств являются устаревшими, то уходит много времени на поднятие сервиса.
Поставить OpenVPN и создать одноименного пользователя, под которым будет работать демон:
Apt install openvpn adduser --system --no-create-home --disabled-login --group openvpn
Создать конфиг сервера openvpn со следующим содержимым:
Mcedit /etc/openvpn/server.conf port 1194 proto udp dev tun0 #user openvpn #group openvpn dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 #crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 ### Эти параметры требуют пояснений. # Пушить (передавать клиенту) свой DNS север push "dhcp-option DNS 192.168.0.1" # Пушить название домена push "dhcp-option DOMAIN mydomain.com" # Пушить маршрут локальной подсети. Для того, чтобы у клиентов был доступ до нее push "route 192.168.0.0 255.255.254.0" ### status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5
Создать каталоги для логов и хранения IP адресов клиентов:
Mkdir /var/log/openvpn/ mkdir /etc/openvpn/ccd
Перейти в домашний каталог, скачать и распаковать easyrsa 3 версии:
Cd wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip
Перейти в каталог easyrsa3 и объявить для него переменные:
Cd ~/easy-rsa-master/easyrsa3 cp ~/easy-rsa-master/easyrsa3/vars.example ~/easy-rsa-master/easyrsa3/vars
Инициализировать PKI (Public Key Infrastructure — Инфраструктура открытых ключей):
./easyrsa init-pki
Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name сервера, например my vpn server:
./easyrsa build-ca
Создать ключи Диффи-Хелмана:
./easyrsa gen-dh
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass), иначе при каждом старте OpenVPN будет запрашивать этот пароль:
./easyrsa gen-req vpn-server nopass
Создать сам сертификат сервера OVPN:
./easyrsa sign-req server vpn-server
Скопировать полученные ключи в рабочий каталог openvpn:
Mkdir -p /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/private/vpn-server.key /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn/keys
Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта:
Cd /etc/openvpn/keys/ openvpn --genkey --secret ta.key
Запустить openvpn:
/etc/init.d/openvpn start
Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User:
Cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-req User
./easyrsa gen-req User nopass
Создание ключа пользователя (по дефолту из vars сроком на 10 лет):
./easyrsa sign-req client User
Или с ограничением действия сертификата в 90 дней (после истечения срока можно только перевыпустить):
./easyrsa sign-req client User -days 90
Клиенту передать эти файлы:
~/easy-rsa-master/easyrsa3/pki/issued/User.crt ~/easy-rsa-master/easyrsa3/pki/private/User.key ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys/ta.key
Для удобства все пять клиентских файлов можно
Генерация файла отозванных ключей:
Cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-crl
Ln -s ~/easy-rsa-master/easyrsa3/pki/crl.pem /etc/openvpn/keys
В /etc/openvpn/server.conf добавить строку
Crl-verify /etc/openvpn/keys/crl.pem
Отзыв сертификата пользователя User:
./easyrsa revoke User
Каждый раз при отзыве сертификата необходимо обновлять crl.pem , чтобы внести в него изменения:
./easyrsa gen-crl
Примечание: одноименный файл ключа не может быть создан пока не отозван старый. При попытке создать сертификат с уже имеющимся именем выдаст ошибку:
Failed to update database Easy-RSA error: signing failed (openssl output above may have more detail)
Наткнулся на тред , поржал и решил дополнить заметку. Если OpenVPN нужен для выхода в интернет — надо сделать, чтобы OpenVPN был шлюзом по умолчанию (default gateway) и подправить правила iptables.
Собственно, конфиг для сервера:
Port 1194 proto udp dev tun0 dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 push "redirect-gateway def1" status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5
Конфиг для клиента не будет отличаться от приведенного выше.
Правила iptables:
# Включить форвард в ядре echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешить входящие соединения на порт OVPN iptables -A INPUT -p UDP --dport 1194 -j ACCEPT # Разрешить ходить транзитным пакетам для подсети OpenVPN iptables -A FORWARD -s 10.15.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.15.0.0/24 -j ACCEPT # x.x.x.x - внешний IP сервера, если он статический iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j SNAT --to-source x.x.x.x # Если внешний IP сервера динамический, то вместо предыдущего правила использовать это # iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j MASQUERADE
Для исключения возможности mitm атаки, ошибка которого так выглядит в логах клиента:
WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Служит параметр remote-cert-tls server , который уже присутствует в конфиге клиента.
Список валидных и отозванных сертификатов можно посмотреть в файле ~/easy-rsa-master/easyrsa3/pki/index.txt. Начало строки оисания каждого сертификата начинается с букв V или R , что значит Valid и Revoked, например:
V 241019110411Z 01 unknown /CN=vpn-server R 241019110842Z 141202085241Z 02 unknown /CN=User1 R 241020105823Z 141201103442Z 03 unknown /CN=test R 150301095139Z 141202085814Z 04 unknown /CN=User2 V 141203091049Z 05 unknown /CN=User3
Как видно, первый и пятый сертификаты валидны, 2-4 отозваны.
Поставить OpenVPN GUI, скачав отсюда . Скопировать клиентские ключи в C:\Program Files\OpenVPN\config\ . Скопировать конфиг клиента и вставить в файл client.ovpn , положить туда же. Всего в этом каталоге должно получиться пять файлов — User.crt, User.key, ca.crt, ta.key, client.ovpn .
Обязательно запустить OpenVPN GUI от имени администратора
, иначе в сиситеме не поднимутся маршруты, и произвести подключение двойным кликом по иконке в трее (такая область около часов, обычно в правом нижнем углу).