Назад | Перейти на главную страницу

Настройка обратного прокси Apache 2.4 с SSL и аутентификацией как на прокси, так и на бэкэнде

Цель: клиент аутентифицируется против обратного прокси-сервера apache 2.4 с помощью OTP (AuthType basic), затем перенаправляется на внутренний сервер (apache 2.2), где требуется дополнительная индивидуальная аутентификация (Kerberos). Клиент получает доступ после успешного выполнения обоих факторов.

Что касается возможного решения, я предполагаю, что мы можем пренебречь парой аутентификации otp / kerberos и можем в более общем плане говорить о двух основных аутентификациях.

Ограничения: необходимо использовать как OTP на прокси, так и аутентификацию Kerberos на бэкэнде. Текущий Apache 2.2 на сервере не может быть заменен. Подкаталог "sub" (см. Ниже) не может быть изменен. В качестве прокси необходимо использовать Apache 2.4 (не может быть заменен на nginx или squid) из-за проприетарного модуля otp.

Подготовка / конфигурация на данный момент:

Все необходимые прокси-модули на месте (мы на SuSE 12.2)

/etc/apache2/loadmodules.conf:

LoadModule proxy_module
LoadModule proxy_http_module 
LoadModule proxy_html_module
LoadModule xml2enc_module

и включен $ a2emod [module]

Конфигурация виртуального хоста в настоящее время выглядит так:

    <VirtualHost myproxy.domain.com:443>

    DocumentRoot "/srv/www/myproxy"
    ServerName myproxy.domain.com:443

    # requests must point to the subdir /sub
    RewriteEngine  on
    RewriteRule ^/$ sub/ [R]

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl.crt/pubkey.pem
    SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

    # no open forwarding proxy:
    ProxyRequests off

    # use SSL between proxy and backend in a loose fashion
    # i.e. do not check cert validity etc.
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    # try to forward 2nd authentication to backend srv ?
    SetEnv Proxy-Chain-Auth On

    ProxyPass /sub https://mybackend.domain.com/sub/
    ProxyPassReverse /sub https://mybackend.domain.com/sub/

    ProxyPreserveHost On

    <Proxy https://mybackend.domain.com/sub/>

    AuthType basic
    AuthName "OTP protected Login"
    AuthBasicProvider someOTPprovider
    Require valid-user
    someValidationURL https://xyz/validate
    </Proxy>
    </VirtualHost>

Текущие достижения:

Проблема:

и снова спрашивает первый фактор отп.

Дополнительная информация журнала: первый (положительный) запрос otp всегда выдает ошибку в backend apache error_log:

    [error] [client ip] krb5_get_init_creds_password() failed: Looping 
    detected inside krb5_get_in_tkt

Далее я попробовал дополнительные параметры, например CacheDisable [url_to_backend] или RequestHeader unset Authorizationно безрезультатно.