labunix's blog

labunixのラボUnix

Squid3のブロックリストを設定してみる。

■Squid3のブロックリストを設定してみる。
 Squid3で制御する方法とsquidGuardで制御する方法がある。

 squidGuardではIPとFQDNを同じリストに入れられるが、
 Squid3は別々に指定する必要がある。

 今回はsquidGuardのように毎回更新の度にDBの作成を必要としない
 Squid3側で設定する。

$ lsb_release -d
Description:	Debian GNU/Linux 8.2 (jessie)
$ sudo squid3 -v | grep ^Squid
Squid Cache: Version 3.4.8
$ squidGuard -v
SquidGuard: 1.5 Berkeley DB 5.3.28: (September  9, 2013)

■サンプルとして、Zeus Tracker のブロックリストを使用する。
 Zeusはマルウエア作成ツールなので、マルウエアやウイルス、トロイの木馬など
 各ベンダー毎に色々な分類がされている。

 なお、ブロックリストの設定が初めての方は、
 より分かりやすく安全な「google.com」を一時的にブロックするなど
 してから試すべきです。

 Zeus Tracker
 https://zeustracker.abuse.ch/blocklist.php

■Windows版のblocklist、FQDNを127.0.0.1に解決する方法は
 面白いアプローチだと思ったが一般的なテクニックだったようだ。

 How to Block Websites in Windows 8’s Hosts File
 http://www.howtogeek.com/122404/how-to-block-websites-in-windows-8s-hosts-file/

■さてACL設定は英文のマニュアルに例があるので、
 squid/squid3のディレクトリ構成は変えてコピペ

$ sudo cp -i /etc/squid3/squid.con{f,f.org}
$ sudo diff /etc/squid3/squid.con{f,f.org}
1046,1047d1045
< acl zeustrackerdomain dstdomain "/etc/squid3/zeus_squiddomain.acl"
< acl zeustrackerip dst "/etc/squid3/zeus_squidip.acl"
1218,1219d1215
< http_access deny zeustrackerdomain
< http_access deny zeustrackerip

$ sudo /etc/init.d/squid3 reload
[ ok ] Reloading squid3 configuration (via systemctl): squid3.service.

■ざっくりと、600で割って余りが100なら、
 IPとドメインの両方のサンプルがとれる。
 なお、クライアントとなるブラウザがプロキシを通る環境でテストすること。

$ echo $http_proxy | sed -e 's/[0-9]/X/g'
http://XXX.XX.XX.XX:XXXX
$ echo $HTTP_PROXY | sed -e 's/[0-9]/X/g'
http://XXX.XX.XX.XX:XXXX

$ wc -l /etc/squid3/*.acl
  549 /etc/squid3/zeus_squiddomain.acl
  174 /etc/squid3/zeus_squidip.acl
  723 合計

$ cat /etc/squid3/*.acl | awk -F\/ '(NR%600==100){print "w3m -dump http://"$1";"}'
w3m -dump http://chambercb.tk;
w3m -dump http://77.228.191.183;

■squidGuardと異なり、ブロックページも出さずに静かにブロックする。

$ cat /etc/squid3/*.acl | awk -F\/ '(NR%600==100){print "w3m -dump http://"$1";"}' | sh
$ sudo awk -F\" '/chambercb.tk/ || /77.228.191.183/{print $2,$NF}' /var/log/squid3/access.log | tail -2
GET http://chambercb.tk/ HTTP/1.0  TCP_DENIED:HIER_NONE
GET http://77.228.191.183/ HTTP/1.0  TCP_DENIED:HIER_NONE

■ブロックログは別出ししても良いが、以下で抽出出来そうなので、スルーする。

$ sudo awk -F\" '/TCP_DENIED/ && /HTTP.1\.0. 403/ \
         {cnt[$2]+=1};END{for (key in cnt){print cnt[key],key}}' \
       /var/log/squid3/access.log
1 GET http://77.228.191.183/ HTTP/1.0
1 GET http://chambercb.tk/ HTTP/1.0