Установка и настройка OpenVPN сервера на Ubuntu 20.04

OpenVPN
OpenVPN

Продолжаю цикл статей о настройке OpenVPN.

Предыдущие:

На этот раз расскажу как поднять и настроить OpenVPN сервер на Ubuntu 20.04

Для начала устанавливаем easy-rsa для генерации сертификатов и open-vpn:

sudo apt install easy-rsa
sudo apt install openvpn

Cоздаем каталог, в котором будем генерировать сертификаты
Переходим в каталог рута:

cd /root
sudo mkdir easy-rsa

И создаем линки с каталогом, в котором установлен easy-rsa:

ln -s /usr/share/easy-rsa/* /root/easy-rsa/

Назначаем права:

 chmod 700 /root/easy-rsa/

Переходим внутрь каталога
и инициализируем:

./easyrsa init-pki

Создаем файл с переменными для генерации сертификатов:

nano vars

Наполняем:

set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
set_var EASYRSA_REQ_COUNTRY    "RUS"
set_var EASYRSA_REQ_PROVINCE   "Moscow"
set_var EASYRSA_REQ_CITY       "Moscow City"
set_var EASYRSA_REQ_ORG        "Sysadmintalks"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
  • EASYRSA_ALGO -устанавливаем алгоритм шифрования
  • EASYRSA_DIGEST — устанавливаем хэш
  • EASYRSA_REQ_COUNTRY — указываем страну
  • EASYRSA_REQ_PROVINCE — указываем область
  • EASYRSA_REQ_CITY — указываем город
  • EASYRSA_REQ_ORG — указываем организацию
  • EASYRSA_REQ_EMAI — указываем email администратора

Переходим к созданию сертификатов.
Генерируем CA:

./easyrsa build-ca

Указываем пароли ключа:
Common Name: VPN-CA

build-ca
build-ca

Создаем запрос на ключ сервера, без пароля

./easyrsa gen-req server nopass

Common Name : server

gen-req server
gen-req server

Подписываем запрос:

./easyrsa sign-req server server

На вопросы отвечаем «yes» и вводим пароль от CA:

sign-req server
sign-req server

Копируем созданные ключ в каталог сервера:

cp /root/easy-rsa/pki/private/server.key /etc/openvpn/server/
cp /root/easy-rsa/pki/issued/server.crt /etc/openvpn/server/
cp pki/ca.crt /etc/openvpn/server/

Создаем и копируем ключ диффи-хеллмана

./easyrsa gen-dh
cp pki/dh.pem /etc/openvpn/server/dh.pem

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

./easyrsa gen-req client1 nopass
gen-req clinet1
gen-req clinet1

И подписываем:

./easyrsa sign-req client client1

Cоглашаемся и вводим пароль CA

sign-req client
sign-req client

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

sudo mkdir -p /etc/openvpn/client-configs/keys/

Копируем туда сертификаты клиента:

cp /root/easy-rsa/pki/private/client1.key /etc/openvpn/client-configs/keys/
cp /root/easy-rsa/pki/issued/client1.crt /etc/openvpn/client-configs/keys/

Создаем каталог для конфигураций клиентов:

mkdir -p /etc/openvpn/ccd

Переходим в каталог сервера:

cd /etc/openvpn/server/

И генерируем ta,key для дополнительной защиты от флуда и DoS — атак.

openvpn --genkey --secret ta.key

Создаем конфигурацию для open vpn сервера:

nano /etc/openvpn/server/server.conf

И наполняем:

port 51194
proto udp
dev tun

## пути к сертификатам
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem

auth SHA256 # выбор алгоритма шифрования для аутентификации
cipher AES-256-CBC # выбор алгоритма шифрования всех передаваемых через vpn данных
tls-version-min 1.2 # ограничиваем минимальную версию протокола tls
tls-crypt ta.key # ключ для шифрования TLS control channel

server 10.1.2.0 255.255.255.0 # подсеть для туннеля, может быть любой
#route 172.17.16.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn

## Подключаем плагин авторизации
username-as-common-name
plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so /etc/pam.d/login
ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов
keepalive 10 120
comp-lzo # если используется протокол tcp, сжатие надо отключить
explicit-exit-notify 1 # если используется протокол tcp, поменять на 0
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
# указываем адрес DNS - сервера, и поисковой домен и маршруты за VPN
push "dhcp-option DNS 172.17.16.2"
push "dhcp-option DOMAIN sysadmintalks.ru"
push "route 172.17.16.0 255.255.255.0"
verb 3
duplicate-cn

Для того, что бы всё работало — требуется включить маршрутизацию на уровне ядра:

nano /etc/sysctl.conf

Находим и убираем комментарий со строки:

net.ipv4.ip_forward=1

Перечитываем файл, что бы настройки применились:

sysctl -p

Переходим к настройке ufw

Разрешаем форвард по умолчанию.
Открываем для редактирования:

nano /etc/default/ufw

И меняем:

DEFAULT_FORWARD_POLICY="ACCEPT"

Далее открываем для редактирования конфигурация политик по умолчанию:

nano /etc/ufw/before.rules

Добавляем правила построутинга:

# OPENVPN RULES
*nat
:POSTROUTING ACCEPT [0:0]
# Разрешаем прохождение трафика от клиентов на локальный eth0 (смените на свой вариант)
-A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Добавляем правила в ufw для работы OpenVPN

sudo ufw allow 51194/udp

Добавляем службу сервера в автозагрузку:

systemctl -f enable [email protected]

И запускаем службу:

systemctl start  [email protected]

На этом конфигурация сервера закончена. Для подключения собираем конфигурационный файл аналогично статье Сборка ovpn.conf для клиента Mikrotik

Полезные материалы по теме:

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.


*