通常ではProxyにユーザ認証を行うような運用は少ないと思いますが、セキュリティを心配する企業や学校などでは、内部のProxyを利用する際にユーザ側にIDによる認証を求める運用を行うケースもあります。 このとき、Webなどでお馴染みのユーザ認証(ベーシック認証)では、ユーザの管理をSquid上のサーバで行う必要があり大規模ユーザなどでにはユーザ情報の重複化やセキュリティーに関する問題が出てきます。
Squid には、Samba-3.0 (Windowsサーバ互換機能)に実装されたwinbind という機能を使うことで、既存のWindowsサーバのドメインとして登録されているユーザアカウントを使ったユーザ認証機能をサポートしています。
これによって大規模なユーザ環境においてもWindowsでのユーザ管理とSquidのユーザ管理を一元化した運用が可能となりました。
また、ユーザ情報自体はSquidと別のサーバに持たせた運用形態になるため、セキュリティ的にも安全性が高める事が可能になります。
winbind は Samba-2.2.x からサポートされていますが、Samba-3.x の方が構築が簡単なので、以下の説明は Samba-3.x を使った例を示します。
(ファイルサーバとして使うなら Samba-2.2.x の方が良いかも知れませんが、認証用のサーバとして使う場合、
Samba のファイルサーバ機能は使わなくても良いので率先して Samba-3.x を使ってください)
次の図のように、既存の Windows ドメイン(ドメイン名:NTDOMAIN)が存在する環境に Proxy として Squid を構築し、ユーザ認証として NTLM を使った認証によって Proxy をクライアントから使えるようにします。
最初に Proxy サーバを Samba + winbind によって NTDOMAIN のメンバサーバにする必要があります。
日本Sambaユーザ会 からのページを辿れば最新の Samba が入手できます。 この際、ソースファイルからコンパイルする事もできますが、できるだけ楽をしたいなら、バイナリパッケージを入手すると良いでしょう。 幸い私の環境は
RedHat9 だったのでバイナリを入手できることができました。 もしソースからコンパイルする場合には、
configure の際に "--with-winbind" を付ける事を忘れないでください。(Samba-2.2.xの場合にはもっと指定が必要になります)
尚、 Samba-3.x をソースファイルからコンパイルする場合、Samba-3.xが利用している iconv() ライブラリの日本語の取り扱いに問題があり、この為に文字化けが発生します。文字化けが気になる場合には
日本Sambaユーザ会から Samba 3.0で日本語を利用できるようにするパッケージ集」 が利用できるのでこちらを利用すると良いでしょう。
インストールに関する情報は 日本Sambaユーザ会 の資料を参照してください。
proxy を NTドメインのメンバサーバにするために smb.conf を次のように設定します。
smb.conf が設定できたなら、proxyサーバから「net」コマンドを使ってWindowsドメインにproxyサーバを登録します。
登録は、つぎのコマンドを実行します。
"Joined domain "が表示されればNTドメインへproxyサーバがNTドメインへ登録されました。 もしエラーになるようなら、smb.conf の"workgroup"や "password server"の設定を見直してください。
また、もしかしたしたら既にWindowsドメイン上に"netbios name" での名前が登録済みなのかも知れません。 Windows上でその名前を削除してから再度、netコマンドを実行してください。
注意: ソースファイルから Samba をコンパイルした場合、net コマンドは /usr/local/samba/bin/
ディレクトリにあるかも知れません。
Sambaをコンパイルした際に同時にできる winbind には Linux の NSS(Name Service Switch) や PAM(Pluggable Authentication Modules)といったモジュールが作成されます。 これを指定のディレクトリにコピーします。
※ パッケージからインストールした場合には /lib/libnss_winbind.so は存在していると思います。
/etc/nsswitch.confを以下の用に変更します。
以上でwinbindが使えるようになります。 早速wibindを起動してみましょう。
※ ソースからコンパイルした場合は /usr/local/samba/sbin/にコマンドはあります。
winbindが正常に動作しているかどうはは以下のコマンドで確認できます。
ここで上記のように "succeeded" と表示されれば、正常に認証ができた事を意味します。
サイトから squid の最新版を取得します。 最新のソースファイルは2004年6月16日現在、squid-2.5.STABLE5 のようです。 入手したソースは次の手順でコンパイルします。
squid.conf の以下の部分を編集します。 なお、ここでの変更箇所はwinbindをつかう為の部分についてのみの設定部分です。 その他については squid.conf を見てください。
注意: cache_effective_user と cache_effective_group に登録する名前とグループは実在している必要があります。 またこれらユーザ・グループを指定した場合、squidのログやキャッシュやプロセス番号を記録したファイルやディレクトリが cache_effective_user
によって書き込みができるパーミッションが付いていなくてはなりません。
また、/usr/bin/ntlm_auth の指定部分は、ソースからコンパイルした場合には、
/usr/local/bin/ntlm_auth になる筈です。
--helper-protocolの指定に関してはhttp://www.samba.gr.jp/project/translation/current/htmldocs/ntlm_auth.1.htmlを参照してください。
ntlm_auth は、/var/cache/samba/winbindd_privileged ディレクトリの中にある
pipe ファイルを使って機能を実現しています。 しかし、このファイルはセキュリティのため、デフォルトで所有者とグループ以外にはアクセスできないようになっているので、これを変更します。
※ 上記のコマンドの中の"squid"の部分は、squid.conf 中の 「cache_effective_group」で指定したグループ名を指定してください。
以上でsquidの設定は完了です。 次の方法でsquid から winbind が利用できるか確認してみましょう。
winbind には squidから NT認証を可能にするためのヘルパーソフト(ntlm_auth)が外部プログラムとして組み込まれています。 これをコマンドとして実行すれば、 Squid からNT認証が成功するか確認できます。
NTDOMAINにはWindowsNT/2000でのドメイン名を、ユーザIDはNTドメインに登録されているユーザIDを、パスワードにはそのパスワードを指定してください。
その結果がOKであればWIndowsドメインからの認証が成功した事を意味します。
注意: ドメイン名とユーザIDの間の '\' マークは smb.conf の中で指定したセパレータ文字となります。 (デフォルトは
'\' )
動作が確認できたら squid を起動して、クライアントのブラウザからこのproxyを利用してWebサーバにアクセスしてみてください。 IEでは「ユーザID」「パスワード」「ドメイン名」が入力を求められ、それ以外のブラウザでは「ユーザID」「パスワード」の入力を求めてくる筈です。
参考: