SqueezeにもsquidGuardを導入

■前回はLennyにsquidGuardを導入した。

 Debian Lenny にsquidGuardを導入
 http://d.hatena.ne.jp/labunix/20120311

■Squeeze版squidGuardの導入(squidは事前に導入、設定済み)

$ sudo apt-get install -y squidguard

■ブラックリストの準備

$ wget http://squidguard.mesd.k12.or.us/blacklists.tgz
$ tar zxvf blacklists.tgz
$ sudo mv blacklists/* /var/lib/squidguard/db/
$ su
# cd /var/lib/squidguard/db/
# mkdir personal
# echo 'b.st-hatena.com' > personal/domains
# echo 'b.st-hatena.com/js/bookmark_button.js' > personal/urls

# grep . personal/*
personal/domains:b.st-hatena.com
personal/urls:b.st-hatena.com/js/bookmark_button.js

■ブラックリストのDB化

# chown proxy:proxy -R /var/lib/squidguard/db/*
# find /var/lib/squidguard/db -type f | xargs chmod 644
# find /var/lib/squidguard/db -type d | xargs chmod 755
# sudo -u proxy /usr/bin/squidGuard -d -C all
2012-03-12 21:58:57 [2504] New setting: dbhome: /var/lib/squidguard/db
2012-03-12 21:58:57 [2504] New setting: logdir: /var/log/squid
2012-03-12 21:58:57 [2504] destblock good missing active content, set inactive
2012-03-12 21:58:57 [2504] destblock local missing active content, set inactive
2012-03-12 21:58:57 [2504] squidGuard 1.4 started (1331557137.380)
2012-03-12 21:58:57 [2504] db update done
2012-03-12 21:58:57 [2504] squidGuard stopped (1331557137.380)

■squidGuardのACL設定

# cp -pi /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf.org
# sudo -u proxy vim /etc/squid/squidGuard.conf

#  echo * | for DIR in `xargs`;do \
     echo -e "dest ${DIR} {\n\tdomainlist\t${DIR}/domains\n\turllist\t\t${DIR}/urls\n}\n"; \
   done | wc -l
75

# echo -ne "\tpass ";echo * | for DIR in `xargs`;do echo -ne '!'"${DIR} ";done;echo "all"
        pass !ads !aggressive !audio-video !drugs !gambling !hacking !mail !personal !porn 
!proxy !redirector !spyware !suspect !violence !warez all

# diff /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf.org | sed s/"^< "//g
52,127d51
dest ads {
        domainlist      ads/domains
        urllist         ads/urls
}

dest aggressive {
        domainlist      aggressive/domains
        urllist         aggressive/urls
}

dest audio-video {
        domainlist      audio-video/domains
        urllist         audio-video/urls
}

dest drugs {
        domainlist      drugs/domains
        urllist         drugs/urls
}

dest gambling {
        domainlist      gambling/domains
        urllist         gambling/urls
}

dest hacking {
        domainlist      hacking/domains
        urllist         hacking/urls
}

dest mail {
        domainlist      mail/domains
        urllist         mail/urls
}

dest personal {
        domainlist      personal/domains
        urllist         personal/urls
}

dest porn {
        domainlist      porn/domains
        urllist         porn/urls
}

dest proxy {
        domainlist      proxy/domains
        urllist         proxy/urls
}

dest redirector {
        domainlist      redirector/domains
        urllist         redirector/urls
}

dest spyware {
        domainlist      spyware/domains
        urllist         spyware/urls
}

dest suspect {
        domainlist      suspect/domains
        urllist         suspect/urls
}

dest violence {
        domainlist      violence/domains
        urllist         violence/urls
}

dest warez {
        domainlist      warez/domains
        urllist         warez/urls
}


155,156c79
                pass !ads !aggressive !audio-video !drugs !gambling !hacking !mail !personal 
!porn !proxy !redirector !spyware !suspect !violence !warez all
#               pass     local none
---
>               pass     local none
159d81
                redirect http://www.labunix.net/block.html

■「squid.conf」の事前チェック

# sudo -u proxy /usr/sbin/squid -k check
# /usr/sbin/squid -v | head -1
Squid Cache: Version 2.7.STABLE9

■「# ACCESS CONTROLS」の手前に挿入します。

# cp -pi /etc/squid/squid.conf /etc/squid/squid.conf.20120312
# sudo -u proxy vim /etc/squid/squid.conf
# diff /etc/squid/squid.conf /etc/squid/squid.conf.20120312  | sed s/"^< "//
330,332d329
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 8
redirector_bypass on

■apache等webサーバが稼動しているならローカルサーバに配置。
 そうでなければ、外部Webサーバのブロックページを参照する。

■ブロック時のページを作成します。
 ※Webサーバが稼動している必要がある

$ su root -c 'echo \
  "<html><head><title>Black</title></head><body><h1>Black</h1></body></html>" \
   > /var/www/block.html'

■squidとsquidGuardの連携
 ※初回は「tail」に渡さずログをチェック。
  存在しないファイルは、「touch」して空のファイルを作成しておく。

# sudo -u proxy /usr/bin/squidGuard -d -C all 2>&1 | tail -4
2012-03-12 22:19:20 [2721] destblock local missing active content, set inactive
2012-03-12 22:19:20 [2721] squidGuard 1.4 started (1331558352.272)
2012-03-12 22:19:20 [2721] db update done
2012-03-12 22:19:20 [2721] squidGuard stopped (1331558360.659)

■squidの再設定

# sudo -u proxy /usr/sbin/squid -k reconfigure
# sudo -u proxy /usr/sbin/squid -k check

■テスト

$ echo "http://www.rotten.com / - - GET" | squidGuard -d 2>&1 | tail -5
2012-03-12 22:22:10 [2744] squidGuard ready for requests (1331558530.643)
2012-03-12 22:22:10 [2744] source not found
2012-03-12 22:22:10 [2744] no ACL matching source, using default
http://www.labunix.net/block.html /- - -
2012-03-12 22:22:10 [2744] squidGuard stopped (1331558530.644)

$ w3m -dump http://www.rotten.com
Black

$ w3m -dump http://b.st-hatena.com/js/bookmark_button.js
Black

■余談

どのくらいのブラックリストが用意されているのか。

# grep . /var/lib/squidguard/db/*/urls | wc -l
53420

# grep . /var/lib/squidguard/db/*/domains | wc -l
1099058

ただし、各ログには、どのルールに引っかかってブロックされているのか分からない。
アクセスログでさえ、リダイレクトによって、「200」を返す。

上記をキーワードに検索するにしても時間がかかる。
以下にはPerl/CGIが用意されているので、時間があれば試してみる。

$ ls /usr/share/doc/squidguard/examples/
RobotUserAgent.pm            squidGuard-simple.cgi.gz  squidGuardRobot.in.gz
sample.conf                  squidGuard.cgi.gz
squidGuard-simple-de.cgi.gz  squidGuardRobot.gz

■「DebianEdu」の公式ページのスクリプトによるアップデート手順は同じ。

「TARGET」行を以下に変更する。
TARGET=/var/lib/squidguard/db

 参考:DebianEduHowToSquidGuard
 http://wiki.debian.org/DebianEdu/HowTo/SquidGuard