Настраиваем двухфакторную аутентификацию в OPNSense

Задача:
---------------------------------------------------------------Настроить двухфакторную аутентификацию на файерволе OPNSense с использованием Google Authenticator
TOTP (Time-based One-Time Password Algorithm, RFC 6238) – OATH-алгоритм создания одноразовых паролей для защищенной аутентификации.
Двухфакторная аутентификация в OPNsense, в рамках которой необходимо вводит не только постоянный пароль локальной учетной записи, но и ограниченный по сроку действия одноразовый пароль (Time-based One-Time Password). Такая авторизация позволяет более надежно защитить доступ к фаерволу.
Будем настраивать вариант с использованием телефона пользователя с установленным приложением Google Authenticator, которое и будет генерировать одноразовые пароли.
Для правильной настройки 2FA, необходимо проверить настройки сетевого времени. Это важная составляющая в процессе авторизации. Настройки времени доступны в меню: Services > Network Time > General

Если вы пользуетесь стандартным пользователем “root”, советую сразу создать нового и пользователя по-умолчанию отключить. Настройки доступны в разделе: System > Access > Users. Для добавления пользования, воспользуемся кнопкой “Add”

Придумываем имя пользователя и пароль

Для пользователей веб-интерфейса, правильным будет выбрать “/sbin/nologin“, тем самым ограничить доступ пользователю к шелу, и добавить в группу “admins”

Если вы планируете пользоваться шелом, тогда стоит выбрать к примеру “/bin/sh”. Стандартный шел пользователя root: “/usr/local/sbin/opnsense-shell“

Теперь переходим к добавлению сервера аутентификации: System > Access > Servers

Настраиваем следующим образом:
Descriptive name | TOTP server |
Type | Local + Timebased One Time Password |
Token length | 6 (для Google Authenticator используем длину 6) |
Time window | для Google Authenticator необходимо оставить пустым |
Grace period | для Google Authenticator необходимо оставить пустым |
Reverse token order | не отмечаем |

Возвращаемся к настройке пользователя, открываем на редактирование. Отмечаем “Generate new secret (160 bit)” и нажимаем “Save”

После сохранения появится ещё один пункт “OTP QR code”, на против которого нажимаем кнопку “Click to unhide” и сканируем телефоном появившийся QR-код

В OPNSense есть возможность проверить сервер авторизации. Насти его можно в меню: System > Access > Tester. Не забываем, что в поле пароль – необходимо ввести одноразовый пароль + постоянный пароль вместе, без пробелов или других разделителей между паролями.

Теперь необходимо настроить службу для работы с двухфакторной аутентификацией. В OPNSense такой функционал поддерживается в:
- в веб-интерфейсе
- в Captive Portal
- на веб-прокси сервере
- в VPN-серверах (OpenVPN и IPsec)
В нашем случае нас интересует веб-интерфейс: System > Settings > Administration и указываем “TOTP server”

Изменить порядок ввода одноразового и постоянного пароля можно в настройках сервера аутентификации.
- одноразовый пароль + постоянный пароль (используется по умолчанию)
- постоянный пароль + одноразовый пароль – необходимо отметить “Reverse token order”

Интересно по аналогии с этой инструкции получится настроить двухфакторную идентификацию в pfSense?
openvpn с otp по-моему настраивал. я думаю они практически одинаковы, за плюс минус исключением