読者です 読者をやめる 読者になる 読者になる

log

日記です

SquidGuardでリダイレクト先にURLなどの値渡したいときー!

SquidGuardを使って、コンテンツフィルターを行いそれに引っかかった場合、「規制対象サイトです」といったようなエラーページにリダイレクトさせる。
Redirect先のエラーページにに、ブロックしたサイトのURL情報などを渡したいことがしばしばあるはずだ。
そんなときは、Redirect先のURLにGETパラメータで値を渡すことができる。

SquidGuardのDocumentを読もう

珍しく英語のドキュメントをソースにしたのだよアンダーソン君

SquidGuard
http://www.squidguard.org/Doc/redirect.html


Advanced

Instead of displaying a static "You have been blocked" message, you can program a script to do so and tell the user some more information about the blocking. SquidGuard passes the following variables that can be interpreted by the script:


%a  Variable that holds the IP address of the client.
%i  Variable that holds the user ID (RFC931, LDAP or mySQL) or "unknown" if not available.
%n  Variable that holds the domainname of the client or "unknown" if not available.
%p  Variable that holds the REQUEST_URI, i.e. the path and the optional query string of %u, but note for convenience without the leading "/".
%s  Variable that holds the matched source group (client group) or "unknown" if no groups were matched.
%t  Variable that holds the matched destination group (target group) or "unknown" if no groups were matched.
%u  Variable that holds the requested URL.

エキサイト翻訳にぶち込んだ

SquidGuard
http://www.squidguard.org/Doc/redirect.html


進められた
表示する代わりに‥‥1つの‥‥静的「妨害された」メッセージ、そうし、かつユーザにブロッキングに関してさらにいくらかの情報を伝えるようにスクリプトをプログラムすることができる。
SquidGuardは、スクリプトによって解釈することができる次の変数を通る:


〜イカ省略〜

分けわからない訳だorz
たぶん、

「ブロックしたよ」というしょうもないメッセージの代わりに、スクリプト組んでブロックした情報を相手に教えることができるよ。SquidGuardは次の変数を通して、スクリプトに解釈させる事ができる。

みたいな感じかな…?
英語わかりませーん

つまり必要な情報は

  • %aでクライアントのIPアドレスが展開される
  • %uでアクセスしようとしたURLが展開される

がわかればおk。

動かせば早い(サンプル)

SquidGuard公式ページの下のほうにあるサンプル、もしくは下記のサンプルをsquidguard.confにはっつける

redirect http://192.168.1.100/squidGuard.cgi?clientaddr=%a&url=%u

こう展開される。

http://192.168.1.100/squidGuard.cgi?clientaddr=192.168.1.6&url=http://mixi.jp/

後はPHPなどで

echo "<h2>下記のURLはアクセス規制の対象です</h2>";
echo htmlspecialchars($_GET["url"], ENT_NOQUOTES, "utf-8");
echo "<h2>アクセスしようとした人</h2>";
echo htmlspecialchars($_GET["clientaddr"], ENT_NOQUOTES, "utf-8");

とかやれば良いんじゃなイカ?