Как настроить сервер OpenVPN в Ubuntu 18.04

How To Set Up an OpenVPN Server on Ubuntu 18.04

17 Января 2021 | Ubuntu

Это руководство проведет вас через процесс настройки вашего собственного VPN-сервера путем установки и настройки OpenVPN в Ubuntu 18.04. Мы также покажем вам, как генерировать сертификаты клиентов и создавать файлы конфигурации.

Как настроить сервер OpenVPN в Ubuntu 18.04

Независимо от того, хотите ли вы получить безопасный и надежный доступ в Интернет при подключении к ненадежной общедоступной сети Wi-Fi, обойти гео-ограниченный контент или позволить своим коллегам безопасно подключаться к сети вашей компании при удаленной работе, использование VPN - лучшее решение.

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

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

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 машине .

  1. Сначала загрузите последнюю версию EasyRSA из репозитория проекта Github с помощью следующей команды wget :

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz 
    
    
  2. После завершения загрузки распакуйте архив с помощью:

    tar xzf EasyRSA-nix-3.0.5.tgz 
    
    
  3. Перейдите в каталог EasyRSA и создайте файл конфигурации с именем vars , скопировав vars.example файл:

    cd ~/EasyRSA-3.0.5/ cp vars.example vars 
    
    
  4. Откройте файл, раскомментируйте и обновите следующие записи, чтобы они соответствовали вашей информации.

    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        "Baksdev"
    set_var EASYRSA_REQ_EMAIL      "admin@baks.dev"
    set_var EASYRSA_REQ_OU         "Community" 

  5. Перед созданием пары ключей 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 
    
    
  6. Следующим шагом будет создание ЦС:

    ./easyrsa build-ca 


    Если вы не хотите быть предложено ввести пароль каждый раз , когда вы подписываете свои сертификаты, выполните 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 и закрытый ключ ЦС ca.key .

    Теперь, когда центр сертификации (CA) создан, вы можете использовать его для подписи запросов на сертификаты для одного или нескольких серверов и клиентов OpenVPN.

Установка OpenVPN и EasyRSA 

Наш следующий шаг - установить пакет OpenVPN, который доступен в репозиториях Ubuntu, и загрузить последнюю версию EasyRSA.

Следующие шаги выполняются на сервере OpenVPN .

  1. Установка OpenVPN довольно проста, просто выполните следующие команды на сервере OpenVPN :

    sudo apt update sudo apt install openvpn 
    
    
  2. Загрузите последнюю версию 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, чтобы добавить дополнительный уровень безопасности к соединению.

  1. Сначала перейдите в каталог EasyRSA на вашем сервере OpenVPN .

    cd ~/EasyRSA-3.0.5/ 
    
    
  2. Сгенерируйте ключ Диффи-Хеллмана:

    ./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/ 
    
    
  3. Создайте подпись HMAC:

    openvpn --genkey --secret ta.key 
    
    

    После завершения скопируйте ta.key файл в /etc/openvpn каталог:

    sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/ 
    
    

Создание сертификата сервера и закрытого ключа

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

  1. Перейдите в каталог 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 
    
    
  2. Скопируйте закрытый ключ в /etc/openvpn каталог:

    sudo cp ~/EasyRSA-3.0.5/pki/private/server1.key /etc/openvpn/ 
    
    
  3. Перенесите файл запроса сертификата на компьютер CA:

    scp ~/EasyRSA-3.0.5/pki/reqs/server1.req causer@your_ca_ip:/tmp 
    
    

    В этом примере, который мы используем scp для передачи файла, вы также можете использовать rsync ssh или любой другой безопасный метод.

  4. Войдите в свой компьютер 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 каталог.

  5. Находясь в каталоге 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 
    
    
  6. Следующим шагом является передача подписанного сертификата 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 
    
    
  7. Вход на ваш сервер OpenVPN , и переместить server1.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.conf
    cert server1.crt
    key server1.key 
    
    dh dh.pem 

  • Чтобы перенаправить клиентский трафик через VPN, найдите и раскомментируйте параметры redirect-gateway и dhcp-option :

    /etc/openvpn/server1.conf
    push "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.conf
    user nobody
    group nogroup 

  • Добавьте следующую строку в конец файла. Эта директива изменит алгоритм аутентификации сообщений (HMAC) с SHA1 на SHA256.

    /etc/openvpn/server1.conf
    auth SHA256 

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

/etc/openvpn/server1.conf
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 

Если служба активна и работает, вывод будет выглядеть примерно так:

● openvpn@server1.service - OpenVPN connection to server1
   Loaded: loaded (/lib/systemd/system/openvpn@.service; 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/openvpn@server1.service → /lib/systemd/system/openvpn@.service.
 
Если служба OpenVPN не запускается, проверьте журналы с помощью 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 
/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 .

/etc/ufw/before.rules

...
# 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.

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

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

  1. Сгенерируйте закрытый ключ и запрос сертификата на сервере OpenVPN.
  2. Отправьте запрос на компьютер CA для подписания.
  3. Скопируйте подписанный сертификат SSL на сервер OpenVPN и сгенерируйте файл конфигурации.
  4. Отправьте файл конфигурации на компьютер VPN-клиента.

Начнем с создания набора каталогов для хранения файлов клиентов:

mkdir -p ~/openvpn-clients/{configs,base,files} 

  • base В каталоге будут храниться базовые файлы и конфигурация, которые будут использоваться всеми клиентскими файлами.
  • configs каталог будет хранить сгенерированную конфигурацию клиента.
  • 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-клиента в ~/openvpn-clients/base каталог client- . Мы будем использовать этот файл в качестве базовой конфигурации:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/ 


Теперь нам нужно отредактировать файл, чтобы он соответствовал настройкам и конфигурации нашего сервера. Откройте файл конфигурации в текстовом редакторе:

nano ~/openvpn-clients/base/client.conf 
  • Найдите удаленную директиву и замените заполнитель по умолчанию на общедоступный IP-адрес вашего сервера OpenVPN:

    ~/openvpn-clients/base/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-clients/base/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-clients/base/client.conf
    auth SHA256 

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

~/openvpn-clients/base/client.conf
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 

~/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 .

  1. Перейдите в каталог 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
  2. Скопируйте закрытый ключ client1.key в ~/openvpn-clients/files каталог, который вы создали в предыдущем разделе:

    cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/ 
    
    
  3. Перенесите файл запроса сертификата на компьютер CA:

    scp ~/EasyRSA-3.0.5/pki/reqs/client1.req causer@your_ca_ip:/tmp 


    В этом примере, который мы используем scp для передачи файла, вы также можете использовать rsync ssh или любой другой безопасный метод.

  4. Войдите в свой компьютер 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.
  5. Из каталога 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
  6. Затем перенесите подписанный client1.crt файл сертификата обратно на сервер OpenVPN. Вы можете использовать scp , rsync или любой другой безопасный метод:

    scp ~/EasyRSA-3.0.5/pki/issued/client1.crt serveruser@your_server_ip:/tmp 
    
    
  7. Войдите на свой сервер OpenVPN и переместите client1.crt файл в ~/openvpn-clients/files каталог:

    mv /tmp/client1.crt ~/openvpn-clients/files 
    
    
  8. Последний шаг - сгенерировать конфигурацию клиента с помощью 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>\OpenVPN\Config или \Program Files\OpenVPN\config ).

Запустите приложение OpenVPN.

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

Android и iOS

Приложение VPN, разработанное OpenVPN, доступно как для Android, так и для iOS. Установите приложение и импортируйте .ovp файл клиента .

Отзыв клиентских сертификатов 

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

Чтобы отозвать сертификат клиента, выполните следующие действия:

  1. Войдите в свой компьютер CA и перейдите в каталог EasyRSA:

    cd EasyRSA-3.0.5 
    
    
  2. Запустите сценарий 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.
  3. Используйте gen-crl параметр для создания списка отзыва сертификатов (CRL):

    ./easyrsa gen-crl 
    An updated CRL has been created.
    CRL file: /home/causer/EasyRSA-3.0.5/pki/crl.pem
  4. Загрузите файл CRL на сервер OpenVPN:

    scp ~/EasyRSA-3.0.5/pki/crl.pem serveruser@your_server_ip:/tmp 
    
    
  5. Войдите на свой сервер OpenVPN server и переместите файл в /etc/openvpn каталог:

    sudo mv /tmp/crl.pem /etc/openvpn 
    
    
  6. Откройте файл конфигурации сервера OpenVPN:

    sudo nano /etc/openvpn/server1.conf 
    
    

    Вставьте следующую строку в конец файла

    /etc/openvpn/server1.conf
    crl-verify crl.pem 

    Сохраните и закройте файл.

  7. Перезапустите службу OpenVPN, чтобы директива отзыва вступила в силу:

    sudo systemctl restart openvpn@server1 
    
    

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

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

Заключение 

В этом руководстве вы узнали, как установить и настроить сервер OpenVPN на машине с Ubuntu 18.04.


    Комментарии

    Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Загрузка комментариев...