OpenConnect
Last updated
Last updated
Особая разновидность VPN - это SSL VPN, протоколы, работающие с использованием SSL/TLS шифрования и неотличимые от обычного HTTPS-трафика. К ним относятся Microsoft SSTP и CISCO AnyConnect, оба протокола проприетартные, но у последнего есть открытый совместимый аналог - OpenConnect. SSL VPN в первую очередь рассматриваются как средство удаленного доступа, позволяя сотрудникам безопасно работать из любого места, где просто есть доступ в интернет, легко проходя через NAT, прокси и брандмауэры.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
В нашем примере будет рассматриваться установка OpenConnect в среде Debian 11, однако инструкция будет актуальной для любых современных версий Debian или Ubuntu, а также систем на них основанных. Все действия, если не сказано иного, выполняются от имени суперпользователя root или через sudo.
Прежде всего включим маршрутизацию пакетов в системе, чтобы сервер мог передавать их между интерфейсами, для этого в /etc/sysctl.conf найдем и раскомментируем (либо добавим) строку:
Затем перечитаем настройки командой:
SSL чувствительна к еще одному важному параметру - совпадении времени между клиентом и сервером, поэтому сразу настроим его синхронизацию с вышестоящими NTP-серверами. Для этого мы будем использовать стандартную службу systemd-timesyncd, откроем конфигурационный файл /etc/systemd/timesyncd.conf, раскомментируем параметр NTP и укажем в нем через пробел сервера времени:
Перезапустим службу:
И проверим ее статус:
Состояние синхронизации можно проверить командой:
Из вывода первой команды мы можем видеть, что система инициировала синхронизацию с сервером 0.pool.ntp.org, а вторая сообщает, что системные часы синхронизированы, служба NTP активна.
Теперь можно установить сам сервер OpenConnect:
После установки проверяем статус службы:
В выводе команды нас интересует параметр в строке Loaded следующий после пути к файлу юнита, если там стоит enabled, то автозагрузка службы включена и ничего делать не нужно, в противном случае добавим ее в автозагрузку командой:
Дальнейшие действия зависят от того, какой тип сертификата вы решите использовать, мы рекомендуем использовать сертификаты от Let's Encrypt.
Для работы с Let's Encrypt нам понадобится доменное имя. Большинство современных компаний имеют свой сайт, а значит и домен, поэтому создать еще один поддомен для VPN-сервера не составит никакого труда, либо доменное имя можно купить, это недорого, от 199 руб. в зоне RU, при том, что домен всегда пригодиться.
Мы, для примера, будем использовать вымышленное доменное имя ocserv.horns-and-hooves.lab одной небезызвестной вымышленной компании.
Сначала поставим certbot:
Затем получим бесплатный сертификат для нашего домена:
При первом запуске вам потребуется ввести рабочий адрес электронной почты и принять условия использования сервиса. Для успешной работы certbot у вас должен быть открыт порт 80 TCP. Все сертификаты Let's Encrypt выдаются сроком на 90 дней и certbot будет их автоматически продлять, единственное что нам остается сделать, это настроить перезапуск сервера OpenConnect после получения нового сертификата.
Для этого откроем etc/letsencrypt/renewal/ocserv.horns-and-hooves.lab.conf и добавим в секцию [renewalparams] следующую строку:
Современное SSL/TLS шифрование немыслимо без совершенной прямой секретности - PFS, поэтому создадим файл с параметрами Диффи-Хеллмана:
На этом настройка работы с Let's Encrypt закончена, можно переходить к настройке OpenConnect.
Если вы по каким-либо причинам не хотите использовать Let's Encrypt, то можете выпустить самоподписанный сертификат. Вопреки распространенному мнению, самоподписанные сертификаты ни в чем не уступают "настоящим" и за безопасность соедниения можете не беспокоиться. Но для них становится актуальным вопрос доверия, чтобы системы доверяли вашему сертификату вам придется установить на них сертификат вашего CA как доверенный корневой сертификат.
Установим пакет инструментов certtool:
Наличие своего CA диктует особые требования по безопасности, закрытый ключ центра сертификации не должен быть доступен третьим лицам, так как при его компрометации компрометируются все выпущенные сертификаты. Поэтому хранить его мы будем в домашней директории root и никто, кроме суперпользователя не будет иметь туда доступ.
Прежде всего изменим маску системы, что автоматически обеспечит нужные права на создаваемые объекты:
Затем создадим директорию для хранения файлов СА и перейдем в нее:
Создадим шаблон для корневого сертификата CA:
И внесем в него следующий текст:
В поле cn вводим имя нашего удостоверяющего центра, в поле organization - название организации, expiration_days - срок действия сертификата, в нашем случае 10 лет.
Затем создадим шаблон сертификата сервера:
И внесем в него текст:
Где cn - имя сервера, указываем доменное имя, organization - название организации, expiration_days - срок действия сертификата, снова 10 лет, dns_name - FQDN сервера и если в cn можно в принципе вписать все что угодно, то в этой опции должно быть именно полное доменное имя сервера, по которому вы будете к нему подключаться.
Если вместо домена вы используете IP-адрес, то замените эту опцию на:
Также можете сочетать обе опции. Хотя использовать IP-адреса в SSL-шифровании считается дурным тоном.
Теперь создадим ключевую пару CA:
Закрытый ключ ca.key является секретным и никогда не должен покидать пределы этого расположения.
Теперь создадим ключевую пару сервера:
А также файл параметров Диффи-Хеллмана:
Затем скопируем нужные ключи и сертификаты в конфигурационную директорию OpenConnect:
Также скопируем корневой сертификат CA в директорию обычного пользователя (в нашем случае это andrey) и сделаем его владельцем файла:
Затем вернем маску к нормальному состоянию:
Самоподписанный сертификат создан, можно переходить к настройке сервера.
OpenConnect предлагает достаточно широкие возможности, но всему свое время, ниже мы рассмотрим самую простую конфигурацию, которую можно использовать для удаленного доступа или выхода в интернет с аутентификацией по логину и паролю. Все настройки сосредоточены в файле /etc/ocserv/ocserv.conf, все опции будут приведены в порядке следования в файле.
Прежде всего закомментируем опцию:
И приведем к следующему виду опцию:
Этим мы включаем аутентификацию по логину и паролю для пользователей перечисленных в файле ocserv.passwd, вас не должна смущать опция plain, аутентификация производится после установления защищенного SSL-соединения и безопасности данных ничего не угрожает.
Следующие опции задают порты, на которых принимает соединения OpenConnect, можете изменить их, но практического смысла в этом нет, так как SSL VPN должен быть максимально похож на обычный HTTPS, в этих целях можно отключить UDP, но лучше это делать на клиенте.
Ниже указываем пути к ключевой паре сервера:
Затем к файлу параметров Диффи-Хеллмана:
И к корневому сертификату CA:
Если вы получили сертификат от Let's Encrypt, то измените значение опций на следующие:
Опцию ca-cert следует закомментировать:
Следующие параметры задают максимальное количество подключений к серверу и количество одновременных подключений с одними и теми же учетными данными, установите их исходя из собственных потребностей:
Затем раскомментируйте опции отвечающие за сжатие трафика:
А теперь одна из самых интересных опций, отвечающая за предлагаемый клиентам набор шифров, в Debian 11 он выглядит следующим образом:
В целом настройка нормальная, отключены слабые SSL 3.0 и RC4, включена прямая совершенная секретность (по согласованию), но лучше выставить более современные настройки, отключив все версии SSL и TLS ниже TLS 1.2:
Теперь о безопасности, OpenConnect умеет отслеживать попытки подбора паролей и успешно блокировать их, за это отвечают следующие опции:
Система построена на принципе подсчета очков, за каждый неправильный ввод пароля начисляется сразу 10 очков, это задано опцией ban-points-wrong-password, а при каждом успешном коннекте убирается только одно очко, это задано в опции ban-points-connection, порог, при котором происходит бан и его время задается в max-ban-score и ban-reset-time.
По умолчанию порог в 80 очков, может показаться что это много. Но давайте посмотрим, как работает система: после 8 неудачных попыток входа пользователь будет заблокирован на 5 минут (300 сек), при каждой последующей попытке бан будет снова и снова продлеваться. Чтобы получить шанс на еще один неправильный ввод пароля, после 8 неудачных попыток, потребуется 10 раз успешно аутентифицироваться на сервере.
После этого перейдем к сетевым настройкам, прежде всего зададим диапазон адресов для выдачи клиентам:
Если мы хотим завернуть в туннель все DNS-запросы, то следует указать опции:
Смысл настройки понятен, все запросы будут направлены на серверы, указанные в параметре dns.
Но чаще встречается иная ситуация, когда нужно направить запросы к отдельным DNS-зонам на собственные DNS-сервера, причем зона может быть в несуществующей зоне типа local или office. Тогда конфигурируем DNS иным образом:
Здесь в опции dns мы указываем локальные сервера в сети офиса, а в split-dns - зоны, запросы к которым следует направлять указанным серверам. Каждый параметр можно указывать несколько раз.
Теперь о маршрутизации, OpenConnect умеет передавать на клиента маршрутную информацию. Если мы хотим завернуть весь трафик в туннель укажите:
Эта опция автоматически активирует:
Вне зависимости от того, что указано в конфиге.
Если же нам нужно обеспечить доступ в сеть за VPN-сервером, то укажем эту сеть в опции:
Таких опций можно указать несколько, по количеству сетей.
Также интересна опция no-route, она позволяет создать исключение в правилах маршрутизации, скажем вы можете завернуть в туннель все сети 192.168.0.0/16 и исключить оттуда подсеть:
Остальные опции можно оставить без изменения, сохраняем файл конфигурации и перезапускаем службу.
Сервер успешно установлен и настроен, можно переходить к созданию пользователей и настройке клиентов. Обратите внимание, что для работы сервера нужно открыть порты 443 TCP и 443 UDP.
Для создания клиентов воспользуемся утилитой ocpasswd:
Если файл не существует, то при первом выполнении команды он будет создан.
Для блокировки пользователя используйте:
Для разблокировки:
Для удаления пользователя выполните команду:
Файл с паролями читается динамически, перезапуск сервера после операций с пользователями не нужен.
Если вы используете самоподписанный сертификат, то прежде всего следует скачать с сервера корневой сертификат CA - ca.crt и щелкнув на него два раза установить в хранилище Локальный компьютер - Доверенные корневые центры сертификации.
Затем следует скачать и установить официальный клиент OpenConnect, это не должно вызвать каких-либо затруднений. Запускаем приложение и выпадающем меню напротив поля Server выбираем New Profile.
В поле Gateway прописываем адрес нашего сервера с явным указанием протокола: https://ocserv.horns-and-hooves.lab
Больше никаких настроек не требуется, при подключении потребуется указать только логин и пароль. Просто? Да, при необходимости с подключением справится средней руки пользователь, особенно если снабдить его подробной инструкцией.
При желании можете открыть свойства подключения и установить там дополнительные опции:
Например, вы можете отключить протокол UDP, чтобы совсем никак не отличаться от HTTPS-трафика, либо настроить работу через прокси, при это используются системные настройки прокси-сервера.
Для самоподписанного сертификата также установите корневой сертификат CA, как это сделать - написано в предыдущем разделе. Затем следует получить и установить клиент Cisco AnyConnect, проще всего это сделать через магазин Windows.
После установки можно открыть одноименное приложение, но особого смысла делать этого нет, при нажатии на кнопку Manage VPN вы попадете в стандартную системную оснастку для управления VPN-подключениями.
Можно сразу пойти туда и создать новое подключение, все что вам необходимо - это выбрать поставщика услуг VPN AnyConnect и указать адрес сервера через https://.
Управление подключением также происходит стандартными инструментами. Это может быть удобнее для пользователей, так как не нужно запускать сторонний клиент. Единственное, что можно посмотреть в родном приложении - это параметры установленного подключения.
При этом никаких дополнительных действий при использовании обоих клиентов делать не нужно, они сами выполняют настройку сетевых параметров клиента, например, прописывают маршруты до указанных сетей. Пользователь может быстро и просто настроить подключение и сразу же начать работу с ресурсами удаленной сети.
И снова начнем с самоподписанного сертификата, будем считать, что он скачан и находится в домашней директории пользователя. Обратите внимание - расширение сертификата обязательно должно быть .crt.
Откроем консоль и повысим права пользователя до root, в Ubuntu это можно сделать командой:
В Debian, если не установлен sudo:
Затем создадим директорию для корневых сертификатов нашего предприятия, название может быть произвольным:
И скопируем в нее сертификат:
Где ~andrey означает домашнюю директорию пользователя andrey, также мы переименовали сертификат при копировании, дав ему более понятное имя.
Теперь установим его в хранилище корневых сертификатов:
В первом окне укажите что вы доверяете новым сертификатам:
Во втором не забудьте выбрать добавленный нами сертификат:
Если вы используете Let's Encrypt, то производить описанные выше действия не нужно.
Затем установим клиент OpenConnect и плагин для NetworkManager:
Точнее мы устанавливаем только плагин, все остальные пакеты, включая клиент, будут установлены по зависимостям.
Теперь можно создать новое подключение средствами NetworkManager.
Все, что вам понадобится указать в настройках - это адрес сервера в поле Шлюз.
Затем вам останется только ввести логин и пароль при подключении, а также, по желанию, установить флаг Save passwords. На красный восклицательный знак и 404 ошибку можете не обращать внимания.
И хотя мы рассматривали в качестве примера Ubuntu, процесс настройки в иных дистрибутивах будет аналогичный, если там используется NetworkManager. Более того, во многих системах, например, Kubuntu, ROSA или Simply Linux плагин для поддержки OpenConnect уже установлен.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.