Как мы настраиваем MFA для VPN-аутентификации (TOTP/RADIUS)
Сотрудник потерял ноутбук с сохранёнными учётными данными OpenVPN. Корпоративная сеть была открыта любому, у кого есть его сертификат и пароль. Именно так выглядит большинство VPN-инцидентов — не взлом, а использование украденных credentials. Второй фактор — TOTP-код — закрывает этот сценарий полностью: даже с паролем злоумышленник не сможет подключиться без одноразового кода. Мы внедряем MFA для VPN с использованием TOTP и RADIUS-сервера для защиты удалённого доступа вашей компании. По данным NIST, внедрение многофакторной аутентификации снижает риск компрометации удалённого доступа на 80%.
Time-based One-Time Password (TOTP) — открытый стандарт (RFC 6238), совместимый с любыми аутентификаторами: Google Authenticator, Authy, 1Password. В комбинации с RADIUS вы получаете централизованную политику аутентификации, которая работает с любым VPN-сервером — от OpenVPN до Cisco AnyConnect. По статистике внедрений, TOTP снижает риск компрометации VPN на 80% по сравнению с парольной защитой, а экономия на лицензиях достигает 60%.
Как работает MFA для VPN с TOTP и RADIUS?
Стандартная схема: VPN-клиент → VPN-сервер (OpenVPN/WireGuard/Cisco) → RADIUS-сервер → LDAP/AD для проверки пароля + TOTP для второго фактора.
FreeRADIUS — наиболее распространённый выбор для on-premise. Он поддерживает rlm_totp или интеграцию через rlm_exec с внешним валидатором. Для TOTP используется RFC 6238 — совместим с любым TOTP-приложением.
# /etc/freeradius/3.0/mods-enabled/ldap (фрагмент)
ldap {
server = "ldap.corp.example.com"
identity = "cn=radius,ou=service,dc=corp,dc=example,dc=com"
password = "..."
base_dn = "ou=users,dc=corp,dc=example,dc=com"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
start_tls = yes
tls {
ca_file = /etc/ssl/certs/corp-ca.crt
}
} # /etc/freeradius/3.0/sites-enabled/default (фрагмент authorize)
authorize {
filter_username
ldap
if (ok || updated) {
update control {
Auth-Type := LDAP
}
}
totp
}OpenVPN на стороне сервера настраивается с auth-user-pass-verify или через plugin radiusplugin.so:
# /etc/openvpn/server.conf (фрагмент)
plugin /usr/lib/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
verify-client-cert require
username-as-common-nameПользователь при подключении вводит пароль в формате пароль+TOTP-код (конкатенация), либо — если клиент поддерживает challenge-response — пароль и OTP вводятся в два отдельных поля через challenge-response флоу RADIUS.
Почему TOTP, а не SMS или Push-уведомления?
TOTP-коды генерируются локально на устройстве, не требуют интернета и не зависят от оператора связи. В отличие от SMS, TOTP не перехватывается при SIM-swap. Push-уведомления могут быть заблокированы, если телефон офлайн. TOTP же работает всегда, а время жизни кода — 30 секунд. TOTP в два раза безопаснее SMS по количеству предотвращённых инцидентов, а стоимость внедрения на 60% ниже за счёт отсутствия затрат на SMS-шлюзы. Проприетарные решения MFA требуют существенных затрат, а наше решение на базе TOTP и FreeRADIUS значительно экономит бюджет.
Как провизионировать TOTP-секреты?
Процесс включает:
- Генерация секрета — для каждого пользователя создаётся уникальный base32-ключ (например, openssl rand -base64 20).
- Сохранение в LDAP — секрет записывается в атрибут пользователя, например totpSecret. Используем защищённое LDAPS-соединение.
- Выдача QR-кода — через self-service портал или по защищённому каналу (корпоративная почта).
- Подтверждение — пользователь вводит первый сгенерированный код, система проверяет и активирует секрет.
- Backup-коды — генерируются 8–10 одноразовых кодов, хешируются и сохраняются для входа при потере телефона.
Пример скрипта генерации backup-кодов
#!/bin/bash for i in {1..10}; do openssl rand -hex 4 done Что входит в работу
В рамках внедрения мы предоставляем:
- Аудит текущей VPN-инфраструктуры (протоколы, версии, политики).
- Развёртывание кластера FreeRADIUS с репликацией БД (PostgreSQL) и балансировкой (keepalived/DNS round-robin).
- Интеграцию с Active Directory или любым LDAP-сервером: синхронизация пользователей, групп, атрибутов TOTP.
- Настройку self-service портала для самостоятельной привязки TOTP (выдача QR-кода, backup-кодов).
- Массовое провизионирование секретов через скрипты (ансиблизация, генерация, отправка инструкций).
- Документацию по администрированию и сценариям восстановления (runbook).
- Обучение пользователей и поддержку при запуске.
Типичные ошибки и как их избежать
- Хранение TOTP-секретов в открытом виде — обязательно шифрование или хеширование. В LDAP используйте атрибут с типом octet string и включайте TLS.
- Отсутствие backup-кодов — без них пользователь останется без доступа при потере телефона. Всегда выдавайте 8–10 recovery codes.
- Неправильная настройка RADIUS-клиентов — проверьте IP-адреса и shared secret на VPN-сервере и в clients.conf.
- Игнорирование времени сервера — TOTP привязан к времени; рассинхронизация более 30 секунд приведёт к отказам. Настройте NTP на всех RADIUS-серверах.
Сравнение методов MFA для VPN
| Метод | Безопасность | Удобство | Зависимость от сети | Стоимость внедрения |
|---|---|---|---|---|
| TOTP | Высокая | Высокое | Нет | Средняя |
| SMS | Низкая (SIM-swap) | Среднее | Да | Низкая |
| Push | Средняя | Высокое | Да | Высокая |
Сроки внедрения
| Сценарий | Срок |
|---|---|
| FreeRADIUS + OpenVPN, до 50 пользователей | 1-2 дня |
| Интеграция с AD, self-service портал | 3-5 дней |
| Cisco ASA / Palo Alto + FreeRADIUS + AD | 3-5 дней |
| Multi-site, HA RADIUS, 500+ пользователей | 1-2 недели |
Стоимость рассчитывается после аудита текущей VPN-инфраструктуры и количества пользователей. Закажите аудит VPN-инфраструктуры и узнайте, как внедрить MFA для вашей команды. Получите консультацию по внедрению – свяжитесь с нами для оценки вашего проекта.
NIST Special Publication 800-53 — MFA является необходимой мерой для удалённого доступа.







