FTP-сервер VSFTPd и virtual users MySQL на CentOS 7, Web-админка для VSFTP

главная
СтатьиУдаленный доступ (VPN)

Start OpenVPN

1. To start the OpenVPN service, run the command:

systemctl -f start openvpn@server.service

2. Then, enable it to start up at boot by running:

systemctl -f enable openvpn@server.service

3. Verify the service is active with:

systemctl status openvpn@server.service

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

How to install OpenVPN on CentOS 7.
  • 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

Установка и настройка vsftpd CentOS 7

Сейчас рассмотрим пример организации 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.

installing FTP on CentOS tutorial
  • 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 update

Allow 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 vsftpd

When prompted, type Y to allow the operation to complete.

Terminal command to install vsftpd on CentOS.
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
This image shows how to start and enable the vsftpd service upon install.

4. Next, create a rule for your firewall to allow FTP traffic on Port 21:

sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
sudo firewall-cmd --zone=public --permanent --add-service=ftp
sudo firewall-cmd –-reload
Once vsftpd is installed, configure the firewall to allow traffic on Port 21.

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

This 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.conf
anonymous_enable=NO
local_enable=YES
The configuration file options in this image enhance vsftpd security on your server.

This is an important step. Anonymous access is a risky – you should avoid it unless you understand the risks.

write_enable=YES

Note: 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=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

7. Once you’re finished editing the configuration file, save your changes. Restart the vsftpd service to apply changes:

sudo systemctl restart vsftpd

Step 3: Create a New FTP User

sudo adduser testuser
sudo passwd testuser
echo “testuser” | sudo tee –a /etc/vsftpd/user_list
sudo 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/ftp
ftp 192.168.01

Replace 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
output after testing ftp server on CentOS 7

To test remotely, use the command:

ftp your.ftp.server.com
Installing VSftpd FTP Server on CentOS

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/vsftpd

Cохраняем дефолтный конфиг

[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/ftpuser

Cоздаем каталог пользователя и задаем владельца

[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 vsftpd

UPD 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

FTP-сервер VSFTPd и virtual users MySQL на CentOS 7, Web-админка для VSFTP

У блога появился хостинг, его любезно предоставила компания Облакотека. Облакотека — облачные сервисы для создания и управления виртуальной ИТ-инфраструктурой.
Если вам понравился мой блог и вы хотели бы видеть на нем еще больше полезных статей, большая просьба поддержать этот ресурс.

Читайте также:  This php ru reg

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

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

For 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/easyrsa3

2. You can list the contents using the ls command to check whether you have the vars.example file.

Find vars.example file for EasyRSA.

3. Copy the sample file vars.example under the name vars:

cp vars.example vars

If you list the files in the directory again, you should have a separate vars file that you can use to configure Easy RSA.

Copy the vars file from the sample vars file.

4. Open the vars file in a text editor of your choice:

vi vars

5. 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.com

9. Save and close the file.

10. Clean up any previous keys and generate the certificate authority:

./easyrsa clean-all
Generate certificate authority.

11. Now, you can move on to building the certificate authority with the build-ca script. Run the command:

./easyrsa build-ca

You will be asked to set a CA Key Passphrase and a common name for your CA.

Build certificate authority for OpenVPN with Easy RSA.

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
Create a key and certificate for OpenVPN.

13. Next, generate a Diffie-Hellman key exchange file by running:

./easyrsa gen-dh
Generating a Diffie-Hellman key exchange file.

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
Generate certificate and keys for client.

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/pki

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

Server keys and certificates for OpenVPN.

Therefore, copy ca.crt and dh.pem into the openvpn directory first:

cp ca.crt dh.pem /etc/openvpn

Then, move into the subdirectory private, and copy ca.key and server.key by running:

cd private
cp 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/openvpn

If you cannot find the OpenVPN sample configuration file, search for its location using the find command:

find / -name server.conf

2. Then, open the copied configuration file with a text editor of your choice:

vi etc/openvpn/server.conf

The command opens the sample OpenVPN config file. The comments in the file begin with a hashtag # or a semicolon ;.

The server configuration file for OpenVPN.
  • 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
Enable TLS authentication for OpenVPN.

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

FTP-сервер VSFTPd и virtual users MySQL на CentOS 7, Web-админка для VSFTP

На этом сайте уже неоднократно публиковались статьи по настройке 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 wget

2. 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
Download EasyRSA on CentoOS 7.

3. Next, extract the downloaded archive:

tar -xf v3.0.8.tar.gz

4. 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-rsa

6. Move the extracted directory into /etc/openvpn/easy-rsa:

mv /root/easy-rsa-3.0.8 /etc/openvpn/easy-rsa

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

Move Easy RSA directory into the openvpn folder.

Firewall and Routing Configuration

Set Firewall Rules

1. Start by checking your active firewalld zone:

firewall-cmd --get-active-zones

The output will show your firewalld zone. In the example below, it is public.

Check firewalld zone.

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 openvpn

3. Next, make the settings above permanent by running the command:

firewall-cmd --zone=public --add-service openvpn --permanent

4. To check whether the openvpn service was added use:

firewall-cmd --list-services --zone=public
Check firewalld services.

5. Then, add a masquerade to the runtime instance:

firewall-cmd --add-masquerade

6. And make it permanent:

firewall-cmd --add-masquerade --permanent

7. Verify the masquerade was added by running:

firewall-cmd --query-masquerade

The output should respond with yes.

Check the masquerade was added to the runtime instance.

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 MASQUERADE

3. Reload firewalld for the changes to take place:

firewall-cmd --reload

4. 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.conf
net.ipv4.ip_forward = 1

6. 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 — на его основе мы создадим свою конфигурацию.

Читайте также:  Как редактировать wp-config.php файл в WordPress

Теперь откроем его для редактирования:

Здесь нужно будет внести несколько изменений. Когда в дальнейшем мы будем генерировать ключы в программе 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 -y

2. 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
Install EPEL repository on CentOS 7.

3. Update the repositories again:

yum update -y

4. You can now install OpenVPN with the command:

yum install -y openvpn
Install OpenVPN on CentOS 7.

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.ovpn
client
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 nobody

Make sure to replace the bolded parts with your respected values.

OpenVPN client configuration file.

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)!

Оцените статью
Хостинги