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

Проверка подлинности NTLM на обратном прокси-сервере перед неаутентифицированными веб-серверами

У меня установлено несколько HTTP-серверов Linux без аутентификации, необходимой для доступа к веб-контенту. Я бы хотел, чтобы мои пользователи Windows имели доступ к этим сайтам с сквозной аутентификацией.

Однако я не хочу пытаться устанавливать это на каждом веб-сервере. Моя идея состоит в том, что я мог бы NTLM аутентифицировать их на обратном прокси-сервере, а затем прокси мог бы сделать неаутентифицированный запрос, и веб-серверы будут принимать соединения только от указанного обратного прокси. В идеале я мог бы ограничить доступ к определенным сайтам / URL-адресам на основе группы пользователей AD, но это не является обязательным требованием.

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

Я нашел 2 жизнеспособных решения этой проблемы. Надеюсь, это будет полезно всем, кто пытается настроить что-то подобное.

  1. Настройте IIS с ARR (маршрутизация запросов приложений) и включите глобальную аутентификацию Windows. Затем настройте правило глобальной авторизации, чтобы разрешить любым пользователям, которым вы хотите, иметь возможность аутентифицироваться через обратный прокси. Недостатками этого метода было то, что вы не можете легко установить разные разрешения для разных сайтов, если вы проксируете более одного. Вы можете указать «путь к местоположению» в правиле авторизации URL, но нельзя сказать, что server1 разрешает этим пользователям server2 разрешает этих пользователей.

  2. Я выбрал вариант использования Apache 2.4 с новым подключаемым модулем NTLM, который я нашел на Github (https://github.com/TQsoft-GmbH/mod_authn_ntlm). Недостатков при использовании этого метода не обнаружил. Конфиг ниже.

    <VirtualHost *:*>
      ProxyPass / http://server1/
      ProxyPassReverse / http://server1
    
      ServerName proxy1
    
      <Location /* >
        AuthType SSPI
        NTLMAuth On
        NTLMAuthoritative On
        NTLMOfferBasic On
        <RequireAny>
          Require sspi-user contoso\johnsmith
        </RequireAny>
      </Location>
    </VirtualHost>
    
    <VirtualHost *:*>
      ProxyPass / http://server2/
      ProxyPassReverse / http://server2
    
      ServerName proxy2
    
      <Location /* >
        AuthType SSPI
        NTLMAuth On
        NTLMAuthoritative On
        NTLMOfferBasic On
        <RequireAny>
          Require sspi-group "contoso\Domain Users"
        </RequireAny>
      </Location>
    </VirtualHost>