web-dev-qa-db-ja.com

認証されていないWebサーバーの前のリバースプロキシでNTLMを認証します

Webコンテンツにアクセスするために認証を必要としないLinuxHTTPサーバーをいくつかセットアップしています。 Windowsユーザーがパススルー認証を使用してこれらのサイトにアクセスできるようにしたいと思います。

ただし、すべてのWebサーバーでこれを設定する必要はありません。私の考えは、リバースプロキシでNTLM認証を行うと、プロキシが認証されていない要求を行うことができ、Webサーバーはそのリバースプロキシからの接続のみを受け入れるというものです。理想的には、ユーザーのADグループに基づいて特定のサイト/ URLへのアクセスを制限できるはずですが、それは必須ではありません。

私が検索で出くわしたほとんどの例/チュートリアルは、宛先Webサーバーに至るまで資格情報をプロキシすることに関するものですが、プロキシ自体に認証を実行してもらいたいです。必要に応じて、Windowsでプロキシを実行しても問題ありません。セットアップが最も簡単なものは、私が探しているものです。

1
getsauce

私はこの問題に対する2つの実行可能な解決策に行き着きました。うまくいけば、これは似たようなものをセットアップしようとしている人に役立つでしょう。

  1. IIS with ARR(Application Request Routing)を設定し、Windows認証をグローバルに有効にします。次に、グローバル認証ルールを構成して、リバースプロキシを介して認証できるようにするユーザーを許可します。欠点この方法では、複数のサイトをプロキシしている場合、異なるサイトに異なるアクセス許可を簡単に設定することはできません。URL承認ルールで「ロケーションパス」を指定できますが、server1がこれらのユーザーを許可するとは言えません。これらのユーザー。

  2. 私が使用することを選択したオプションは、Githubで見つけた新しいNTLMプラグインを使用してApache 2.4を実行することでした( 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>
    
1
getsauce