1

「単純な」認証 (Hadoop JobTracker UI) を使用するファイアウォールの背後に Web UI があります。これは、URL にユーザーの名前がパラメーターとして含まれていることを意味し、Web サーバーはブラウザーがその名前を信頼していることを意味します。非標準ポート (50030) でリッスンし、"アプリケーション" 識別子はありません (そのため、URI 部分は事実上ランダムです)。したがって、ターゲット URL は次のようになります。https://actual_web_server:50030/jobqueue_details.jsp?queueName=default&User.Name=foo

物事を複雑にするには:

  • Apache をリバース プロキシとして使用して、ファイアウォールの穴の数を減らしたいと考えています。
  • Apache にユーザーを認証させたい (つまり、LDAP に対して)。
  • 私が持っているいくつかの異なる Hadoop クラスターを区別するために、エンド ユーザーに適切な URL を提供したいと考えています。
  • 暗号化を採用する必要があります。

したがって、上記の URL がブラウザに次のように表示されることを望んでいます。 https://JobTracker.Cluster1.MySite.com/jobqueue_details.jsp?queueName=default

Apache を次のように構成できることを願っています。

1) mod_authnz_ldap を使用して LDAP に対して着信接続を認証します (こちらのように)。これは多くの例で比較的簡単に見えますが、このビットを処理できると思います!

2) DNS エントリ (JobTracker.Cluster1.MySite.com) と Apache の仮想ホスト エントリを使用して、よりきれいな URL を有効にします。繰り返しますが、本当の課題ではありませんが、構成が複雑になります。

3) mod_rewrite を使用して:

3a) ユーザーが提供した値を信頼できないため、ユーザーが提供した場合は「User.Name=foo」パラメーターを削除します。

3b) パラメータ「User.Name={Authenticated LDAP Username}」を URL に追加します。

3c) きれいなホスト名とポート (JobTracker.Cluster1.MySite.com) をターゲットのホスト名とポート (actual_web_server:50030) に置き換えます。

3d) この新しい URL を使用して、ターゲット Web サーバーへのリクエストをプロキシします。

3e) ブラウザ (およびページ上のすべてのリンク) に表示される URL も、正しい「きれいな」ホスト名を使用するように変更されます。

3f) 理想的には、ブラウザに表示される URL には「User.Name=foo」パラメータが表示されていません。上映されても大したドラマじゃないけど、やめたほうがいい。

ブラウザから「actual_web_server」に直接接続できないため、単純にリダイレクトできないことに注意してください。また、この 1 つの Apache インストールは、これと同じように構成された複数の Web UI (それぞれのカスタム DNS エントリ) を提供します。

誰かが「そこにいて、それを行った」ことを願って、これがどのように、または可能であるかを知るのに十分です.....

4

1 に答える 1

1

私の httpd.conf には、次の場所ブロックがあります。私は仲間のApacheサーバーを使用しているため、仮想サーバーではなく場所があります。非常に複雑な 1 つのブロックではなく、2 つの異なるブロックを選択しました。単純に、明快さと機能性とエレガントさが、過度に複雑で判読できないコード行 (IMHO) を打ち負かすためです。

<Location /ldap>
    Order Allow,Deny
    Allow from all
    Options FollowSymLinks

    #
    #       Authenticate the user
    #

    AuthName "LDAP"
    AuthType Basic
    AuthBasicProvider ldap
    AuthLDAPURL "ldap://my_active_directory_box:389/ou=Human,ou=Users,dc=my_company?sAMAccountName?sub?(objectClass=*)"
    AuthLDAPBindDN cn=my_service_account,ou=Non-Human,ou=Admin,dc=my_company
    AuthLDAPBindPassword very_secure_password
    AuthUserFile /dev/null
    Require valid-user

    #
    #       ENSURE user.name is set by us, using mod_rewrite
    #
    RewriteEngine on
    RewriteBase /ldap

    # PREVENT USER SUPPLYING THE USER NAME PARAMETER
    RewriteCond %{QUERY_STRING} ^(.*)user.name=.*$ [nocase]
    RewriteRule ^(.*)$ - [F]

    # If the URL has a Query String, then append our login with &
    RewriteCond %{QUERY_STRING} ^.+$ [nocase]
    RewriteRule ^(.*)$ $1%1&user.name=%{REMOTE_USER}

    # If the URL does NOT have a Query String, then append our login with a ?
    RewriteCond %{QUERY_STRING} ^$ [nocase]
    RewriteRule ^(.*)$ $1?user.name=%{REMOTE_USER}

    #
    #       Now Proxy the request through
    #

    ProxyPass http://s011qpol2342.s2.chp.cba:8080/docs
    ProxyPassReverse http://s011qpol2342.s2.chp.cba:8080/docs
</Location>

自分の質問に答えて賞品を獲得できますか?

于 2013-11-25T22:01:09.620 に答える