Когда вы настраиваете удалённый доступ, важно не только предоставить всем сотрудникам подключение к нужным сервисам, но и позаботиться о безопасности. В этом помогает VPN — виртуальная частная сеть. VPN‑сервер действует как единая точка входа: он аутентифицирует пользователей и создаёт зашифрованный туннель между их устройствами и частной сетью. А ещё он считается более гибким решением, чем, например, SSH Jump Server.  Вы можете использовать платный VPN или создать и администрировать собственный. В этой статье разбираем, как настроить OpenVPN на Debian 11. два сервера Debian 11: один — для размещения OpenVPN, второй — для центра сертификации (Certificate Authority или CA); пользователь с привилегиями sudo на обоих серверах; Easy‑RSA на обоих серверах (это утилита, которую мы будем использовать для управления сертификатами VPN).  Хотя технически можно запустить CA с вашего OpenVPN‑сервера или локального компьютера, безопаснее хранить CA на отдельном сервере, который не подключен к интернету постоянно. Так у злоумышленников меньше шансов получить доступ к закрытому ключу и использовать его для подписания новых сертификатов.  Также обращаем внимание, что если вы отключите аутентификацию по паролю при настройке серверов, в дальнейшем можете столкнуться с трудностями при передаче файлов между ними. Чтобы решить эту проблему, вы можете повторно включить аутентификацию по паролю на каждом сервере. Или в качестве альтернативы — сгенерировать пару SSH‑ключей для каждого сервера, а затем добавить открытый SSH‑ключ OpenVPN‑сервера в файл authorized_keys и наоборот. Здесь подробнее о том, как настроить SSH‑ключи в Debian 11 для любого из этих решений. «Администрирование Linux. Мега» Для начала обновите индекс пакета VPN‑сервера и установите OpenVPN. OpenVPN доступен в репозиториях Debian по умолчанию, поэтому вы можете использовать apt для установки: Поскольку мы уже установили Easy‑RSA на оба сервера в качестве предварительного условия и инициализировали CA, мы готовы сгенерировать сертификат VPN‑сервера. На сервере OpenVPN перейдите в каталог /easy-rsa и запустите сценарий easyrsa  с параметром gen-req , за которым идёт общее имя компьютера. Хорошо, если вы сделаете это описательно. В рамках этой статьи общее имя OpenVPN‑сервера — «server». Не забудьте включить опцию nopass. В противном случае файл запроса будет защищен паролем, что впоследствии приведёт к проблемам с правами доступа: Примечание: если выберете имя, отличное от «server», вам придётся изменить некоторые из приведенных ниже инструкций. Например, при копировании сгенерированных файлов в каталог /etc/openvpn придётся заменить имена. Позже также придётся изменить файл /etc/openvpn/server.conf, чтобы указать правильные .crt и .key.  Скрипт предложит ввести общее имя, которое вы хотите отобразить в запросе на подписание сертификата (CSR). По умолчанию в нём будет отображаться любое имя, которое вы передали в ./easyrsa gen-req. Введите ENTER, чтобы принять имя по умолчанию, или укажите другое. Это создаст закрытый ключ для сервера и файл запроса сертификата с именем server.req. Скопируйте ключ сервера в каталог /etc/openvpn/: Используя безопасный метод (например, SCP), перенесите файл server.req на свою машину CA: Затем на машине CA перейдите в каталог ~/easy-rsa: Используя скрипт easyrsa, импортируйте файл server.req, следуя пути к файлу с общим именем, которое вы ввели при создании CSR: Затем подпишите запрос, запустив параметр easyrsa  с помощью sign-req. Тип запроса может быть либо client , либо server. Для запроса сертификата OpenVPN-сервера обязательно используйте тип запроса server: В выходных данных вам предложат подтвердить, что запрос исходит из надёжного источника. Введите yes и нажмите ENTER, чтобы подтвердить это: Если вы зашифровали ключ CA, следуя перечисленным в начале статьи инструкциям, на этом этапе вам будет предложено ввести пароль. Далее нужно передать подписанный сертификат обратно на VPN-сервер с помощью безопасного метода: Также нужно перенести на VPN-сервер файл ca.crt: ca.crt нужен, чтобы OpenVPN знал, что может доверять сущности, подписавшей server.crt. Затем на OpenVPN-сервере скопируйте файлы server.crt и ca.crt в каталог /etc/openvpn/: Перейдите в каталог ~/easy-rsa: Оттуда создайте надёжный ключ Diffie-Hellman, набрав: Это может занять несколько минут. Далее сгенерируйте подпись HMAC, чтобы усилить возможности проверки TLS-сервера: Когда команда завершится, скопируйте два новых файла в каталог /etc/openvpn/: Все файлы сертификатов и ключей, необходимые серверу, сгенерированы. Теперь можем переходить к созданию сертификатов и ключей, которые клиентский компьютер будет использовать для доступа к OpenVPN-серверу. Вы можете сгенерировать закрытый ключ и запрос сертификата на клиентской машине, а затем отправить его в CA для подписи, но в этой статье разберём процесс генерации запроса сертификата на VPN-сервере. Преимущество данного способа в том, что мы можем создать серверный скрипт, который автоматически сгенерирует файлы конфигурации клиента, содержащие все необходимые ключи, сертификаты и параметры в одном файле.  На этом шаге сначала сгенерируем пару клиентского ключа и сертификата. Если у вас более одного клиента, можете повторить этот процесс для каждого из них. Но, обратите внимание, что вам нужно будет передать скрипту уникальное значение имени для каждого клиента. На протяжении всей статьи первая пара сертификат/ключ упоминается как client1. На VPN-сервере начните с создания структуры каталогов в домашнем каталоге для хранения клиентского сертификата и файлов ключей: Поскольку вы будете хранить пары сертификатов/ключей ваших клиентов и файлы конфигурации в этом каталоге, следует заблокировать его разрешения в качестве меры безопасности: Затем нужно вернуться в каталог ~/easy-rsa  и запустить скрипт easyrsa  с параметрами gen-req и nopass , а также общим именем для клиента: Нажмите ENTER, чтобы подтвердить общее имя. Затем скопируйте файл client1.key  в каталог /client-configs/keys/, который создали ранее: Перенесите файл client1.req на машину CA, используя безопасный метод: На машине CA перейдите в каталог ~/easy-rsa  и импортируйте запрос сертификата: Затем подпишите запрос, как делали это на предыдущем шаге. Но на этот раз обязательно укажите тип запроса client: В командной строке введите yes, чтобы подтвердить, что вы готовы подписать запрос на сертификат и что он поступил из надёжного источника: Если вы зашифровали свой ключ CA, вам будет снова предложено ввести пароль. Это создаст файл сертификата клиента с именем client1.crt. Перенесите этот файл обратно на сервер: На OpenVPN-сервере скопируйте сертификат клиента в каталог /client-configs/keys/: Файлы ca.crt и ta.key также скопируйте в каталог /client-configs/keys/: Все сертификаты и ключи сгенерированы и хранятся в соответствующих каталогах. Есть ещё несколько действий, которые необходимо выполнить с этими файлами, но они появятся в следующих шагах. А пока перейдём к настройке OpenVPN на сервере. Начните с копирования образца файла конфигурации OpenVPN в каталог конфигурации, который будет использоваться в качестве основы для вашей настройки: Откройте файл конфигурации сервера в текстовом редакторе: Найдите раздел HMAC, выполнив поиск по директиве tls-auth. Эта строка уже должна быть раскомментирована, но если это не так, то удалите «;»: Далее найдите раздел о криптографических шифрах, выполнив поиск закомментированных строк шифра. Шифр AES-256-CBC предлагает хороший уровень шифрования и хорошо поддерживается. Опять же, эта строка уже должна быть раскомментирована, но если это не так, просто удалите «;»: Добавьте директиву auth для выбора алгоритма обработки сообщений HMAC. Неплохой выбор — SHA256: Найдите строку, содержащую директиву dh, которая определяет параметры Diffie-Hellman. Из-за изменений, внесенных в Easy-RSA, имя файла для ключа Diffie-Hellmanможет отличаться от того, что указано в примере файла конфигурации сервер. При необходимости измените указанное здесь имя файла, удалив 2048, чтобы оно соответствовало ключу, сгенерированному на предыдущем шаге: Наконец, найдите настройки user и group и удалите «;» в начале каждого, чтобы раскомментировать строки: Изменения, которые вы внесли в образец файла server.conf до этого момента, необходимы для работы OpenVPN. Изменения, описанные ниже, являются необязательными, хотя они также необходимы для многих распространенных случаев использования. Приведенные выше настройки создадут VPN-соединение между двумя машинами, но не заставят их использовать туннель. Чтобы применить VPN для маршрутизации всего трафика, нужно передать настройки DNS на клиентские компьютеры. В файле server.conf есть несколько директив, которые нужно изменить, чтобы включить эту функциональность. Найдите раздел redirect-gateway и удалите точку с запятой «;» из начала строки redirect-gateway: Найдите раздел dhcp-option. Снова уберите «;» перед обеими строками, чтобы раскомментировать их: Это поможет клиентам перенастроить конфигурацию DNS, чтобы использовать VPN-туннель в качестве шлюза по умолчанию. По умолчанию сервер OpenVPN использует порт 1194 и протокол UDP для приема клиентских подключений. Если вам нужно использовать другой порт из-за ограниченных сетевых сред, вы можете изменить параметр port. Если вы не размещаете веб-контент на сервере OpenVPN, порт 443— оптимальный выбор, поскольку обычно он разрешён правилами брандмауэра. Часто протокол также ограничен этим портом. Если это так, измените proto с UDP на TCP: Если вы все-таки переключите протокол на TCP, нужно изменить значение директивы explicit-exit-notify с 1 на 0, поскольку эта директива используется только UDP. Невыполнение этого требования при использовании TCP приведёт к ошибкам при запуске службы OpenVPN: Если у вас нет необходимости использовать другой порт и протокол, лучше всего оставить эти настройки по умолчанию. Если во время команды ./easyrsa gen-req вы выбрали другое имя для сертификата сервера на шаге 2, измените строки cert и key, чтобы они указывали на соответствующие файлы .crt и .key. Если вы использовали имя по умолчанию, оно уже задано правильно: Когда закончите, сохраните и закройте файл. Есть некоторые аспекты сетевой конфигурации сервера, которые нужно настроить, чтобы OpenVPN мог правильно направлять трафик через VPN. Первым из них является IP-переадресация — метод определения, куда следует направлять IP-трафик. Настройте параметры переадресации IP вашего сервера по умолчанию, изменив файл /etc/sysctl.conf: Внутри найдите строку с комментариями, которая устанавливает net.ipv4.ip_forward. Удалите символ «#» из начала строки, чтобы раскомментировать этот параметр: Сохраните и закройте файл, когда закончите. Чтобы прочитать файл и скорректировать значения для текущего сеанса, введите: Если вы следовали инструкции по настройке сервера Debian 11, у вас должен быть установлен брандмауэр UFW. В рамках этой статьи нам понадобится брандмауэр для управления частью трафика, поступающего на сервер. Некоторые правила брандмауэра должны быть изменены, чтобы включить masquerading и концепцию iptables, обеспечивающую динамическую трансляцию сетевых адресов для правильной маршрутизации клиентских подключений. Прежде чем открывать файл конфигурации брандмауэра для добавления правил masquerading, нужно найти общедоступный сетевой интерфейс компьютера. Для этого введите: Ваш публичный интерфейс — это строка, следующая за «dev» в выходных данных команды. Например, приведенный ниже вывод показывает интерфейс с именем eth0: Когда у вас есть интерфейс, связанный с вашим маршрутом по умолчанию, откройте файл /etc/ufw/before.rules, чтобы добавить соответствующую конфигурацию: Правила UFW обычно добавляются с помощью команды ufw. Однако правила, перечисленные в файле before.rules, считываются и применяются до загрузки обычных правил UFW. Ближе к началу файла добавьте выделенные ниже строки. Это установит политику по умолчанию для цепочки POSTROUTING в таблице nat и замаскирует любой трафик, поступающий из VPN. Не забудьте заменить eth0 в строке -A POSTROUTING: Сохраните и закройте файл, когда закончите. Затем укажите UFW, чтобы он также разрешал переадресацию пакетов по умолчанию. Для этого откройте файл /etc/default/ufw: Внутри найдите директиву DEFAULT_FORWARD_POLICY и измените значение с DROP на ACCEPT: Сохраните и закройте файл, когда закончите. Затем настройте брандмауэр так, чтобы он пропускал трафик через OpenVPN. Если вы не изменили порт и протокол в файле /etc/openvpn/server.conf, нужно открыть UDP-трафик на порт 1194. Если вы изменили порт и/или протокол, замените выбранные значения. Если вы не добавили SSH-порт, добавьте его также здесь: После добавления этих правил отключите и снова включите UFW, чтобы перезапустить его и загрузить изменения из всех файлов, которые вы изменили: Теперь ваш сервер настроен на корректную обработку трафика OpenVPN. Наконец-то вы готовы запустить службу OpenVPN на своем сервере. Делается это с помощью утилиты systemctl: Команда запустит службу openvpn, используя /etc/openvpn/server.conf в качестве файла конфигурации.  Дважды проверьте, что служба успешно запущена, введя: Если все прошло хорошо, ваш результат будет выглядеть примерно так: Вы также можете проверить, доступен ли интерфейс OpenVPN tun0, набрав: Это выведет сконфигурированный интерфейс: После запуска сервиса включите его, чтобы он автоматически запускался при загрузке: Теперь ваш сервис OpenVPN запущен и работает. Однако, прежде чем вы сможете начать его использовать, вы должны сначала создать файл конфигурации для клиентской машины. В этой части мы разобрали, как создавать пары сертификат/ключ для клиентов, а в следующей расскажем, как создать инфраструктуру, которая будет генерировать файлы конфигурации клиента. Также отдельно рассмотрим, как установить клиентский VPN-профиль на Windows, macOS, Linux, iOS и Android.  «Администрирование Linux. Мега»  Редактор в MobileUp