Проверка подлинности обратного прокси-сервера Apache 2.4 для эластичного стека - PullRequest
0 голосов
/ 28 мая 2019

Elastic Stack 6.8 Apache 2.4.6 с использованием mod_ssl

Попытка воспользоваться преимуществами, включенными в ES 6.8 и выше.Я настроил Apache в качестве обратного прокси-сервера с аутентификацией по смарт-карте.Это хорошо работает с этой базовой настройкой.Пользователь переходит на https example.com и при запросе вводит свой пин-код для смарт-карты, и он успешно перенаправляет их на интерфейс kibana с экраном имени пользователя / пароля kibana.

Если я попытаюсь ограничить количество тех, кто может войтив случае со смарт-картой кажется, что она пытается войти в Кибану (это, безусловно, будет бонусом).Я получаю это сообщение в браузере для ожидаемого пользователя.Если пользователя нет в списке, я получаю сообщение о том, что.

statusCode: 401
error: "Unauthorized"
message "[security_exception] unable to authenticate user [/common name/ou/etc/of/authorized/user] for REST request [/_xpack/security/_authenticate], with { header={ WWW-Authenticate={ 0=\"Bearer realm=\\\"security"\\\"\ & 1=\"ApiKey\" & 2=\"Basic realm=\\\"security\\\" charset=\\\"UTF-8\\\"\" } } }"

У меня нет журналов, относящихся к нему в kibana илиasticsearch.Мой журнал Apache client_client_access показывает 3 события.включая отличительное имя с

GET / HTTP/1.1 380
GET /favicon.ico HTTP/1.1 380

, затем эта запись без отличительного имени

GET /favicon.ico HTTP/1.1 -  

Отображается лог-файл Apache error_log на уровне журнала информации.

(client IP) - AH01964 Connection to child 3 established (server example.com:443)

-Через 2 секунды -

(client IP) - AH02221: Requesting connection re-negotiation
(client IP) - AH02226: Awaiting re-negotiation handshake

- через 4 секунды -

(client IP) - AH02036: Faking HTTP Basic Auth header: "Authorization: Basic --long string--"
(server IP) - AH01964: Connection to child 0 established (server
example:com:443)
(client IP) - AH02036: Faking HTTP Basic Auth header: "Authorization: Basic --same long string--"
(server IP) - AH01964: Connection to child 0 established (server example:com:443)
(client IP) - AH01964 Connection to child 7 established (server example.com:443) 
(client IP) - AH02221: Requesting connection re-negotiation
(client IP) - AH02226: Awaiting re-negotiation handshake
(client IP) - AH02226: Re-negotiation handshake failed
(client IP) - AH01998: Connection closed to child 7 with abortive shutdown (server example:com:443)
(client IP) - AH01382: Request header read timeout
(client IP) - AH01991: SSL input filter read failed

Моя конфигурация виртуального хоста Apache выглядит следующим образом.

<VirtualHost example.com:443>
  ServerAdmin Me
  ServerName example.com
  DocumentRoot "/var/www"

  #activate HTTPS on the reverse proxy
  SSLEngine On
  SSLProxyEngine On
  SSLCertificateFile /etc/pki/tls/certs/example.com.crt
  SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
  SSLCertificateChainFile /etc/pki/tls/certs/chainfile.pem

  #activate the client certificate authentication
  SSLCACertificateFile /etc/pki/tls/chainfile.pem

  SSLCARevocationPath /etc/pki/tls/certs/CRL

  CustomLog logs/client_access_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x %{SSL_CLIENT_S_DN}x %r %b"

  <location />
    SSLRequireSSL
    SSLVerifyClient optional
    SSLVerifyDepth 5
    SSLOptions +FakeBasicAuth
    SSLUserName SSL_Client_S_DN

    #Initialize the special headers to a blank value to avoid http header forgeries
    RequestHeader set SSL_CLIENT_S_CN ""
    RequestHeader set SSL_CLIENT_I_DN ""
    RequestHeader set SSL_SERVER_S_DN_OU ""
    RequestHeader set SSL_CLIENT_VERIFY ""

    #add all the SSL you need in the internal web applications
    RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
    RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
    RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
    RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"

    ProxyPass https://example.com:5601
    ProxyPassReverse https://example.com:5601

    AuthName "Restricted Access"
    AuthType Basic
    AuthBasicProvider file
    AuthUserFile /etc/httpd/userlist.txt
    Require valid-user
  </location>

  <proxy *>
    AddDefaultCharset Off
    Require all granted
  </proxy>
</VirtualHost>

Если я закомментирую всеиз элементов RequestHeader это не дает мне ничего особенного.

Я пытаюсь, по крайней мере, разрешить вход в смарт-карту нужным пользователям.Еще лучше, если я смогу передать желаемую информацию о пользователе в Kibana и позволить им войти в систему и получить нужные права.

...