squidでの安全なユーザー認証の物語


17

むかしむかし、南アメリカに美しい温かい仮想ジャングルがあり、そこにイカのサーバーが住んでいました。ネットワークの知覚イメージは次のとおりです。

                 <the Internet>
                        | 
                        | 
           A            |          B
Users <---------> [squid-Server] <---> [LDAP-Server] 

Usersインターネットへのアクセス要求時に、squid名前とパスポートを尋ね、認証をLDAP行います。LDAPが承認した場合は、許可します。

ユーザーとイカの間のパスでスニファーがパスポートを盗むまで、誰もが幸せでした[パスA]。この災害は、squidがBasic-Authenticationメソッドを使用したために発生しました。

ジャングルの人々は問題を解決するために集まった。NTLMメソッドの使用を提供するバニーもいます。木によって推奨されているDigest-Authentication間、ヘビが好まKerberosれた。

結局のところ、ジャングルの人々によって提供された多くのソリューションとすべてが混乱していた!ライオンはこの状況を終わらせることにしました。彼はソリューションのルールを叫んだ。

  • ソリューションを安全にしましょう!
  • ほとんどのブラウザーとソフトウェア(ダウンロードソフトウェアなど)でソリューションが機能するか
  • ソリューションはシンプルで、他の巨大なサブシステム(Sambaサーバーなど)を必要としません。
  • メソッドが特別なドメインに依存してはならない。(例:Active Directory)

それから、猿によって提供される非常に手ごろな包括的で賢い解決策は、彼をジャングルの新しい王にした!

あなたは解決策が何であったか推測できますか?

ヒント: 間のパスsquidLDAPライオンで保護されており、解決策は、それを確保する必要がありません。

注:ストーリーが退屈で面倒な場合は申し訳ありませんが、そのほとんどは本物です!=)

               /~\/~\/~\
            /\~/~\/~\/~\/~\
          ((/~\/~\/~\/~\/~\))
        (/~\/~\/~\/~\/~\/~\/~\)
       (////     ~   ~     \\\\)
       (\\\\(   (0) (0)   )////)
       (\\\\(   __\-/__   )////)
        (\\\(     /-\     )///)
         (\\\(  (""""")  )///)
          (\\\(  \^^^/  )///)
           (\\\(       )///)
             (\/~\/~\/~\/)         **
               (\/~\/~\/)        *####*
                |     |           ****
               /| | | |\            \\
            _/  | | | | \_ _________//   Thanks!
           (,,)(,,)_(,,)(,,)--------'

更新:

Massimoは、Users- squidsquid-の間の認証方法はLDAP同じである必要はないと説明しました。任意の方法を使用してユーザーから認証情報を取得し、任意の方法を使用して認証済みの収集データを取得できます。

しかし、問題があります。すべてのタイプの認証システムの入力/出力は同じではありません。例えば:

  • Basicオーセンティケータは行に「ユーザ名パスワード」ペアを読み、返信する必要がありOK、ユーザーパスが正しい場合、またはERR
  • Digestオーセンティケータは、読むべきusername:realmとヘクスエンコードの返信HA(A1)またはERR

client-squidメソッドとsquid-ldapメソッドの間に直接的な関係はありませんが、クライアントから収集されたデータは、squid-ldap部分で使用されるメソッドと互換性がある必要があります。したがって、ユーザー側で認証方法を変更する場合は、オーセンティケーターも変更する必要があります。

そのため、問題は次のように単純化されます。

  1. 最初のレベルでは、i(サル!)はユーザー側で適切な認証方法を探しています。ほとんどのブラウザで安全でサポートされている方法はどれですか。私は間の混乱にいるNTLMKerberosDigest

  2. 選択した方法の資格情報をサポートし、LDAPを介して認証する認証システムを見つけることができます。


2
+1、まったく素晴らしいストーリーテリング。
マッシモ

このフォームですべての質問をする必要がありますか?
バートシルバース

@Bart、おそらくそうではありませんが、とにかく素晴らしいです:
Massimo

スタイルの+1 !!!
-geoffc

4
7:私は少しライオンが正しく強調表示構文されなかったことに失望だ
オスカーDuvebornを

回答:


1

KerberosはHTTP認証のオプションではありません。NTLMはIE以外のブラウザでは十分にサポートされていません。Basicは、知らないイカができないHTTPSの後ろに置かない限り、安全ではありません。したがって、ダイジェストが残っています。


これdigest_ldap_authで、LDAPサーバーに対して(squidに付属)によって実装されたHTTPダイジェスト認証によってユーザーを認証しています。
アイザック

HTTP Negotiateメカニズムを通じてKerberosをサポートします。ApacheとSquidで使用できました。SSLはSquidのオプションでもあり、ライセンスの問題のため、Debianでのみ有効にできません。
grawity

4

ここで役立つ興味深い機能の1つは、Squidがクライアントブラウザーに認証を要求するために使用するメソッド(パスA)が、ユーザーが提供する資格情報を実際に検証するために使用するメソッド(パスB)に関連する必要がないことです)。これは、fe、SquidがクライアントブラウザーでNTLMを「話す」ことができることを意味しますが、Linuxの内部ユーザーデータベース(/ etc / passwd)に対してユーザーを非常にうまく検証できます。NTLM(パスA上)を使用して取得した資格情報を、Windowsドメイン(パスB上)に対して実際に検証する必要はありません。同じことが、クライアント側の認証方法とサーバー側の認証方法の可能な組み合わせにも当てはまります。

これがあなたの場合に意味することは、基本認証の代わりにクライアントブラウザからNTLM認証を要求するようにSquidを安全に設定できるということです。

そのため、クライアント側の認証に必要な方法を選択できますが、ユーザーが選択した方法を使用して資格情報を提供した後も、LDAPサーバーに対してユーザーを引き続き検証できます。

もちろん、魔法は次の場所で発生しsquid.confます。

#auth_param negotiate program <uncomment and complete this line to activate>
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program <uncomment and complete this line to activate>
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program <uncomment and complete this line>
#auth_param digest children 5
#auth_param digest realm Squid proxy-caching web server
#auth_param digest nonce_garbage_interval 5 minutes
#auth_param digest nonce_max_duration 30 minutes
#auth_param digest nonce_max_count 50
#auth_param basic program <uncomment and complete this line>
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off

auth_paramディレクティブは、クライアントブラウザー(パスA)の特定の認証有効にし、「プログラム」部分は、ユーザーが提供する資格情報を検証するためにSquidが実際に使用するものを設定します。ユーザーIDとパスワードを受け取り、「はい」または「いいえ」と答える限り、ここで必要なオーセンティケータープログラム(カスタム作成のものでも)を使用できます。

LDAPクエリを実行するために使用しているオーセンティケーターを取得し、現在の「auth_param basic」ステートメントではなく、「auth_param ntlm」または「auth_param digest」ステートメントに挿入するだけです。


更新:

必ずsquid_ldap_authをオーセンティケーターとして使用する必要がありますが、使用している特定のLDAPサーバーに関する詳細なしでは、正確にどのように説明することはできません。

クライアント側の認証に関しては、どれでも良いはずです。NTLMには非常に満足しており、最近ではほとんどのブラウザがNTLMをサポートしています。

このような構成は、squid.confでは次のようになります。

auth_param ntlm program /usr/lib/squid/squid_ldap_auth <parameters>

これは、NTLMを使用してユーザー資格情報(パスA)を要求し、LDAPサーバー(パスB)に対してそれらを検証します。ただし、これらの「パラメーター」は、LDAPの実装と構成に厳密に依存します。

:これは、あまりにも、助けることができるhttp://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html


本当のようです!次に、どの方法を提供しますか?NTLMKerberos?それらのどれがほとんどのブラウザでサポートされており、LDAPをサポートする「認証者」をすでに持っていますか?
アイザック

@Isaac、よく読んでください:-) メソッドとオーセンティケータープログラムの間に関係はありません。したがって、LDAPをサポートするオーセンティケータープログラムがある限り、任意のクライアント認証メソッドで使用できます。そして、私はあなたがすでに基本認証でそれを使用しいるという印象を受けました...そうではありませんか?squid.confの関連部分を投稿できますか?
マッシモ

ありがとう。質問の更新セクションでこれを説明しました。私は間違っていないことを願っています!:-/
アイザック

私はこれが古い投稿であることを知っていますが、auth_param ntlm program /usr/lib/squid/squid_ldap_auth <parameters>ユーザーが認証を試みるたびにsquidがクラッシュして再起動します。間違ったを使用している可能性がparametersありますが、私は同じパラメータを使用しておりbasic、正常に動作します。何か案は?
カストロロイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.