Как защитить Apache2 с помощью LinOTP
Введение
LinOTP — сервер двухфакторной аутентификации, который поддерживает одноразовые пароли (OTP). В этом руководстве показано, как подключить модуль Apache, чтобы требовать OTP при базовой аутентификации. Короткое определение: LinOTP — сервер для управления токенами и проверки одноразовых паролей.
Предпосылки
- Рабочий LinOTP-сервер (уже установлен и доступен).
- Сервер с Ubuntu/Debian и установленными инструментами сборки.
- Права администратора на сервере Apache.
Загрузка
Модуль для Apache реализует провайдер аутентификации, который интегрируется с Apache Basic Auth. Исходники доступны на GitHub.
Вы можете скачать архив прямо из командной строки:
wget https://github.com/lsexperts/mod_authn_linotp/zipball/master -O mod_authn_linotp.zipУстановка
Для компиляции модуля на Ubuntu/Debian потребуются инструменты разработки и зависимости. Пример установки пакетов:
dpkg -i libtool automake autoconf build-essential libcurl4-gnutls-devРаспакуйте модуль и перейдите в каталог сборки:
unzip mod_authn_linotp.zip
cd lsexperts-mod_authn_linotp-3583b90Далее следуйте шагам из файла INSTALL (типичная последовательность сборки):
libtoolize
aclocal
automake --add-missing
autoconf
./configure
make
sudo make installСовет: можно использовать checkinstall для создания .deb-пакета, чтобы упростить установку/удаление:
sudo checkinstall make installПосле установки модуль обычно окажется в /usr/lib/apache2/modules/mod_authn_linotp.so.
Активация модуля
Активируйте модуль Apache следующей командой:
sudo a2enmod authn_linotpПерезапустите Apache для применения изменений:
sudo systemctl restart apache2Настройка Apache
Ниже пример защиты каталога с использованием провайдера LinOTP. Вставляйте блок в соответствующий виртуальный хост или в конфигурацию сервера:
AuthType basic
AuthName "LinOTP protected"
AuthBasicProvider LinOTP
Require valid-user
LinOTPValidateURL https://172.16.200.148/validate/simplecheck
LinOTPCookieSecret eenohJaen6CeexaH9yieTiel
LinOTPSSLCertVerify Off
LinOTPSSLHostVerify Off
Пояснения к параметрам:
- AuthType / AuthName / Require — стандартные директивы Apache для базовой аутентификации.
- AuthBasicProvider LinOTP — указывает использовать модуль LinOTP как поставщика аутентификации.
- LinOTPValidateURL — URL вашего LinOTP-сервера для проверки OTP (используйте IP или FQDN, не localhost).
- LinOTPCookieSecret — секрет для шифрования cookie, используемого модулем для кэширования успешной аутентификации.
- LinOTPSSLCertVerify / LinOTPSSLHostVerify — поведение проверки SSL; рекомендуется включать в продакшне.
Используя LinOTPTimeout, можно задать срок жизни cookie в секундах — после этого пользователь снова должен будет ввести OTP.
Генерация секрета для cookie
Модуль шифрует cookie с помощью секрета. Для генерации случайной строки удобно использовать pwgen:
pwgen 24 1Используйте сгенерированную строку как значение LinOTPCookieSecret. Длина 24 символа — достаточная рекомендация для секрета; при желании используйте более длинные значения.
Важные замечания по URL
Использование localhost в LinOTPValidateURL может приводить к ошибкам curl внутри модуля (например, если Apache запускается в окружении с ограниченной сетевой видимостью). Всегда указывайте корректный IP-адрес или полное доменное имя (FQDN).
Рекомендации по безопасности
- В продакшн окружении держите LinOTPValidateURL по HTTPS и включите проверку сертификатов (LinOTPSSLCertVerify On). Если используется самоподписанный сертификат — установите доверенный CA в систему.
- Храните LinOTPCookieSecret в защищённом месте (например, в менеджере секретов или в файле с ограниченным доступом) и не коммитите его в систему контроля версий.
- Ограничьте доступ к конечным точкам в Apache с помощью IP-белого списка, если это применимо.
- Логируйте события аутентификации, но избегайте записи секретов/полных токенов в логи.
Отладка и типичные ошибки
- Ошибка curl при обращении к LinOTPValidateURL: проверьте доступность сервера из-под пользователя Apache и корректность DNS/hosts.
- Модуль не загружается: проверьте расположение файла mod_authn_linotp.so и права на него; убедитесь, что зависимости (libcurl и т. п.) установлены.
- Проблемы с cookie: проверьте корректность LinOTPCookieSecret и настройки времени (синхронизация часов на серверах).
Пример: включение проверки сертификата
Если вы хотите строго проверять SSL-сертификат LinOTP, включите проверки и убедитесь, что Apache доверяет CA:
LinOTPSSLCertVerify On
LinOTPSSLHostVerify OnВ этом режиме отладочные ошибки чаще связаны с отсутствием доверенного CA или с некорректным именем хоста в сертификате.
Ролевые чек-листы
Администратор сервера:
- Установить и проверить доступ к LinOTP-серверу.
- Сгенерировать и защитить LinOTPCookieSecret.
- Настроить HTTPS и проверить сертификаты.
- Обновить документацию и план отката.
DevOps / Разработчик:
- Автоматизировать сборку модуля и создание .deb при необходимости.
- Включить мониторинг доступности LinOTPValidateURL.
- Тестировать поведение таймаута cookie в staging.
Критерии приёмки
- При вводе корректных учётных данных и OTP пользователь получает доступ.
- После истечения LinOTPTimeout повторная авторизация требует новый OTP.
- При недоступности LinOTP-сервера — поведение предсказуемо (ошибка 401, корректный лог).
- Логи безопасности показывают события аутентификации без раскрытия секретов.
Мини-методология развёртывания
- Установить и протестировать LinOTP-сервер отдельно.
- На тестовой машине собрать и установить модуль.
- Настроить виртуальный хост с LinOTP и провести сценарии тестирования (успешная аутентификация, неверный OTP, истечение cookie).
- Перенести конфигурацию в продакшн, включить строгую проверку сертификатов.
Сопутствующие советы и альтернативы
- Альтернатива: использовать внешние провайдеры 2FA (например, RADIUS с MFA), если требуется централизованное управление несколькими приложениями.
- Если вы не хотите компилировать модуль локально, проверьте наличие готовых пакетов для вашей версии дистрибутива.
Краткое резюме
LinOTP предоставляет надёжный способ добавить OTP в процесс аутентификации Apache. В статье описаны шаги по загрузке, сборке, активации и настройке модуля, а также рекомендации по безопасности и отладке. Основные действия: сгенерировать секрет для cookie, указать корректный LinOTPValidateURL и включить проверку сертификатов в продакшне.
Важно: всегда тестируйте конфигурацию в staging и храните секреты в безопасном месте.
Полезные команды и сниппеты приведены выше — используйте их как шаблон при внедрении.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента