- OpenVPN / VirtualBox — как создать сервер OpenVPN на виртуалке с Astra Linux?
- Введение
- Установка и настройка удостоверяющего центра на сервере
- Установка
- Настройка
- Создание новой базы данных
- Создание ключа УЦ
- Создание сертификата УЦ
- Создание сертификата сервера OpenVPN
- Создание сертификата клиента на Рутокен ЭЦП
- Подключение библиотеки pkcs#11
- Генерация ключей на Рутокен ЭЦП
- Создание сертификата клиента
- OpenVPN
- Установка на сервер
- Настройка
- Создание DH (Diffie Hellman) ключа
- Создание конфигурационного файла
- Запуск OpenVPN
- Настройка клиентской машины
- Установка компонентов для работы с Рутокен ЭЦП
- Установка OpenVPN на клиенте
- Подключение к VPN-серверу
OpenVPN / VirtualBox — как создать сервер OpenVPN на виртуалке с Astra Linux?
Здравствуйте.
Нужно настроить на виртуальной машине с Astra Linux сервер OpenVPN, чтобы:
1) иметь доступ к общим сетевым ресурсам
2) проксировать весь траффик с хоста через ВПН на ВМ
Что удалось сделать:
настроил OpenVPN на сервере, получил сертификаты для клиента, установил OpenVPN на хост, перекинул туда сертификаты клиента.
На хосте стоит W7 64
Следовал этому гайду:
https://www.youtube.com/watch. 0%9F%D0%9A
Что имею сейчас:
Сервер запускается, однако клиент OpenVPN возвращает:
Wed Sep 08 19:39:59 2021 read UDP: Unknown error (code=10054)
Необходимый порт открыт в брандмауэре, однако порт сканнеры говорят, что он закрыт (мб из-за NAT).
Что бы хотелось узнать:
В правильном направлении ли я копаю, может быть можно сделать что-то проще, и что вообще делать?
Важно: все происходит на одной машине.
Содержимое server.conf: https://pastebin.com/Jst9gZBc
client.conf: https://pastebin.com/bc62BBYQ
ошибка:
Ifconfig
Сначала там был my-server, изменил на 192.168.99.1 — ситуация не изменилась. Указал 192.168.99.2 — получил ошибку TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Грешу на то, что на клиенте не удается открыть 1194 порт для входящих соединений. То есть в правилах он прописан, однако с виртуалки telnet’ом подключится не получается и в netstat — a он почему-то не указан.
Iptables https://pastebin.com/faLN0wQP
Ufw disable не помог
Спасибо
Простой 4 комментария
Введение
OpenVPN — кроссплатформенное, гибкое и удобное решение для организации VPN.
Для допуска в виртуальную сеть, построенную на базе OpenVPN, клиент должен авторизоваться. В OpenVPN это можно сделать 3 способами:
- по логину и паролю
- по ключу и сертификату в файлах ( См. Управление сертификатами и ключами для клиентов OpenVPN)
- по ключу и сертификату на «борту» криптографического USB-токена или смарт-карты
В статье будет описана авторизация в OpenVPN с помощью криптографического USB-токена Рутокен ЭЦП. Рутокен ЭЦП надежно защищен PIN-кодом от несанкционированного доступа и блокируется при исчерпании попыток ввода PIN-кода, поэтому злоумышленник не попадет в VPN даже в случае кражи токена. Кроме того, в Рутокен ЭЦП аппаратно реализованы алгоритмы ГОСТ и RSA, поэтому аутентификация производится «на борту» токена. Благодаря этому закрытый ключ никогда не покидает токен и его невозможно украсть из оперативной памяти компьютера с помощью троянов.
В статье будет показано, как развернуть тестовый VPN, а также корпоративный УЦ на базе приложения XCA. С помощью УЦ будет создан ключ и сертификат сервера OpenVPN и произведена инициализация токена клиента. Затем настроим клиент OpenVPN таким образом, чтобы пользователь мог авторизоваться в OpenVPN с помощью Рутокен ЭЦП.
Стенд с сервером OpenVPN и XCA поднят на Astra Linux РУСБ.10015-01очередное обновление 1.6 оперативное обновление 2
Установка и настройка удостоверяющего центра на сервере
Установка
Для начала установим системные компоненты и утилиты, необходимые для работы Рутокен ЭЦП и XCA:
Для установки библиотеки librtpkcs11ecp.so следует перейти по указанной ссылке и скачать необходимую версию:
Меню «Пуск» → Утилиты → Цифровые сертификаты XCA
Настройка
Создание новой базы данных
Файл→ Новая база данных (Ctrl+N) и сохраняем ее в удобном для Вас месте
Создание ключа УЦ
Создадим ключ УЦ: Раздел «Закрытые ключи»→ «Новый ключ», назовем его CAkey, Keytype выбираем RSA, Keysize 2048 bit.
Создание сертификата УЦ
Создадим сертификат УЦ: раздел «Сертификаты» → «Новый сертификат» согласно нижеуказанным скриншотам:
Создание сертификата сервера OpenVPN
Создадим ключ сервера OpenVPN: раздел «Закрытые ключи» → «Новый ключ», назовем его Openvpnkey, Keytype — RSA, Keysize — 2048 bit.
Создадим сертификат сервера: раздел «Сертификаты»→ «Новый сертификат» согласно представленным скриншотам.
Создание сертификата клиента на Рутокен ЭЦП
Подключение библиотеки pkcs#11
Для работы с Рутокен ЭЦП, утилите XCA нужно указать библиотеку PKCS#11 АктивСофта.
Для этого указываем путь к ней: Файл → Опции → PKCS#11 provider → «Добавить» и указываем путь до библиотеки pkcs11(/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so)
Генерация ключей на Рутокен ЭЦП
Далее подключаем Рутокен ЭЦП и создаем ключ «на борту» Рутокен ЭЦП: раздел «Закрытые ключи» → «Новый ключ» → назовем его Clientkey, Keytype — RSA(!) на рутокене, Keysize — 2048 bit.
Создание сертификата клиента
Когда XCA предложит сохранить сертфикат на токен, нажимаем «Да» и вводим PIN-код.
Далее э кспортируем сертификат УЦ в файл CA.crt, сертификат сервера в файл Openvpn.crt и ключ сервера в файл openvpn.pem (Закрытые ключи→ Экспорт , Сертификаты → Экспорт ) и сохраним их к примеру в своей домашней директории.
OpenVPN
Установка на сервер
Пакет openvpn входит в дистрибутивы ОС Astra Linux, и устанавливается по умолчанию.
Для быстрой настройки можно рекомендовать дополнительно установить пакеты
- для машины, предназначенной на роль сервера:
- графический инструмент fly-admin-openvpn-server
- или инструмент командной строки astra-openvpn-server
При установке пакетов fly-admin-openvpn-server и astra-openvpn-server автоматически будет установлен пакет libgost-astra, поддерживающий защитное преобразование информации в соответствии с алгоритмами ГОСТ.
Настройка
Создание DH (Diffie Hellman) ключа
Вы можете создать файл параметров Diffie Hellman (Диффи-Хелмана) с помощью openssl:
Вы можете заменить 2048 на другие цифры, например на 4096.
Если число выше, безопасность параметров будет выше, но вашему серверу или компьютеру потребуется больше времени для генерации двух простых чисел этой длины.
Более низкие номера имеют более низкую безопасность, но требуют значительно меньшего времени для создания
Создание конфигурационного файла
Создаем конфигурационный файл сервера OpenVPN:
Cо следующими параметрами:
port 1194 proto tcp dev tap ca /home/u/openvpn/CA.crt cert /home/u/openvpn/Openvpn.crt key /home/u/openvpn/Openvpnkey.pem dh /home/u/openvpn/dh2048.pem server 10.0.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 cipher BF-CBC comp-lzo persist-key persist-tun status openvpn-status.log verb 3
Параметры конфигурационного файла
Параметр Значения Описание client Строка говорит о том, что конфигурационный файл описывает клиентское подключение (программа сама устанавливает соединение, а не ждет, как сервер). dev tap или tun Выбор виртуального сетевого драйвера. TUN — сетевой уровень модели OSI, оперирует IP-пакетами. TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Настраивая OpenVPN клиента, в большинстве случаев, необходимо выбирать tun. TAP необходимо использовать для работы определенных сервисов, например DHCP. dev-node любая строка Параметр используется в системах Windows в случаях, если имеется несколько сетевых интерфейсов. Значение этого параметра должно содержать название сетевого подключения, через который должен работать OpenVPN. proto udp или tcp Указывает, какой протокол использовать для передачи данных. В большинстве случаев, лучше использовать UDP, так как данный протокол создает меньше нагрузки на сеть. remote VPN-сервер и порт Задает сервер, к которому должен подключаться клиент, а также сетевой порт, на котором OpenVPN принимает запросы. Можно указать несколько строк. remote-random Если указано несколько строк remote, данный параметр говорит, что необходимо подключаться к удаленным серверам в случайном порядке. resolv-retry количество секунд или infinite Используется в тех случаях, когда в качестве сервера указано доменное имя. Параметр задает время в секундах для повторного переподключения, если не удалось узнать имя сервера. infinite — держать связь с сервером постоянно. nobind Клиент использует динамический порт для подключения. user учетная запись Задает определенного пользователя для работы клиента (только для UNIX-систем). group группа Задает определенную группу для работы клиента (только для UNIX-систем). persist-key Не перечитывает ключи при перезагрузке сервиса OpenVPN. persist-tun Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN. http-proxy сервер прокси и порт Использовать прокси-сервер для подключения. http-proxy-retry Переподключаться к прокси-серверу, если связь была разорвана. http-proxy-timeout количество секунд Время, через которое выполнять попытки переподключения к прокси-серверу. mute-replay-warnings Параметр стоит задавать при использовании беспроводного соединения. Он отключит дублирование предупреждений пакетов. ca пут к сертификату Корневой сертификат удостоверяющего центра. Генерируем на сервере. cert пут к сертификату Открытый ключ клиента. Генерируем на сервере. key пут к сертификату Закрытый ключ клиента. Генерируем на сервере. dh пут к сертификату Ключ с алгоритмом Diffie-Hellman (Диффи-Хеллмана). remote-cert-tls сервер Исключает возможность mitm атаки, включая верификацию сертификата сервера. tls-client Указание на то, что это клиент TLS. tls-auth ta.key 1 Дополнительный уровень аутентификации посредством ключа TLS. float Удаленный хост может менять IP-адрес в процессе соединения, при этом последнее не будет разорвано. keepalive секунд1 секунд2 Пинговать каждые секунд1 сервер и если в течение секунд2 не будут получены ответные пакеты, перезапустить подключение. cipher алгоритм Указывает алгоритм защитного преобразования данных. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. comp-lzo Использовать сжатие. verb число от 0 до 9 Уровень детализации лога. 0 отключает отладочную информацию. mute число Указывает сколько лог-сообщений может отображаться для каждой категории события. auth-user-pass ничего или путь к файлу Говорит клиенту, что необходима аутентификация. Если не указан путь к файлу, клиент выкинет окно для авторизации, иначе прочитает данные из файла. ipchange команда или путь к скрипту Выполняет команду при смене IP. connect-retry секунд Переподключиться к серверу через указанное количество секунд, если соединение было разорвано. connect-retry-max число Сколько раз повторять соединение, если оно было разорвано. shaper байт Задает максимальную скорость передачи данных для исходящего трафика. tun-mtu число Задает MTU. status путь к файлу Путь к фалу хранения статуса. log путь к файлу Путь к лог-файлу. Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn —help
Запуск OpenVPN
В «боевой» конфигурации сервер следует запускать как демон и ключи/сертификаты не должны лежать в /home
Настройка клиентской машины
Установка компонентов для работы с Рутокен ЭЦП
На клиентской машине устанавливаем пакеты, необходимые для работы Рутокен ЭЦП:
Установка OpenVPN на клиенте
Копируем с сервера сертификат Удостоверяющего Центра (УЦ) к примеру в раздел /home/client/openvpn/CA.crt
Создаем конфигурационный файл клиента
client dev tap proto tcp remote 192.168.xxx.xxx 1194 resolv-retry infinite nobind persist-key persist-tun ca /home/client/openvpn/CA.crt pkcs11-providers /usr/lib/librtpkcs11ecp.so pkcs11-id 'Aktiv\x20Co\x2E/Rutoken\x20ECP/2f996caf/Rutoken\x20ECP\x20\x3Cno\x20label\x3E/3C9F594E0994420E' pkcs11-pin-cache 300 comp-lzo verb 3
В параметре remote указываем ip-адрес VPN-сервера
В параметре pkcs11-providers указываем путь к библиотеке PKCS#11 Рутокен.
В параметре pkcs11-id указываем ID контейнера, в котором на Рутокен ЭЦП хранятся ключ и сертификат. Узнать этот ID можно с помощью команды:
Подключение к VPN-серверу
Подключаемся к VPN-серверу:
По запросу следует ввести PIN-код к Рутокену ЭЦП.