最終更新日: 2014年1月13日
Squid Home / FAQトップ

NTLM(Windowsドメインユーザ)認証

通常では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 を使ってください)

1.想定する環境

次の図のように、既存の Windows ドメイン(ドメイン名:NTDOMAIN)が存在する環境に Proxy として Squid を構築し、ユーザ認証として NTLM を使った認証によって Proxy をクライアントから使えるようにします。

2.ProxyサーバをNTDOMAINのメンバサーバにする。

最初に Proxy サーバを Samba + winbind によって NTDOMAIN のメンバサーバにする必要があります。 

2.1 Samba-3.xの入手・インストール

日本Sambaユーザ会 からのページを辿れば最新の Samba が入手できます。 この際、ソースファイルからコンパイルする事もできますが、できるだけ楽をしたいなら、バイナリパッケージを入手すると良いでしょう。 幸い私の環境は RedHat9 だったのでバイナリを入手できることができました。  もしソースからコンパイルする場合には、 configure の際に "--with-winbind" を付ける事を忘れないでください。(Samba-2.2.xの場合にはもっと指定が必要になります)
尚、 Samba-3.x をソースファイルからコンパイルする場合、Samba-3.xが利用している iconv() ライブラリの日本語の取り扱いに問題があり、この為に文字化けが発生します。文字化けが気になる場合には 日本Sambaユーザ会から Samba 3.0で日本語を利用できるようにするパッケージ集」 が利用できるのでこちらを利用すると良いでしょう。
インストールに関する情報は 日本Sambaユーザ会 の資料を参照してください。

2.2 smb.confの設定

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

設定する内容の意味はつぎのようになります。

2.3 メンバサーバの登録

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/ ディレクトリにあるかも知れません。

3.winbindの設定

3.1 NSSモジュールのコピー

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 は存在していると思います。 

3.2 NSSスイッチの変更

/etc/nsswitch.confを以下の用に変更します。

::
::
passwd: files winbind
shadow: files
group: files winbind

以上でwinbindが使えるようになります。 早速wibindを起動してみましょう。

3.3 winbinddの起動

# /usr/sbin/nmbd [Enter]
# /usr/sbin/winbindd [Enter]

※ ソースからコンパイルした場合は /usr/local/samba/sbin/にコマンドはあります。

3.4 winbindの動作確認

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" と表示されれば、正常に認証ができた事を意味します。

4. Squid を winbind を使った認証を行うように構成する。

4.1 ソースの入手・コンパイル

サイトから 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]

4.2 squid.conf の設定

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を参照してください。

4.3 winbind_privileged ディレクトリのグループ名変更

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 が利用できるか確認してみましょう。

4.4 動作確認

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 / FAQトップ

参考: