3: Генерирование ключей и сертификатов
Для создания ключей и сертификатов Easy RSA использует набор сценариев, которые устанавливаются вместе с программой. Чтобы избежать повторной настройки при создании каждого сертификата, вы определить в Easy RSA значения по умолчанию, которые будут использоваться в полях сертификата (включая страну, город и адрес электронной почты).
Для начала создайте каталог для хранения ключей и сертификатов.
По умолчанию переменные сертификатов хранятся в файле vars в каталоге /etc/openvpn/easy-rsa:
Перейдите в конец файла и измените значения, начинающиеся с export KEY_, в них нужно указать ваши данные. Наиболее важными из них являются:
- KEY_CN: введите домен или поддомен, который разрешается на ваш сервер.
- KEY_NAME: введите сюда server. Если вы введете другое имя, вам придется обновлять файлы конфигурации, которые ссылаются на server.key и server.crt.
Также в файле есть другие переменные, которые вы захотите поменять:
- KEY_COUNTRY: введите двухбуквенную аббревиатуру страны проживания.
- KEY_PROVINCE: штат/область/регион.
- KEY_CITY: город.
- KEY_ORG: название вашей организации.
- KEY_EMAIL: электронная почта, которая будет привязана к сертификату.
- KEY_OU: Organizational Unit – название команды и отдела, для которого предназначен сертификат.
Остальные переменные можно просто проигнорировать. После редактирования файл выглядит так:
Сохраните и закройте файл.
Чтобы сгенерировать ключи и сертификаты, перейдите в каталог easy-rsa и запустите source, чтобы использовать новые переменные, заданные в файле vars:
Запустите скрипт Easy RSA clean-all для удаления всех ключей и сертификатов, которые уже есть в папке:
Затем создайте центр сертификации с помощью скрипта build-ca. Вам будет предложено заполнить поля сертификата, но если вы ранее установили параметры в файле vars, все ваши параметры уже будут установлены по умолчанию. Вы можете нажать Enter, чтобы принять значения по умолчанию для каждого параметра:
Этот скрипт сгенерирует файл ca.key. Это закрытый ключ, используемый для подписания сертификатов сервера и клиентов. Если вы потеряете его, вы больше не сможете доверять сертификатам этого ЦС; если злоумышленник сможет получить доступ к этому файлу, он сможет подписывать новые сертификаты и получит доступ к VPN без вашего ведома. По этой причине OpenVPN рекомендует хранить ca.key в расположении оффлайн (его следует активировать только при создании новых сертификатов).
Теперь создайте ключ и сертификат сервера с помощью сценария build-key-server:
Как и при создании CA, вы увидите значения по умолчанию, которые можно принять, просто нажав Ввод. Кроме того, вам будет предложено ввести пароль и опционально название компании. Если вы введете пароль для ключей и сертификатов, его будут запрашивать у клиента при подключении к VPN. Если вы не хотите устанавливать такой пароль, просто оставьте эту строку пустой и нажмите Enter и Y, чтобы зафиксировать изменения.
Теперь нужно сгенерировать ключ Диффи-Хеллмана.
Эта процедура займет несколько минут.
Теперь скопируйте ключи и сертификаты сервера в каталог openvpn:
Каждому клиенту также потребуется сертификат, чтобы сервер OpenVPN мог проверить их подлинность. Эти ключи и сертификаты нужно создать на сервере, а затем скопировать их на клиенты. Рекомендуется использовать индивидуальные ключи и сертификаты для каждого клиента, которого вы собираетесь подключить к VPN.
Скопируйте версированный файл конфигурации OpenSSL, openssl-1.0.0.cnf, в файл openssl.cnf, убрав версию. В противном случае может произойти ошибка: OpenSSL не сможет загрузить конфигурацию, поскольку не сможет обнаружить ее версию:
Step 6 — Configuring a Client
Regardless of your client machine’s operating system, it will need a locally-saved copy of the CA certificate and the client key and certificate generated in Step 3, as well as the static encryption key you generated at the end of Step 2.
Locate the following files on your server. If you generated multiple client keys with unique, descriptive names, then the key and certificate names will be different. In this article we used .
Copy these files to your client machine. You can use SFTP or your preferred method. You could even just open the files in your text editor and copy and paste the contents into new files on your client machine. Regardless of which method you use, be sure to note where you save these files.
Next, create a file called on your client machine. This is a configuration file for an OpenVPN client, telling it how to connect to the server:
Then add the following lines to . Notice that many of these lines reflect those which we uncommented or added to the file, or were already in it by default:
client.ovpn
When adding these lines, please note the following:
- You’ll need to change the first line to reflect the name you gave the client in your key and certificate; in our case, this is just
- You also need to update the IP address from to the IP address of your server; port can stay the same
- Make sure the paths to your key and certificate files are correct
This file can now be used by any OpenVPN client to connect to your server. Below are OS-specific instructions for how to connect your client:
Windows:
On Windows, you will need the official OpenVPN Community Edition binaries which come with a GUI. Place your configuration file into the proper directory, , and click Connect in the GUI. OpenVPN GUI on Windows must be executed with administrative privileges.
macOS:
On macOS, the open source application Tunnelblick provides an interface similar to the OpenVPN GUI on Windows, and comes with OpenVPN and the required TUN/TAP drivers. As with Windows, the only step required is to place your configuration file into the directory. Alternatively, you can double-click on your file.
Linux:
On Linux, you should install OpenVPN from your distribution’s official repositories. You can then invoke OpenVPN by executing:
After you establish a successful client connection, you can verify that your traffic is being routed through the VPN by checking Google to reveal your public IP.
You should now have a fully operational virtual private network running on your OpenVPN server. You can browse the web and download content without worrying about malicious actors tracking your activity.
There are several steps you could take to customize your OpenVPN installation even further, such as configuring your client to connect to the VPN automatically or configuring client-specific rules and access policies. For these and other OpenVPN customizations, you should consult the official OpenVPN documentation. If you’re interested in other ways you can protect yourself and your machines on the internet, check out our article on 7 Security Measures to Protect Your Servers.
What is a VPN?
Put simply, a VPN allows an administrator to create a «local» network between multiple computers on varying network segments. In some instances, those machines can be on the same LAN, they can be distant from each other across the vast Internet, or they can even be connected across a multitude of connection media such as wireless uplinks, satellite, dial-up-networking, and so on. The P in VPN comes from the added protection to make that virtual network private. Network traffic that is flowing over a VPN is often referred to as inside the (VPN) tunnel, compared to all the other traffic that is outside the tunnel.
Initial setup of the client/server mode
In order to set up a basic OpenVPN server, we first create a server configuration file using the following steps:
Create the following file on the server side with below entry
# vim /etc/openvpn/server.conf port 1194 proto udp dev tun comp-lzo management 127.0.0.1 1194 keepalive 10 120 persist-key persist-tun ifconfig-pool-persist ipp.txt status openvpn-status.log verb 3 server 172.16.0.0 255.255.255.0 push "route 192.168.0.0 255.255.255.0" push "dhcp-option DNS 192.168.0.5" push "dhcp-option DOMAIN example.com" ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/node2.crt key /etc/openvpn/keys/node2.key # This file should be kept secret dh /etc/openvpn/keys/dh2048.pem
Advertisement
Конфигурация сервера OpenVPN
После этого настраиваем конфигурацию сервера, для чего переходим в папку config и создаем файл server.ovpn, куда вставляем следующее:
port 1120 proto tcp dev tun dev-node OpenVPN ca E:\\OpenVPN\\certs\\ca.crt cert E:\\OpenVPN\\certs\\barnak-SRV.crt key E:\\OpenVPN\\certs\\barnak-SRV.key # This file should be kept secret dh E:\\OpenVPN\\certs\\dh1024.pem server 10.10.20.0 255.255.255.0 push "route 10.10.20.0 255.255.255.0" keepalive 10 120 cipher AES-128-CBC # AES comp-lzo max-clients 10 status openvpn-status.log verb 4 mute 20 sndbuf 0 rcvbuf 0
Что здесь что:
port 1120, — номер порта, к которому будут подключаться клиенты;
proto tcp, — тип протокола (tcp или udp). TCP более медленный вариант, но если вы ходите через прокси-сервер, это единственный способ;
dev tun, — режим подключения (tun или tap, туннель или мост). В общем-то режим моста нужен для специфических приложений (типа тех, что используют IPX протокол, им нужно отправлять broadcast сообщения и тп.). Обычно хватает туннельного режима;
dev-node OpenVPN, — название вашего адаптера (используется только для режима подключения tap). Заходите в свойства сетевого адаптера и меняете название на то, которое вам больше нравится:
ca E:\\OpenVPN\\certs\\ca.crt, — путь до сертификата УЦ
Обратите внимание на наше воспитание. Пьянки, гулянки, диско и панки обратный слеш (\) здесь указывается дважды;
cert E:\\OpenVPN\\certs\\barnak-SRV.crt, — путь до сертификата сервера;
key E:\\OpenVPN\\certs\\barnak-SRV.key, — путь до закрытого ключа сервера;
dh E:\\OpenVPN\\certs\\dh1024.pem, — путь до ключевой последовательности Диффи-Хеллмана;
server 10.10.20.0 255.255.255.0, — виртуальная подсеть и маска вашего VPN соединения
Когда к серверу будут подключаться, то сетевой адрес вы получите именно из этого диапазона. При этом, первый адрес всегда использует сервер;
push «route 10.10.20.0 255.255.255.0, — здесь указывается наша виртуальная подсеть. Эта команда нужна, чтобы при установлении соединения ваши VPN клиенты могли подключаться не только непосредственно к вам, но и к другим VPN компьютерам в вашей сети. При этом, таким образом можно добавлять несколько маршрутов;
keepalive 10 120, — отвечает за проверку доступности партнера. Будет отсылать пинги каждые 10 секунд, если от партнера не получен ответ в течение 120 секунд;
cipher AES-128-CBC, — алгоритм шифрования. Оставляйте этот, он самый надежный из предлагаемых
comp-lzo, — сжимание данных через VPN соединение (для уменьшения трафика);
max-clients 10, — сколько клиентов к вам может единовременно подключиться;
status openvpn-status.log, — название журнала, в котором будет краткая информация о том, кто подключился и т.п.:
verb 4, — уровень детализации логов. Чем больше, тем выше детализация;
mute 20, — Не выводить в логе больше 20 одинаковых сообщений (чтобы не засорять его);
sndbuf 0, — буфер для отправленных пакетов. 0 означает, что OpenVPN будет использовать системные настройки, что обычно увеличивает вашу пропускную способность;
rcvbuf 0, — буфер для полученных пакетов. Аналогично предыдущему.
Для более детального файла конфигурации можем перейти в папку sample-config и там открыть файл конфигурации текстовым редактором. Там есть комментарии к каждой опции.
После того, как вы подготовили файл настроек, применяем их, дважды кликая на файл. Откроется окно OpenVPN и начнет запускаться сервер:
Если у вас просто пустой экран, то откройте файл журнала (\OpenVPN\log\;.log). В нем будет написано почему VPN не запускается.
Procedure: CentOS 7.0 Set Up OpenVPN Server
The steps are as follows:
Step 2 – Find and note down your IP address
Use the ip command as follows:
Another option is to run the following dig command/host command to find out your public IP address from Linux command line:
OR
A note about IP address
Most CentOS Linux cloud servers have two types of IP address:
- Public static IP address directly assigned to your box and routed from the Internet. For example, Linode, Digital Ocean, and others gives you direct public IP address.
- Private static IP address directly attached to your server and your server is behind NAT with public IP address. For example, AWS EC2/Lightsail give you this kind of NAT public IP address.
The script will automatically detect your networking setup. All you have to do is provide correct IP address when asked for it.
Step 3 – Download and run centos7-vpn.sh script
I am going to use the wget command:
Setup permissions using the chmod command
One can view the script using a text editor such as vim/vi :
RUN CENTOS7-VPN.SH TO INSTALL OPENVPN SERVER
Now all you have to do is:
Sample session from AWS/Lightsail where my cloud server is behind NAT:
Sample session from Linode/DO server where cloud server has direct public IPv4 address:
To avoid problem always choose DNS as 1.1.1.1 or Google DNS. Those are fast DNS server and reached from anywhere on the Internet.
HOW DO I START/STOP/RESTART OPENVPN SERVER ON CENTOS 7.0 ?
Step 4 – Connect an OpenVPN server using IOS/Android/Linux/Windows client
On server your will find a client configuration file called ~/desktop.ovpn. All you have to do is copy this file to your local desktop using the scp command:
Next, provide this file to your OpenVPN client to connect:
- Apple iOS client
- Android client
- Apple MacOS (OS X) client
- Windows 8/10 client
LINUX DESKTOP: OPENVPN CLIENT CONFIGURATION
First, install the openvpn client for your desktop, enter:
OR
Next, copy desktop.ovpn as follows:
Test connectivity from the CLI:
Your Linux desktop system will automatically connect when computer restart using openvpn script/service:
Execute the following commands after connecting to OpenVPN server from your Linux desktop:
OpenVPN сервер
Настройка сервера
Выполним повышение прав текущего пользователя, так как для всех дальнейших действий требуется root доступ.
Устанавливаем необходимые пакеты. Пакет “Easy-RSA” нужен для управления ключами шифрования.
Создаем символическую ссылку на конфигурационный файл OpenSSL, в противном случае система выдаст ошибку при загрузке переменных.
Переходим в рабочий каталог утилиты easy-rsa, загружаем переменные и очищаем старые конфигурации.
Приступаем к созданию ключей. Генерируем ключ Диффи-Хеллмана, процесс может занять некоторое время.
Генерируем центр сертификации.
В процессе необходимо ответить на вопросы и ввести информацию о владельце ключа. Вы можете оставить значения по умолчанию, которые указаны в квадратных скобках. Для завершения ввода нажимаем “Enter”.
Генерируем ключи для сервера, в качестве аргумента указываем произвольное название, в нашем случае это “vpn-server”
Как и на предыдущем шаге отвечаем на вопросы или оставляем значения по умолчанию. На завершающем этапе дважды нажимаем “y”.
Генерация ключей сервера завершена, все файлы находятся в папке “/usr/share/easy-rsa/keys”.
Создадим в рабочем каталоге OpenVPN папку “keys” для хранения ключей и скопируем туда необходимые файлы.
Копируем и распаковываем в каталог “/etc/openvpn/” шаблон конфигурационного файла.
Открываем на редактирование файл “/etc/openvpn/server.conf” и убеждаемся в наличии следующих строк, при необходимости корректируем.
Остальные параметры оставляем без изменений.
Перезапускаем службу OpenVPN для применения конфигурации.
Настройка сервера завершена!
Настройка клиента
и скачиваем инсталлятор для своей версии операционной системы. В нашем случае это Windows 10.
Устанавливаем приложение, оставляя все параметры по умолчанию.
На следующем этапе необходимо подготовить на сервере и передать на компьютер клиента следующие файлы:
- публичный и приватный ключи;
- копия ключа центра сертификации;
- шаблон конфигурационного файла.
Подключаемся к серверу, повышаем права,переходим в рабочий каталог утилиты “easy-rsa” и загружаем переменные.
Генерируем ключевую пару для клиента, в качестве аргумента указываем произвольное имя, в нашем случае “client1”.
Отвечая на вопросы вводим свои данные или просто нажимаем “ENTER”, оставляя значения по умолчанию. После этого дважды нажимаем “y”
Сгенерированные ключи клиента также находятся в папке “/usr/share/easy-rsa/keys/” Для удобства создадим в домашнем каталоге папку “client1” и скопируем в нее все файлы предназначенные для переноса на клиентский компьютер.
Скопируем в эту же папку шаблон клиентского конфигурационного файла. При копировании меняем расширение файла на “ovpn”.
Изменим владельца каталога “~/client1/” и всех файлов находящихся в нем, для того, чтобы получить возможность перенести их на клиентский компьютер. В нашем случае сделаем владельцем пользователя “mihail”
Переходим на клиентский компьютер и копируем с сервера содержимое папки “~/client1/” любым доступным способом, например с помощью утилиты “PSCP”, которая входит в состав клиента Putty.
Файлы ключей “ca.crt”, “client1.crt”, “client1.key” можно хранить в любом месте, в нашем случае это папка “c:\Program Files\OpenVPN\keys”, а конфигурационный файл “client.ovpn” переносим в директорию “c:\Program Files\OpenVPN\config”.
Приступаем к конфигурированию клиента. Открываем в блокноте файл “c:\Program Files\OpenVPN\config\client.ovpn” и отредактируем следующие строки
Остальные параметры оставляем без изменений.
Сохраняем файл и запускаем клиентское приложение “OpenVPN GUI”.
Для подключения к серверу щелкаем правой кнопкой мыши на иконке в трее и выбираем “Подключиться”. При успешном соединении иконка станет зеленого цвета.
С помощью любого онлайн сервиса убеждаемся, что внешний ip адрес клиента изменился и совпадает с IP адресом сервера.
Creating Keys and Certificates
After you finish working with the configuration file, you need to create keys and certificates. The Easy RSA package includes scripts with which you can do this.
Create a directory in which the keys will be stored:
In order to optimize further work with Open VPN, it is possible to slightly modify generation scripts in order not to enter the same values each time. The necessary information is stored in the vars file, so we edit it:
We will change the lines that start with KEY_. They should indicate the data of your company. The most important parameters:
• KEY_NAME: You must specify the server value, otherwise you will have to make changes to the configuration files in which server.key and server.crt are mentioned.
• KEY_CN: here you need to write a domain or a sub domain that points to your server.
In the remaining fields you can enter information about the company:
You should also prevent the possibility of failure to load the SSL configuration due to the inability to determine the version of the program. To do this, copy the necessary configuration file and remove the version number from the name:
Now create keys and certificates. To do this, go to the easy-rsa directory and run the source command for new variables:
Then you need to delete all previous versions of keys and certificates that may be contained in this directory:
Specify information about the organization that issued the certificate:
The system will ask a few questions, but since we have already entered the necessary data into the configuration file, you can simply press Enter instead of an answer.
Now you need to generate a key and server certificate. And again, you can simply press Enter in response to questions from the system. To save the data, at the end of the procedure, you should press Y (yes):
You also need to generate a Diffie-Hellman exchange file. The process may take several minutes:
Generate an additional key ta.key.
Now copy the created certificates and keys to the OpenVPN directory:
All client applications for establishing communication will also need these keys and certificates. It is better to create separate keys for each user application and give the keys descriptive names. Now we are considering the situation with one client, so let’s call it simply client:
Установка openvpn на RedHat/CentOS/Fedora
OpenVPN является полнофункциональной утилитой с открытыми исходниками для решение VPN, что позволяет использовать широкий диапазон конфигураций, в том числе удаленного доступа, Wi-Fi безопасности и многое другое. OpenVPN предлагает экономическое и эффективное решение — это альтернативное решение других технологий VPN, которая целенаправленна для разных предприятий. В статье «Установка openvpn на RedHat/CentOS/Fedora» хотел бы рассказать как можно объединить группу компьютеров двух или более разных сетей для совместного использования на примере установки openVPN для RedHat, CentOS а так же для Fedora.
И так имеем, у меня есть сервер на которой установлена ОС — CentOSи у нее имеется ИП адрес 78.140.189.243. На этот сервер мы сейчас и установим наш OpenVPN сервер.
До всей установки нужно подключить repo EPEL:
1. Устанавливаем OpenPN сервер, к нему и будем подключаться ( на том компьютере с которого мы будем подключаться мы установим клиентскую ее часть, но об этом немного попозже):
# yum install openvpn
Как только все установится нужно скопировать файлы в созданную папку:
# mkdir -p /etc/openvpn/easy-rsa/keys # cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa/keys
Но это уже не работает в новых версиях OpenVPN (в него уже не входит этот пакет), по этому нужно сделать «финт ушами», по этому мы установим вручную:
# sudo yum install easy-rsa
После этого мы создаем папку и скопируем нужные данные в нее:
# mkdir -p /etc/openvpn/easy-rsa/keys # cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
После того как мы скопировали нужные для работы файлы, нам еще нужно сгенерировать ключики и так же сертификаты, делаем по следующей схеме:
# vim /etc/openvpn/easy-rsa/vars #в этом файле нужно изменить Страну, город..... # не оставляйте поля пустыми! export KEY_COUNTRY="UA" export KEY_PROVINCE="LG" export KEY_CITY="Lug" export KEY_ORG="linux-notes" export KEY_EMAIL="[email protected]" export KEY_OU="my_server"
Переходим в директорию и начнем работу:
# cd /etc/openvpn/easy-rsa/
Введите следующие команды для инициализации центра сертификации:
# cp openssl-1.0.0.cnf openssl.cnf # source ./vars # ./clean-all
Затем выполните следующую команду, чтобы создать сертификат и ключ CA:
# ./build-ca
Нас попросят ввести данные ( но нам это не интересно, т.к мы это все уже прописать немного выше), но мы просто на каждый вопрос нажимаем «Enter»
Далее создаем сертификат и ключик для моего сервера my_server:
# ./build-key-server my_server
Нас просят ввести кое какие данные, я привел то что нужно нажимать на следующем скриншоте:
Создадим сертификат и ключ для VPN клиентов:
# ./build-key client
Если вы хотите создать сертификат и файлы ключей для каждого клиента, вы должны заменить параметр клиента своим уникальным идентификатором! Но т.к я буду использовать его сам, то мне хватит и 1 клиентского сертификата.
Отвечаем на вопросы точно так же как и на предыдущем рисунке:
Step 3 — Generating Keys and Certificates
We’ll begin our process of generating keys and certificates by creating a directory where Easy RSA will store any keys and certs you generate:
The default certificate variables are set in the file in , so open that file for editing:
Scroll to the bottom of the file and change the values that start with to match your information. The ones that matter the most are:
- : Here, enter the domain or subdomain that resolves to your server.
- : You should enter here. If you enter something else, you would also have to update the configuration files that reference and .
The other variables in this file that you may want to change are:
- : For this variable, enter the two-letter abbreviation of the country of your residence.
- : This should be the name or abbreviation of the state of your residence.
- : Here, enter the name of the city you live in.
- : This should be the name of your organization or company.
- : Enter the email address that you want to be connected to the security certificate.
- : This should be the name of the “Organizational Unit” to which you belong, typically either the name of your department or team.
The rest of the variables can be safely ignored outside of specific use cases. After you’ve made your changes, the file should look like this:
/etc/openvpn/easy-rsa/vars
Save and close the file.
To start generating the keys and certificates, move into the directory and in the new variables you set in the file:
Run Easy RSA’s script to remove any keys and certificates already in the folder and generate the certificate authority:
Next, build the certificate authority with the script. You’ll be prompted to enter values for the certificate fields, but if you set the variables in the file earlier, all of your options will already be set as the defaults. You can press to accept the defaults for each one:
This script generates a file called . This is the private key used to sign your server and clients’ certificates. If it is lost, you can no longer trust any certificates from this certificate authority, and if anyone is able to access this file they can sign new certificates and access your VPN without your knowledge. For this reason, OpenVPN recommends storing in a location that can be offline as much as possible, and it should only be activated when creating new certificates.
Next, create a key and certificate for the server using the script:
As with building the CA, you’ll see the values you’ve set as the defaults so you can hit at these prompts. Additionally, you’ll be prompted to enter a challenge password and an optional company name. If you enter a challenge password, you will be asked for it when connecting to the VPN from your client. If you don’t want to set a challenge password, just leave this line blank and press . At the end, enter to commit the changes.
The last part of creating the server keys and certificates is generating a Diffie-Hellman key exchange file. Use the script to do this:
This may take a few minutes to complete.
Once your server is finished generating the key exchange file, copy the server keys and certificates from the directory into the directory:
Each client will also need a certificate in order for the OpenVPN server to authenticate it. These keys and certificates will be created on the server and then you will have to copy them over to your clients, which we will do in a later step. It’s advised that you generate separate keys and certificates for each client you intend to connect to your VPN.
Because we’ll only set up one client here, we called it , but you can change this to a more descriptive name if you’d like:
Finally, copy the versioned OpenSSL configuration file, , to a versionless name, . Failing to do so could result in an error where OpenSSL is unable to load the configuration because it cannot detect its version:
Now that all the necessary keys and certificates have been generated for your server and client, you can move on to setting up routing between the two machines.