Независимо от того, хотите ли вы получить безопасный и надежный доступ в Интернет при подключении к ненадежной общедоступной сети Wi-Fi, обойти гео-ограниченный контент или позволить своим коллегам безопасно подключаться к сети вашей компании при удаленной работе, использование VPN — лучшее решение.
VPN позволяет вам подключаться к удаленным VPN-серверам, делая ваше соединение зашифрованным и безопасным, а также просматривать веб-страницы анонимно, сохраняя конфиденциальность ваших данных о трафике.
Вы можете выбрать из множества коммерческих VPN-провайдеров, но никогда нельзя быть по-настоящему уверенным, что провайдер не ведет журнал вашей активности. Самый безопасный вариант — настроить собственный VPN-сервер.
Это руководство проведет вас через процесс настройки вашего собственного VPN-сервера путем установки и настройки OpenVPN в Ubuntu 18.04. Мы также покажем вам, как генерировать сертификаты клиентов и создавать файлы конфигурации.
OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом Secure Socket Layer (SSL). Он реализует безопасное сетевое расширение OSI уровня 2 или 3 с использованием протокола SSL / TLS.
Содержание
Подготовка
Для выполнения этого урока вам понадобятся:
- Sudo доступ к серверу Ubuntu 18.04 для размещения вашего экземпляра OpenVPN.
- На сервере должен быть настроен базовый брандмауэр UFW .
- Отдельный выделенный компьютер, который будет служить вашим ЦС (центром сертификации). Если вы не хотите использовать выделенный компьютер для своего ЦС, вы можете создать ЦС на своем сервере OpenVPN или локальном компьютере. После того, как вы закончите создание CA, рекомендуется переместить каталог CA в безопасное место или автономно.
В этом руководстве предполагается, что центр сертификации находится на отдельном компьютере с Ubuntu 18.04. Те же шаги (с небольшими изменениями) будут применяться, если вы используете свой сервер в качестве центра сертификации.
Причина, по которой мы используем отдельную машину CA, заключается в том, чтобы предотвратить проникновение злоумышленников на сервер. Если злоумышленнику удастся получить доступ к закрытому ключу ЦС, он сможет использовать его для подписания новых сертификатов, что даст им доступ к серверу VPN.
Создание CA с помощью EasyRSA
При настройке нового сервера OpenVPN первым шагом является создание инфраструктуры открытого ключа ( PKI ). Для этого нам нужно создать следующее:
- Сертификат центра сертификации (CA) и закрытый ключ.
- Отдельный сертификат и пара закрытого ключа для сервера, выданный нашим центром сертификации.
- Отдельная пара сертификата и закрытого ключа для каждого клиента, выданная нашим центром сертификации.
Как упоминалось в предварительных требованиях по соображениям безопасности, мы создадим центр сертификации на автономном компьютере.
Для создания CA, запросов сертификатов и подписи сертификатов мы будем использовать утилиту CLI с именем EasyRSA.
Выполните следующие шаги на вашем компьютере CA.
-
Сначала загрузите последнюю версию EasyRSA из репозитория проекта Github с помощью следующей команды wget :
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
-
После завершения загрузки распакуйте архив с помощью:
tar xzf EasyRSA-nix-3.0.5.tgz
-
Перейдите в каталог EasyRSA и создайте файл конфигурации с именем
vars
, скопировав файлvars.example
:cd ~/EasyRSA-3.0.5/
cp vars.example vars
-
Откройте файл, раскомментируйте и обновите следующие записи, чтобы они соответствовали вашей информации.
nano ~/EasyRSA-3.0.5/vars
~ / EasyRSA-3.0.5 / варыset_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "Pennsylvania" set_var EASYRSA_REQ_CITY "Pittsburgh" set_var EASYRSA_REQ_ORG "Linuxize" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "Community"
-
Перед созданием пары ключей CA сначала необходимо инициализировать новую PKI с помощью:
./easyrsa init-pki
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/causer/EasyRSA-3.0.5/pki
-
Следующим шагом будет создание ЦС:
./easyrsa build-ca
Если вы не хотите, чтобы при каждой подписи сертификатов
nopass
пароль, запустите командуbuild-ca
с параметромnopass
:./easyrsa build-ca nopass
.... Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- ... ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/causer/EasyRSA-3.0.5/pki/ca.crt
Вам будет предложено установить пароль для ключа CA и ввести общее имя для вашего CA.
После завершения сценарий создаст два файла — открытый сертификат CA
ca.crt
и закрытый ключ CAca.key
.Теперь, когда центр сертификации (CA) создан, вы можете использовать его для подписи запросов на сертификаты для одного или нескольких серверов и клиентов OpenVPN.
Установка OpenVPN и EasyRSA
Наш следующий шаг — установить пакет OpenVPN, который доступен в репозиториях Ubuntu, и загрузить последнюю версию EasyRSA.
Следующие шаги выполняются на сервере OpenVPN .
-
Установка OpenVPN довольно проста, просто выполните следующие команды на сервере OpenVPN :
sudo apt update
sudo apt install openvpn
-
Загрузите последнюю версию EasyRSA:
cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
После завершения загрузки введите следующую команду для извлечения архива:
tar xzf EasyRSA-nix-3.0.5.tgz
Хотя мы уже инициализировали PKI на машине CA, нам также необходимо создать новую PKI на сервере OpenVPN. Для этого используйте те же команды, что и раньше:
cd ~/EasyRSA-3.0.5/
./easyrsa init-pki
Если вам все еще интересно, зачем нам две установки EasyRSA, это потому, что мы будем использовать этот экземпляр EasyRSA для генерации запросов на сертификаты, которые будут подписаны с помощью экземпляра EasyRSA на машине CA.
Это может показаться сложным и немного запутанным, но как только вы прочитаете весь учебник, вы увидите, что это действительно несложно.
Создание ключей Диффи-Хеллмана и HMAC
В этом разделе мы сгенерируем надежный ключ Диффи-Хеллмана, который будет использоваться во время обмена ключами, и файл подписи HMAC, чтобы добавить дополнительный уровень безопасности к соединению.
-
Сначала перейдите в каталог EasyRSA на вашем сервере OpenVPN .
cd ~/EasyRSA-3.0.5/
-
Сгенерируйте ключ Диффи-Хеллмана:
./easyrsa gen-dh
Скрипт сгенерирует параметры DH длиной 2048 бит. Это может занять некоторое время, особенно на серверах с небольшими ресурсами. После завершения на вашем экране будет напечатано следующее сообщение:
DH parameters of size 2048 created at /home/serveruser/EasyRSA-3.0.5/pki/dh.pem
Скопируйте файл
dh.pem
каталог/etc/openvpn
:sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
-
Создайте подпись HMAC:
openvpn --genkey --secret ta.key
После завершения скопируйте файл
ta.key
каталог/etc/openvpn
:sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
Создание сертификата сервера и закрытого ключа
В этом разделе описывается, как сгенерировать закрытый ключ и запрос сертификата для сервера OpenVPN.
-
Перейдите в каталог EasyRSA на вашем сервере OpenVPN и сгенерируйте новый закрытый ключ для сервера и файл запроса сертификата:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req server1 nopass
Мы используем аргумент
nopass
потому что хотим запустить сервер OpenVPN без ввода пароля. Также в этом примере мы используемserver1
в качестве идентификатора имени (объекта) сервера. Если вы выбрали другое имя для своего сервера, не забудьте изменить приведенные ниже инструкции, где используется имя сервера.Команда создаст два файла: закрытый ключ (
server1.key
) и файл запроса сертификата (server1.req
).----- Common Name (eg: your user, host, or server name) [server1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/server1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/server1.key
-
Скопируйте закрытый ключ в каталог
/etc/openvpn
:sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/
-
Перенесите файл запроса сертификата на компьютер CA:
scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp
В этом примере мы используем
scp
для передачи файла, вы также можете использоватьrsync
через ssh или любой другой безопасный метод. -
Войдите в свой компьютер CA , перейдите в каталог EasyRSA и импортируйте файл запроса сертификата:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/server1.req server1
Первый аргумент — это путь к файлу запроса сертификата, а второй — короткое имя (сущность) сервера. В нашем случае имя сервера —
server1
.The request has been successfully imported with a short name of: server1 You may now use this name to perform signing operations on this request.
Эта команда просто копирует файл запроса в каталог
pki/reqs
. -
Находясь в каталоге EasyRSA на компьютере CA, выполните следующую команду, чтобы подписать запрос:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req server server1
Первый аргумент может быть
server
илиclient
а второй — коротким именем сервера (сущности).Вам будет предложено подтвердить, что запрос исходит из надежного источника. Введите
yes
и нажмитеenter
для подтверждения:You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 1080 days: subject= commonName = server1 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes ...
Если ваш ключ CA защищен паролем, вам будет предложено ввести пароль. После проверки скрипт сгенерирует сертификат SSL и напечатает полный путь к нему.
... Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days) Write out database with 1 new entries Data Base Updated Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/server1.crt
-
Следующим шагом является передача файлов подписанного сертификата
server1.crt
иca.crt
обратно на ваш сервер OpenVPN. Опять же, вы можете использоватьscp
,rsync
или любой другой безопасный метод:scp ~/EasyRSA-3.0.5/pki/issued/server1.crt serveruser@your_server_ip:/tmp
scp ~/EasyRSA-3.0.5/pki/ca.crt serveruser@your_server_ip:/tmp
-
Войдите на свой сервер OpenVPN и переместите файлы
server1.crt
иca.crt
вca.crt
/etc/openvpn/
:sudo mv /tmp/{server1,ca}.crt /etc/openvpn/
После выполнения шагов, описанных в этом разделе, на вашем сервере OpenVPN должны появиться следующие новые файлы:
/etc/openvpn/ca.crt
-
/etc/openvpn/dh.pem
-
/etc/openvpn/ta.key
-
/etc/openvpn/server1.crt
-
/etc/openvpn/server1.key
Настройка службы OpenVPN
Теперь, когда у вас есть сертификат сервера, подписанный вашим центром сертификации и переданный на сервер OpenVPN , пора настроить службу OpenVPN.
Мы будем использовать образец файла конфигурации, поставляемый с установочным пакетом OpenVPN, в качестве отправной точки, а затем добавим в него наши собственные параметры конфигурации.
Начните с извлечения файла конфигурации в каталог /etc/openvpn/
:
sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"
Откройте файл в любимом текстовом редакторе :
sudo nano /etc/openvpn/server1.conf
-
Найдите директивы параметров Certificate, Key и DH и измените имена файлов:
/etc/openvpn/server1.confcert server1.crt key server1.key dh dh.pem
-
Чтобы перенаправить трафик клиентов через VPN, найдите и раскомментируйте параметры
redirect-gateway
иdhcp-option
:/etc/openvpn/server1.confpush "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
По умолчанию используются распознаватели OpenDNS. Вы можете изменить его и использовать CloudFlare, Google или любые другие преобразователи DNS, которые захотите.
-
Найдите директивы
user
иgroup
и раскомментируйте эти настройки, удалив символ «;
”В начале каждой строки:/etc/openvpn/server1.confuser nobody group nogroup
-
Добавьте следующую строку в конец файла. Эта директива изменит алгоритм аутентификации сообщений (HMAC) с SHA1 на SHA256.
/etc/openvpn/server1.confauth SHA256
Как только вы закончите, конфигурационный файл сервера (без комментариев) должен выглядеть примерно так:
port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256
Запуск службы OpenVPN
В этом руководстве мы использовали server1.conf
в качестве файла конфигурации. Чтобы запустить службу OpenVPN с этой конфигурацией, нам нужно указать имя файла конфигурации после имени файла модуля systemd:
На сервере OpenVPN выполните следующую команду, чтобы запустить службу OpenVPN:
sudo systemctl start openvpn@server1
Убедитесь, что служба запущена успешно, набрав:
sudo systemctl status openvpn@server1
Если служба активна и работает, вывод будет выглядеть примерно так:
● [email protected] - OpenVPN connection to server1
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-08 20:11:57 UTC; 6min ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 26739 (openvpn)
Status: "Initialization Sequence Completed"
Включите автоматический запуск службы при загрузке с помощью:
sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
sudo journalctl -u openvpn@server1
Сервер OpenVPN создаст новое устройство tun tun0
. Чтобы проверить, доступно ли устройство, используйте следующую команду ip :
ip a show tun0
Результат должен выглядеть примерно так:
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq 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
inet6 fe80::1627:9a20:bca8:e6a5/64 scope link stable-privacy
valid_lft forever preferred_lft forever
На этом этапе ваш сервер OpenVPN настроен и работает правильно.
Брандмауэр и настройка сети сервера
Чтобы правильно пересылать сетевые пакеты, нам нужно включить пересылку IP.
Следующие шаги выполняются на сервере OpenVPN .
Откройте /etc/sysctl.conf
и добавьте или раскомментируйте строку, которая читает net.ipv4.ip_forward = 1
:
sudo nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Как только вы закончите, сохраните и закройте файл.
Примените новые настройки, выполнив следующую команду:
sudo sysctl -p
net.ipv4.ip_forward = 1
Если вы выполнили предварительные требования, на вашем сервере уже должен быть запущен брандмауэр UFW .
Теперь нам нужно добавить правила брандмауэра, чтобы разрешить маскировку. Это позволит трафику покидать VPN, предоставляя вашим VPN-клиентам доступ в Интернет.
Перед добавлением правил вам необходимо знать публичный сетевой интерфейс вашего Ubuntu OpenVPN Server. Вы можете легко найти интерфейс, выполнив следующую команду:
ip -o -4 route show to default | awk '{print $5}'
В нашем случае интерфейс называется ens3
как показано на выходе ниже. Ваш интерфейс, вероятно, будет иметь другое имя.
ens3
По умолчанию при использовании UFW перенаправленные пакеты отбрасываются. Нам нужно будет изменить это и дать нашему брандмауэру команду разрешить пересылку пакетов.
Откройте файл конфигурации UFW, найдите ключ DEFAULT_FORWARD_POLICY
и измените значение с DROP
на ACCEPT
:
sudo nano /etc/default/ufw
...
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...
Затем нам нужно установить политику по умолчанию для цепочки POSTROUTING
в таблице nat и установить правило маскарада.
Для этого откройте файл /etc/ufw/before.rules
и добавьте строки, выделенные желтым, как показано ниже.
sudo nano /etc/ufw/before.rules
Не забудьте заменить ens3
в строке -A POSTROUTING
чтобы оно соответствовало имени публичного сетевого интерфейса, которое вы нашли в предыдущей команде. Вставьте строки после последней строки, начиная с COMMIT
.
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through ens3 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o ens3 -j MASQUERADE
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
Когда вы закончите, сохраните и закройте файл.
Нам также необходимо открыть UDP-трафик на порт 1194
который является портом OpenVPN по умолчанию. Для этого выполните следующую команду:
sudo ufw allow 1194/udp
Если вы забыли открыть порт SSH, чтобы избежать блокировки, выполните следующую команду, чтобы открыть порт:
sudo ufw allow OpenSSH
Наконец, перезагрузите правила UFW, отключив и снова включив UFW:
sudo ufw disable
sudo ufw enable
Чтобы проверить изменения, выполните следующую команду, чтобы вывести список правил POSTROUTING:
sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens3 10.8.0.0/16 0.0.0.0/0
Создание инфраструктуры конфигурации клиента
В этом руководстве мы создадим отдельный сертификат SSL и сгенерируем отдельный файл конфигурации для каждого клиента VPN.
Клиентский закрытый ключ и запрос сертификата могут быть сгенерированы либо на клиентском компьютере, либо на сервере. Для простоты мы сгенерируем запрос сертификата на сервере, а затем отправим его в ЦС для подписи.
Весь процесс создания сертификата клиента и файла конфигурации выглядит следующим образом:
- Сгенерируйте закрытый ключ и запрос сертификата на сервере OpenVPN.
- Отправьте запрос на компьютер CA для подписания.
- Скопируйте подписанный сертификат SSL на сервер OpenVPN и сгенерируйте файл конфигурации.
- Отправьте файл конфигурации на компьютер VPN-клиента.
Начнем с создания набора каталогов для хранения файлов клиентов:
mkdir -p ~/openvpn-clients/{configs,base,files}
base
каталоге будут храниться базовые файлы и конфигурация, которые будут использоваться всеми клиентскими файлами.-
configs
каталогеconfigs
будет храниться сгенерированная конфигурация клиента. -
files
каталогеfiles
будет храниться пара сертификатов и ключей для конкретного клиента.
Скопируйте файлы ca.crt
и ta.key
~/openvpn-clients/base
:
cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
Затем скопируйте образец файла конфигурации VPN-клиента в каталог client- ~/openvpn-clients/base
. Мы будем использовать этот файл в качестве базовой конфигурации:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
Теперь нам нужно отредактировать файл, чтобы он соответствовал настройкам и конфигурации нашего сервера. Откройте файл конфигурации в текстовом редакторе:
nano ~/openvpn-clients/base/client.conf
-
Найдите удаленную директиву и замените заполнитель по умолчанию на общедоступный IP-адрес вашего сервера OpenVPN:
~ / OpenVPN-клиенты / база / client.conf# The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote YOUR_SERVER_IP 1194
-
Найдите и прокомментируйте директивы
ca
,cert
иkey
. Сертификаты и ключи будут добавлены в файл конфигурации:~ / OpenVPN-клиенты / база / client.conf# 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
-
Добавьте следующую строку в конец файла, чтобы она соответствовала настройкам сервера:
~ / OpenVPN-клиенты / база / client.confauth SHA256
Когда вы закончите, файл конфигурации сервера должен выглядеть примерно так:
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1
Затем создайте простой сценарий bash, который объединит базовую конфигурацию и файлы с сертификатом и ключом клиента и сохранит сгенерированную конфигурацию в каталоге ~/openvpn-clients/configs
.
Откройте текстовый редактор и создайте следующий скрипт:
nano ~/openvpn-clients/gen_config.sh
#!/bin/bash
FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs
BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key
CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key
# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi
if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done
# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF
Сохраните файл и сделайте его исполняемым, выполнив следующую команду chmod
:
chmod u+x ~/openvpn-clients/gen_config.sh
Создание закрытого ключа сертификата клиента и конфигурации
Процесс создания клиентского закрытого ключа и запроса сертификата такой же, как и при генерации ключа сервера и запроса сертификата.
Как мы уже упоминали в предыдущем разделе, мы сгенерируем закрытый ключ клиента и запрос сертификата на сервере OpenVPN. В этом примере имя первого VPN-клиента будет client1
.
-
Перейдите в каталог EasyRSA на вашем сервере OpenVPN и сгенерируйте новый закрытый ключ и файл запроса сертификата для клиента:
cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass
Команда создаст два файла: закрытый ключ (
client1.key
) и файл запроса сертификата (client1.req
).Common Name (eg: your user, host, or server name) [client1]: Keypair and certificate request completed. Your files are: req: /home/serveruser/EasyRSA-3.0.5/pki/reqs/client1.req key: /home/serveruser/EasyRSA-3.0.5/pki/private/client1.key
-
Скопируйте закрытый ключ
client1.key
в каталог~/openvpn-clients/files
вы создали в предыдущем разделе:cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/
-
Перенесите файл запроса сертификата на компьютер CA:
scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp
В этом примере мы используем
scp
для передачи файла, вы также можете использоватьrsync
через ssh или любой другой безопасный метод. -
Войдите в свой компьютер CA , перейдите в каталог EasyRSA и импортируйте файл запроса сертификата:
cd ~/EasyRSA-3.0.5
./easyrsa import-req /tmp/client1.req client1
Первый аргумент — это путь к файлу запроса сертификата, а второй — имя клиента.
The request has been successfully imported with a short name of: client1 You may now use this name to perform signing operations on this request.
-
Из каталога EasyRSA на компьютере CA выполните следующую команду, чтобы подписать запрос:
cd ~/EasyRSA-3.0.5
./easyrsa sign-req client client1
Вам будет предложено подтвердить, что запрос исходит из надежного источника. Введите
yes
и нажмитеenter
для подтверждения:Если ваш ключ CA защищен паролем, вам будет предложено ввести пароль. После проверки скрипт сгенерирует сертификат SSL и напечатает полный путь к нему.
... Certificate created at: /home/causer/EasyRSA-3.0.5/pki/issued/client1.crt
-
Затем
client1.crt
подписанный файлclient1.crt
сертификата обратно на сервер OpenVPN. Вы можете использоватьscp
,rsync
или любой другой безопасный метод:scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp
-
Войдите на свой сервер OpenVPN и переместите файл
client1.crt
каталог~/openvpn-clients/files
:mv /tmp/client1.crt ~/openvpn-clients/files
-
Последним шагом является создание конфигурации клиента с помощью сценария
gen_config.sh
. Перейдите в каталог~/openvpn-clients
и запустите скрипт, используя имя клиента в качестве аргумента:cd ~/openvpn-clients
./gen_config.sh client1
Сценарий создаст файл с именем
client1.ovpn
в каталоге~/client-configs/configs
. Вы можете проверить, перечислив каталог:ls ~/openvpn-clients/configs
client1.ovpn
На этом этапе конфигурация клиента создана. Теперь вы можете передать файл конфигурации на устройство, которое собираетесь использовать в качестве клиента.
Например, чтобы передать файл конфигурации на локальный компьютер с помощью scp
вы должны выполнить следующую команду:
scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/
Чтобы добавить дополнительных клиентов, просто повторите те же шаги.
Подключение клиентов
Linux
В вашем дистрибутиве или среде рабочего стола может быть инструмент или графический пользовательский интерфейс для подключения к серверам OpenVPN. В этом руководстве мы покажем вам, как подключиться к серверу с помощью инструмента openvpn
.
-
Установите OpenVPN в Ubuntu и Debian
sudo apt update
sudo apt install openvpn
-
Установите OpenVPN на CentOS и Fedora
sudo yum install epel-release
sudo yum install openvpn
После установки пакета для подключения к VPN-серверу используйте команду openvpn
и укажите файл конфигурации клиента:
sudo openvpn --config client1.ovpn
macOS
Tunnelblick — это бесплатный графический пользовательский интерфейс с открытым исходным кодом для OpenVPN в OS X и macOS.
Windows
Загрузите и установите последнюю версию приложения OpenVPN на странице загрузок OpenVPN .
Скопируйте файл .ovpn
в папку конфигурации OpenVPN ( Users<Name>OpenVPNConfig
или Program FilesOpenVPNconfig
).
Запустите приложение OpenVPN.
Щелкните правой кнопкой мыши значок OpenVPN на панели задач, и имя скопированного файла конфигурации OpenVPN отобразится в меню. Щелкните Подключить.
Android и iOS
Приложение VPN, разработанное OpenVPN, доступно как для Android, так и для iOS. Установите приложение и импортируйте клиентский .ovp
файл.
Отзыв клиентских сертификатов
Отзыв сертификата означает аннулирование подписанного сертификата, чтобы его больше нельзя было использовать для доступа к серверу OpenVPN.
Чтобы отозвать сертификат клиента, выполните следующие действия:
-
Войдите в свой компьютер CA и перейдите в каталог EasyRSA:
cd EasyRSA-3.0.5
-
Запустите сценарий easyrsa, используя аргумент
revoke
, за которым следует имя клиента, которого вы хотите отозвать:./easyrsa revoke client1
Вам будет предложено подтвердить, что вы хотите отозвать сертификат. Введите
yes
и нажмитеenter
для подтверждения:Please confirm you wish to revoke the certificate with the following subject: subject= commonName = client1 Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes ...
Если ваш ключ CA защищен паролем, вам будет предложено ввести пароль. После проверки скрипт отзовет сертификат.
... Revocation was successful. You must run gen-crl and upload a CRL to your infrastructure in order to prevent the revoked cert from being accepted.
-
Используйте параметр
gen-crl
для создания списка отзыва сертификатов (CRL):./easyrsa gen-crl
An updated CRL has been created. CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
-
Загрузите файл CRL на сервер OpenVPN:
scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp
-
Войдите на сервер сервера OpenVPN и переместите файл в каталог
/etc/openvpn
:sudo mv /tmp/crl.pem /etc/openvpn
-
Откройте файл конфигурации сервера OpenVPN:
sudo nano /etc/openvpn/server1.conf
Вставьте следующую строку в конец файла
/etc/openvpn/server1.confcrl-verify crl.pem
Сохраните и закройте файл.
-
Перезапустите службу OpenVPN, чтобы директива отзыва вступила в силу:
sudo systemctl restart openvpn@server1
На этом этапе клиент больше не должен иметь доступ к серверу OpenVPN, используя отозванный сертификат.
Если вам нужно отозвать дополнительные клиентские сертификаты, просто повторите те же шаги.
Выводы
В этом руководстве вы узнали, как установить и настроить сервер OpenVPN на машине с Ubuntu 18.04.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Добрый день!
А что, если клиент — 4g роутер со статическим IP? Как в этом случае настроить клиентскую часть? (сервер опрашивает клиентские ПЛК, расположенные на удалённых объектах, подключенные через роутеры)