Как настроить сервер OpenVPN на Debian 9

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

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

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

В этом руководстве объясняется, как установить и настроить OpenVPN в Debian 9. Мы также покажем вам, как генерировать сертификаты клиентов и создавать файлы конфигурации.

OpenVPN — это полнофункциональное решение VPN с открытым исходным кодом Secure Socket Layer (SSL). Он реализует безопасное сетевое расширение OSI уровня 2 или 3 с использованием протокола SSL / TLS.

Подготовка

Для выполнения этого урока вам понадобятся:

  • Доступ Sudo к серверу Debian 9 с настроенным базовым брандмауэром UFW, на котором мы установим службу OpenVPN.
  • Отдельный выделенный компьютер, который будет служить вашим ЦС (центром сертификации). Если вы не хотите использовать выделенный компьютер для своего ЦС, вы можете создать ЦС на своем сервере OpenVPN или локальном компьютере. После того, как вы закончите создание CA, рекомендуется переместить каталог CA в безопасное место или автономно.

В этом руководстве предполагается, что центр сертификации находится на отдельной машине Debian 9. Те же шаги (с небольшими изменениями) будут применяться, если вы используете свой сервер в качестве центра сертификации.

Мы используем отдельную машину CA, чтобы предотвратить проникновение злоумышленников на сервер. Если злоумышленнику удастся получить доступ к закрытому ключу ЦС, он сможет использовать его для подписания новых сертификатов, что даст им доступ к серверу VPN.

Создание CA с помощью EasyRSA

Первым шагом является создание инфраструктуры открытого ключа ( PKI ), включающей следующее:

  • Сертификат центра сертификации (CA) и закрытый ключ.
  • Отдельный сертификат и пара закрытого ключа для сервера, выданный нашим центром сертификации.
  • Отдельная пара сертификата и закрытого ключа для каждого клиента, выданная нашим центром сертификации.

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

Мы будем использовать утилиту CLI под названием EasyRSA для создания CA, генерации запросов на сертификаты и подписания сертификатов.

Выполните следующие шаги на вашем компьютере CA :

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

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

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

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

     nano ~/EasyRSA-v3.0.6/vars
    ~ / EasyRSA-v3.0.6 / вары
     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 "admin@linuxize.com" 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-v3.0.6/pki
  6. Следующим шагом будет создание ЦС:

     ./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-v3.0.6/pki/ca.crt

    Вам будет предложено установить пароль для ключа CA и ввести общее имя для вашего CA.

    После завершения сценарий создаст два файла — открытый сертификат CA ca.crt и закрытый ключ CA ca.key .

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

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

Следующим шагом является установка пакета OpenVPN, который доступен в репозиториях Debian, и загрузка последней версии EasyRSA на сервер OpenVPN.

Следующие шаги выполняются на сервере 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.6/EasyRSA-unix-v3.0.6.tgz

    После завершения загрузки введите следующую команду для извлечения архива:

     tar xzf EasyRSA-unix-v3.0.6.tgz

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

     cd ~/EasyRSA-v3.0.6/ ./easyrsa init-pki

    Если вам все еще интересно, зачем нам две установки EasyRSA, это потому, что мы будем использовать этот экземпляр EasyRSA для генерации запросов на сертификаты, которые будут подписаны с помощью экземпляра EasyRSA на машине CA.

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

Создание ключей Диффи-Хеллмана и HMAC

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

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

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

     ./easyrsa gen-dh

    Скрипт сгенерирует параметры DH длиной 2048 бит. В зависимости от ресурсов вашей системы генерация может занять некоторое время. После завершения на вашем экране будет напечатано следующее сообщение:

     DH parameters of size 2048 created at /home/serveruser/EasyRSA-v3.0.6/pki/dh.pem

    Скопируйте файл dh.pem каталог /etc/openvpn :

     sudo cp ~/EasyRSA-v3.0.6/pki/dh.pem /etc/openvpn/
  3. Создайте подпись HMAC:

     openvpn --genkey --secret ta.key

    После этого скопируйте файл ta.key каталог /etc/openvpn :

     sudo cp ~/EasyRSA-v3.0.6/ta.key /etc/openvpn/

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

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

  1. Перейдите в каталог EasyRSA на вашем сервере OpenVPN и сгенерируйте новый закрытый ключ для сервера и файл запроса сертификата:

     cd ~/EasyRSA-v3.0.6/ ./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-v3.0.6/pki/reqs/server1.req key: /home/serveruser/EasyRSA-v3.0.6/pki/private/server1.key
  2. Скопируйте закрытый ключ в каталог /etc/openvpn :

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

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

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

  4. Войдите в свой компьютер CA , перейдите в каталог EasyRSA и импортируйте файл запроса сертификата:

     cd ~/EasyRSA-v3.0.6 ./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-v3.0.6 ./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-v3.0.6/pki/issued/server1.crt
  6. Следующим шагом является передача файлов подписанного сертификата server1.crt и ca.crt обратно на ваш сервер OpenVPN. Опять же, вы можете использовать scp , rsync или любой другой безопасный метод:

     scp ~/EasyRSA-v3.0.6/pki/issued/server1.crt serveruser@your_server_ip:/tmp scp ~/EasyRSA-v3.0.6/pki/ca.crt serveruser@your_server_ip:/tmp
  7. Войдите на свой сервер 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.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 Tue 2019-03-19 03:49:53 PDT; 3s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 1722 ExecStart=/usr/sbin/openvpn --daemon ovpn-server1 --status /run/openvpn/server1.status 10 --cd /etc/openvpn --config /etc/openvpn/server1.conf --writepid /run/openvpn/server1.pid (code=exited, status=0/SUCCESS)
 Main PID: 1723 (openvpn)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/system-openvpn.slice/openvpn@server1.service
           └─1723 /usr/sbin/openvpn --daemon ovpn-server1 --status /run/openvpn/server1.status 10 --cd /etc/openvpn --config /etc/openvpn/server1.conf --writepid /run/openvpn/server1.pid

Включите автоматический запуск службы при загрузке с помощью:

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 Server создает tun-устройство tun0 . Чтобы проверить это, используйте следующую команду ip :

ip a show tun0

Результат должен выглядеть примерно так:

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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

На этом этапе ваш сервер 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

Как только вы закончите, сохраните и закройте файл.

Примените новые настройки, выполнив следующую команду sysctl :

sudo sysctl -p
net.ipv4.ip_forward = 1

Если вы выполнили предварительные требования, на вашем сервере уже должен быть запущен брандмауэр UFW .

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

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

ip -o -4 route show to default | awk '{print $5}'

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

eth0

По умолчанию при использовании UFW перенаправленные пакеты отбрасываются. Нам нужно будет изменить это и дать нашему брандмауэру команду разрешить пересылку пакетов.

Откройте файл конфигурации UFW, найдите ключ DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT :

sudo nano /etc/default/ufw
/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

Не забудьте заменить eth0 в строке -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 eth0 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -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 disablesudo 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  --  *      eth0    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 каталоге configs будет храниться сгенерированная конфигурация клиента.
  • files каталоге files будет храниться пара сертификатов и ключей для конкретного клиента.

Скопируйте файлы ca.crt и ta.key ~/openvpn-clients/base :

cp ~/EasyRSA-v3.0.6/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.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-v3.0.6/ ./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-v3.0.6/pki/reqs/client1.req key: /home/serveruser/EasyRSA-v3.0.6/pki/private/client1.key
  2. Скопируйте закрытый ключ client1.key в каталог ~/openvpn-clients/files вы создали в предыдущем разделе:

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

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

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

  4. Войдите в свой компьютер CA , перейдите в каталог EasyRSA и импортируйте файл запроса сертификата:

     cd ~/EasyRSA-v3.0.6 ./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-v3.0.6 ./easyrsa sign-req client client1

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

    Если ваш ключ CA защищен паролем, вам будет предложено ввести пароль. После проверки скрипт сгенерирует сертификат SSL и напечатает полный путь к нему.

     ... Certificate created at: /home/causer/EasyRSA-v3.0.6/pki/issued/client1.crt
  6. Затем client1.crt подписанный файл client1.crt сертификата обратно на сервер OpenVPN. Вы можете использовать scp , rsync или любой другой безопасный метод:

     scp ~/EasyRSA-v3.0.6/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>OpenVPNConfig или Program FilesOpenVPNconfig ).

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

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

Android и iOS

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

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

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

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

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

     cd EasyRSA-v3.0.6
  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-v3.0.6/pki/crl.pem
  4. Загрузите файл CRL на сервер OpenVPN:

     scp ~/EasyRSA-v3.0.6/pki/crl.pem serveruser@your_server_ip:/tmp
  5. Войдите на сервер сервера OpenVPN и переместите файл в каталог /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 на машине Debian 9.

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

Оставьте комментарий

Ваш адрес email не будет опубликован.