最終更新日:2005年9月10日
【Squid Homeへ】
通常では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 を次のように設定します。
# Global parameters
[global]
dos charset = CP932
unix charset = EUCJP-MS
display charset = EUCJP-MS
workgroup = NTDOMAIN
netbios name = PROXY
server string = Samba Server
security = DOMAIN
password server = 192.168.100.10
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
# wins server = 192.168.100.10
idmap uid = 40000-50000
idmap gid = 40000-50000
winbind use default domain = Yes
・workgroup = Windowsドメインを指定します。 ・netbios name = proxyサーバの netbios名 を指定します。 ・security = Windowsのメンバになるので"DOMAIN"を指定します。 ・password server = PDCサーバのIPアドレスを指定します。(BDCでなくPDCを必ず指定してください。) 同一セグメント上にWIndowsサーバがある場合には "*" を指定することもできます。 ・idmap uid = winbind用のUIDの範囲を指定します。/etc/passwdで使っていないUIDの範囲を指定してください。 ・idmap gid = winbind用のGIDの範囲を指定します。/etc/groupで使っていないGIDの範囲を指定してください。 ・winbind use default domain = "yes" を指定することで、winbind経由の認証を使うクライアントが、NTドメイン名を付けずに認証依頼をした場合に、winbindが自動的にドメイン名を付加します。
smb.conf が設定できたなら、proxyサーバから「net」コマンドを使ってWindowsドメインにproxyサーバを登録します。
登録は、
| # /usr/bin/net rpc join -S PDCのコンピュータ名 -w ドメイン名 -U Administrator [Enter] Password: ******** Joined domain ドメイン名. |
と入力します。 "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)といったモジュールが作成されます。
これを指定のディレクトリにコピーします。
| # cp source/nsswitch/libnss_winbind.so /lib/ [Enter] # ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2 [Enter] # /sbin/ldconfig -v [Enter] # |
※ パッケージからインストールした場合には /lib/libnss_winbind.so は存在していると思います。
/etc/nsswitch.confを以下の用に変更します。
| # :: # :: passwd: files winbind shadow: files group: files winbind # |
以上でwinbindが使えるようになります。 早速wibindを起動してみましょう。
| # /usr/sbin/nmbd [Enter] # /usr/sbin/winbindd [Enter] # |
※ ソースからコンパイルした場合は /usr/local/samba/sbin/にコマンドはあります。
winbindが正常に動作しているかどうはは以下のコマンドで確認できます。
| # wbinfo -t checking the trust secret via RPC calls succeeded # # wbinfo -a NTドメイン名\\ユーザID%パスワード [Enter] (ex. wbinfo -a NTDOMAIN\\hogehoge%password) plaintext password authentication succeeded challenge/response password authentication succeeded # |
ここで上記のように "succeeded" と表示されれば、正常に認証ができた事を意味します。
サイトから squid の最新版を取得します。 最新のソースファイルは2004年6月16日現在、squid-2.5.STABLE5 のようです。 入手したソースは次の手順でコンパイルします。
# tar zxvf squid-2.5.STABLE5.tar.gz [Enter] # cd squid-2.5.STABLE5 [Enter] # ./configure --enable-auth="ntlm,basic" [Enter] ;; ;; # make [Enter] ;; ;; # make install [Enter] ;; ;; # |
squid.conf の以下の部分を編集します。 なお、ここでの変更箇所はwinbindをつかう為の部分についてのみの設定部分です。 その他については squid.conf を見てください。
| # auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 5 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 2 minutes auth_param ntlm use_ntlm_negotiate off # auth_param basic program /usr/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 # # ;; # ;; cache_effective_user squid cache_effective_group squid |
注意: 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 ファイルを使って機能を実現しています。 しかし、このファイルはセキュリティのため、デフォルトで所有者とグループ以外にはアクセスできないようになっているので、これを変更します。
| # chgrp squid /var/cache/samba/winbindd_privileged [Enter] # |
※ 上記のコマンドの中の"squid"の部分は、squid.conf 中の 「cache_effective_group」で指定したグループ名を指定してください。
以上でsquidの設定は完了です。 次の方法でsquid から winbind が利用できるか確認してみましょう。
winbind には squidから NT認証を可能にするためのヘルパーソフト(ntlm_auth)が外部プログラムとして組み込まれています。 これをコマンドとして実行すれば、 Squid からNT認証が成功するか確認できます。
| # /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic [Enter] NTDOMAIN\ユーザID パスワード [Enter] OK |
NTDOMAINにはWindowsNT/2000でのドメイン名を、ユーザIDはNTドメインに登録されているユーザIDを、パスワードにはそのパスワードを指定してください。
その結果がOKであればWIndowsドメインからの認証が成功した事を意味します。
注意: ドメイン名とユーザIDの間の '\' マークは smb.conf の中で指定したセパレータ文字となります。 (デフォルトは
'\' )
動作が確認できたら squid を起動して、クライアントのブラウザからこのproxyを利用してWebサーバにアクセスしてみてください。 IEでは「ユーザID」「パスワード」「ドメイン名」が入力を求められ、それ以外のブラウザでは「ユーザID」「パスワード」の入力を求めてくる筈です。
【Squid Homeへ】
Copyright© 1998-2003 ROBATA.ORG