Настройка openvpn сервера в Linux

Конспект в доработке

    Общие сведения

    vpn - защищенные виртуальные каналы
    OpenVPN создает виртуальные каналы ( туннели ) внутри незащищенной сети интернета
    Шифврование в vpn осуществляется с помощью библиотеки vpn и протоколом транспортного уровня TLS
    TLS - усовершенствованный протокол защищенной передачи данных защищенных сокетов Secure Socket Layers (SSL)
    В openssl может использоваться симметричная и ассиметричная криптография
    Симметричная криптография - перед передачей данных на все узлы необходимо поместить одинаковый секретный ключ
    Ассиметричная криптография - на каждом узле есть два ключа, публичный (шифрование) и приватный (расшифрование)
    Приватный ключ остается на узле, публичный ключ передается между узлами при передаче данных для аутентификации
    Шифрование данных увеличивает трафик и замедляет обмен данными
    В качестве openvpn сервера можно использовать арендованные vds, однако необходимо убедиться, что такой сервер будет поддерживать драйвер TUN/TAP

    Удостоверяющий центр CA

    Удостоверяющий центр выдает сертификаты узлам по запросу и предоставляет узлам свой собственный сертификат для проверки удостоверяющей стороны
    Чтобы избежать подделки открытого ключа, третья сторона должна его заверить, в результате проверки создается сертфикат проверки открытого ключа
    Сертификат должна заверить организация ( Certification authority, CA ) которой можно доверять
    Данная организация предоставляет свой открытый ключ доступный всем
    Для сети vpn можно создавать свой удостоверяющий центр, который будет выпускать самоподписанные сертификаты, которые могут использоваться только для узлов частной сети
    Самоподписанные сертфикаты будут играть роль публичных ключей. Параллельно созданные приватные ключи будут использоваться для расшифрования данных
    Сертификаты создаются в соответствии со стандартом x.509.

    x.509

    x.509 - это публичный ключ, который содержит такие данные, как владелец сертфиката, имя узла, период действия, алгоритм
    Данный сертификат должен быть подписан приватным ключем удостоверяющего цента ( CA )
    Когда один из узлов подключается к серверу используя TLS, сервер в ответ отправляет сертфикат x.509.
    На узле хранится публичный ключ удостоверяющего центра CA, который подписал этот сертфикат, данный ключ используется для проверки подписи
    Таким образом проверяется удаленный сервер на подлинность

    Список отзывов сертификатов

    Список отзывов содержит список сертфикатов узлов утративших доверие
    Список отзывов сертификато (Сertificate Revocation List, CRL) - используется для блокировки узлов, которые больше не должны иметь доступ к vpn
    Список отзывов создается в удостоверяющем центре CA и потом копируется на сервер OpenVPN
    После измения данного списка в удостоверяющем центре, его необходимо повторно скопировать на сервер OpenVPN

    Файл Диффи-Хелмана

    Файл Диффи-Хелмана (Diffie-Hellman) реализует протокол позволяющий использовать небезопасный канал для получения общего секретного ключа. Данный ключ будет использоваться для защищенного обмена с помощью алгоритмов симметричного шифрования
    В OpenVPN данный ключ создается для защиты трафика от расшифровки, если ключи были потеряны или похищены

    Статический ключ HMAC

    Статический ключ (хэш-код) аутентификации сообщений (Hash-based Message Authentication Code, HMAC) проверяет подлинность информации передоваемой между узлами
    Данный ключ используется для дополнительной защиты от флуда и dos-атак

    Файл запроса

    Файл запроса создается на узле и отправляется в удостоверяющий центр где подписывается и отправляется обратно на узел

    Приватный и публичный ключ

    Приватный и публичный ключ создаются одновременно вместе с файлом запроса

    Реализация vpn

    Можно использовать сервер OpenVPN в качестве удостоверяющего центра, однако не рекомендуется так как данный вариант открывает некоторые уязвимости
    Согласно официальной документации OpenVPN, необходимо использовать отдельный сервер для для центра сертификации
    Клиент, сервер и CA могут находиться в одной сети. На практике хост CA можно отсоединить от сети и осуществлять обмен ключами и сертфикатами с помощью usb накопителя
    Перед созданием OpenVPN сервера необходимо обновить пакеты в ОС, установить пакет zip для распаковки архива утилиты Easy-RSA.
    Утилита Easy-RSA будет использоваться для создания ключей и сертфикатов
    На всех узлах необходимо синхронизировать время с помощью сервера ntp

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

    CA предназначен для подписи сертификатов для сервера OpenVPN и клиентов
    Сервер OpenVPN или клиент создает приватный ключ и файл запроса. Файл запроса отправляется на CA ( удостоверяющий центр ) где подписывается и передается обратно клиенту или серверу. Файл запроса может передаваться с помощью usb-накопителя и с помощью usb-флешки может обратно передаваться на запрашиваемый узел
    Все сертификаты и ключи можно создавать с помощью утилиты openssl, однако проще будет использовать утилиту Easy-RSA в составе пакета OpenVPN

    #Создать неприлегированного пользователя adduser ca su ca cd #Загрузить Easy-rsa wget https://github.com/OpenVPN/easy-rsa/archive/master.zip #Распаковать unzip master.zip #Исполняемые файлы находятся в каталоге ~/easy-rsa-master/easyrsa3 #Справка по командам ./easyrsa ./easyrsa help build-ca
    Создание инфраструктуры закрытых ключей

    #Для создания инфраструктуры закрытых ключей (Public Key Infrastructure, PKI) cd /home/ca/easy-rsa-master/easyrsa3 ./easyrsa init-pki

    Созданные ключи находятся в каталоге /home/ca/easy-rsa-master/easyrsa3/pki

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

    #Создать CA ./easyrsa build-ca #Без ввода пароля ./easyrsa build-ca nopass

    В ответ будет предложено ввести кодовую фразу ( пароль ) и имя common name
    Пароль будет защищать приватный ключ CA и потребуется для подписи сертификатов серверов и клиентов OpenVPN
    Команда build-ca создаст два файла:
    /home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key
    /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
    ca.key - это приватный ключ CA
    ca.ctr - это открытый ключ и нужно будет расположить его на клиентах и сервере

    #Копируем публичный сертифика CA в openvpn cp /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/
    Создание списка отзыва сертификатов

    В процессе создания будет запрошен пароль приватного ключа CA.
    Список отзывов будет находиться в директории: /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem
    Данный ключ необходимо скопировать на сервер OpenVPN

    #Копируем список отзыва в openvpn cp /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem /etc/openvpn/ cd /home/ca/easy-rsa-master/easyrsa3 ./easyrsa gen-crl

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

    ./easyrsa revoke sotrudnik1

    После выполнения команды выше, необходимо снова скопировать ключ /home/ca/easy-rsa-master/easyrsa3/pki/crl.pem на сервере OpenVPN

    Структура каталогов pki
    ~/easy-rsa-master/easyrsa3$ ls /home/ca/easy-rsa-master/easyrsa3/pki/ ca.crt certs_by_serial crl.pem index.txt index.txt.attr inline issued private reqs revoked serial vars.example

    ca.crt - публичный сертификат удостоверяющего центра
    crl.pem - список отзыва сертификатов ( CRL )
    issued - каталог с публичными сертификатами созданные CA
    private - каталог с секретными приватными ключами
    Reqs - каталог с запросами на сертификаты

    Подготовка сервера openvpn
    #Установка OpenVPN apt install openvpn

    Файлы конфигурации, сертификаты и ключи нужно поместить в каталог /etc/openvpn, который будет создан автоматически
    Необходимо создать файлы конфигурации openssl.cnf который определяет конфигурацию openssl и server.conf который определяет конфигурацию openvpn
    Пример конфигурационного файла openssl находится в файле /home/ca/easy-rsa-master/easyrsa3/openssl-easyrsa.cnf
    В данном файле указан абсолютный путь к каталогу с ключами и сертификатами

    #Создать каталог для логов openvpn mkdir /var/log/openvpn/ #Каталог для конфигураций клиентов mkdir /etc/openvpn/ccd #Конфигурация openssl [ ca ] default_ca = CA_default [ CA_default ] dir = /etc/openvpn crl_dir = $dir database = $dir/index.txt new_certs_dir = $dir certificate = $dir/ca.crt serial = $dir crl = $dir/crl.pem private_key = $dir/server.key RANDFILE = $dir/.rand default_days = 3650 default_crl_days = 365 default_md = md5 unique_subject = yes policy = policy_any x509_extensions = user_extensions [ policy_any ] organizationName = match organizationalUnitName = optional commonName = supplied [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name x509_extensions = CA_extensions [ req_distinguished_name ] organizationName = Organization Name (must match CA) organizationName_default = Company organizationalUnitName = Location Name commonName = Common User or Org Name commonName_max = 64 [ user_extensions ] basicConstraints = CA:FALSE [ CA_extensions ] basicConstraints = CA:TRUE default_days = 3650 [ server ] basicConstraints = CA:FALSE nsCertType = server #Конфигурация openvpn port 1194 proto udp dev tun user openvpn group openvpn cd /etc/openvpn persist-key persist-tun tls-server tls-timeout 120 dh /etc/openvpn/dh.pem ca /etc/openvpn/ca.crt cert /etc/openvpn/vpn.netbash.ru.crt key /etc/openvpn/server.key crl-verify /etc/openvpn/crl.pem tls-auth /etc/openvpn/ta.key 0 server 10.15.0.0 255.255.255.0 client-config-dir /etc/openvpn/ccd client-to-client topology subnet max-clients 5 push "dhcp-option DNS 10.15.0.1" route 10.15.0.0 255.255.255.0 comp-lzo keepalive 10 120 status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 3 mute 20
    Файлы для сервера openvpn

    dh.pem - Файл Диффи-Хелмана для защиты трафика от расшифровки
    ca.crt - сертификат удостоверяющего центра
    server.crt - сертификат сервера openvpn
    server.key - приватный ключ сервера openpvn
    crl.pem - список отзыва сертификатов
    ta.key - ключ HMAC для доп. защиты

    #Создать пользователя vpnuser adduser vpnuser #Установка Easy-RSA и запуск инициализации инфраструктуры pki su - vpnuser cd /home/vpnuser/ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip cd /home/vpnuser/easy-rsa-master/easyrsa3 ./easyrsa init-pki #Создать запрос на сертификат и приватный ключ ./easyrsa gen-req server .... Private-Key and Public-Certificate-Request files created. Your files are: * req: /home/vpnuser/easy-rsa-master/easyrsa3/pki/reqs/server.req * key: /home/vpnuser/easy-rsa-master/easyrsa3/pki/private/server.key

    В процессе создания будет запрошен пароль и имя сервера OpenVPN
    Данный запрос будет отправлен на CA

    #Переключиться на сервер CA под ранее созданным пользователем su - ca cd easy-rsa-master/easyrsa3/ #Добавить права на подготовленный файл запроса sudo chown ca:ca /home/ca/server.req #Импорт файла на сервер CA ./easyrsa import-req /home/ca/server.req vpn.netbash.ru Notice ------ Request successfully imported with short-name: vpn.netbash.ru This request is now ready to be signed. #Подпись запроса на получение ./easyrsa sign-req server vpn.netbash.ru ... Write out database with 1 new entries Data Base Updated Notice ------ Certificate created at: * /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn.netbash.ru.crt

    В результате будет создан сертификат, который необходимо переместить обратно на OpenVPN сервер
    Полученный ключ необходимо переместить в каталог конфигурации openvpn

    #В моем случае все находится на одном сервере sudo cp /home/ca/easy-rsa-master/easyrsa3/pki/issued/vpn.netbash.ru.crt /etc/openvpn/ #Далее скопировать приватный ключ OpenVPN в каталог конфигурации openvpn sudo cp /home/vpnuser/easy-rsa-master/easyrsa3/pki/private/server.key /etc/openvpn/
    Генерация файла Диффи-Хелмана на сервер openvpn
    cd /home/vpnuser/easy-rsa-master/easyrsa3 ./easyrsa gen-dh ..+....................................................+..........................................+...............................................++*++*++*++* DH parameters appear to be ok. Notice ------ DH parameters of size 2048 created at: * /home/vpnuser/easy-rsa-master/easyrsa3/pki/dh.pem #Скопируем данный ключ в каталог конфигурации openvpn sudo cp /home/vpnuser/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn/
    Создание статического ключа HMAC на сервере openvpn
    cd /etc/openvpn sudo openvpn --genkey --secret ta.key
    Добавление пользователя openvpn

    #Добавление неприлегированного пользователя от имени которого будет работать openvpn сервер
    adduser --system --no-create-home --home /nonexistent --disabled-login --group openvpn

    #Включить фаервол и Добавить службу в автозагрузку sudo ufw enable #Открыть порт openvpn для клиентов sudo ufw allow 1194
    Возможные проблемы

    1. После перезапуска openvpn, интерфейс tun может не появиться. Чтобы избавиться от проблемы, необходимо создать файл /etc/modprobe.d/dist.conf и добавить в него строку: alias netdev-tun tun. После внесения изменений необходимо перезапустить сервер.


    2. Нет подключения со стороны клиента. Необходимо убедиться, что порт сервера openvpn доступен для клиента

    Подготовка клиента openvpn

    Файлы конфигурации, ключи и сертификаты также как и в случае с сервером должны находится в каталоге /etc/openvpn
    Файл openssl.cnf точно такой же как и на сервере openvpn

    apt install openvpn #Содержимое файла server.conf для клиента OpenVPN dev tun proto udp remote 46.253.143.112 1194 client resolv-retry infinite ca "/etc/openvpn/ca.crt" cert "/etc/openvpn/netbash.crt" key "/etc/openvpn/client.key" tls-auth "/etc/openvpn/ta.key" 1 remote-cert-tls server persist-key persist-tun comp-lzo verb 3 status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-client.log
    Создание инфраструктуры публичных ключей PKI для клиента openvpn

    cd /home/chich wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip #Запуск инициализации pki cd /home/chich/easy-rsa-master/easyrsa3 ./easyrsa init-pki #Запрос на сертификат и приватный ключ ./easyrsa gen-req client nopass В процессе создания потребуется ввести имя клиента

    ----- Common Name (eg: your user, host, or server name) [client]:admin-vpn Notice ------ Private-Key and Public-Certificate-Request files created. Your files are: * req: /home/chich/easy-rsa-master/easyrsa3/pki/reqs/client.req * key: /home/chich/easy-rsa-master/easyrsa3/pki/private/client.key #Копируем приватный ключ в openvpn sudo cp /home/chich/easy-rsa-master/easyrsa3/pki/private/client.key /etc/openvpn

    Далее необходимо сделать иморт файла запроса на сервер CA

    #Перенос файла запроса клиента на сервер CA rsync -Pavr -e 'ssh -p 2222' /home/chich/easy-rsa-master/easyrsa3/pki/reqs/client.req ca@46.253.143.112:/home/ca/ #Импорт файла запроса на сервере CA su - ca cd /home/ca/easy-rsa-master/easyrsa3 ./easyrsa import-req /home/ca/client.req admin-vpn Notice ------ Request successfully imported with short-name: admin-vpn This request is now ready to be signed. #Подписываем сертификат клиента Write out database with 1 new entries Data Base Updated Notice ------ Certificate created at: * /home/ca/easy-rsa-master/easyrsa3/pki/issued/admin-vpn.crt #Создадим каталог для клиента cd mkdir certs #Копируем в созданный каталог подписанный сертификат клиента /home/ca/easy-rsa-master/easyrsa3/pki/issued/admin-vpn.crt #А также публичный сертификат CA и созданный на сервере openvpn ta.key sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key certs/ #Добавить права sudo chown -R ca:ca certs #Синхронизируем созданный каталог с подписанным ключем клиента на пк клиента rsync -Pavr -e 'ssh -p 2222' ca@46.253.143.112:/home/ca/certs /home/chich/ #Переносим файлы в директорию /etc/openvpn/ клиента sudo cp certs/* /etc/openvpn/ #Перезапускаем сервер openvpn на клиенте /etc/init.d/openvpn restart ************************************************************************************************************* ************************************************************************************************************* ************************************************************************************************************* *************************************************************************************************************
    Установка прокси сервера squid3

    У нас есть сеть vpn, теперь необходимо организовать доступ к ресурсу на сервере OpenVPN

    #Установка прокси сервера apt install squid3 #Редактирование конфигурационного файла /etc/squid/squid.conf #Перед строкой http_access deny all добавить acl allowed_hosts src 10.15.0.0/24 http_access allow allowed_hosts http_access deny manager #Перезапуск конфигурации /etc/init.d/squid restart #Проверка http://10.15.0.1:3128
    Источники
    Последнее изменение: 07.10.2024 00:14


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ