Как добавить двухфакторную аутентификацию в phpBB
TL;DR
Добавьте WiKID в качестве RADIUS-клиента и используйте модуль Apache mod_auth_xradius для проверки одноразовых паролей (OTP). Пользователь вводит имя и OTP в стандартном диалоговом окне Basic Auth, Apache пересылает запрос к WiKID, и при успешной проверке доступ разрешается. Ниже — пошаговая инструкция, возможные ограничения, альтернативы и чек-листы для администратора.
Введение
Этот документ описывает, как подключить двухфакторную аутентификацию (2FA) для phpBB через Apache с помощью mod_auth_xradius и сервера WiKID. Предполагается, что у вас уже есть развернутый WiKID-домен и добавленные пользователи. Применение 2FA особенно важно после инцидентов с утечкой паролей пользователей phpBB.
Коротко о концепции: когда пользователь переходит по защищённой ссылке, Apache запрашивает имя и пароль. В качестве пароля пользователь вводит одноразовый код с токена WiKID. Apache отправляет параллельно имя и OTP на WiKID через модуль RADIUS. При совпадении сервер сообщает Apache разрешить доступ.
Окружение (пример конфигурации автора)
- Операционная система: Fedora Core 10
- Веб-сервер: Apache 2.2.2-10
- Модуль: mod_auth_xradius (рекомендуется вместо mod_auth_radius)
- Сервер 2FA: WiKID Strong Authentication (коммерческая версия в примере)
- Приложение: phpBB 3.0.4
Шаг 1 — добавить Apache как сетевой RADIUS-клиент в WiKID
- Войдите в веб-интерфейс WiKID: (http://yourwikidserver/WiKIDAdim).
- Перейдите на вкладку Сетевые клиенты.
- Нажмите Создать нового сетевого клиента.
- Заполните требуемые поля:
- В поле IP-адрес укажите IP веб‑сервера.
- В поле Протокол выберите Radius.
- Нажмите кнопку Добавить, на следующей странице задайте общий секрет (shared secret).
- Не заполняйте поле Return Attribute.
- С терминала (или по SSH) выполните команду остановки и запуска сервиса WiKID, например ‘stop’ затем ‘start’, чтобы загрузить нового сетевого клиента в встроенный RADIUS-сервер WiKID.
Важно: убедитесь, что IP и секрет введены корректно — они используются Apache для аутентификации перед WiKID.
Шаг 2 — установить и собрать mod_auth_xradius для Apache 2.x
Необходимо установить заголовки и инструменты разработки Apache, затем собрать модуль:
# yum install httpd-devel
# wget http://www.outoforder.cc/downloads/mod_auth_xradius/mod_auth_xradius-0.4.6.tar.bz2
# bunzip2 mod_auth_xradius-0.4.6.tar.bz2
# tar -xvf mod_auth_xradius-0.4.6.tar
# cd mod_auth_xradius-0.4.6
# ./configure --with-apxs=/sbin/apxs
# make
# make installПримечание: проверьте расположение apxs на вашей системе (может быть /usr/sbin/apxs или другой путь).
Шаг 3 — настройка Apache (httpd.conf)
Добавьте загрузку модуля и кэш аутентификации в httpd.conf:
# using mod_auth_xradius:
LoadModule auth_xradius_module modules/mod_auth_xradius.so
AuthXRadiusCache dbm conf/authxcache
AuthXRadiusCacheTimeout 60
Примечание: кэширование критично — без кэша каждый HTTP-запрос будет посылать RADIUS-запрос и это сломает проверку одноразовых паролей (OTP), так как только первый запрос удастся, а последующие не пройдут.
Добавьте блок для защищаемого каталога phpBB:
AuthType Basic
AuthBasicProvider xradius
AuthName "Please enter your username and WiKID one-time passcode for entry to this site."
AuthXRadiusAddServer "wikid_server_address:1812" "wikidserver_shared_secret"
AuthXRadiusTimeout 7
AuthXRadiusRetries 2
require valid-user
Замените wikid_server_address на IP-адрес вашего WiKID-сервера, а wikidserver_shared_secret — на общий секрет, заданный при создании сетевого клиента в WiKID.
Ограничения и тонкости
- phpBB ожидает, что пользователь уже есть в базе данных MySQL phpBB: имена пользователей должны совпадать в phpBB и WiKID. Если учётные записи не совпадают, аутентификация Apache может быть успешной, но доступ к профилю phpBB будет недоступен.
- Решение: интеграция на уровне PHP с использованием WiKID PHP wAuth network client API позволит синхронизировать пользователей и создавать более гибкую логику входа.
- Альтернатива: использовать mod_ldap при наличии LDAP-базы, или реализовать собственный плагин через PHP API phpBB.
Important: тестируйте поведение для статического и динамического контента — некоторые запросы (например, к изображениям) также могут инициировать Basic Auth. Правильное использование кэша и исключений в конфигурации Apache помогает избежать лишних запросов на RADIUS.
Альтернативные подходы
- Интеграция через WiKID PHP wAuth API: полноценная двухфакторная авторизация внутри PHP (single sign-on, синхронизация пользователей).
- mod_ldap + WiKID: если у вас уже есть LDAP, можно хранить OTP-статусы и синхронизировать данные.
- Прокси-решение (reverse proxy) с поддержкой 2FA: выделенный фронтенд, где выполняется 2FA, а дальше проксируется трафик к phpBB.
- Встроенные плагины phpBB: если доступен модуль 2FA для phpBB, его лучше использовать, чтобы иметь полномочия внутри приложения.
Модель зрелости внедрения 2FA (уровни)
- Уровень 1 — Базовый: Apache + mod_auth_xradius, простая проверка OTP, ручная синхронизация пользователей.
- Уровень 2 — Средний: интеграция WiKID с пользователями phpBB через PHP API, автоматическая регистрация/сопоставление аккаунтов.
- Уровень 3 — Продвинутый: SSO, централизованное управление пользователями, мониторинг и SLA на сервис 2FA.
Факт-бокс — ключевые технические числа
- Порт RADIUS: 1812 (используется по умолчанию для запросов аутентификации).
- Рекомендуемый AuthXRadiusTimeout: 7 секунд (настройка в примере).
- AuthXRadiusRetries: 1–3 (в примере 2).
- Кэш тайм-аутов (AuthXRadiusCacheTimeout): 60 секунд (в примере). Настройте в соответствии с политикой OTP.
Чек-листы (роль-based)
Администратор WiKID:
- Убедиться, что у сервера статический IP и доступен порт 1812 от Apache.
- Добавить сетевой клиент для веб-сервера и задать секрет.
- Перезапустить/обновить сервисы WiKID.
Системный администратор Apache:
- Установить httpd-devel и собрать mod_auth_xradius.
- Добавить LoadModule и настройки кэша в httpd.conf.
- Настроить блок
для phpBB и протестировать вход. - Настроить исключения для статических ресурсов при необходимости.
Разработчик phpBB:
- Проверить совпадение имён пользователей между phpBB и WiKID.
- Рассмотреть интеграцию через WiKID PHP wAuth API для автоматизации сопоставления аккаунтов.
Шпаргалка / шаблоны конфигурации
Пример минимальной конфигурации для httpd.conf (замените значения):
LoadModule auth_xradius_module modules/mod_auth_xradius.so
AuthXRadiusCache dbm conf/authxcache
AuthXRadiusCacheTimeout 60
AuthType Basic
AuthBasicProvider xradius
AuthName "Введите имя пользователя и одноразовый код WiKID"
AuthXRadiusAddServer "192.0.2.10:1812" "SuperSecretSharedKey"
AuthXRadiusTimeout 7
AuthXRadiusRetries 2
require valid-user
Замечание: на продакшн-системе храните секреты в защищённых файлах с ограниченным доступом.
Критерии приёмки
- Пользователь успешно прошёл Basic Auth с именем и текущим OTP и получил доступ к защищённой части сайта.
- Повторные запросы в течение срока кеширования (AuthXRadiusCacheTimeout) не порождают дополнительных RADIUS-запросов.
- В случае недействительного OTP доступ отклоняется и в логах WiKID регистрируется отказ.
- Логи Apache и WiKID проверены на предмет ошибок и аномалий.
Безопасность и конфиденциальность
- Общий секрет RADIUS должен храниться только администраторами и нигде не попадать в публичные репозитории.
- TLS/HTTPS обязателен для веб‑сервера phpBB, чтобы защитить Basic Auth заголовки при передаче по сети.
- Если вы храните соответствие пользователей между phpBB и WiKID, убедитесь в соответствии требованиям конфиденциальности (GDPR/локальное законодательство): минимизируйте объём передаваемых личных данных и обеспечьте право удаления.
Notes: при высоком трафике предусмотрите мониторинг задержек RADIUS и механизм отказоустойчивости WiKID (резервные серверы).
Совместимость и миграция
- mod_auth_xradius версии 0.4.6 проверен с Apache 2.2.x; при использовании более новых версий Apache проверьте совместимость apxs и сборки.
- Если у вас сейчас модуль mod_auth_radius, предпочтительнее перейти на mod_auth_xradius из-за дополнительных возможностей кэширования.
- При переходе с LDAP/SSO — планируйте миграцию пользователей, тестовые сценарии и откатную стратегию.
Заключение и рекомендации
Использование WiKID + mod_auth_xradius — быстрый способ добавить 2FA к phpBB без глубоких изменений в приложении. Для долгосрочного и масштабируемого решения рекомендуем продвигаться к интеграции на уровне PHP (WiKID wAuth API) или к централизованной системе управления пользователями (LDAP/SSO). Обязательно тестируйте сценарии для статических ресурсов, настройте кэш и следите за безопасным хранением секретов.
Ссылки
- WiKID Strong Authentication - Two-Factor Authentication
- OutOfOrder.cc - Mod_auth_xradius
- Apache - The Apache Webserver
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента