: :

ПнВтСрЧтПтСбВс

2018-05-28 09:36:09 3989 0

Установка и настройка сервера Openvpn на CentOS

OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами

настройку будем проводить на сервере с операционной системой CentOS6.

Подключаем репозиторий epel

sudo yum install epel

Устанавливаем необходимые пакеты:

sudo yum install openvpn easy-rsa

Генерируем сертификат и ключ удостоверяющего центра и сертификат и ключ для сервера и клиента

Переходим в каталог с easy-rsa

cd /usr/share/easy-rsa/3.0.3/

Выполняем инициализацию инфраструктуры PKI

sudo ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3.0.3/pki

Создаем корневой сертификат:

sudo ./easyrsa build-ca

Generating a 2048 bit RSA private key
.......................+++
...........................................................................
...............+++
writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private/ca.key.taxrJtnBx4"
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ".", the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/share/easy-rsa/3.0.3/pki/ca.crt

Будет запрошена парольная фраза и потом имя сервера.

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

sudo ./easyrsa gen-dh

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
............................................................................
....+.......................................................................
...........................+................................................
............................................................................
.........................................................................+..
.+..........................................................................
.......................................+...................................+
........+...................................................................
............................................................................
...............................................................+............
............+.....+....................................................++*++*

DH parameters of size 2048 created at /usr/share/easy-rsa/3.0.3/pki/dh.pem

Создаем запрос для сертификата сервера (при этом указываем опцию nopass, без пароля на сертификат, или иначе этот пароль будет запрашиваться при каждом старте сервера)

sudo ./easyrsa gen-req test-server nopass

Generating a 2048 bit RSA private key
.........................................................+++
............................................................
...................................................+++
writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private
/tss-vpn.key.pFE2GhHg8h"
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ".", the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [test-server]:

Keypair and certificate request completed. Your files are:
req: /usr/share/easy-rsa/3.0.3/pki/reqs/test-server.req
key: /usr/share/easy-rsa/3.0.3/pki/private/test-server.key

Теперь из запроса создаем сам сертификат сервера:

sudo ./easyrsa sign-req server test-server

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = test-server


Type the word "yes" to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject"s Distinguished Name is as follows
commonName            :PRINTABLE:"test-server"
Certificate is to be certified until May  7 07:36:26 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /usr/share/easy-rsa/3.0.3/pki/issued/test-server.crt

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

Копируем все полученные ключи и сертификаты в директорию с openvpn

mkdir /etc/openvpn/keys

cp /usr/share/easy-rsa/3.0.3/pki/ca.crt /etc/openvpn/keys/

cp /usr/share/easy-rsa/3.0.3/pki/dh.pem /etc/openvpn/keys/

cp /usr/share/easy-rsa/3.0.3/pki/private/test-server.key /etc/openvpn/keys/

cp /usr/share/easy-rsa/3.0.3/pki/issued/test-server.crt /etc/openvpn/keys/

Создадим HMAC ключ для защиты от DOS и от UDP флуда:

cd /etc/openvpn/keys

sudo openvpn --genkey --secret ta.key

Создаем файл конфиг сервера /etc/openvpn/server.conf

cat /etc/openvpn/server.conf

#Указываем порт на которм сервер будет принимать запросы
port 1197

# Протоко tcp или udp
proto udp

# Указываем имя виртуального интерфейса (tun или tap)
# tun - инкапсулирует пакеты IPv4 и IPv6  (3 уровнь OSI_, 
# tap - инкапсулирует пакеты Ethernet ( 2 уровнь OSI)
dev tun

# Указываем пользователя и группу с правами которых будет работать сервер
user nobody
group nobody

# Указываем расположение файлов ключей и сертификатов

dh /etc/openvpn/keys/dh.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/tss-vpn.crt
key /etc/openvpn/keys/tss-vpn.key
tls-auth /etc/openvpn/keys/ta.key 0 # 0 - на сервере, 1 - на клиенте

# Указываем алгоритм шифрования
cipher AES-256-CBC

# Указание режима для работы с TLS

tls-server

# Использовать lzo сжатие
comp-lzo

# Не перечитывать ключи, при получении сигнала SIGUSR1

persist-key

# Не закрывать и открывать заново интерфейс TUN/TAP при получении сигнала SIGUSR1
persist-tun

# Максимильно возможно количество подключаемых клиентов
max-clients 10

# Интервал и таймаут для сохранение соединения открытым
keepalive 10 900

# Виртуальная сеть для VPN 
server 10.20.0.0 255.255.255.0

# Указываем файл в котором будет храниться соответствие ip-адреса и клиента,
#можно добавить время в секундах, сколько будет храниться запись,
#по-умолчанию 600 секунд
ifconfig-pool-persist ipp.txt

# Указываем файл для записи статуса соединений и формат записей
status /var/log/openvpn/openvpn-status.log 1
status-version 3

# Указываем расположение файла логов и уровень записи
log-append /var/log/openvpn/openvpn-server.log
verb 3

# Указываем к каким сетям будет построен маршрут через VPN тунель
push "192.168.10.0 255.255.255.0"


# Если хотим что бы весь трафик шел через VPN, то добавляем такую запись
#push "redirect-gateway def1"


Для обзора полного перечня возможностей, обращайтесь к официальной документации openvpn

Создаем директорию для логов

mkdir /var/log/openvpn

Запускаем сервер Openvpn

sudo service openvpn start

Настройка клиента Openvpn

Сначала создадим ключ и сертификат для клиента на нашем сервере Openvpn

cd /usr/share/easy-rsa/3.0.3

Создаем запрос на получения сертификата:

sudo ./easyrsa gen-req User nopass

Generating a 2048 bit RSA private key
...................................+++
..............................................................
..............................................................
.........+++
writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private
/User.key.0LiAZkb7Ff"
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ".", the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [User]:

Keypair and certificate request completed. Your files are:
req: /usr/share/easy-rsa/3.0.3/pki/reqs/User.req
key: /usr/share/easy-rsa/3.0.3/pki/private/User.key

Создаем сертификат пользователя (ограничим срок действия одним годом):

sudo ./easyrsa sign-req client User -days 365


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this
request
has not been cryptographically verified. Please be sure it came from a
trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 365 days:

subject=
    commonName                = User


Type the word "yes" to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject"s Distinguished Name is as follows
commonName            :PRINTABLE:"User"
Certificate is to be certified until May  7 08:15:47 2019 GMT (365 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /usr/share/easy-rsa/3.0.3/pki/issued/User.crt

Теперь необходимо перекинуть клиенту необходимые ключи и сертификаты (сертификат CA, ключ и сертификат клиента, ключ ta.key)

Создаем файл с настройками клиента client.conf

cat /etc/openvpn/client.conf

# Указываем режим работы client
client

# Имя интерфейса
dev tun

# Протокол работы
proto udp

# ip-адрес сервера Openvpn и порт
remote	"x.x.x.x" 1197

# Алгоритм шифрования (как на сервере)
cipher AES-256-CBC

# Режим работы с TSL
tls-client

# Расположение ключей и сертификатов
ca /etc/openvpn/keys/ca.crt
key /etc/openvpn/keys/User.key
cert /etc/openvpn/keys/User.crt
tls-auth /etc/openvpn/keys/ta.key 1 # 1- для клиента

# Включение сжатия lzo
comp-lzo

# Не связывать локальный адрес и порт. Будет выделен динамический 
# порт для получениявозвращаемых пакетов.
nobind

Настройка файервола

для того что бы VPN работал необходимо открыть порт Openvpn (тот что мы указали в настройках сервера) и разрешить маршрутизацию пакетов между физическими интерфейсами и интерфейсами VPN

Пример настройки на iptables

sudo iptables -A INPUT -p tcp --dport 1197 -j ACCEPT

sudo iptables -A FORWARD -i tun+ -o eth0 -j ACCEPT

sudo iptables -A FORWARD -i eth0 -o tun+ -j ACCEPT

Настройка клиента на операционной системе Windows выполняется по аналогии с Linux, тот же свмый конфигурационный файл. После установки клиента на Windows скопировать конфигурационный файл и ключи с сертификатами в каталог C:\Program Files\OpenVPN\config. Конфигурациооный файл назвать client.ovpn. Запускать приложение Openvpn только с правами администратора.

В концовке рассмотрим процесс отзыва сертификатов, на случай если вы захотите кому то запретить доступ к вашему VPN серверу

Переходим в директорию с easy-rsa

cd /usr/share/easy-rsa/3.0.3/

Генерируем файл отозванных сертификатов

sudo ./easyrsa gen-crl

Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key:

An updated CRL has been created.
CRL file: /usr/share/easy-rsa/3.0.3/pki/crl.pem

В конфигурационный файл openvpn добавляем строку

crl-verify /usr/share/easy-rsa/3.0.3/pki/crl.pem

Выполним отзыв сертификата для пользователя

sudo ./easyrsa revoke TEST

Please confirm you wish to revoke the certificate with the following subject:

subject= 
    commonName                = TEST


Type the word "yes" to continue, or any other input to abort.
  Continue with revocation: yes
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key:
Revoking Certificate EF4B7054B0B274BA0DCBC2C4CA7CE6B5.
Data Base Updated

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

После каждого отзыва, необходимо обновлять файл отозванных сертификатов

sudo ./easyrsa gen-crl

Список отозванных и действующих сертификатов можно найти в /usr/share/easy-rsa/3.0.3/pki/index.txt

cat /usr/share/easy-rsa/3.0.3/pki/index.txt

V 280507073626Z	2788BD2B2FAECBC5812768D9EF70E7CF unknown/CN=test-server
V 280507081547Z	C9C30E24CA97E1A68DE077970CA7CAA6 unknown/CN=User
R 280507091636Z	180510091706Z EF4B7054B0B274BA0DCBC2C4CA7CE6B5 unknown /CN=TEST

В первом столбце указан статус сертификата V - действующий, R - отозванный






Введите ответ:

+

=