在未经身份验证的 Web 服务器前的反向代理上对 NTLM 进行身份验证

在未经身份验证的 Web 服务器前的反向代理上对 NTLM 进行身份验证

我设置了几个 Linux HTTP 服务器,无需身份验证即可访问 Web 内容。我希望我的 Windows 用户能够通过传递身份验证访问这些网站。

不过,我不想尝试在每个 Web 服务器上都设置它。我的想法是,我可以在反向代理上对它们进行 NTLM 身份验证,然后代理可以发出未经身份验证的请求,Web 服务器将只接受来自所述反向代理的连接。理想情况下,我可以根据用户 AD 组限制对某些站点/URL 的访问,但这不是必需的。

我在搜索中遇到的大多数示例/教程都是关于将凭据一直代理到目标 Web 服务器,但我希望代理本身进行身份验证。如果需要,我可以在 Windows 中运行代理。我正在寻找最容易设置的东西。

答案1

我最终找到了 2 个可行的解决方案。希望这对任何尝试设置类似功能的人有所帮助。

  1. 使用 ARR(应用程序请求路由)设置 IIS 并全局启用 Windows 身份验证。然后,配置全局授权规则以允许您希望能够通过反向代理进行身份验证的任何用户。此方法的缺点是,如果您代理多个站点,则无法轻松地为不同的站点设置不同的权限。您可以在 URL 授权规则中指定“位置路径”,但您不能说 server1 允许这些用户 server2 允许这些用户。

  2. 我选择使用的选项是运行 Apache 2.4,其中包含我在 Github 上找到的较新的 NTLM 插件(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>
    

相关内容