Установка OpenVPN, часть1


В первой части мы рассмотрим установку самого сервера и клиентский конфиг. Во второй и третьей части будем создавать клиентские конфиги и т.д. В четвёртой запустим мониторинг пользователей, в пятой сделаем автоматизацию управления ботом.

Установка простая.

Нужно отключить SElinux.

в файле /etc/selinux/conf смотрим, чтоб была такая запись:

SELINUX=disable

Если там, что-то другое, то меняем на нужное и применяем:

echo 0 > /selinux/enforce

либо

setenforce 0

проверяем статус

sestatus

SELinux status: disabled

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

# yum -y install epel-release

Выполняем непосредственно установку:

# yum -y install openvpn

Для работы сервера openvpn необходимо создать соответствующие сертификаты. Для этого воспользуемся программой Easy-RSA, которая генерирует сертификаты с помощью утилиты openssl. Все работы в этом разделе выполняем только на centos-server.

Создаем директорию для ключей:

# mkdir /etc/openvpn/keys

Устанавливаем архиватор zip:

# yum -y install unzip zip

Скачиваем и устанавливаем утилиту Easy-RSA:

# cd /etc/openvpn/keys
# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

Если получаете сообщение:

-bash: wget: command not found

То устанавливаете wget:

# yum -y install wget

Продолжаем:

# unzip master.zip
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3

Создаем структуру публичных PKI ключей:

# mv vars.example vars
# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
 Your newly created PKI dir is: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki

Создайте удостоверяющий центр CA:

# ./easyrsa build-ca
Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 .+++
 .........................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key.GKwCGouHpy'
 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]:serveradmin.ru
CA creation complete and you may now import and sign cert requests.
 Your new CA certificate file for publishing is at:
 /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

Не забудьте указанный пароль. Его нужно будет вводить каждый раз при создании нового сертификата openvpn.

Мы получили 2 ключа:

  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key
  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

Первый ключ секретный, его нужно оставить на сервере и никому не отдавать. Второй — открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.

Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:

# ./easyrsa gen-req server nopass
Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 ........................+++
 ..............................................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key.vCUQuueIih'
 -----
 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) [server]:
Keypair and certificate request completed. Your files are:
 req: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/reqs/server.req
 key: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key

Подписываем запрос на получение сертификата у нашего CA:

# ./easyrsa sign-req server server
Note: using Easy-RSA configuration from: ./vars
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 = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /etc/openvpn/keys/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'server'
Certificate is to be certified until Sep 10 00:31:21 2025 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

Нам еще пригодится ключ Диффи-Хелмана, генерируем его:

# ./easyrsa gen-dh

По завершению работы скрипта получаем файл dh сертификата — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem.

Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи:

# cp pki/ca.crt /etc/openvpn/ca.crt
# cp pki/dh.pem /etc/openvpn/dh.pem
# cp pki/issued/server.crt /etc/openvpn/server.crt
# cp pki/private/server.key /etc/openvpn/server.key

Создадим ключ для клиента openvpn:

# ./easyrsa gen-req client nopass
# ./easyrsa sign-req client client

Процедура аналогична созданию сертификата для сервера. Так же вводим пароль, отвечаем yes. В результате получаем подписанный сертификат клиента:

  •  /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/client.crt
  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/client.key

Клиенту, которым у нас является шлюз филиала нужно будет передать следующий набор файлов — client.crt, client.key, ca.crt.

Теперь приступаем к настройке. Создаем файл конфигурации openvpn:

# mcedit /etc/openvpn/server.conf
port 1194 # я предпочитаю использовать нестандартные порты для работы
proto udp # протокол может быт и tcp, если есть необходимость в этом
dev tap

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem

server 10.11.12.0 255.255.255.0 # подсеть для туннеля, может быть любой
route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
push "route 10.0.0.0 255.0.0.0" # передаем маршрут клиентам
push "dhcp-option DNS 10.30.1.11" # пробрасываем нужный ДНС (мне необходимо) для внутренних ресурсов
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
ifconfig-pool-persist ipp.txt

keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

Создаем необходимые директории:

# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn

 Пробуем запустить openvpn сервер:
# systemctl start openvpn@server
Проверяем, запустился или нет:
# netstat -tulnp | grep 1194 udp 0 0 0.0.0.0:1195 0.0.0.0:* 2902/openvpn
Отлично, запустился на указанном порту.
Добавляем сервер openvpn в автозагрузку:
# systemctl enable openvpn@server ln -s '/usr/lib/systemd/system/openvpn@.service' '/etc/systemd/system/multi-user.target.wants/openvpn@server.service' 

Остановим и выключим фаервол
systemctl stop firewalld
systemctl disable firewalld
Добавим правила
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o ens192 -j MASQUERADE
iptables -A OUTPUT -o tap0 -j ACCEPT
Сервер готов к работе. Во второй части мы будем создавать клиентские конфиги и сертификаты.