« アニメ メジャー第6シーズン | Main | CarotDAV »

2010.09.27

Squidのプロキシ認証をLDAP+Digestで

Squidの認証をLDAP(OpenLDAP)+Digest認証で行うようにする際のメモ。LDAP+Digest認証を行う場合、digest_ldap_auth が必要となりますが、CentOS5シリーズのパッケージで提供されているSquid(2.6)には含まれていないようです(LDAP+Digest認証の資料ってかなり少なくて苦労しました・・・)。

【Squidのインストール】
ということで、Squidをソースコードからビルドして環境を構築してみました。現時点での最新版をダウンロードしてコンパイル。

# wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.8.tar.gz
# tar zxvf squid-3.1.8.tar.gz
# cd squid-3.1.8
# ./configure --with-default-user=squid
# make
# make install
# cd /usr/local/squid/var
# rm -rf logs
# rm -rf run
# ln -s /var/log/squid /usr/local/squid/var/logs
# ln -s /var/run /usr/local/squid/var/run
# chown -R squid:squid /usr/local/squid/

--with-default-userを指定しない場合、Squidはnobodyで稼働するとのこと。今回は、明示的にユーザーを指定してビルドします。

最初、以下のようなエラーが発生してしばらく悩んでしまいました・・・。

WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
    messages will be sent to 'stderr'.


/etc/init.d/squid の編集
パッケージでインストールされている /etc/init.d/squid を流用することとします。

パスを変更します(・・・でも、意味がなかったかもしれません)。

PATH=/usr/local/squid/sbin:/usr/bin:/sbin:/bin:/usr/sbin

squidのパスを変更します。
[ -f /usr/local/squid/sbin/squid ] && SQUID=squid

squidの実行パスを明示的に指定します。
prog="$SQUID"
SQUID=/usr/local/squid/sbin/squid

confファイルのパスを変更します(1)。
CACHE_SWAP=`sed -e 's/#.*//g' /usr/local/squid/etc/squid.conf | \

confファイルのパスを変更します(2)。
if [ ! -f /usr/local/squid/etc/squid.conf ]; then
    echo "Configuration file /usr/local/squid/etc/squid.conf missing" 1>&2

変数の内容を書き換えたため、明示的に指定するように。
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/squid

/usr/local/squid/etc/squid.confの編集
Digest認証を行う部分は、以下のような設定になります。参考にしたページはこちら

auth_param digest program /usr/local/squid/libexec/digest_ldap_auth -b "dc=example,dc=com" -u "uid" -A "l" -D "cn=root,dc=example,dc=com" -w "password" -e -v 3 -h localhost
auth_param digest children 5
auth_param digest realm Squid proxy-caching web server

(以下は動作から推測したパラメータの内容ですので、間違いがあるかもしれません)
-b : LDAPにおいて検索対象となるBaseDNを指定します。
-u : 認証時に入力されるユーザーIDに対応するLDAPの属性名を指定します。
-A : 認証時に入力されたパスワードが格納するLDAPの属性名を指定します。
-D : rootDNを指定します。
-w : rootDNのパスワードを指定します。
-h : LDAPサーバーのホスト名を指定します。

認証用データの作成
ダイジェスト認証の場合、Realm情報との組み合わせが必要なので、場合によっては他のエリアの認証情報と共有することはできない場合があります(というか、むしろ、できないことの方が多い?)。
以下のような感じで認証用データを作成(LDAPへ書込)することができます。

REALM="Squid proxy-caching web server" HASH=`echo -n "username:$REALM:password" | md5sum | cut -f1 -d' '` ldapmodify -x -D "cn=root,dc=example,dc=com" -w "password" << EOF
dn: uid=username,ou=users,dc=example,dc=com
l: $REALM:$HASH
EOF

太字の部分はsquid.confの設定内容と合わせておく必要があります。
別途認証用データを作成する必要があるということは、逆に、「Proxyサーバーを使用することができる人を限定する」ということにもつながるので、まぁ、メリットと考えることにしましょう(笑)。LDAPへのデータの登録がちょっと面倒ではありますが(^^;

認証用データのテスト

echo '"username":"Squid proxy-caching web server"' | /usr/local/squid/libexec/digest_ldap_auth -b "dc=example,dc=com" -u "uid" -A "l" -D "cn=root,dc=example,dc=com" -w "password" -e -v 3 -h localhost -d

のような感じで、digest_ldap_auth のパラメータのテストを行うことができます。問題なければ、Connected OKという結果(とその他の情報)が得られます。

|

« アニメ メジャー第6シーズン | Main | CarotDAV »

Linux」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Squidのプロキシ認証をLDAP+Digestで:

« アニメ メジャー第6シーズン | Main | CarotDAV »