管理者が適正にリダイレクターを設定することで、Proxyを使ってのアクセスにおいて、ポルノサイトなどを見に行く事ができないようにする事ができます。
リダイレクタープログラムには、Squidから標準入力で1行のURLが渡されます。 これをリダイレクタは標準出力1行で、空白または整形したURLとして出力して下さい。 リダイレクタープログラムにおいては、バッファードI/Oによる入出力を使えないことに注意してください。 Squidでは、リダイレクターが処理する為に、URLの後ろに追加情報を足して渡します。 これは4つのフィールドで構成されます。
SQUIRM と呼ばれるとてもシンプルで高速なリダイレクターが参考になります。 これは regex ライブラリを使ったパターンマッチングの機能を提供します。
また、以下のperlのスクリプトはあなたの作成するリダイレクターの参考になるかも知れません。
#!/usr/local/bin/perl
$|=1;
while (<>) {
s@http://fromhost.com@http://tohost.org@;
print;
}
普通、リダイレクターは与えられたURLを書き直すのが目的ですが、しかし、幾つかの状況によっては、クライアントへHTTPの「301」または「302」のリダイレクターメッセージを返す方が適切かも知れません。 これはSquidのバージョン1.1.19から可能になっています。
リダイレクタープログラムの変更は単純で、「301:」または「302:」をURLを返す際に先頭に付けるだけです。以下のサンプルは、internalへのアクセスをセキュアなサーバに向かわせるためのリダイレクトの例です。
#!/usr/local/bin/perl
$|=1;
while (<>) {
@X = split;
$url = $X[0];
if ($url =~ /^http:\/\/internal\.foo\.com/) {
$url =~ s/^http/https/;
$url =~ s/internal/secure/;
print "302:$url\n";
} else {
print "$url\n";
}
}
301,302のHTTPの応答コードの意味については、RFC 2068 を参照してください。
リダイレクタープログラムの標準入力がクローズされた場合に「FATAL: All redirectors
have exited!」のメッセージが見る事になります。 これはおおよそ、リダイレクタープログラムのバグを意味します。 これは、だいたいにおいてメモリの範囲を超えたアクセスが有った場合や、メモリの領域を使いきった場合に出ることでしょう。
問題となったURLをsquidのaccess.logから取り出して、リダイレクタープログラムを直接起動して問題のURLを渡す事で問題を発見する事ができると思います。
以下のようなリダイレクターを追加し結果を見ました。
#! /bin/sh
/usr/bin/tee /tmp/squid.log
すると、リダイレクターへのリクエストのIDENTフィールドにはユーザ名がはいっていません。
これは、identの探索には時間がかかるため、Squidでは ident の為のACLを書かない限り、ident探索を行わないようになっている為です。という指定を行ってください。
参考: