Squidの各種の認証方法についてのサンプルはこちらにありますのでご覧下さい。
Squidの各種の認証方法についてのサンプルはこちらにありますのでご覧下さい。
注意:この情報は、 バージョン2.5x に対応します。
Squidでは、proxy_auth ACLが使われることでユーザ認証が行われるようになります。
ブラウザーは、ユーザー認証の認可のリクエストをリクエスト・ヘッダー中に入れて送ります。
Squidはリクエストを得ると、proxy_auth ACLによる http_access ルールが存在する場合には認証ヘッダーをリクエストから探し、そのヘッダーのユーザIDとパスワードを抽出します。
ヘッダーが見当たらない場合、Squidはステータス407(Proxy Authentication Required)をHTTPの応答として返します。ユーザエージェント(ブラウザー)は407の返答を受けると、名前およびパスワードを入力するようにユーザに促します。名前およびパスワードはコード化され、プロキシに認可ヘッダーのリクエストを送ります。
注意: 名前およびパスワードは"base64"を使用して、エンコード(コード化)されます(RFC 2616のセクション11.1を参照)。
しかしながら、base64はテキストを2進法の符号づけするだけで暗号化される訳ではありません。 これは、ユーザー名およびパスワードがブラウザーとプロキシの間で本質的には"クリアテキスト"であることを意味します。
したがって、アカウント・ログインするためのユーザ名およびパスワードと同じものを使わない方が良いでしょう。
注意2: Internet Explorer(IE)のバグによってSquid2.5との組み合わせにおいて、認証時に参照するページがHTTPSによるページあった場合に、IE起動直後の場合に画面の表示に失敗します。
これの対処方法をFAQに載せておきます。
認証は、Squidのプロセスとは別の外部プロセスによって現実されます。Squidがスタートすると、それは多くの認証サブプロセスを大量に起動します。
これらのプロセスは、標準入力(stdin)でユーザー名およびパスワードを読み、「OK」あるいは「ERR」を返答します。
現在、多くの異なる認証スキームの中から一度に1つのスキームを使用することができます。
Squidソース・コードは、基本的な認証のためにいくつかの認証プロセスを持っています。:
さらに、Squidはパスワードがプレーンテキストとして交換されないより安全な認証方法を供給する、NTLMおよびダイジェスト認証スキームをサポートします。それぞれのスキームは、ヘルパーおよびauth_paramセッティングのが独自ですので異なる認証スキーム間のヘルパーを混合することができません。NTLM認証をセット・アップする方法についての情報のために、winbindを見てください。
ユーザを認証するために、コンパイル・インストールディレクトリに供給されている認証モジュールかあなたが作成したヘルパー/basic_auth/が必要です。
squid.confの中でauth_paramオプションと共にどの認証プログラムを使用するべきであるかSquidに伝えます。 必要ならば任意のコマンドライン・オプションを加えて、プログラムの名前を指定します。例えば:
デフォルトでは、SquidはSSLリクエストの場合にはオリジナルサーバへ直接接続します。 しかし、もしあなたがSSLリクエストを親サーバを経由して接続したいなら、SSLリクエストを直接接続しないように最初に指定してください:
これと同時に、SSLリクエストを使う場合の親を1つだけ指定すべきです。 もし特別な親を指定するなら"cache_peer_access "で設定します。
こうすることで、SquidはSSLにparent2を使わずに、常にparent1を使うようになります。
Squidは、あなたが個々のユーザー名の指定することでよりきめの細かいコントロールを提供することを可能にします。
例えば:
この例では、lisaとsarahとjoeというユーザはいつでもプロキシを使うことができ、それ以外のユーザは8:00-17:00の間だけプロキシを利用できるようになります。
はい、その通りです。 成功した認証検査はデフォルトによって1時間貯えられます。 その意味することは(最悪の場合には)あなたがキャッシュから出た後に認証データベースが削除されるまでの1時間の間に誰かがこれ使うかもしれないという事です。
auth_paramオプションを使う事で有効期限をコントロールすることができます。
注:これは、ユーザによる再度のユーザ認証を必要とするかのパラメータではありません。セッションを維持するのは、ブラウザーです。 ブラウザーは、Squidに送られたすべてのリクエストをユーザーの代わりに立証します。
このパラメーターが管理するものは、単にどのくらいしばしばSquidが定義されたヘルパーに、パスワードがまだ妥当かたずねる間隔です。
Squidはメモリ上ではクリアエキストでパスワードを格納します。
外部認証プロセスに話しかける場合、Squidはクリアテキストでユーザー名およびパスワードを送ります。
しかしながら、外部認証はローカルコンピュータ上でパイプを使って行われており、これをのぞき見することが出来るのはrootの権限のある場合に限られるのでそう心配する事は内でしょう。
Jerry Murdock によって:
Winbindは最近Sambaに追加された機能で、NTベースのユーザアカウントの機能を提供します。Squidはwinbindによって強固で堅固で効率的なNTドメインコントローラーに対する基礎的なNTLM認証のエンジンを提供します。
winbind認証は、Linux、FreeBSDおよびSolaris下で利用出来るようになっています。
Samba-3.xからは機能の一部として標準でntlm_authがサポートされています。 このため、コンパイル時にwinbindヘルパーの利用を明示的に指定する必要はありません。(指定してもSamba-3.xでは動作しません)
Samba-2.2.xではSquidとwinbindヘルパーデーモンを経由したSambaの内部インターフェースが使ってサポートされています。 このため、Sambaチームのインターフェースへの変更に対して非常に敏感(バージョンアップで動かなくなってしまう事がある)です。
winbindヘルパーは、Squid-2.5 STABLE2から同梱されて、Samba-2.2.6 から Samba-2.2.7aともしかしたらSanba-2.xでもサポートされているかも知れません。
Squid-2.5.STABLE2とともにSambaのバージョン2.2.5以後を使う場合には、configureオプションとして
--with-samba-sources=... を必要としてます。
また、Samba-2.2.xバージョンにSamba-2.2.7aまでのパッチを適用したらな、このオプションを適用できるでしょう。
Squid-2.5.STABLE1 では Samba 2.2.4 と 2.2.5 だけをサポートしてます。 Squid-2.5.STABLE2
以上を使う場合には現在のバージョンのSamba-2.Xを使う事をお勧めします。
Samba3.Xについてはntlm_authがパーツとして提供されているので此方を使ってください。このヘルパーは、全てのバージョンのSquidにおいてntlmおよびベーシック認証スキームをサポートします。 このSambaのヘルパーの利用方法の詳細については、Sambaドキュメンテーションを見てください。
グループ検索については、Squidからwbinfo_groupヘルパーが使用することができます(これはSambaのwbinfoプログラムのラッパーで、Sambaのすべてのバージョンで機能します)。
Sambaを生成(configure)する方法については、Sambaのドキュメントの中の how
to configure Samba and joining a domain を参照してください。Sambaチームは、NT領域を連結する方法、およびアクティブ・ディレクトリーツリーを連結する方法の両方についての広範囲なドキュメンテーションを持っています。
Sambaを生成するにあたって、configureのオプションとして以下を指定してください。
その他の指定についてはSambaのインストールガイドに従ってください。 もしドメインとUNIX OSのアカウントを統合したいのなら、Squidのインストールにおいてnsswitch か pamモジュールを必要しますので忘れないでください。
Sambaを生成するにあたって、configureのオプションとして以下を指定してください。
Samba 2.2.5を生成する場合、smbpasswd.diff
パッチを適用するようにしてください。 SMBD
and Machine Trust Accountsをみれば、パッチを当てることに価値を見いだせることでしょう。
winbinddの
注意: プレーンテキストの場合でもチャレンジ/レスポンス(NTLM認証)の場合でも "succeeded." が戻る筈です。もしチャレンジ/レスポンスで戻らなかったなら、"--with-winbind-auth-challenge"を指定してコンパイルしていないか、NTLN認証が無効になっています。
Sambaチームは、マシン認証アカウント(machine trust account)のパスワードを変更する為の機能を取り入れた新しい"net"コマンドを用意しました。 これは、cronジョブによって変更するのが一般的です。
Sambaのsmbdデーモンは、マシン認証アカウントをまったく管理できません。
上手に振る舞うドメインメンバは、定期的にパスワードを変更します。 デフォルトではWindowsとSambaサーバでは7日ごとにパスワードを変更します。
Sambaのコンポーネントのsmbdがマシン認証パスワードに責任を持ちます。 smbdはパスワードの変更を引き起こします。 もしマシンがファイルとプリンタサーバであるのならば常にsmbdを実行するようにしておくべきでしょう。
しかしもし、Squidを動かす為のwinbindヘルパーを使う為だけであるなら、smbdは実行されている必要はありません。
以下は、認証パスワードを変更するための2つの方法です。
UglySolution.pl
はsmbdをロードしてから使うperlのスクリプトです。 これはsmbclientを利用しSambaに接続してsmbdのマシン認証パスワードの変更を行います。
smbpasswd.diffは、好きなときにマシン認証パスワードを変えるSamba2.2.5へのsmbpasswdユーティリティへのパッチです。それは、コマンドライン・インターフェースをSambaへ機能させるためのパッチです。
注:このパッチは、2.2.6pre2以降のSambaに含まれます。
パッチを適用したなら、 smbpasswd で次のようにする事でパスワードを変更できます。:
ntlm_authは、適切に機能するために特権のあるwinbindパイプへのアクセスを要求します。 実行できるようにする為にwinbind_privilegedディレクトリをSquidの実行グループと同じに設定してください。(squid.confの中でcache_effective_groupをセットしてください)。
Samba-3.xが認証ヘルパーを持っているので、Squid側でヘルパーを構築する必要はありません。 (例え構築しても動作しないでしょう) Samba-3.xのヘルパーを使うのであれば、Squid の構成において、ntlmスキームのサポートを有効にする必要があります。さらに、グループ検査のためにwbinfo_groupヘルパーを使用したいと思うかもしれません。
Squidの構築の際に以下の指定が必要です。
認証を構成する前に、この機能のない状態でのSquidの動作を確認して、確認できてから構成するようにすると良いでしょう。
コマンドラインから winbind ntlm ヘルパーを試す事はできませんが、winbindベーシック認証のヘルパーを試す事はできます。cache_effective_user を確認して実行してみてください。
妥当なユーザ名/パスワードを与えると、「OK」が返ってきます。 +は、smb.conf で指定したドメイン・セパレーター・セットです。
コマンドラインから winbind ntlm ヘルパーを試す事はできませんが、winbindベーシック認証のヘルパーを試す事はできます。cache_effective_user を確認して実行してみてください。
妥当なユーザ名/パスワードを与えると、「OK」が返ってきます。
- ・認証をセットしてください(Samba-3.x)
- 以下の項目を設定して、winbindベーシック認証とntlm認証を有効にしてください。
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp注意: もしあなたのSambaがバイナリパッケージからインストールされたなら、ntlm_auth は/usr/local/bin/ntlm_auth ではなく /usr/bin/ntlm_auth にある事でしょう。 その場合、上記の設定の該当箇所を書き直してください。
auth_param ntlm children 30
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
- ・認証をセットしてください(Samba-2.2.x)
- 以下の項目を設定して、winbindベーシック認証とntlm認証を有効にしてください。
auth_param ntlm program /usr/local/squid/libexec/wb_ntlmauth注意: もしあなたのSambaがバイナリパッケージからインストールされたなら、ntlm_auth は/usr/local/bin/ntlm_auth ではなく /usr/bin/ntlm_auth にある事でしょう。 その場合、上記の設定の該当箇所を書き直してください。
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param basic program /usr/local/squid/libexec/wb_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
- ・ACLのエントリに認証を使うように追加します
acl AuthorizedUsers proxy_auth REQUIRED
..
http_access allow all AuthorizedUsers
- ・IEでテストした場合:
- IEによってSquidにアクセスした場合、ログインの為のポップアップが現れることなくログインされる事でしょう。 きちんと認証が行われたどうかはaccess.logを確認してください。 domain\username は実在する必要があります。
- ・Netscape, mozilla, opera..等:
- IE以外のブラウザでは、ユーザのパスワードを入力させるダイアログがポップアップしてきます。
ユーザ名はには "domain+username" の形式("+"はsmb.conf で指定したドメインセパレータです)を入力します。
ユーザー名がaccess.logに記録されなかったり、ポップアップが出てこない場合には、squid.conf の acl/http_access部分に誤りがあります。
リバースプロキシや、アクセラレータのように他のIPアドレス宛のパケットを取り込んで処理するする場合、Squidの認証機構は機能しません。 本来、認証はソースサーバ(オリジナルWebサーバ)側で行うべきと考えられます。
しかし、どうしてもリバースプロキシやアクセラレータ側で認証を行わせたい場合には、Squidをコンパイルする際に、src/Makefile中で、「
DEFS = 」の行で「 -DAUTH_ON_ACCELERATION 」をコンパイルオプションに与えることで可能になります。 この設定について詳しくはこちらをご覧ください。
参考: