Вопрос или проблема
Duplicati по любой причине не будет работать, если вы попытаетесь проксировать корневую папку, поэтому домен на главный IP, как было обсуждено здесь:
https://github.com/duplicati/duplicati/issues/1932
Единственное решение — это проксировать каждую подпапку и отключить страницу входа, которая находится в корневой папке. Теперь, когда я отключил вход и использую токен навсегда, мне понадобится второй метод аутентификации, чтобы защитить мою панель управления Duplicati.
Итак, у меня есть несколько папок, связанных с Duplicati, и они находятся за прокси. Теперь я хочу вторую аутентификацию от Apache с использованием .htpasswd.
Это моя текущая конфигурация:
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes On
# Добавить заголовок Authorization
<IfModule mod_headers.c>
RequestHeader set Authorization "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXV"
</IfModule>
ProxyPass "/api" "http://localhost:8200/api"
ProxyPass "/customized" "http://localhost:8200/customized"
ProxyPass "/img" "http://localhost:8200/img"
ProxyPass "/ngax" "http://localhost:8200/ngax"
ProxyPass "/oem" "http://localhost:8200/oem"
ProxyPass "/package" "http://localhost:8200/package"
ProxyPassReverse "/api" "http://localhost:8200/api"
ProxyPassReverse "/ngax" "http://localhost:8200/ngax"
ProxyPass "/notifications" "ws://localhost:8200/notifications"
ProxyPassReverseCookieDomain localhost:8200 example.domain.com
ProxyPassReverseCookiePath / /
# Включить mod_rewrite
RewriteEngine On
# Совпадение с POST запросами к /api/v1/auth/refresh и перехват
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/api/v1/auth/refresh$
RewriteRule ^ - [L,R=200]
# Обслуживание статического JSON ответа только для /api/v1/auth/refresh
<Location "/api/v1/auth/refresh">
Header always set Content-Type "application/json"
SetEnvIf Request_URI "^/api/v1/auth/refresh$" STATIC_RESPONSE
ErrorDocument 200 "{\"AccessToken\":\"eyJhbGciOiJIUzI1\"}"
</Location>
если я добавлю защищенное правило для этой корневой папки, это даст мне петлю аутентификаций при попытке подключиться к домену.
<Location "/">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/.htpasswd
Require valid-user
</Location>
если я попробую любую из подпапок, которые находятся за прокси, он никогда не покажет диалог и папка останется без защиты:
<Location "/ngax/">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/.htpasswd
Require valid-user
</Location>
Ответ или решение
Конфигурация Apache2 для использования Duplicati за прокси-сервером требует внимания к деталям ввиду некоторых ограничений, присущих этому программному обеспечению. Как указывалось в обсуждениях, например, в теме на GitHub, Duplicati имеет проблемы с проксированием корневой директории напрямую, что может вызвать многочисленные ошибки при попытке работы напрямую через IP-адрес. Ваша задача состоит в том, чтобы обеспечить безопасное подключение к панели управления Duplicati посредством второго метода аутентификации через Apache с использованием файла .htpasswd.
Теория:
При работе за прокси-сервером, приложению может потребоваться дополнительная защита и механизмы аутентификации для защиты доступа. В данном случае, часть пользователей обходят проблему с корневой директорией, проксируя каждую поддиректорию отдельно и отключая первоначальную страницу входа в систему. Однако, такой подход требует введения второго метода аутентификации для защиты данных. Это можно сделать через базовую аутентификацию Apache, используя файл .htpasswd, чтобы обеспечить дополнительный уровень безопасности.
Пример:
На текущий момент, ваш конфигурационный файл содержит несколько ProxyPass и ProxyPassReverse директив, позволяющих проксировать поддиректории, такие как "/api", "/ngax" и другие к локальному серверу Duplicati. Также вы добавляете заголовок Authorization, который помогает с аутентификацией в некоторых случаях. Однако, когда вы пытаетесь применить правила аутентификации Apache к корневой директории (или даже к поддиректории), вы сталкиваетесь либо с бесконечным циклом запросов на аутентификацию, либо Apache просто не предлагает окно для ввода пароля.
Применение:
Для настройки аутентификации с использованием .htpasswd за прокси вы можете предпринять следующие шаги:
-
Разделение маршрута прокси и аутентификации:
- Убедитесь, что заголовки и аутентификация настроены правильно. Пока ваш сервер Duplicati использует авторизацию через токены, наличие двух механизмов авторизации может вызывать конфликты. Вам следует удостовериться, что заголовок ‘Authorization’ верен и применим только там, где это необходимо.
-
Настройка .htpasswd для поддиректорий:
Если конфигурация для поддиректорий не работает, убедитесь, что mod_auth_basic и mod_authn_file загружены модулем Apache. Это можно проверить с помощью команд
apache2ctl -M
. В случае их неактивности загрузите их с помощью a2enmod.В вашем конфигурационном файле условия для поддиректорий, таких как "/ngax", могут быть заданы таким образом:
<Location "/ngax"> AuthType Basic AuthName "Restricted Area" AuthUserFile /var/www/.htpasswd Require valid-user </Location>
Убедитесь, что файл .htpasswd находится в указанном месте и имеет правильные разрешения. Этот файл должен быть создан с помощью команды htpasswd и содержать правильные пары имен пользователей и паролей.
-
Обработка проблемы циклической аутентификации:
Проблема с бесконечным циклом аутентификации может возникать из-за неправильного определения областей, защищаемых от аутентификации. Постарайтесь не указывать <Location "/"> для базовой аутентификации, так как это может привести к конфликту с уже настроенными правилами проксии и заголовков.
-
Индивидуальная конфигурация для REST API:
Для вашего REST API "/api/v1/auth/refresh", который предоставляет токены аутентификации, может быть особый случай, требующий отдельного специального конфигурации или исключения из аутентификации.
Заключение:
Эти действия следует применять осторожно, чтобы не нарушить основной функционал Duplicati. Важно чтобы ваша конфигурация файла Apache была рассчитана на предотвращение конфликтов с веб-прокси и той безопасностью, которую вы пытаетесь реализовать. Дублирование механизмов безопасности иногда требует общей оптимизации для избежания накладок и конфликтов в работе различных модулей и приложений. Если затрудняетесь с реализацией, обратитесь к документации Apache и ресурсам поддержки Duplicati для уточнения, например, как именно можно конфигурировать исключения и дополнительные условия для лучшей совместимости.