Nginx

在未經身份驗證的 Web 伺服器前面的反向代理上對 NTLM 進行身份驗證

  • July 23, 2018

我有幾個 Linux HTTP 伺服器設置,無需身份驗證即可訪問 Web 內容。我希望我的 Windows 使用者能夠通過直通身份驗證訪問這些站點。

不過,我不想嘗試在每個 Web 伺服器上進行設置。我的想法是我可以在反向代理上對它們進行 NTLM 身份驗證,然後代理可以發出未經身份驗證的請求,並且 Web 伺服器只會接受來自所述反向代理的連接。理想情況下,我將能夠根據使用者 AD 組限制對某些站點/url 的訪問,但這不是必需的。

我在搜尋中遇到的大多數範例/教程都是關於將憑據一直代理到目標 Web 伺服器,但我希望代理自己進行身份驗證。如果需要,我可以在 Windows 中執行代理。我正在尋找最容易設置的東西。

我最終找到了兩個可行的解決方案來解決這個問題。希望這對嘗試設置類似內容的人有所幫助。

  1. 使用 ARR(應用程序請求路由)設置 IIS 並全域啟用 Windows 身份驗證。然後,配置全域授權規則以允許您希望能夠通過反向代理進行身份驗證的任何使用者。這種方法的缺點是,如果您要代理多個站點,則無法輕鬆地為不同站點設置不同的權限。您可以在 URL 授權規則中指定“位置路徑”,但不能說 server1 允許這些使用者 server2 允許這些使用者。
  2. 我選擇使用的選項是執行帶有我在 Github ( https://github.com/TQsoft-GmbH/mod_authn_ntlm ) 上找到的較新 NTLM 外掛的 Apache 2.4。使用這種方法我沒有遇到任何缺點。配置如下。
<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>

引用自:https://serverfault.com/questions/922725