Как настроить Apache для использования RADIUS для двухфакторной аутентификации
Введение
В этой инструкции описано, как добавить двухфакторную аутентификацию WiKID к Apache 2.x с использованием mod_auth_xradius (рекомендуется) или mod_ldap. Суть: при доступе к защищённому ресурсу Apache запрашивает имя пользователя и одноразовый код (OTP), перенаправляет их на WiKID RADIUS и, если ответ положительный, предоставляет доступ.
Кратко: зарегистрируйте Apache как сетевого клиента в WiKID, затем установите и настройте mod_auth_xradius в httpd.conf или .htaccess.
Требования и исходная конфигурация
- ОС: Fedora Core 5 (пример)
- Apache 2.2.2-10 (пример)
- mod_auth_xradius (рекомендуется вместо mod_auth_radius)
- WiKID Strong Authentication (в примере — коммерческая версия)
- Наличие домена и пользователей в WiKID
Факт-бокс: ключевые параметры
- Протокол RADIUS: порт 1812
- Параметры в примере: AuthXRadiusTimeout 7, AuthXRadiusRetries 2
- Кэширование: настоятельно рекомендовано (AuthXRadiusCache)
Как работает поток аутентификации (ментальная модель)
- Браузер запрашивает защищённую страницу.
- Apache отвечает HTTP Basic и запрашивает “username” и “password”.
- Пользователь в поле пароля вводит одноразовый код (OTP) с WiKID-токена.
- mod_auth_xradius формирует RADIUS-запрос к WiKID с именем пользователя и OTP.
- WiKID проверяет и возвращает Access-Accept или Access-Reject.
- Apache даёт доступ при Access-Accept.
Эта модель помогает понять, почему важно кэширование OTP результатов и таймауты: многие браузеры делают несколько запросов за одну загрузку страницы.
Настройка на стороне WiKID (сервер)
- Войдите в веб-интерфейс сервера WiKID: http://yourwikidserver/WiKIDAdim
- Перейдите на вкладку Network Clients
- Нажмите Create New Network Client
- Заполните форму:
- IP Address: IP вашего веб-сервера
- Protocol: выберите Radius
- На следующей странице задайте shared secret (общий секрет)
- Оставьте поле Return Attribute пустым
- На сервере WiKID выполните остановку и запуск встроенного RADIUS: из терминала run ‘stop’ затем ‘start’, чтобы загрузить нового клиента
После этого WiKID готов принимать запросы от Apache.
Установка mod_auth_xradius (на веб-сервере)
Убедитесь, что у вас установлен пакет для разработки Apache (httpd-devel) — он нужен для apxs. Пример установки и сборки:
# 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/bin/apxs или /usr/sbin/apxs).
Конфигурация Apache
Добавьте загрузку модуля и включите кэш авторизации в httpd.conf:
LoadModule auth_xradius_module modules/mod_auth_xradius.so
AuthXRadiusCache dbm conf/authxcacheКэширование результатов аутентификации критично: без кэша каждый HTTP-запрос может запускать RADIUS-запрос, а OTP действителен только один раз — это приведёт к множественным ошибкам аутентификации.
Пример директивы для каталога (директория /var/www/html/radius):
AuthType Basic
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 или DNS WiKID-сервера
- wikidserver_shared_secret → shared secret, который вы задали на стороне WiKID
Вы можете поместить те же директивы в .htaccess или в другой блок Directory/Location в зависимости от того, какие ресурсы должны быть защищены.
Примеры .htaccess
Если вы предпочитаете .htaccess, файл в корне защищаемой папки может выглядеть так:
AuthType Basic
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Учтите: использование .htaccess может иметь влияние на производительность; по возможности лучше держать конфигурацию в основном httpd.conf.
Когда это может не сработать (контрпример)
- Браузер отправляет несколько параллельных запросов: если нет кэша, OTP может быть использован в первом запросе, а остальные получат отказ.
- Неправильное системное время на сервере или токене может вызывать рассинхронизацию OTP (если используется TOTP-подобный механизм).
- Ошибки в shared secret или недоступность WiKID-сервера приведут к отказу аутентификации.
- Если используется HTTPS с прокси, убедитесь, что IP веб-сервера, который видит WiKID, соответствует добавленному Network Client.
Альтернативные подходы
- mod_auth_radius или другие RADIUS-модули — иногда совместимы, но mod_auth_xradius обычно проще и современнее.
- LDAP + OTP-хранилище: если инфраструктура уже использует LDAP, можно комбинировать LDAP для имени пользователя и внешнюю проверку OTP.
- CAS/SSO с поддержкой 2FA: более крупные инсталляции могут предпочесть SSO-платформу с интеграцией WiKID.
Контрольный список по ролям
Администратор WiKID:
- Создать Network Client с IP веб-сервера
- Установить shared secret
- Перезапустить встроенный RADIUS
Веб-администратор (Apache):
- Установить httpd-devel и собрать mod_auth_xradius
- Добавить LoadModule и AuthXRadiusCache
- Настроить Directory или .htaccess
- Проверить путь apxs и права на conf/authxcache
Оператор безопасности:
- Проверить доступность порта 1812 между серверами
- Убедиться в корректности системного времени
- Проверить логи при неудачных попытках
Критерии приёмки
- При вводе корректного username + OTP доступ разрешён.
- При вводе неверного OTP доступ запрещён.
- Один и тот же OTP не проходит на нескольких параллельных запросах (если кэш отключён — это проблема).
- Логи WiKID и Apache показывают успешный RADIUS-диалог.
Безопасность и конфиденциальность
- Shared secret следует хранить и передавать безопасно (не в открытых репозиториях).
- По возможности используйте HTTPS для защиты учетных данных при передаче от клиента к серверу.
- Ограничьте доступ к файлам конфигурации и кэшу (conf/authxcache) правами файловой системы.
- Логи содержат значения username; при необходимости анонимизируйте или ограничьте доступ к логам.
Отладка и тесты приёмки
- Проверьте доступность порта: telnet wikid_server_address 1812
- Включите подробное логирование для mod_auth_xradius и WiKID на время отладки
- Протестируйте поведение с разными браузерами (некоторые делают больше параллельных запросов)
Mermaid диаграмма потока (для визуализации):
flowchart LR
Browser-->Apache[Apache + mod_auth_xradius]
Apache-->WiKID[WiKID RADIUS]
WiKID-->|Access-Accept|Apache
WiKID-->|Access-Reject|Apache
Apache-->|200 OK / 401|BrowserСсылки
- WiKID Strong Authentication - Two-Factor Authentication
- OutOfOrder.cc - Mod_auth_xradius
- Apache - The Apache Webserver
Краткое резюме
Подключение модульной RADIUS-аутентификации к Apache через mod_auth_xradius позволяет внедрить двухфакторную аутентификацию на базе WiKID. Ключевые шаги: зарегистрировать веб-сервер в WiKID как сетевого клиента, собрать и установить mod_auth_xradius, добавить модуль и кэш аутентификации в конфигурацию Apache, затем корректно настроить директивы Directory или .htaccess. Проверьте таймауты, повторные попытки и логи для надёжной работы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента