Настройка OpenVPN сервера для второго примера
Подключаемся к нашему серверу, входим под рутом и скачиваем openvpn:
aptitude install openvpn openssl
После установки копируем скрипты в папку программы:
cp -r /usr/share/easy-rsa /etc/openvpn/
Далее переходим в папку /etc/openvpn/easy-rsa и открываем файл vars текстовым редактором. Здесь нас интересуют следующие опции:
export KEY_SIZE=1024 export KEY_COUNTRY="RU" export KEY_PROVINCE="CA" export KEY_CITY="Moscow" export KEY_ORG="barnak VPN" export KEY_EMAIL="test" export KEY_OU="test"
Соответственно что делать с этими полями вы уже знаете
export KEY_SIZE=1024 — длина ключа. Можно указать 2048, но особого смысла в этом не будет, только VPN медленнее станет работать.
Теперь эти переменные надо инициировать:
source ./vars
Мы получим предупреждение, что при запуске скрипта clean-all оно удалит все содержимое папки с ключами (а это папка с программой). Но нам ничего чистить не нужно, так что не обращаем внимания.
Теперь создаем сертификат УЦ:
./build-ca
После этого ключи DH:
./build-dh
Сертификат и ключи сервера:
./build-key-server debian-srv
И клиента:
./build-key client
Теперь создаем файл конфигурации сервера:
vim.tiny /etc/openvpn/server.conf
Добавляем туда следующее:
port 1194 proto tcp dev tun ca ca.crt cert debian-srv.crt key debian-srv.key dh dh1024.pem server 10.10.20.0 255.255.255.0 keepalive 10 120 cipher AES-128-CBC # AES comp-lzo max-clients 10 persist-key persist-tun client-to-client status openvpn-status.log log /var/log/openvpn.log verb 4 mute 20 sndbuf 0 rcvbuf 0 push "route 10.10.20.0 255.255.255.0" push "redirect-gateway def1"
Из новых настроек здесь следующие:
- persist-key, — позволяет избежать некоторых проблем с доступностью при понижении прав (только для Linux);
- persist-tun, — аналогично;
- client-to-client, — позволяет клиентам видеть друг друга. Без этой опции клиенты смогут видеть только сервер и его ресурсы, но не других клиентов (аналог AP Isolation);
- log /var/log/openvpn.log, — где будет храниться журнал событий openvpn;
- push «redirect-gateway def1», — добавляет клиентам маршрут к VPN серверу, чтобы весь трафик ходил через него.
Теперь, чтобы мы все-таки могли открывать сайты, будучи подключенным к VPN, надо на сервере прописать правило NAT:
iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -o eth0 -j MASQUERADE
Где 10.10.20.0/24 — ваша виртуальная VPN подсеть.
Сохраняем правило NAT в файл:
iptables-save > /etc/network/iptables.conf
Теперь открываем текстовым редактором настройки сетевых интерфейсов:
vim.tiny /etc/network/interfaces
И добавляем к интерфейсу eth0 (или какой вы используете) строчку для автозагрузки правила:
post-up /sbin/iptables-restore < /etc/network/iptables.conf
Вот как это выглядит у меня:
Это нужно для того, чтобы при перезагрузке сервера правила NAT не удалилось.
И последний штрих. нужно включить IP Forwarding. Без этого скорее всего ваш NAT не заработает. Открываем текстовым редактором файл /etc/sysctl.conf, находим строчку net.ipv4.ip_forward=1, раскомментируем ее (либо выставляем 1) и применяем командой:
sysctl -p
Теперь можно запускать OpenVPN. делается это довольно просто командой:
openvpn server.conf
Теперь сервер настроен и переходим к клиенту.
Файлы конфигурации сервера OpenVPN
Как видите, пользоваться OpenVPN для личного веб-сёрфинга просто и удобно. Однако на этом его преимущества не заканчиваются. При желании вы можете настроить соединение, используя файлы конфигурации OpenVPN — прописать маршруты, прокси-серверы для отдельных портов и так далее.
Если для личного использования заморачиваться с этим не имеет смысла, то при создании корпоративной сети это может пригодиться.
Вот некоторые основные параметры, которые могут быть указаны в файле конфигурации сервера OpenVPN:
port — порт, на котором сервер OpenVPN будет слушать входящие подключения.
proto — протокол, который будет использоваться сервером (TCP или UDP).
dev — виртуальное устройство сетевого интерфейса, которое будет использоваться сервером, например TUN или TAP.
ca, cert и key — пути к сертификатам и ключам, которые сервер OpenVPN будет использовать для аутентификации клиентов и установки безопасного соединения.
dh — путь к файлу с параметрами протокола Диффи — Хеллмана, используемыми для обмена ключами и установки шифрования.
server — внутренний IP-адрес и диапазон подсетей, которые сервер будет присваивать клиентам.
push позволяет серверу отправлять настройки клиентам, например маршруты, DNS-серверы или другие параметры сети.
keepalive указывает интервал проверки активности подключения между сервером и клиентом.
cipher и auth определяют алгоритмы шифрования и аутентификации, которые будут использоваться сервером.
Включение перенаправления и IPTABLES
Создайте файл vpn_firewall.sh
vim /root/vpn_firewall.sh
B этот файл скопируйте следующее содержимое, отредактировав его под свои нужды
Обратите внимание на:
- PRIVATE=10.8.0.0/24 – измените подсеть в соответствии с вашими настройками. Если делали по этой инструкции, то менять ничего не нужно.
- имя интерфейса — eth0, у вас может быть другое значение, измените его на своё везде, где оно встречается
- в строке iptables -A INPUT -p tcp —dport 22 -j ACCEPT мы открываем доступ к порту 22, чтобы могли подключиться по SSH, если у вас нестандартный порт, то обязательно отредактируйте его, поскольку может получиться так, что после применения этого файла вы не сможете подключиться к вашему серверу по сети, добавьте нужно количество строк с необходимыми вам портами
#!/bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward # Пример настройки файервола для OpenVPN. # Если нужно, сделайте соответствующие # изменения, сети вашего OpenVPN PRIVATE=10.8.0.0/24 # Петлевой адрес LOOP=127.0.0.1 # Удалить старые правила iptables # и временно заблокировать весь трафик. iptables -P OUTPUT DROP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -F # Установление политик по умолчанию iptables -P OUTPUT ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP # Предотвращаем использование локальных адресов внешними пакетами iptables -A INPUT -i eth0 -s $LOOP -j DROP iptables -A FORWARD -i eth0 -s $LOOP -j DROP iptables -A INPUT -i eth0 -d $LOOP -j DROP iptables -A FORWARD -i eth0 -d $LOOP -j DROP # Всё, что приходит из Интернета, должно иметь реальный адрес iptables -A FORWARD -i eth0 -s 192.168.0.0/16 -j DROP iptables -A FORWARD -i eth0 -s 172.16.0.0/12 -j DROP iptables -A FORWARD -i eth0 -s 10.8.0.0/8 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP iptables -A INPUT -i eth0 -s 10.8.0.0/8 -j DROP # Блокируем исходящий NetBios (если в вашей подсети # есть машины с Windows). Это не окажет влияния на какой-либо # трафик NetBios, который идёт по VPN туннелю, но остановит # локальные машины Windows от самостоятельного # широковещания в Интернет. iptables -A FORWARD -p tcp --sport 137:139 -o eth0 -j DROP iptables -A FORWARD -p udp --sport 137:139 -o eth0 -j DROP iptables -A OUTPUT -p tcp --sport 137:139 -o eth0 -j DROP iptables -A OUTPUT -p udp --sport 137:139 -o eth0 -j DROP # Разрешаем локальные петли iptables -A INPUT -s $LOOP -j ACCEPT iptables -A INPUT -d $LOOP -j ACCEPT # Позволяем входящий пинг (можно отключить) # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Разрешаем такие службы как www и ssh (можно отключить) iptables -A INPUT -p tcp --dport http -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Разрешаем входящие пакеты OpenVPN # Дуплицируйте строку ниже для каждого # туннеля OpenVPN, меняя --dport n # для соответствия порту OpenVPN UDP. # # В OpenVPN номер порта # контролируется опцией --port n. # Если вы разместили эту опцию в конфигурационном # файле, вы можете удалить предшествующие '--' # # If you taking the stateful firewall # approach (see the OpenVPN HOWTO), # then comment out the line below. iptables -A INPUT -p udp --dport 1194 -j ACCEPT # Разрешить пакеты от устройств TUN/TAP. # Когда OpenVPN запущен в безопасном режиме, # он будет проверять подлинность пакетов до # их прибытия на интерфейс # tun или tap. Следовательно нет # необходимости добавлять сюда какие-либо фильтры, # если вы не хотите ограничить # тип пакетов, которые могут проходить # через туннель. iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT iptables -A FORWARD -i tap+ -j ACCEPT # Сохранить состояние подключений от локальной машины и частных сетей iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Маскировка локальной сети iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE
Проверить работу файла:
bash vpn_firewall.sh
ОБЯЗАТЕЛЬНО проверьте работу файла ДО добавления его в автозагрузку. Отключитесь и подключитесь по SSH чтобы убедиться, что всё действительно работает.
Настраиваем сервер и клиента
Настройка сервера
Создаем конфигурационный файл и вставляем в него следующее содержимое:
# nano /etc/openvpn/server.conf |
local 192.168.166.155 port 443 proto udp dev tun ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh2048.pem tls-auth keys/ta.key 0 server 172.16.10.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 max-clients 32 client-to-client persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 4 mute 20 daemon mode server tls-server comp-lzo |
* 192.168.166.155 — IP-адрес, на котором сервер будет устанавливать VPN-соединение. 172.16.10.0 255.255.255.0 — адресация для виртуальной сети. 32 — количество клиентов для одновременного подключения.
Создаем каталог для логов и запускаем службу сервера openvpn:
# mkdir /var/log/openvpn # service openvpn start |
Проверить работоспособность службы можно командой:
# service openvpn status |
Настройка клиента
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client.crt, client.key, dh2048.pem, ta.key из каталога /etc/openvpn/keys на сервере.
** Самый простой способ скопировать файлы с сервера UNIX — воспользоваться программой WinSCP.
У вас, скорее всего, возникнет проблема при открытии папки keys — ошибка permission denied (не хватает прав). Для обхода этой проблемы на сервере Ubuntu скопируйте необходимые ключи во временную папку и предоставьте к ним полный доступ:
# mkdir /tmp/keys# cd /etc/openvpn/keys# cp ca.crt client.crt client.key dh2048.pem ta.key /tmp/keys # chmod -R 777 /tmp/keys |
По завершении копирования не забываем удалить папку /tmp/keys:
# rm -R /tmp/keys |
Теперь возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
client resolv-retry infinite nobind remote 192.168.166.155 443 proto udp dev tun comp-lzo ca ca.crt cert client.crt key client.key dh dh2048.pem tls-client tls-auth ta.key 1 float keepalive 10 120 persist-key persist-tun verb 0 |
*** 192.168.166.155 — IP-адрес сервера VPN.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно). Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Если все настроено правильно, произойдет подключение и значок поменяет цвет с серого на зеленый.
Установка и создание сертификатов
Использование сертификатов является обязательным условием при использовании VPN. Поэтому сразу после установки мы создадим все необходимые ключи.
Установка OpenVPN
Устанавливаем репозиторий epel:
dnf install epel-release
Устанавливаем необходимые пакеты следующей командой:
dnf install openvpn easy-rsa
Подготовительный этап
Переходим в каталог easy-rsa:
cd /usr/share/easy-rsa/3
* в зависимости от версии easy-rsa, последний каталог может быть другим. Увидеть точное название каталога можно командой ls -l /usr/share/easy-rsa/.
Чтобы упростить и ускорить процесс создания ключей, создаем следующий файл:
vi vars
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
* так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.
Запускаем созданный файл на исполнение:
. ./vars
Генерация ключей
1. Инициализируем PKI:
./easyrsa init-pki
Мы должны увидеть:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3/pki
… а в текущем каталоге появится папка pki.
2. Генерируем корневой сертификат (CA):
./easyrsa build-ca
… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
Common Name (eg: your user, host, or server name) :
3. Создаем ключ Диффи-Хеллмана:
./easyrsa gen-dh
4. Для создания сертификата сервера необходимо сначала создать файл запроса:
./easyrsa gen-req vpn-server nopass
* на запрос ввода Common Name просто вводим Enter, чтобы использовать настройку из файла vars; nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
… и на его основе — сам сертификат:
./easyrsa sign-req server vpn-server
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата.
5. Для создания ta ключа используем команду:
openvpn —genkey —secret pki/ta.key
6. Сертификаты сервера готовы и находятся в каталоге pki.
Создаем каталог в /etc/openvpn, в котором будем хранить сертификаты:
mkdir -p /etc/openvpn/server/keys
Переходим в каталог pki:
cd pki
Копируем в него необходимые сертификаты:
cp ca.crt issued/vpn-server.crt private/vpn-server.key dh.pem ta.key /etc/openvpn/server/keys/
Устанавливаем OpenVPN и создаем сертификаты
Устанавливаем пакеты openvpn и easy-rsa:
apt install openvpn easy-rsa
Создаем каталог easy-rsa, переходим в него и копируем рабочие файлы:
mkdir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* .
Открываем на редактирование скрипт vars и выставляем подходящие значения для своего сертификата:
# nano ./vars |
export KEY_COUNTRY=»RU» export KEY_PROVINCE=»Leningrad» export KEY_CITY=»Sankt-Petersburg» export KEY_ORG=»DMOSK COMPANY» export KEY_CN=DMOSK export KEY_OU=DMOSK export KEY_NAME=name-openvpn-server.dmosk.ru export KEY_ALTNAMES=»name-openvpn-server» #export PKCS11_MODULE_PATH=changeme #export PKCS11_PIN=1234 |
Запускаем на исполнение отредактированный скрипт:
# . ./vars |
На всякий случай, чистим каталоги от старых сертификатов:
# ./clean-all |
Генерируем первый сертификат:
# ./build-ca |
На все запросы просто нажимаем Enter, так как мы все настроили в переменных с помощью файла vars.
Создаем ключ для сервера:
# ./build-key-server server |
В конце подтверждаем подписание сертификата ().
Формируем ключ Диффи-Хеллмана:
# ./build-dh |
Теперь создаем ключ для клиента:
# ./build-key client |
В конце подтверждаем подписание сертификата ().
Ну и на последок, TLS-ключ:
# openvpn —genkey —secret keys/ta.key |
Копируем каталог с созданными сертификатами и ключами в /etc/openvpn:
# cp -r keys /etc/openvpn/ |
Примечания к конфигурационному файлу сервера OpenVPN
В данном конфиге будут только два различия в версиях сервера для Unix или для Windows.
1. Пути расположения файлов конфигурации, сертификатов и пр. в конфиге для Windows должны прописываться так:
а в Linux/FreeBSD так:
2. В конфиге для Windows следующие строки должны быть закомментированы:
а в Linux/FreeBSD (по желанию или по соображениям безопасности, но режиме отладки самого сервера OpenVPN можно сначала запускать сервер OpenVPN под админом, чтобы в случае проблем не грешить на права доступа, но потом обязательно сменить запуск на nobody!!!) раскомментированы:
С конфигом для сервера, в принципе, все. Для начала работы вполне достаточно того конфига, который указан выше.
Подключение к OpenVPN серверу из консоли Linux
Для установки пакета OpenVPN в Linux:
- Debian, Ubuntu, Linux Mint, Kali Linux:
- RedHat, Fedora, CentOS, Oracle, Rocky Linux:
Для подключения к OpenVPN серверу вам понадобится файл конфигурации ovpn. Чтобы подключиться к VPN с помощью ovpn файла:
Введите имя пользователя и пароль (если настроена AD аутентификация для OpenVPN).
Проверьте что VPN подключение установлено:
Чтобы завершить OpenVPN подключение, нажмите (если клиент запущен без параметра –daemon) или выполните команду:
В OpenVPN вы можете разрешить несколько подключений с одним сертификатом, а в Windows можно даже создать несколько одновременных подключений с помощью виртуальных TAP адаптеров.
Чтобы OpenVPN подключение автоматически устанавливалось при старте Linux, нужно создать отдельный юнит systemd:
Description=Hide.me OpenVPN Client Corp After=multi-user.target Type=idle ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client.ovpn WantedBy=multi-user.target
Измените разрешения на файл:
Добавьте юнит через systemctl
В Windows также можно реализовать автоматическое подключение к OpenVPN.
Что требуется от операционной системы?
Перед установкой OpenVPN необходимо убедиться в корректности базовых параметров.
1. У сервера есть хотя бы один “белый” статичный IP-адрес. Т.е. сервер должен быть доступен из сети Интернет. Если адрес динамический, но сервер все же остается быть доступным из глобальной сети — воспользуйтесь услугами DynDNS.
2. Разрешена загрузка и установка пакетов из официальных репозиториев. Для проверки выполните cat /etc/apt/sources.list. Строки с указаниями репозиториев должны быть раскомментированы (не должно быть символа “#” решетка в начале строки).
Скриншот 1. Репозитории
3. Должны быть верно указаны параметры сети — hostname, параметры DNS-серверов.
Для обеспечения должного уровня безопасности, рекомендуем ознакомиться с нашими рекомендациями.
Приступаем к установке.
Все действия по установке будем выполнять от пользователя root.
1. Обновляем информацию о репозиториях:
2. Устанавливаем текущие обновления системы и установленных программ:
3. Устанавливаем OpenVPN:
Скриншот 2. Установка OpenVPN
Важно. В базовых репозиториях, зачастую отсутствует новейшая версия пакета
Разработчики OpenVPN ведут собственный репозиторий, о том как его настроить можно ознакомиться на официальном сайте.
4. Аналогичным образом устанавливаем пакет easy-rsa:
Действия после установки.
Размещаем скрипты easy-rsa:
Подготавливаем публичные ключи (PKI — Public Key Infrastructure):
1. Переходим в директорию /etc/openvpn/easy-rsa:
2. Создаем символьную ссылку на файл конфигурации openssl:
3. Инициализируем скрипт vars:
Система сообщит: NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
4. Выполняем
Скриншот 3. Подготавливаем публичные ключи
5. Для создания центра сертификации выполняем скрипт:
В ходе своей работы, программа задаст несколько вопросов. Отвечать на них следует латиницей. Если вы не заполните какое-либо поле, программа подставит значения по умолчанию, обычно указанные в скобках.
Скриншот 4. Создание центра сертификации
Создаем ключ сервера.
Для создания ключа сервера выполним команду:
Скриншот 5. Создание ключа сервера
Следует обратить внимание, что процесс похож на генерацию сертификата центра сертификации, однако, перед подписанием сертификата программа задаст 2 уточняющих вопроса. Если все указано верно, отвечаем “y”
Debian/Ubuntu
apt-get install -y openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
Настройка сервера OpenVPN
nano ./vars
export KEY_SIZE=1024 # Длина ключа export KEY_EXPIRE=3650 # Срок действия ключа в днях # описание сертификатов по умолчанию export KEY_COUNTRY="RU" export KEY_PROVINCE="RU" export KEY_CITY="Kiev" export KEY_ORG="http://example.com" export KEY_EMAIL="org@example.com"
. ./vars . ./clean-all ./build-ca # корневой сертификат ./build-key-server server # сертификат сервера ./build-dh # ключ Диффи Хельман
openvpn --genkey --secret ./keys/ta.key
cp ./keys/ca.crt /etc/openvpn cp ./keys/server.crt /etc/openvpn cp ./keys/server.key /etc/openvpn cp ./keys/dh1024.pem /etc/openvpn
cp ./keys/ta.key /etc/openvpn
./build-key-pkcs12 windows ./build-key-pkcs12 debian ./build-key-pkcs12 android
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ # . ./vars # ./build-key-pkcs12 newuser1 # ./build-key-pkcs12 newuser2
= СОЗДАНИЕ PKI. СЕРВЕР УДОСТОВЕРЯЮЩЕГО ЦЕНТРА =
Хотя УЦ может физически расположить на одном сервере вместе с OpenVPN, делать этого не рекомендуется. Дело в том, что если OpenVPN-сервер будет скомпрометирован злоумышленниками, то они наверняка получат и закрытый ключ УЦ, при помощи которого они смогут создать сертификаты, которые позволят им получить доступ в VPN. В данном примере УЦ будет настраиваться на отдельном сервере. Более того, сервер с УЦ можно сделать не просто отдельным, но и виртуальным. Который большую часть времени будет выключен, а включаться будет только тогда, когда нужно будет обработать запрос на создание сертификат и выпустить сам сертификат.
Также, в целях безопасности, все операции на сервере необходимо проводить от пользователя, не имеющего права суперпользователя (т.е. не root). Дальнейшая работа УЦ тоже должна проводится под непривилегированным пользователем.
Элементы, из которых состоит PKI:
1. Собственно удостоверяющий центр (УЦ) (Certificate Authority — CA). Создавать его следует на отдельном сервере (физическом или виртуальном, не имеет значения).
2. Закрытый ключ УЦ. Будет необходим для подписания выдаваемых сертификатов. Является самой уязвимой частью PKI.
3. Ключевая пара (закрытый и открытый ключи) для OpenVPN-сервера.
4. Ключевые пары для клиентов OpenVPN.
— Настройка удостоверяющего центра —
Установка Easy-RSA:
Easy-RSA — это и есть основа удостоверяющего центра. Это программное обеспечение, предназначенное для генерации ключей.
а) Установка Easy-RSA на сервер. Производится командой: sudo dnf install easy-rsa
На CentOS 7.X вместо dnf используем команду yum.
б) После установки Easy-RSA, я скопирую папку с программой с ее места в папку текущего пользователя. Для чего? Напомню, что все работы я провожу под непривилегированным пользователем (т.е. не root). При установке Easy-RSA установился по следующему пути: /usr/share/easy-rsa/3.0.8/ 3.0.8 — папка с программой (в моем случае это последняя версия). Установка проводилась от пользователя root (префикс sudo), поэтому проблем с установкой по этому пути не вышло. А вот уже запускать саму программу необходимо от имени текущего непривилегированного пользователя. Программе будет необходимо создавать некоторые папки и файлы в своем рабочем каталоге и она не сможет этого сделать. Поэтому я ее просто скопирую в папку текущего пользователя, где она сможет спокойно создавать необходимые файлы и папки, работая от текущего пользователя.
Итак, я скопировал содержимое папки 3.0.8 в папку /home/username/easy-rsa username — это имя текущего пользователя. Запускать программу буду отсюда.
в) Инициализируем PKI: ./easyrsa init-pki
Поскольку программа представляет собой bash-скрипт, то запускаться она должна с префикса «» Если все хорошо, то скрипт сообщит, что PKI создан и мы можем приступить к созданию УЦ (CA). Во время выполнения этой команды, скрипт создает в своей папке подпапку pki, в которой будут храниться запросы клиентов на выпуск сертификатов, закрытый ключ и конфигурационные файлы. Если бы мы запустили скрипт из изначальной директории, куда установился Easy-RSA, то программе бы не хватило прав создать эту папку и, была бы ошибка «Cannot create /usr/share/easy-rsa/3.0.8/pki (permission?)«, явно говорящая о недостатке прав у текущего пользователя.
г) Создание удостоверяющего центра (CA): ./easyrsa build-ca
Создание конфигурационного файла. Перед генерацией ca.crt можно создать файл vars в /pki/, в который поместить следующие строки:
set_var EASYRSA_ALGO «ec»
set_var EASYRSA_DIGEST «sha512»
Данные строки будут предписывать программе использовать современные алгоритмы шифрования на основе эллиптических кривых для выпуска сертификатов.
Генерация закрытого ключа. После выполнения команды будет запрошен пароль, который нужно придумать и который будет необходимо каждый раз вводить, как только закрытый ключ будет использоваться для подписи издаваемых сертификатов для клиентов OpenVPN. Будет сгенерирован закрытый ключ. /pki/private/ca.key Данный ключ не должен покидать пределы сервера, где он находится.
Генерация сертификата с открытым ключом. После создания закрытого ключа будет предложено ввести информацию, которая будет помещена в сертификат открытого ключа. Это имя пользователя (в данном случае можно ввести название сервера). После ввода этой информации будет сообщено, что сертификат был выпущен, что находится он в папке /pki/ca.crt и его можно использовать. Данный сертификат необходимо будет устанавливать на всех клиентах OpenVPN, в том числе и на OpenVPN-сервере.