В статье описывается настройка сервера OpenVPN для включения двухфакторной аутентификации с Telegram ботом, который будет присылать запрос с подтверждением при подключении.
OpenVPN — широко известный, бесплатный VPN сервер с открытым исходным кодом, который повсеместно используется для организации защищенного доступа сотрудников к внутренним ресурсам организации.
В качестве проверки подлинности для подключения к VPN серверу, как правило используется комбинация из ключа и логина/пароля пользователя. При этом, сохраненный на клиенте пароль превращает весь набор в единый фактор, не обеспечивающий должный уровень безопасности. Злоумышленник, получив доступ к клиентскому компьютеру, получает доступ и к VPN серверу в том числе. Особенно это касается подключения с машин под управлением Windows.
Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.
Сразу оговорюсь, для реализации потребуется подключение стороннего сервера аутентификации multifactor.ru, в котором для своих нужд можно использовать бесплатный тариф.
Принцип работы
- OpenVPN использует плагин openvpn-plugin-auth-pam для проверки подлинности
- Плагин проверяет пароль пользователя на сервере и запрашивает второй фактор через RADIUS протокол в сервисе Мультифактора
- Мультифактор отправляет через Telegram бота сообщение пользователю с подтверждением доступа
- Пользователь подтверждает в Telegram чате запрос доступа и подключается к VPN
Установка OpenVPN сервера
В интернете множество статей, описывающих процесс установки и настройки OpenVPN, поэтому мы не будем их дублировать. Если вам нужна помощь, в конце статьи есть несколько ссылок на обучающие материалы.
Настройка Мультифактора
Зайдите в систему управления Мультифактором, зайдите в раздел "Ресурсы" и создайте новый VPN.
После создания вам будут доступны два параметра: NAS-IDentifier и Shared Secret, они потребуются для последующий настройки.
В разделе "Группы", зайдите в параметры группы "All users" и уберите флаг "Все ресурсы", чтоб только только пользователи определенной группы могли подключаться к VPN серверу.
Создайте новую группу "VPN users", отключите все способы аутентификации кроме Telegram и укажите, что пользователи имеют доступ к созданному ресурсу VPN.
В разделе "Пользователи" создайте пользователей, которые будут иметь доступ к VPN, добавьте в группу "VPN users" и отправьте им ссылку на настройку второго фактора аутентификации. Логин пользователя должен совпадать с логином на VPN сервере.
Настройка OpenVPN сервера
Откройте файл /etc/openvpn/server.conf и добавьте плагин для аутентификации с помощью PAM модуля
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn
Плагин может находиться в директории /usr/lib/openvpn/plugins/ или /usr/lib64/openvpn/plugins/ в зависимости от вашей системы.
Далее необходимо установить модуль pam_radius_auth
$ sudo yum install pam_radius
Откройте для редактирования файл /etc/pam_radius.conf и укажите адрес RADIUS сервера Мультифактора
radius.multifactor.ru shared_secret 40
где:
- radius.multifactor.ru — адрес сервера
- shared_secret — скопируйте из соответствующего параметра настроек VPN
- 40 секунд — таймаут ожидания запроса с большим запасом
Остальные сервера необходимо удалить или закомментировать (поставить в начале точку с запятой)
Далее создайте файл для service-type openvpn
$ sudo vi /etc/pam.d/openvpn
и впишите в него
auth required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]
auth substack password-auth
account substack password-auth
первая строчка подключает PAM модуль pam_radius_auth с параметрами:
- skip_passwd — отключает передачу в RADIUS сервер Мультифактора пароль пользователя (не надо ему знать).
- client_id — вставьте вместо [NAS-Identifier] соответствующий параметр из настроек VPN ресурса.
Все возможные параметры описаны в документации к модулю.
Вторая и третья строки включают системную проверку логина, пароля и прав пользователя на вашем сервере вместе с вторым фактором аутентификации.
Перезапустите OpenVPN
$ sudo systemctl restart openvpn@server
Настройка клиента
Включите в конфигурационный файл клиента запрос логина и пароля пользователя
auth-user-pass
Проверка
Запустите клиента для OpenVPN, подключитесь к серверу, укажите логин и пароль. От Telegram бота придет запрос доступа с двумя кнопками
Одна кнопка разрешает доступ, вторая блокирует.
Теперь смело можно сохранять пароль на клиенте, второй фактор надежно защитит ваш OpenVPN сервер от несанкционированного доступа.
Если что-то не работает
Последовательно проверьте, что вы ничего не упустили:
- На сервере с OpenVPN есть пользователь с установленным паролем
- С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
- Параметры NAS-Identifier и Shared Secret указаны корректно
- В системе Мультифактор заведен пользователь с таким же логином и ему предоставлен доступ в группу пользователей VPN
- Пользователь настроил способ аутентификации через Telegram
Если вы ранее не настраивали OpenVPN, почитайте развернутую статью.
Инструкция сделана с примерами на CentOS 7.
AcidLynx
А будет ли оно так же работать, если ты используешь вход по сертификату, а не по логину-паролю?