Squidで独自の認証スクリプトを作る

はじめに

Squidで認証したい!って思ったとき、皆さんどうしてますか?
ドキュメント少ないですね。
サンプルのスクリプトはいまいちですね。
で一発簡単スクリプト作成を紹介します。

認証のしくみ

basic program を使用して認証するとき、Squidは以下のような動きをします。
  1. Squidが起動すると、認証スクリプトを children の数だけ立ち上げる
  2. 認証スクリプトは標準入力からの入力を待っている
  3. 認証リクエストが来るとSquidはあらかじめ起動していたスクリプトに対して "user password" を放り込む
  4. 認証スクリプトが判断して応答する
    1. "OK" を標準出力に返す ---> 認証成功
    2. それ以外の文字列 ---> 認証失敗 認証失敗の時は "ERR" を返すのが一般的

Squidの設定


認証スクリプトの定義

認証スクリプトを作る前に、Squidに認証スクリプトの定義をします。

auth_param basic program [自分のスクリプト]
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

ACLの定義

http_access deny all があるところの上の行に以下のように追加します。ここで localnetはクライアントのあるネットワークですので各自のネットワークに合わせてください。

acl foo proxy_auth REQUIRED
acl localnet src 192.168.1.0/255.255.255.0
http_access allow localnet foo
http_access deny all (もともと有る)

スクリプトを作ってみよう

スクリプトは好きな言語で作ってください。私はシェルしか書けないのでシェルで作ります。
CentOS 5.3 の場合、スクリプトは /usr/lib64/squid に置きましょう
パーミッションは 755
オーナは root.root

#!/bin/sh
read ID PASS
[ $ID = "myid" ] && [ $PASS = "password" ] && echo "OK" && exit 0
echo ERR

見てのとおり IDとパスワードがあっていればOKってことで。
後は自由にスクリプトを作ってください。
radiusで認証するもよし、SQL使うもよし、ADをつつくもよし。
とにかく認証成功と思ったら "OK" を 標準出力へ吐き出してください。失敗なら "ERR"です。
スクリプトの内容によってはこんなこともできちゃいます。
  • ADまたはRadiusで認証できればOK
  • 入力されたパスワードの頭8文字だけで認証する
  • 社内に存在する10のADドメインのいずれかで認証できればよい
  • LDAP上でWebアクセスが許可されたユーザだけがOK

  • 最終更新:2009-07-28 12:05:52

このWIKIを編集するにはパスワード入力が必要です

認証パスワード