SquidGuardのクエリを受け取るbash/CGI

■面白かったので、ちょっと作ってみた。
 作っておいてアレですが、Squeezeにはサンプルが付属しているので、そちらを使うことをお勧めします。

 私の場合、どのURLをブロックしたのか見れないのは困る。
 もっとシンプルに必要最小限な表示が欲しいと思ったので、
 出来るだけURLが上に来るよう順序も考慮しました。。。

$ ls /usr/share/doc/squidguard/examples/*cgi.gz
/usr/share/doc/squidguard/examples/squidGuard-simple-de.cgi.gz
/usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz
/usr/share/doc/squidguard/examples/squidGuard.cgi.gz

■クエリの順序をURLを先、クライアントIPを後にする。
 固定することになって後で面倒になるので、bash/CGI側ではやりません。

$ sudo grep "redirect http" /etc/squid/squidGuard.conf | grep -v "#" | sed s/"^\t*"//g
redirect http://localhost/cgi-bin/squidGuard.cgi?url=%u&clientaddr=%a

■bash/CGIを設置。
 cgi-bin配下に。Squeezeのデフォルトは「/usr/lib/cgi-bin」
 URIエンコードして、デコードしている無駄な箇所がありますが、一応。。。
 セキュリティ上、余り色んな加工をしようと思わない方が良い。
 ※bash/CGIはローカル環境内で収まっているべき。

$ w3m -dump https://raw.github.com/labunix/snort_log/master/squidGuard.cgi
#!/bin/bash

cat << EOS1
Content-Type: text/html

<html><head><title>302 Access Denied</title></head>
<body>
<br/>
<table border="0">
<tr>
  <td>Status</td>
  <td>302 Access Denied</td>
</tr>
<tr>
  <td>From</td>
  <td>
EOS1

echo "${QUERY_STRING}" | \
  # URI Encode
  nkf -wMQ | tr '=' '%' | \
  # URI Decode
  tr '%' '=' | nkf -WwmQ | \
  sed s/"\="/"\:"/g | sed s/"\&"/"<br\/>"/g
cat << EOS2
  </td>
</tr>
<tr>
  <td>Browser</td>
  <td>${HTTP_USER_AGENT}</td>
</tr>
</table>
<br/>
</body>
</html>
EOS2

■以下のように表示されます。

$ sudo grep doubleclick.com /var/lib/squidguard/db/ads/domains
doubleclick.com
$ sudo grep pass /etc/squid/squidGuard.conf | grep -v "#" | grep "\!ads" > /dev/null 2>&1 && echo "ok"
ok

$ w3m -dump http://doubleclick.com/

Status  302 Access Denied
From    url:http://doubleclick.com/
        clientaddr:192.168.1.88
Browser w3m/0.5.2+cvs-1.1027

■Windows/Chromeからの場合

> chrome http://doubleclick.com/

Status	302 Access Denied
To/From	 url:http://doubleclick.com/
clientaddr:192.168.188.155
Browser	Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1

■Windows/Firefoxからの場合

> firefox http://doubleclick.com/

Status 	302 Access Denied
From 	url:http://doubleclick.com/
clientaddr:192.168.1.55
Browser 	Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1