■squidguardの更新対象外のDBを設定する。
すべて更新すると重くなります。かと言って設定から外すのもまた、復旧させたいときに困る。
実質、「whitelist」と「personal」だけを更新すれば使えるようにカスタマイズします。
参考:DebianEduHowToSquidGuard
http://wiki.debian.org/DebianEdu/HowTo/SquidGuard
■私の環境ではターゲットが異なるので、以下のようにしてあります。
$ sudo grep "TARGET=" /etc/cron.daily/squid_blacklists_updates.sh
TARGET=/var/lib/squidguard/db
■ポルノ系や、Youtube等も見れなくなるような音楽/動画系の
「domains」と「urls」を空文字で上書きする行を
「squidguard」の設定ファイルを読み込んで更新する手前に追加します。
必要になれば、「list」から外すか、「for〜done」をコメントアウトします。
「mv」は不要なら以下のように削除します。
「squidGuard.conf」や「squid.conf」を変更しなくて良いので管理が楽です。
$ sudo grep -A 4 "for list in" /etc/cron.daily/squid_blacklists_updates.sh
for list in porn/domains porn/urls audio-video/domains audio-video/urls;do
echo -n "" > "$list"
done
/usr/bin/squidGuard -c /etc/squid/squidGuard.conf -C all
■手動で変更した場合は以下のコマンドを。。。
squidの負荷分散と冗長化
http://d.hatena.ne.jp/labunix/20120826
$ sudo ./myscripts/squidguard_reconfig.sh
■「squidguard_reconfig.sh」を含め、以下をgithubにもおきました。
私の環境では「squidGuard_report.sh」と「squidsummary.sh」、
それに上記の「squid_blacklists_updates.sh」を
「cron.daily」にシンボリックリンクで置いてます。
squidguard
https://github.com/labunix/squidguard
$ w3m -dump https://raw.github.com/labunix/squidguard/master/README.md
squidguard
==========
squidGuard_report.sh
squidguard_reconfig.sh
squidsummary.sh
■実行と確認。
$ sudo /etc/cron.daily/squid_blacklists_updates.sh
$ sudo wc -l /var/lib/squidguard/db/*/[du]*s | grep " 0 "
0 /var/lib/squidguard/db/audio-video/domains
0 /var/lib/squidguard/db/audio-video/urls
0 /var/lib/squidguard/db/mail/urls
0 /var/lib/squidguard/db/porn/domains
0 /var/lib/squidguard/db/porn/urls
0 /var/lib/squidguard/db/suspect/urls
■使用状況の確認
ヒット率も体感レスポンスもかなり良くなりました。
$ sudo squidclient mgr:info | grep "%"
Request Hit Ratios: 5min: 18.2%, 60min: 4.4%
Byte Hit Ratios: 5min: 26.9%, 60min: 0.1%
Request Memory Hit Ratios: 5min: 50.0%, 60min: 48.4%
Request Disk Hit Ratios: 5min: 0.0%, 60min: 4.9%
CPU Usage: 0.20%
CPU Usage, 5 minute avg: 0.03%
CPU Usage, 60 minute avg: 2.05%
Total in use: 69954 KB 84%
Total free: 13457 KB 16%
■システムコールを除いたサーバ情報を確認。
特にボトルネックになるような箇所も無いようです。
$ sudo squidclient mgr:60min 2>&1 | grep -v "0\.00000\|^syscalls\|^client"
HTTP/1.0 200 OK
Server: squid/2.7.STABLE9
Date: Wed, 05 Sep 2012 12:38:00 GMT
Content-Type: text/plain
Expires: Wed, 05 Sep 2012 12:38:00 GMT
X-Cache: MISS from vmsqueeze.localdomain
X-Cache-Lookup: MISS from vmsqueeze.localdomain:3128
Connection: close
sample_start_time = 1346845385.516036 (Wed, 05 Sep 2012 11:43:05 GMT)
sample_end_time = 1346848985.978227 (Wed, 05 Sep 2012 12:43:05 GMT)
server.all.requests = 1.424539/sec
server.all.kbytes_in = 473.462825/sec
server.all.kbytes_out = 1.637290/sec
server.http.requests = 1.250951/sec
server.http.kbytes_in = 470.554865/sec
server.http.kbytes_out = 0.981263/sec
server.other.requests = 0.173589/sec
server.other.kbytes_in = 2.908238/sec
server.other.kbytes_out = 0.655749/sec
dns.median_svc_time = 0.023364 seconds
unlink.requests = 1.086805/sec
page_faults = 0.001944/sec
select_loops = 591.988719/sec
select_fds = 607.478119/sec
average_select_fd_period = 0.001646/fd
swap.outs = 0.939879/sec
swap.ins = 0.026108/sec
aborted_requests = 0.000833/sec
cpu_time = 53.587348 seconds
wall_time = 3600.462191 seconds
cpu_usage = 1.488346%
■おまけ
squidguardのブロックするDBだけで管理するように変更したので、
制限はありますが、以下を対象に自動同期が可能です。
変更、管理するDB 「whitelist」「personal」
変更、管理するスクリプト「squid_blacklists_updates.sh」
■制限とは?
「tar.gz」を任意の時間で展開する上書きと「squidguard_reconfig.sh」の実行によって、
プロキシ通信が切断されます。(両方稼動していれば問題無いはず)
■送り側(MASTER)側の更新ファイルの取得
※指定ユーザの$HOME直下に「squid_blacklists_updates.sh」があれば一緒にtar.gzします。
この時点では変更の有無は問いません。
最低限「rootユーザ」は変更しましょう。
$ w3m -dump https://raw.github.com/labunix/squidguard-script/master/squidguard_slave.sh
LOCALUSER=root
LOCALGROUP=root
TARGETDB=/var/lib/squidguard/db
MYHOME=`su $LOCALUSER -c 'echo $HOME'`
OUTFILE="${MYHOME}/squidguard_mydb_`date '+%Y%m%d_%H%M'`.tar"
if [ "`id -u`" -ne "0" ] ;then
echo "Sorry, Not Permit User!"
exit 1
fi
find "$TARGETDB" -type d \( -name "whitelist" -o -name "personal" \) -print | \
tar cvf "$OUTFILE" `xargs`
test -f ${MYHOME}/squid_blacklists_updates.sh && tar rvf "$OUTFILE" ${MYHOME}/squid_blacklists_updates.sh
test -f "$OUTFILE" && gzip "$OUTFILE"
test -f "${OUTFILE}.gz" && chown $LOCALUSER:$LOCALGROUP "${OUTFILE}.gz"
unset OUTFILE MYHOME LOCALGROUP LOCALUSER TARGETDB
■rsync+ssh(MASTER)の場合のヒント
1日以内に変更のあった「tar.gz」を見つけて$DSTサーバにコピーする。
$ LOCALUSER=root; \
MYHOME=`su $LOCALUSER -c 'echo $HOME'`; \
TARGET=`find $MYHOME -type f -mtime -1 -name "squidguard_mydb_[0-9]*_[0-9]*.tar.gz"`; \
DST=remote-squeeze; \
rsync -avz -e "ssh -p 22" "${MYHOME}/${TARGET}/" $DST:~/${TARGET}
■受け側(SLAVE)のヒント
1日以内に変更のあった「tar.gz」を見つけて展開、squidguardのDBを再構築する。
$ LOCALUSER=root; \
MYHOME=`su $LOCALUSER -c 'echo $HOME'`; \
TARGET=`find $MYHOME -type f -mtime -1 -name "squidguard_mydb_[0-9]*_[0-9]*.tar.gz"`; \
sudo tar zxvf $TARGET; \
sudo $MYHOME/squidguard_reconfig.sh