главная
— Статьи — Удаленный доступ (VPN)
- Start OpenVPN
- Настройка vsFTPd сервера
- Добавление нового FTP пользователя
- Настройка iptables для vsFTPd
- Настройка автозапуска vsFTPd при старте системы
- Step 1: Install FTP Service with VSFTPD
- Step 2: Configuring VSFTPD
- Step 3: Create a New FTP User
- Step 4: Test the FTP Server
- Инструкция по добавлению новых пользователей
- UPD 27.11.2018 Bash-скрипт добавления пользователей
- UPD 03.09.2019 – не работает авторизация, ошибка 530
- Connect a Client to OpenVPN
- For Linux Users
- For Windows Users
- For macOS Users
- Generate Keys and Certificates
- Конфигурационный файл клиента
- Запуск OpenVPN
- Конфигурационный файл сервера
- Запускаем сервер
- Configure OpenVPN
- Создание ключей и сертификатов
- Установка пакета OpenVPN
- Настройка iptables
- Установка OpenVPN в CentOS 7 / Debian / Ubuntu etc.
- Install Easy RSA
- Firewall and Routing Configuration
- Set Firewall Rules
- Routing the Configuration
- Справка по Easy-RSA
- Настройка клиента
- Настройка сервиса
- Маршрутизация
- Install OpenVPN
- Configure a OpenVPN Client
- Установка
- Клиентские ключи
- Инфраструктура публичных ключей PKI
- Отзыв сертификата
Start OpenVPN
1. To start the OpenVPN service, run the command:
systemctl -f start openvpn@server.service2. Then, enable it to start up at boot by running:
systemctl -f enable openvpn@server.service3. Verify the service is active with:
systemctl status openvpn@server.serviceThe output should respond that the OpenVPN service for the server is active (running).
В данном руководстве будет описан процесс установки и настройки инструмента OpenVPN на виртуальном сервере под управлением CentOS 7. OpenVPN — это открытый программный продукт для создания виртуальных частных сетей и подключения к ним по открытым интернет-каналам.
Прежде чем начать, нужно установить дополнительные пакеты из репозитория Enterprise Linux (EPEL). Это необходимо потому, что OpenVPN недоступен в CentOS по умолчанию. Репозиторий EPEL управляется сообществом Fedora Project и содержит нестандартные для CentOS, но популярные пакеты приложений.
yum install epel-release
OpenVPN is a fully-featured, open-source Secure Socket Layer (SSL) VPN solution.
In this tutorial, you will learn how to set up OpenVPN on a CentOS 7 server and connect to OpenVPN from a client machine.

- A CentOS 7 or CentOS 8 server
- A user account with root (sudo) access
- Access to the command line/terminal window
- A domain or subdomain that resolves to your server
- A client machine from which you will connect to the OpenVPN server

Сейчас рассмотрим пример организации FTP сервера на базе vsFTPd и CentOS 7. Сервис FTP будет крайне полезным для любой организации и сервисов, например, для удобной работы с сайтом на WordPress. Первым делом устанавливаем требуемые пакеты vsftpd:
sudo yum -y install vsftpd
После этого копируем файл настроек в безопасное место, т.е. отдельный каталог. Как писал в предыдущих статьях — это хорошая практика и возможность откатиться к настройкам по-умолчанию.
sudo mkdir /backup
sudo cp /etc/vsftpd/vsftpd.conf /backup
Также устанавливаем клиент ftp на используемом сервере — возможно, он пригодится в будущем и сейчас при проверке настроек. Установка также не вызывает никаких затруднений:
sudo yum -y install ftp
Настройка vsFTPd сервера
После установки сервера и клиента переходим к настройке vsftpd. Сразу стоит обратить внимание: Анонимный доступ к FTP разрешен по умолчанию. Установите anonymous_enable=NO для обеспечения безопасности Вашего сервера.
Настройка будет проводиться путем редактирования конфигурационного файла vsftpd.conf:
Внесем следующие изменения :
Этого будет достаточно для корректной работы созданного FTP сервера, для получения расширенных данных по используемым параметрам — воспользуетесь man (man vsftpd.conf).
Добавление нового FTP пользователя
mkdir -p /var/www/path/to/your/dir
Для того, чтобы разрешить пользователю читать и писать данные в его домашней директории, изменяем права доступа и владельца :
chmod 775 ‘/var/www/path/to/your/dir’
Настройка iptables для vsFTPd
Для корректной работы FTP сервера нужно сделать настройку IPTABLES (добавить правила для FTP). Подробнее об iptables: Установка и настройка IPTABLES в CentOS 7 + Настройка iptables для Apache2 в CentOS 6.5.
Открываем конфигурационной файл iptables и вносим следующие изменения:
sudo nano /etc/sysconfig/iptables
-A INPUT -m state —state NEW -m tcp -p tcp —dport 21 -j ACCEPT
Сохраните и закройте файл. Перезапустите фаервол командой:
sudo systemctl restart iptables
Настройка автозапуска vsFTPd при старте системы
chkconfig —levels 235 vsftpd on
Стартуем vsFTPd FTP сервис:
service vsftpd start
Готово. Настройка FTP сервера завершена. Проверяем его работу локально:
If you are looking to install an FTP server, you can’t beat the simplicity of VSFTPD.
FTP stands for File Transfer Protocol. It has been a standard method for transferring files between computers for decades.
This guide will show you how to configure and install an FTP server using VSFTPD on CentOS 7.

- Access to a user account with sudo privileges
- The yum package manager, installed by default
- A text editor of your choice
Step 1: Install FTP Service with VSFTPD
1. Start by updating the package manager:
sudo yum updateAllow the process to complete.
This guide uses the VSFTPD (VSFTPD stands for “Very Secure FTP Daemon software package”). It’s a relatively easy software utility to use for creating an FTP server.
sudo yum install vsftpdWhen prompted, type Y to allow the operation to complete.

sudo systemctl start vsftpdsudo systemctl enable vsftpd
4. Next, create a rule for your firewall to allow FTP traffic on Port 21:
sudo firewall-cmd --zone=public --permanent --add-port=21/tcpsudo firewall-cmd --zone=public --permanent --add-service=ftpsudo firewall-cmd –-reload
Note: If you use a different firewall application, refer to the documentation to configure it correctly for Port 21. Also, some FTP clients use Port 20, so you may wish to include that rule as well. Simply copy the first line, and replace 21 with 20.
Step 2: Configuring VSFTPD
The behavior of the FTP service on your server is determined by the /etc/vsftpd/vsftpd.conf configuration file.
1. Before starting, create a copy of the default configuration file:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.defaultThis ensures that you have a way to return to the default configuration, in case you change a setting that may cause issues.
sudo nano /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YES
This is an important step. Anonymous access is a risky – you should avoid it unless you understand the risks.
write_enable=YESNote: By default, this line starts with a # sign to indicate it’s a comment. Commenting is a useful way to turn commands on and off. The # sign can also be used to make notes in the file without the system interpreting them as instructions.
chroot_local_user=YESallow_writeable_chroot=YESuserlist_enable=YESuserlist_file=/etc/vsftpd/user_listuserlist_deny=NO7. Once you’re finished editing the configuration file, save your changes. Restart the vsftpd service to apply changes:
sudo systemctl restart vsftpdStep 3: Create a New FTP User
sudo adduser testusersudo passwd testuserecho “testuser” | sudo tee –a /etc/vsftpd/user_listsudo mkdir –p /home/testuser/ftp/upload
sudo chmod 550 /home/testuser/ftp
sudo chmod 750 /home/testuser/ftp/upload
sudo chown –R testuser: /home/testuser/ftpftp 192.168.01Replace this IP address with the one from your system. You can find your IP address in Linux with the ip addr command.
Step 4: Test the FTP Server
To test the FTP server locally, use the command:
ftp localhost
To test remotely, use the command:
ftp your.ftp.server.com
Note: While some security measures have been included in this guide, it is strongly recommended that you familiarize yourself with the latest security protocols before implementing an FTP server in a production environment. This is especially important if you’re creating an FTP server that’s open to the internet – many security breaches originate through the FTP protocol.
Now you know how to set up and install an FTP server on Centos 7 with VSFTPD. You should be able to login to your server via FTP and start transferring files.
[root@localhost]# yum install vsftpd nano net-tools -yСоздаем директорию, где будут каталоги пользователей и выставляем права доступа
[root@localhost]# mkdir /home/vsftpd
[root@localhost]# chmod 0777 /home/vsftpdCохраняем дефолтный конфиг
[root@localhost]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_backupПишем свой конфиг
[root@localhost]# nano /etc/vsftpd/vsftpd.conf# Запуск сервера в режиме службы
listen=YES
# Работа в фоновом режиме
background=YES
# Имя pam сервиса для vsftpd
pam_service_name=vsftpd
# Входящие соединения контроллируются через tcp_wrappers
tcp_wrappers=YES
# Запрещает подключение анонимных пользователей
anonymous_enable=NO
# Каталог, куда будут попадать анонимные пользователи, если они разрешены
#anon_root=/ftp
# Разрешает вход для локальных пользователей
local_enable=YES
# Разрешены команды на запись и изменение
write_enable=YES
# Указывает исходящим с сервера соединениям использовать 20-й порт
connect_from_port_20=YES
# Логирование всех действий на сервере
xferlog_enable=YES
# Путь к лог-файлу
xferlog_file=/var/log/vsftpd.log
# Включение специальных ftp команд, некоторые клиенты без этого могут зависать
async_abor_enable=YES
# Локальные пользователи по-умолчанию не могут выходить за пределы своего домашнего каталога
chroot_local_user=YES
# Разрешить список пользователей, которые могут выходить за пределы домашнего каталога
chroot_list_enable=YES
# Список пользователей, которым разрешен выход из домашнего каталога
chroot_list_file=/etc/vsftpd/chroot_list
# Разрешить запись в корень chroot каталога пользователя
allow_writeable_chroot=YES
# Контроль доступа к серверу через отдельный список пользователей
userlist_enable=YES
# Файл со списками разрешенных к подключению пользователей
userlist_file=/etc/vsftpd/user_list
# Пользователь будет отклонен, если его нет в user_list
userlist_deny=NO
# Директория с настройками пользователей
user_config_dir=/etc/vsftpd/users
# Показывать файлы, начинающиеся с точки
force_dot_files=YES
# Маска прав доступа к создаваемым файлам
local_umask=022
# Порты для пассивного режима работы
pasv_min_port=49000
pasv_max_port=55000[root@localhost]# useradd -s /sbin/nologin ftpuser
[root@localhost]# passwd ftpuser
fptpasswordСоздаем папку, где будут отдельные конфиги пользователей
[root@localhost]# mkdir /etc/vsftpd/users
[root@localhost]# touch /etc/vsftpd/users/ftpuserЗадаем в конфиге домашний ftp-каталог
[root@localhost]# echo 'local_root=/home/vsftpd/ftpuser/' >> /etc/vsftpd/users/ftpuserCоздаем каталог пользователя и задаем владельца
[root@localhost]# mkdir /home/vsftpd/ftpuser
[root@localhost]# chown ftpuser:ftpuser /home/vsftpd/ftpuserСоздаем файл, в котором будет перечислен список пользователей, которым разрешен выход из домашнего каталога. И добавляем в него пользователя root
[root@localhost]# touch /etc/vsftpd/chroot_list
[root@localhost]# echo 'root' >> /etc/vsftpd/chroot_list[root@localhost]# touch /etc/vsftpd/user_list
[root@localhost]# echo 'root' >> /etc/vsftpd/user_list && echo 'ftpuser' >> /etc/vsftpd/user_listСоздаем файл, куда будут писаться логи, и выставляем на него права
[root@localhost]# touch /var/log/vsftpd.log && chmod 600 /var/log/vsftpd.logДобавляем сервис vsftpd в автозагрузку, запускаем его, проверяем статус
[root@localhost]# systemctl enable vsftpd
[root@localhost]# systemctl start vsftpd
[root@localhost]# systemctl status vsftpdСмотрим, появился ли процесс
[root@localhost]# netstat -tulnp | grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 13195/vsftpdДобавляем правила в firewall: открываем порты 21, 49000-55000
[root@localhost]# firewall-cmd --permanent --add-port=21/tcp
[root@localhost]# firewall-cmd --permanent --add-port=49000-55000/tcp
[root@localhost]# firewall-cmd --reloadОтключаем Selinux, перезагружаемся
[root@localhost]# setenforce 0
[root@localhost]# nano /etc/selinux/config SELINUX=disabled
[root@localhost]# rebootИнструкция по добавлению новых пользователей
Добавляем пользователя в систему
[root@localhost]# useradd -s /sbin/nologin testuser
[root@localhost]# passwd testuser
testpasswordСоздаем каталог пользователя и задаем владельца
[root@localhost]# mkdir /home/vsftpd/testuser
[root@localhost]# chown test:test /home/vsftpd/testuserСоздаем папку, где будут отдельные конфиги пользователей
[root@localhost]# touch /etc/vsftpd/users/testuserЗадаем в конфиге домашний фтп-каталог
[root@localhost]# echo 'local_root=/home/vsftpd/testuser/' >> /etc/vsftpd/users/testuserЗадаем разрешенных пользователей
[root@localhost]# echo 'testuser' >> /etc/vsftpd/user_list[root@localhost]# systemctl restart vsftpdUPD 27.11.2018
Bash-скрипт добавления пользователей
[root@localhost]# nano /home/add_ftp_user.sh
#!/bin/bash
NAME=$1
PASS=$2
echo "USAGE: add_ftp_user.sh [username] [password]"
# проверка входных параметров
if [ -z "$NAME" ]; then echo "Error: username is not set" exit
fi
if [ -z "$PASS" ]; then echo "Error: password not set" exit
fi
# создаем системных пользователей
echo "Creating user: $NAME"
echo "With password: $PASS"
useradd -s /sbin/nologin -p `openssl passwd -1 $PASS` $NAME
# сохраняем данные в файл /etc/vsftpd/new_ftp_users_list
echo "user: $NAME, pass: $PASS" >> /etc/vsftpd/new_ftp_users_list
# создаем ftp-директорию пользователя
mkdir /home/vsftpd/$NAME
# назначаем владельца
chown $NAME:$NAME /home/vsftpd/$NAME
# создаем пустой конфигурационный файл
touch /etc/vsftpd/users/$NAME
# прописываем домашний каталог
echo "local_root=/home/vsftpd/$NAME/" >> /etc/vsftpd/users/$NAME
# добавляем пользователя в список разрешенных для подключения
echo "$NAME" >> /etc/vsftpd/user_list
# задаем права каталога пользователя
chmod 0777 /home/vsftpd/$NAME
# перезапускаем службу vsftp
systemctl restart vsftpdДелаем его исполняемым
[root@localhost]# chmod +x /home/add_ftp_user.sh теперь, что бы добавить нового FTP-пользователя надо выполнить команду
[root@localhost]# сd /home
[root@localhost]# ./add_ftp_user.sh %user% %pass%UPD 03.09.2019 – не работает авторизация, ошибка 530
Не работает авторизация в vsftpd:
530 Login incorrectРешение:
Данная ошибка получается из-за того, что в файле /etc/pam.d/vsftpd
присутствует строчка:
[root@localhost]# egrep -v "^#|^$" /etc/pam.d/vsftpd
...
auth required pam_shells.so
...она означает, что только пользователям с доступом к оболочкам должен быть разрешен доступ
А добавляли мы пользователя как раз с параметром: -s /sbin/nologin
[root@localhost]# useradd -s /sbin/nologin ftpuserКомментирует эту строчку: auth required pam_shells.so и перезапускаем vsftpd
[root@localhost]# systemctl restart vsftpdУ блога появился хостинг, его любезно предоставила компания Облакотека. Облакотека — облачные сервисы для создания и управления виртуальной ИТ-инфраструктурой.
Если вам понравился мой блог и вы хотели бы видеть на нем еще больше полезных статей, большая просьба поддержать этот ресурс.
Если вы размещаете материалы этого сайта в своем блоге, соц. сетях, и т.д., убедительная просьба публиковать обратную ссылку на оригинал
Connect a Client to OpenVPN
The instructions on how to connect to OpenVPN differ depending on your client machine’s operating system.
For Linux Users
To connect to OpenVPN, run the command:
openvpn --config /path/to/client.ovpnFor Windows Users
1. First, copy the client.ovpn configuration file in the C:Program FilesOpenVPNconfig directory.
2. Download and install the OpenVPN application. You can find the latest build on the OpenVPN Community Downloads page. Once you have installed the application, launch OpenVPN.
For macOS Users
Before launching Tunnelblick, make sure to store the client.ovpn configuration file in the ~/Library/Application Support/Tunnelblick/Configurations directory.
After reading this article, you should have successfully set up and configured OpenVPN on a CentOS server. Additionally, you should have learned how to access the OpenVPN server from a Linux, Windows, or macOS client machine.
Generate Keys and Certificates
1. Create a vars configuration file using vars.example stored in the /easy-rsa/easyrsa3 directory. Move into the mentioned directory with:
cd /etc/openvpn/easy-rsa/easyrsa32. You can list the contents using the ls command to check whether you have the vars.example file.

3. Copy the sample file vars.example under the name vars:
cp vars.example varsIf you list the files in the directory again, you should have a separate vars file that you can use to configure Easy RSA.

4. Open the vars file in a text editor of your choice:
vi vars5. Scroll through the file and find the lines listed below.
#set_var EASYRSA_REQ_COUNTRY "US"
#set_var EASYRSA_REQ_PROVINCE "California"
#set_var EASYRSA_REQ_CITY "San Francisco"
#set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL "me@example.net"
#set_var EASYRSA_REQ_OU "My Organizational Unit"6. Uncomment the lines by removing # and replace the default values with your information.
7. Then, find the line specifying the KEY_NAME and change it to "server":
export KEY_NAME="server"8. Finally, change KEY_CN to the domain or subdomain that resolves to your server.
export KEY_CN=openvpn.yourdomain.com9. Save and close the file.
10. Clean up any previous keys and generate the certificate authority:
./easyrsa clean-all
11. Now, you can move on to building the certificate authority with the build-ca script. Run the command:
./easyrsa build-caYou will be asked to set a CA Key Passphrase and a common name for your CA.

Note: To skip password authentication each time you sign your certificates, you can use the ./easyrsa build-ca nopass command.
12. Create a key and certificate for the server:
./easyrsa build-server-full server
13. Next, generate a Diffie-Hellman key exchange file by running:
./easyrsa gen-dh
14. You also need a certificate for each client. Generate them on the server and then copy them on the client machine.
./easyrsa build-client-full client1
15. Once you have generated the keys and certificates, copy them from pki into the openvpn directory. To do so, navigate to the pki directory by running:
cd /etc/openvpn/easy-rsa/easyrsa3/pkiYou need to copy four files in total:
- ca.crt
- dh.pem
- ca.key
- server.key
The first two files (ca.crt and dh.pem) are stored in the pki directory, while ca.key and server.key are in a subdirectory pki/private.

Therefore, copy ca.crt and dh.pem into the openvpn directory first:
cp ca.crt dh.pem /etc/openvpnThen, move into the subdirectory private, and copy ca.key and server.key by running:
cd privatecp ca.key server.key/etc/openvpnКонфигурационный файл клиента
Некоторые опции должны быть симметричны опциям сервера, в частности тип шифрования (здесь BF-CBC), сжатия трафика и др. Все приведенные ниже конфиги рабочие.
Приведены примеры конфигов клиентов OpenVPN для Windows. Для Linux все то же, только пути до файлов ключей надо указать как в конфиге сервера (см. выше).
Пример 1 (конфиг клиента OpenVPN):
client dev tun proto udp remote 1.2.3.4 3876 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ns-cert-type server tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 auth SHA512 ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPNconfig\\client1.crt" key "C:\\Program Files\\OpenVPN\\config\\client1.key" cipher BF-CBC verb 0
Пример 2 (соотв. примеру 2-го конфига сервера):
client dev tun proto udp remote 1.2.3.4 3876 resolv-retry infinite nobind block-outside-dns persist-key persist-tun mute-replay-warnings remote-cert-eku "TLS Web Server Authentication" remote-cert-tls server tls-client tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 auth SHA512 ca "C:\\Program Files\\OpenVPN\\config\\ca.crt" cert "C:\\Program Files\\OpenVPN\\config\\client1.crt" key "C:\\Program Files\\OpenVPN\\config\\client1.key" cipher AES-256-CBC verb 0
Запуск OpenVPN
Теперь все готово к запуску OpenVPN. Добавим этот сервис в systemctl:
openvpn --config /etc/openvpn/server.conf --daemon
На этом конфигурация со стороны сервера завершена. Проверим, что в системе успешно добавился новый виртуальный сетевой адаптер:
Настроим подключение со стороны клиента.
Конфигурационный файл сервера
Конфигурационный файл сервера по-умолчанию: /etc/openvpn/server.conf. Скорее всего, у вас не будет необходимости менять его расположение.
Обратите внимание на общие опции для клиента и сервера. Это тип шифрования, сжатие трафика и др. Некоторые опции зеркальные. Например, на сервере ta.key 0, на клиенте ta.key 1 и др.
Пример 1 (конфиг сервера OpenVPN):
port 3876 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem # Проверка, не отозван ли сертификат клиента crl-verify crl.pem server 10.8.12.0 255.255.255.0 ifconfig-pool-persist ipp.txt # Пусть весь трафик клиента идет через VPN push "redirect-gateway def1" # DNS хостинга сервера (или иные, по вашему усмотрению): push "dhcp-option DNS 8.8.8.8" keepalive 10 120 tls-server tls-auth ta.key 0 tls-timeout 120 auth SHA512 cipher BF-CBC max-clients 10 user nobody group nobody persist-key persist-tun status openvpn-status.log log /var/log/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 0
Пример 2 (конфиг сервера OpenVPN):
port 3725 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem crl-verify crl.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1" push "dhcp-option DNS 8.8.8.8" remote-cert-eku "TLS Web Client Authentication" keepalive 10 120 tls-server tls-auth ta.key 0 tls-timeout 120 auth SHA512 cipher AES-256-CBC max-clients 10 user nobody group nobody persist-key persist-tun status openvpn-status.log #log-append openvpn.log #log /dev/null #log /var/log/openvpn.log log openvpn.log verb 0
Оба конфига рабочие.
Запускаем сервер
Проверяем, запустился или нет (считаем, что в конфиге указан порт 3876/udp):
Отлично, запустился на указанном порту.
Ну, или так проверяем:
Если все ок, разрешаем автозапуск:
(для CentOS / SELinux) Если что-то не так, смотрим лог. Возможно, SELinux не разрешает запускать OpenVPN на выбранном вами порте.
# semanage port -a -t openvpn_port_t -p udp 3876
и еще раз пробуем запустить OpenVPN.
Configure OpenVPN
Once you have installed OpenVPN and Easy RSA, you can move on to configuring the OpenVPN server.
The instructions in this section help you set up the basic configuration. You can alter it according to your needs.
Before running any of the commands, make sure to return to the root directory. To do so, type cd in the terminal window and hit Enter.
1. The first step is to copy the sample server.conf file from OpenVPN’s documentation directory:
cp /usr/share/doc/openvpn-2.4.9/sample/sample-config-files/server.conf /etc/openvpnIf you cannot find the OpenVPN sample configuration file, search for its location using the find command:
find / -name server.conf2. Then, open the copied configuration file with a text editor of your choice:
vi etc/openvpn/server.confThe command opens the sample OpenVPN config file. The comments in the file begin with a hashtag # or a semicolon ;.

topology subnet(makes the OpenVPN installation function as a subnetwork)push "redirect-gateway def1 bypass-dhcp"(instructs the client to redirect traffic through the OpenVPN server)push "dhcp-option DNS 208.67.222.222"(uses an OpenDNS resolver to connect to OpenVPN)push "dhcp-option DNS 208.67.220.220"(uses an OpenDNS resolver to connect to OpenVPN)user nobody(runs OpenVPN with no privileges)group nobody(runs OpenVPN with no privileges)
4. Then, generate a static encryption key to enable TLS authentication. To do that, locate the line tls-auth ta.key 0 and comment it by adding ; in front of it. Then, add a new line under it:
tls-crypt myvpn.tlsauth
Note: The configuration file specifies which DNS servers to use to connect to OpenVPN. By default, it is set to use OpenDNS resolvers, which is how we left it. Alternatively, you can change it to different DNS resolvers by modifying the push "dhcp-option DNS 208.67.222.222" and push "dhcp-option DNS 208.67.220.220" lines.
5. Save and exit the configuration file.
6. Finally, generate the static encryption key specified in the file with the command:
openvpn --genkey --secret /etc/openvpn/myvpn.tlsauthСоздание ключей и сертификатов
После завершения работы с конфигурационным файлом, нужно создать ключи и сертификаты. Пакет Easy RSA включает скрипты, с помощью которых можно это сделать.
Создадим директорию, в которой будут храниться ключи:
mkdir -p /etc/openvpn/easy-rsa/keys
В эту директорию нужно скопировать скрипты для генерации ключей и сертификатов:
Также следует предотвратить возможность сбоя загрузки конфигурации SSL из-за невозможности определения версии программы. Для скопируем нужный конфигурационный файл и удалим из названия номер версии:
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Теперь создадим ключи и сертификаты. Для этого перейдем в директорию easy-rsa и запустим команду source для новых переменных:
cd /etc/openvpn/easy-rsa
source ./vars
Затем нужно удалить все предыдущие версии ключей и сертификатов, которые могут содержаться в этой директории:
Также нужно сгенерировать файл обмена по алгоритму Диффи-Хеллмана. Процесс может занять несколько минут:
Указываем информацию об организации, выдавшей сертификат:
Система задаст несколько вопросов — можно просто нажимать Enter вместо ответа или указать информацию о вашей организации.
Теперь нужно сгенерировать ключ и сертификат сервера. И снова можно просто нажимать Enter в ответ на вопросы системы. Единственное обязательное поле: common name — укажите здесь значение server. Чтобы сохранить данные, в конце процедуры следует нажать Y (yes).
Сгенерируем дополнительный ключ ta.key.
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
Теперь скопируем созданные сертификаты и ключи в директорию OpenVPN.
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn
Всем клиентским приложениям для установления связи также понадобятся эти ключи и сертификаты. Лучше создавать отдельные ключи для каждого пользовательского приложения и давать ключам описательные имена. Сейчас же мы рассматриваем ситуацию с одним клиентом, поэтому назовем его просто client:
cd /etc/openvpn/easy-rsa
./build-key client
Установка пакета OpenVPN
Прежде всего, необходимо установить OpenVPN. Также мы установим инструмент Easy RSA — он будет использоваться для создания пар SSL-ключей, которые обеспечат безопасность VPN-соединений.
yum install openvpn easy-rsa –y
Настройка iptables
Немного про настройку iptables. Чуть-чуть. По-умолчанию, таблицы INPUT, FORWARD (а порой и OUTPUT) должны быть в состоянии DROP. Поэтому необходимо разрешить прохождение пакетов из сети OpenVPN в интернет (eth0) и/или в локальную сеть (eth1). Пожалуйста, обратите внимание, это пример того, что вам может быть необходимо сделать. Все нижеприведенные команды уже не пошаговый how-to, как в разделах выше. Вы можете нарушить нормальную работу сети необдуманными действиями!
Разрешить доступ к серверу OpenVPN с внешнего интерфейса:
# iptables -A INPUT -i eth0 -p udp —dport 3876 -j ACCEPT
После этого клиенты OpenVPN смогут подключиться к серверу, но могут не иметь возможности выйти за его пределы, в зависимости от текущих настроек firewall.
Чтобы клиенты могли выходить в интернет или пользоваться ресурсами LAN, для начала на сервере OpenVPN разрешим маршрутизацию (действует до перезагрузки):
или так (сохранится после перезагрузки):
# nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
# systemctl restart network.service
Чтобы клиенты OpenVPN могли выходить в интернет от лица сервера (внешний интерфейс eth0):
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Возможно, у вас уже есть правило для NAT, что-то вроде:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В таком случае нет необходимости в создании отдельного правила для маскарада из сети OpenVPN.
Чтобы клиенты OpenVPN могли работать с локальной сетью (интерфейс LAN eth1):
iptables -A FORWARD -i tun0 -o eth1 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o tun0 -m state —state ESTABLISHED,RELATED -j ACCEPT
Пример рабочего скрипта для сервера OpenVPN (без подключения к локальной сети):
#!/bin/sh IF_EXT="eth0" IF_OVPN="tun0" OVPN_PORT="3876" IPT="/sbin/iptables" IPT6="/sbin/ip6tables" # flush $IPT --flush $IPT -t nat --flush $IPT -t mangle --flush $IPT -X $IPT6 --flush # loopback $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT # default $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP $IPT6 -P INPUT DROP $IPT6 -P OUTPUT DROP $IPT6 -P FORWARD DROP # allow forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # NAT # ######################################### # SNAT - local users to out internet $IPT -t nat -A POSTROUTING -o $IF_EXT -j MASQUERADE # INPUT chain # ######################################### $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ssh $IPT -A INPUT -i $IF_EXT -p tcp --dport 2685 -j ACCEPT # удобно для тестов связи icmp (vpn) $IPT -A INPUT -i $IF_OVPN -p icmp -s 10.8.0.0/24 -j ACCEPT # если openvpn - еще и dns (vpn) $IPT -A INPUT -i $IF_OVPN -p udp --dport 53 -s 10.8.0.0/24 -j ACCEPT # openvpn $IPT -A INPUT -i $IF_EXT -p udp --dport $OVPN_PORT -j ACCEPT # FORWARD chain # ######################################### $IPT -A FORWARD -i $IF_OVPN -o $IF_EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i $IF_EXT -o $IF_OVPN -m state --state ESTABLISHED,RELATED -j ACCEPT # OUTPUT chain # ######################################### $IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Дополняйте, улучшайте, делитесь с другими опытом 🙂 Вот, вроде бы и все. Удачи!
Авторизуйтесь для добавления комментариев!
Установка OpenVPN в CentOS 7 / Debian / Ubuntu etc.
Дата обновления: 02.12.2022
Теги: OpenVPN Linux

На этом сайте уже неоднократно публиковались статьи по настройке OpenVPN, но время летит, инструменты немного изменяются, узнаются новые опции, поэтому решил обновить кладовую пошаговых how-to. Большинство из того, что здесь описано, касается не только CentOS, но и других дистрибутивов Linux, но у меня традиционно все для CentOS. С примерами рабочих конфигов сервера и клиента, разумеется.
Установка
Инфраструктура публичных ключей PKI
Сертификаты сервера OpenVPN
Клиентские ключи
Конфигурационный файл сервера
Конфигурационный файл клиента
Запускаем сервер
Отзыв сертификата
Справка по Easy-RSA
Настройка iptables
Install Easy RSA
The next step is to build a Public Key Infrastructure (PKI). To do this, you need to install easy RSA, a CLI utility for creating and managing a PKI Certificate Authority (CA).
Easy RSA helps you set up an internal certificate authority (CA) and generate SSL key pairs to secure the VPN connections.
1. To download the easy RSA package, use the wget command. If you don’t have wget on your CenOS system, install it by running:
yum install -y wget2. At the time of writing, the latest version of the CLI utility is 3.0.8, which we will download. To use another version, check out easy RSA’s release page on GitHub.
wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.8.tar.gz
3. Next, extract the downloaded archive:
tar -xf v3.0.8.tar.gz4. Create and move into a new openvpn directory:
cd /etc/openvpn/5. Then, create a subdirectory easy-rsa under the path /etc/openvpn:
mkdir /etc/openvpn/easy-rsa6. Move the extracted directory into /etc/openvpn/easy-rsa:
mv /root/easy-rsa-3.0.8 /etc/openvpn/easy-rsaTo check whether you have successfully moved everything from the easy-rsa-3.0.8 directory, move into easy-rsa with cd /etc/openvpn/easy-rsa and list the content with ls. You should see a list of files and folders, as in the image below.

Firewall and Routing Configuration
Set Firewall Rules
1. Start by checking your active firewalld zone:
firewall-cmd --get-active-zonesThe output will show your firewalld zone. In the example below, it is public.

2. Add the openvpn service to the list of services firewalld allows within the active zone. The active zone in our example is public. If your active zone is trusted, modify the command accordingly.
firewall-cmd --zone=public --add-service openvpn3. Next, make the settings above permanent by running the command:
firewall-cmd --zone=public --add-service openvpn --permanent4. To check whether the openvpn service was added use:
firewall-cmd --list-services --zone=public
5. Then, add a masquerade to the runtime instance:
firewall-cmd --add-masquerade6. And make it permanent:
firewall-cmd --add-masquerade --permanent7. Verify the masquerade was added by running:
firewall-cmd --query-masqueradeThe output should respond with yes.

Routing the Configuration
Once you have completed the steps above, move on to routing to your OpenVPN subnet.
1. Create a variable that represents the primary network interface used by your server. In the command below, the variable is named VAR. However, you can create a variable under the name of your choice.
VAR=$(ip route get 208.67.222.222 | awk 'NR==1 {print $(NF-2)}')2. Next, permanently add the routing rule using the variable created above:
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $VAR -j MASQUERADE3. Reload firewalld for the changes to take place:
firewall-cmd --reload4. Move on to routing all web traffic from the client to the server’s IP address by enabling IP forwarding. Open the sysctl.conf file:
vi /etc/sysctl.confnet.ipv4.ip_forward = 16. Finally, restart the service:
systemctl restart network.serviceСправка по Easy-RSA
Если вы хотите получить справку по утилите Easy-RSA, выполните команду:
Для получения справки по конкретным командам, например build-ca:
# ./easyrsa help build-ca
Настройка клиента
Вне зависимости от того, какая операционная система установлена на клиентском устройстве, для соединения с сервером все равно потребуются ключи и сертификаты, сгенерированные на сервере.
Необходимые сертификаты (в нашем случае для клиента «client») хранятся в директории /easy-rsa:
Загрузить эти файлы на клиентское устройство можно с помощью SFTP или другим способом. Можно даже просто открыть их в текстовом редакторе и скопировать содержимое в новые файлы, созданные прямо непосредственно на пользовательском компьютере (главное — сохранить под идентичными именами).
Теперь этот файл можно использовать для подключения к серверу.
Подключение с компьютера под управлением Windows:
Скачиваем официальную версию бинарных файлов OpenVPN Community Edition с графическим интерфейсом управления.
Перемещаем .ovpn-файл в директорию C:\Program Files\OpenVPN\config, затем нажимаем Connect в графическом интерфейсе OpenVPN.
Для соединения можно использовать open-source инструмент Tunnelblick. Перемещаем .ovpn-файл в директорию ~/Library/Application Support/Tunnelblick/Configurations или просто кликнаем по этому файлу.
На Linux нужно установить OpenVPN из официальных репозиториев конкретного дистрибутива. Затем запустить его с помощью команды:
sudo openvpn --config ~/path/to/client.ovpn
На этом все. Теперь у нас есть полностью функциональная частная виртуальная сеть с собственным OpenVPN-сервером на CentOS 7 VPN.
Ознакомиться с другими инструкциями вы можете на нашем сайте. А чтобы попробовать услугу — кликните на кнопку ниже.
Настройка сервиса
В директории документации OpenVPN содержатся файлы с тестовыми конфигурациями программы. Скопируем файл server.conf — на его основе мы создадим свою конфигурацию.
Теперь откроем его для редактирования:
Здесь нужно будет внести несколько изменений. Когда в дальнейшем мы будем генерировать ключы в программе Easy RSA, их размер будет по умолчанию составлять 2048 байт, поэтому нужно убедиться, что соответствующее значение указано в файле настроек. Нужно изменить название файла dh на dh2048.pem:
Затем нужно раскомментировать (удалить символ “;”) строку, которая сообщает клиенту о необходимости редиректа трафика через OpenVPN.
push redirect-gateway def1 bypass-dhcp
Затем нужно указать DNS-серверы, поскольку клиентские приложения не смогут использовать серверы интернет-провайдера.
Для этого нужно раскомментировать строки, начинающиеся с push «dhcp-option DNS» для передачи DNS-серверов клиенту:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Нам нужно, чтобы OpenVPN запускался без привилегий, поэтому нужно указать, что он запускается от имени пользователя и группы nobody. Для этого нужно раскомментировать соответствующие строки:
Также нужно указать пути до сгенерированных ранее сертификатов и ключей:
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key #This file should be kept secret
tls-auth /etc/openvpn/ta.key 0 # This file is secret
Затем нужно сохранить файл и выйти из него. Для этого используйте в редакторе nano сочетание клавиш CTRL+X, затем подтвердите сохранение файла нажатием Y
Маршрутизация
Чтобы упростить настройку, проведем все манипуляции с помощью стандартного фаервола iptables, а не нового инструмента firewallcd.
Прежде всего надо убедиться в том, что сервис iptables установлен и включен.
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush
Затем следует добавить в iptables правило, согласно которому соединения будут направляться в создаваемую подсеть OpenVPN:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <имя_интерфейса> -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
Активируем IP-форвардинг в sysctl, отредактировав файл sysctl.conf для редактирования:
В самом верху добавляем следующую строку:
net.ipv4.ip_forward = 1
Сохраним документ нажатием CTRL+X, Y, Enter.
Перезапускаем сетевой сервис для применения внесенных изменений:
systemctl restart network.service
Install OpenVPN
1. Update the CentOS repositories and packages by running:
yum update -y2. You cannot download the OpenVPN package from the default CentOS repositories. However, OpenVPN is available in the Extra Packages for Enterprise Linux (EPEL) repository. To enable the EPEL repository, run the command:
yum install epel-release -y
3. Update the repositories again:
yum update -y4. You can now install OpenVPN with the command:
yum install -y openvpn
Configure a OpenVPN Client
With everything set up on the OpenVPN server, you can configure your client machine and connect it to the server.
As mentioned in Step 4, each client machine needs to have local copies of the CA certificate, client key, SSL certificate, and the encryption key.
- /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
- /etc/openvpn/easy-rsa/easyrsa3/pki/client.crt
- /etc/openvpn/easy-rsa/easyrsa3/pki/private/client.key
- /etc/openvpn/myvpn.tlsauth
2. Then, create a configuration file for the OpenVPN client under the name client.ovpn on the client machine:
vi client.ovpnclient
tls-client
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
tls-crypt /path/to/myvpn.tlsauth
remote-cert-eku "TLS Web Client Authentication"
proto udp
remote your_server_ip 1194 udp
dev tun
topology subnet
pull
user nobody
group nobodyMake sure to replace the bolded parts with your respected values.

4. Save and close the file.
Установка
# yum install epel-release
# yum install openvpn
# yum install wget
Установка в Debian/Ubuntu:
# apt install openvpn
# yum install wget
Клиентские ключи
Создадим ключ для клиента openvpn:
# cd /etc/openvpn/keys/EasyRSA-3.0.8
# ./easyrsa gen-req client1 nopass
# ./easyrsa sign-req client client1
Опять можно отметить, что могут быть ситуации, когда лучше ключ клиента защищать паролем, хотя бы несложным. Тогда всякий раз при подключении к VPN необходимо будет ввести пароль. Это может быть удобным, если вы не хотите, например, чтобы ваш ребенок случайно подключился к вашей рабочей сети и натворил делов. Для этого просто не надо указывать «nopass» в конце команды выше.
В итоге мы получим два файла:
Публичный сертификат клиента: /etc/openvpn/keys/EasyRSA-3.0.8/pki/issued/client1.crt
Приватный ключ клиента: /etc/openvpn/keys/EasyRSA-3.0.8/pki/private/client1.key
Клиенту вместе с конфигом (см ниже) нужно будет передать копии следующих файлов:
client1.crt;
client1.key;
ca.crt;
ta.key
которые все используются в клиентском конфиге. Никакие иные файлы, кроме тех, которые указаны в конфиге клиента, передавать клиенту не надо!
Инфраструктура публичных ключей PKI
Директория для ключей:
# mkdir /etc/openvpn/keys
# cd /etc/openvpn/keys
Вообще, все операции с ключами OpenVPN можно совершать с помощью OpenSSL. Но есть утилита Easy-RSA, которая раньше шла в составе с OpenVPN, а теперь это отдельный проект https://github.com/OpenVPN/easy-rsa. Вот эту утилиту мы и скопируем себе на сервер:
# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
# tar xvf EasyRSA-3.0.8.tgz
# cd /etc/openvpn/keys/EasyRSA-3.0.8
Создаем файл настроек, с пониманием того, что будет. Например, опция EASYRSA_PKI (по-умолчанию, «$PWD/pki») указывает путь, где будет создана директория для ключей.
Команда «init-pki» выполнит «rm -rf» содержимого директории, будьте внимательны! Вы еще инициализируете инфраструктуру ключей, её еще нет, но если там что-то есть, то это будет стерто. Большинство опций — дефолт, на свой вкус отредактируйте страну, OU, email и т.п. Обратите внимание на сроки (в днях) валидности сертифкатов CA, CRL, CERT.
В файле конфига vars старайтесь указывать или важные для вас опции, или те, которые вы переопределяете, но не стоит весь дефолтный конфиг сюда лить.
# nano vars set_var EASYRSA "/etc/openvpn/keys/EasyRSA-3.0.8" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "California" set_var EASYRSA_REQ_CITY "San Francisco" set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" set_var EASYRSA_REQ_EMAIL "me@example.net" set_var EASYRSA_REQ_OU "My Organizational Unit" set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_CRL_DAYS 3650 set_var EASYRSA_DIGEST "sha512"
Сложного ничего там нет, посмотрите сами.
Создаем инфраструктуру публичных ключей (PKI, Public Key Infrastructure):
# ./easyrsa init-pki
При этом будет создан каталог /etc/openvpn/keys/EasyRSA-3.0.8/pki/.
Чтобы при подключении клиентов к серверу OpenVPN можно было бы быть уверенным, что сертификат сервера и клиента — не поддельные, нужен кто-то, кто отвечает за «кристальную чистоту партийных рядов». Этот кто-то — удостоверяющий центр, CA (Certificate Authority). CA бывают свои (чаще самоподписанные) и публичные, типа Thawte, StartSSL и др. В данном примере рассмотрим ситуацию, когда используется свой CA — как минимум, это значительно дешевле. Даже свой CA не обязан быть на том же сервере, где будет запущен сервер OpenVPN, но чаще всего расположение CA для OpenVPN на том же сервере, что и сам OpenVPN.
Создаем свой CA:
# ./easyrsa build-ca
Можно было бы избежать ввода пароля (./easyrsa build-ca nopass), но при этом если кто-то скопирует секретный ключ вашего CA, он сможет подписывать «левые» ключи. Вы должны охранять приватный ключ CA как зеницу ока, ведь все остальное верифицируется именно им. Поэтому пароль должен быть стойким к перебору. В конце концов, вы не каждый день будете им пользоваться.
Итак, у нас появились секретный ключ ca.key и сертификат ca.crt:
/etc/openvpn/keys/EasyRSA-3.0.8/pki/private/ca.key
/etc/openvpn/keys/EasyRSA-3.0.8/pki/ca.crt
Секретный ключ нужно оставить на сервере и никому не отдавать. Каждый раз при выпуске нового сертификата сервера или пользователя нам будет необходим пароль секретного ключа! Он важнее сертификата сервера, пользователя, да всего вообще.
Сертификат CA (ca.crt) — открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.
Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:
# ./easyrsa gen-req server nopass
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/keys/EasyRSA-3.0.8/pki/reqs/server.req
key: /etc/openvpn/keys/EasyRSA-3.0.8/pki/private/server.key
Подписываем запрос на получение сертификата у нашего CA:
# ./easyrsa sign-req server server
В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный нашим удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt
Создаем ключ Диффи-Хелмана:
# ./easyrsa gen-dh
Генерация занимает приличное время (по отношению к другим ключам). В конце концов получаем ключ /etc/openvpn/keys//pki/dh.pem
Чтобы можно было отозвать клиентский сертификат (например, при утере мобильного устройства или при увольнении сотрудника), надо создать список отозванных сертификатов CRL:
# ./easyrsa gen-crl
Будет создан файл /etc/openvpn/keys/EasyRSA-3.0.8/pki/crl.pem, который будет содержать список отозванных сертификатов. Этот файл необходимо скопировать в директорию /etc/openvpn/, указать в конфиге сервера OpenVPN и перезапустить сервер OpenVPN.
Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи (напомню, мы находимся в директории /etc/openvpn/keys/EasyRSA-3.0.8):
Создадим файл HMAC, для дополнительной верификации клиента и сервера (для защиты от DDoS, например):
# cd /etc/openvpn
# openvpn —genkey secret ta.key
Файл ta.key должен быть скопирован и передан клиенту.
В нормальной конфигурации сервера после старта (от root) права меняются на непривилегированного пользователя (nobody или созданного специально). Этот пользователь должен иметь права на чтение к сертификатам для аутентификации клиентов:
# chmod 644 /etc/openvpn/ca.crt
# chmod 644 /etc/openvpn/crl.pem
# chmod 644 /etc/openvpn/dh.pem
# chmod 644 /etc/openvpn/server.crt
Ключи server.key, ta.key должны быть доступны только root (chmod 600).
Отзыв сертификата
Для того, чтобы отозвать сертификат client1:
# cd /etc/openvpn/keys/EasyRSA-3.0.8/pki/
# ./vars
# ./easyrsa revoke client1
При этом будет создан новый файл crl.pem, который обязательно надо скопировать в директорию /etc/openvpn, заменив старый и перезапустить сервер OpenVPN.
А в файле index.txt соответствующий сертификат будет отмечен символом R (рабочие V, а отозванные — R).
Т.к. инфраструктура ключей OpenVPN это по сути обычный CA OpenSSL, то многое из того, что вы знаете про OpenSSL, подойдет и для OpenVPN. Например, список сертификатов с серийными номерами, указанием, отозваны ли они и другой информацией находится в файле index.txt.
При попытке подключиться к серверу с отозванным сертификатом в логе сервера могут быть такие события (уровень детализации verb 4):
TLS: Initial packet from [AF_INET]1.2.3.4:65454, sid=3e2e1135 a0086339 CRL CHECK OK: C=RU, ST=NW, L=City, O=Org, OU=OU, CN=Org CA, name=EasyRSA, emailAddress=admin@localhost.local VERIFY OK: depth=1, C=RU, ST=NW, L=City, O=Org, OU=OU, CN=Org CA, name=EasyRSA, emailAddress=admin@localhost.local CRL CHECK FAILED: C=RU, ST=NW, L=City, O=Org, OU=OU, CN=client1, name=EasyRSA, emailAddress=client1@localhost.local (serial 04) is REVOKED TLS_ERROR: BIO read tls_read_plaintext error: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned TLS Error: TLS object -> incoming plaintext read error TLS Error: TLS handshake failed
Обратите внимание на строчку «CRL CHECK FAILED» (Ошибка Проверки Списка Отозванных Сертификатов): сертификат с серийным номером 04 отозван (is REVOKED)!

