■下位プロキシサーバとして、Squid3+SquidGuardを導入する。
上位プロキシサーバのSquid3+SquidGuardは後述の設定に
以下のようなブロックリストがあったり、
ACL等も若干厳しく設定してあるが、ここでは触れない。
Squid3のブロックリストを設定してみる。
http://labunix.hateblo.jp/entry/20151012/1444653178
$ lsb_release -d
Description: Debian GNU/Linux 8.2 (jessie)
■プロキシを通らないと外部に出れない環境なのでまずはSquid3の設定を。
「localnet」として定義した「172.16.0.0/12」からのアクセスを許可、
「cache_peer」と「never_direct」の2行の上位プロキシサーバに渡す。
若干の隠蔽用の設定は通常は要らない。
また、ユーザエージェントが「Gozzilla」だったり、
そもそもユーザエージェントを書き換えること自体に不都合があるかも知れない。
$ cat /etc/apt/apt.conf
Acquire::http::Proxy "http://172.31.31.254:3128/";
$ sudo apt-get install -y squid3
$ sudo cp /etc/squid3/squid.con{f,f.bak}
$ sudo diff /etc/squid3/squid.conf* | awk '/^</{ print substr($0,3)}'
acl localnet src 172.16.0.0/12
http_access allow localnet
http_port 8080
cache_peer 172.31.31.254 parent 3128 0 default
never_direct allow all
logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log daemon:/var/log/squid3/access.log combined
via off
request_header_access User-Agent deny all
request_header_replace User-Agent Gozilla/5.0
visible_hostname unknown_internal
dns_nameservers 172.31.31.251
forwarded_for off
■プロキシの設定
「profile」はログイン時に読み込む設定のため、
反映させるには再ログインが必要。
「apt」は毎回読み込むので再ログインは要らない。
$ cat /etc/apt/apt.conf
Acquire::http::Proxy "http://172.31.31.60:8080/";
$ cat /etc/profile.d/proxy.sh
export http_proxy=http://172.31.31.60:8080
export ftp_proxy=http://172.31.31.60:8080
export HTTP_PROXY=http://172.31.31.60:8080
export FTP_PROXY=http://172.31.31.60:8080
■SquidGuard連携
wheezyでもjessieでもSquidGuard連携はずっと継続してきたので、
大した量ではないけれど、メンテナンスしてきた
「personal」や「whitelist」の資産がある。
また、ブロック時にクライアントはリダイレクトページを返されるので
タイムアウトを待つ必要がなく、サーバ側にはブロックログが出るので
とても良い。
Debian Lenny にsquidGuardを導入
http://d.hatena.ne.jp/labunix/20120311
SqueezeにもsquidGuardを導入
http://d.hatena.ne.jp/labunix/20120312
debian SquidGuardでブロックログを出力
http://d.hatena.ne.jp/labunix/20120315
■「upper-squid」に「personal」があるものとして。
$ scp -r upper-squid:/var/lib/squidguard/db/{personal,whitelist} .
domains 100% 162 0.2KB/s 00:00
urls.db 100% 8192 8.0KB/s 00:00
domains.db 100% 8192 8.0KB/s 00:00
urls 100% 162 0.2KB/s 00:00
domains 100% 36 0.0KB/s 00:00
urls.db 100% 8192 8.0KB/s 00:00
domains.db 100% 8192 8.0KB/s 00:00
urls 100% 37 0.0KB/s 00:00
$ sudo apt-get install -y squidguard
$ cd /var/lib/squidguard/db/
$ wget http://squidguard.mesd.k12.or.us/blacklists.tgz
$ tar zxvf blacklists.tgz
$ sudo mv blacklists/* /var/lib/squidguard/db/
$ sudo mv {personal,whitelist} /var/lib/squidguard/db/
$ sudo chown proxy:proxy -R /var/lib/squidguard/db/*
$ sudo find /var/lib/squidguard/db -type f -exec chmod 644 {} \;
$ sudo find /var/lib/squidguard/db -type d -exec chmod 755 {} \;
$ sudo -u proxy /usr/bin/squidGuard -d -C all
2015-11-14 19:55:44 [6748] INFO: New setting: dbhome: /var/lib/squidguard/db
2015-11-14 19:55:44 [6748] INFO: New setting: logdir: /var/log/squidguard
2015-11-14 19:55:44 [6748] Added User: root
2015-11-14 19:55:44 [6748] Added User: foo
2015-11-14 19:55:44 [6748] Added User: bar
2015-11-14 19:55:44 [6748] destblock good missing active content, set inactive
2015-11-14 19:55:44 [6748] destblock local missing active content, set inactive
2015-11-14 19:55:44 [6748] destblock porn missing active content, set inactive
2015-11-14 19:55:44 [6748] INFO: squidGuard 1.5 started (1447498544.193)
2015-11-14 19:55:44 [6748] INFO: db update done
2015-11-14 19:55:44 [6748] INFO: squidGuard stopped (1447498544.204)
■デフォルト設定でも「foo」や「bar」ユーザを許可するのはおかしいので
削除してバックアップを取得。
$ sudo sed -i -e 's/foo bar//' /etc/squidguard/squidGuard.conf
$ sudo cp -pi /etc/squidguard/squidGuard.con{f,f.bak}
■ACL設定
DBの生成時間の短縮のために「domains」と「urls」が2000より小さいディレクトリに限定している。
その分「personal」に重複分があるのだけど、ここでは触れない。
また、別の方式でこのプロキシサーバにアクセスする手段が限られているので送信元を制限していない。
制限と言えば、設定ファイルの「{}」内にコメントをつけてはいけないという変な制限があるので注意。
$ wc -l */*s | awk -F\/ '!/whitelist/{print $1}' | \
awk '/[a-z]$/{cnt[$2]+=$1};END{for (key in cnt){if(cnt[key]<2000){print key}}}' | \
awk 'BEGIN {print "dbhome /var/lib/squidguard/db"; \
print "logdir /var/log/squidguard"; \
print "dest whitelist {"; \
print "\tdomainlist whitelist/domains"; \
print "\turllist whitelist/urls"; \
print "\tlogfile /var/log/squidguard/block/whitelist.log"; \
print "\tredirect http://172.31.31.254/block.html"; \
print "}";} \
{print "dest "$1" {"; \
print "\tdomainlist "$1"/domains"; \
print "\turllist "$1"/urls"; \
print "\tlogfile /var/log/squidguard/block/"$1".log"; \
print "\tredirect http://172.31.31.254/block.html"; \
print "}";} \
END {print "acl {"; \
print "\tdefault {"; \
print "\t\tpass whitelist"; \
print "\t\tredirect http://172.31.31.254/block.html"; \
print "\t}"; \
print "}"}' | sudo tee /etc/squidguard/squidGuard.conf
dbhome /var/lib/squidguard/db
logdir /var/log/squidguard
dest whitelist {
domainlist whitelist/domains
urllist whitelist/urls
logfile /var/log/squidguard/block/whitelist.log
redirect http://172.31.31.254/block.html
}
dest aggressive {
domainlist aggressive/domains
urllist aggressive/urls
logfile /var/log/squidguard/block/aggressive.log
redirect http://172.31.31.254/block.html
}
dest hacking {
domainlist hacking/domains
urllist hacking/urls
logfile /var/log/squidguard/block/hacking.log
redirect http://172.31.31.254/block.html
}
dest warez {
domainlist warez/domains
urllist warez/urls
logfile /var/log/squidguard/block/warez.log
redirect http://172.31.31.254/block.html
}
dest drugs {
domainlist drugs/domains
urllist drugs/urls
logfile /var/log/squidguard/block/drugs.log
redirect http://172.31.31.254/block.html
}
dest mail {
domainlist mail/domains
urllist mail/urls
logfile /var/log/squidguard/block/mail.log
redirect http://172.31.31.254/block.html
}
dest suspect {
domainlist suspect/domains
urllist suspect/urls
logfile /var/log/squidguard/block/suspect.log
redirect http://172.31.31.254/block.html
}
dest personal {
domainlist personal/domains
urllist personal/urls
logfile /var/log/squidguard/block/personal.log
redirect http://172.31.31.254/block.html
}
dest ads {
domainlist ads/domains
urllist ads/urls
logfile /var/log/squidguard/block/ads.log
redirect http://172.31.31.254/block.html
}
dest violence {
domainlist violence/domains
urllist violence/urls
logfile /var/log/squidguard/block/violence.log
redirect http://172.31.31.254/block.html
}
acl {
default {
pass whitelist
redirect http://172.31.31.254/block.html
}
}
■上記では宛先が「whitelist」に無いと通過しないので、以下を追加する。
$ sudo -u proxy awk '/^dest / && !/whitelist/ {printf "!"$2" "};END{print "all"}' /etc/squidguard/squidGuard.conf
!aggressive !hacking !warez !drugs !mail !suspect !personal !ads !violence
$ sudo sed -i -e \
's/pass whitelist$/pass whitelist !aggressive !hacking !warez !drugs !mail !suspect !personal !ads !violence all/' \
/etc/squidguard/squidGuard.conf; \
sudo chown proxy:proxy /etc/squidguard/squidGuard.conf
■存在しないACLファイルやログディレクトリを作成しておく。
$ ls */*s | awk -F\/ '!/whitelist/{print $1}' | \
awk '{print "touch "$1"/doamins;";print "touch "$1"/urls;"}' | sudo -u proxy sh
$ sudo -u proxy /var/log/squidguard/block/
■squidguardのdb作成
小さなDBしか使わないのでほぼ一瞬で終わる。
$ sudo -u proxy /usr/bin/squidGuard -d -C all
2015-11-14 22:14:07 [8510] INFO: New setting: dbhome: /var/lib/squidguard/db
2015-11-14 22:14:07 [8510] INFO: New setting: logdir: /var/log/squidguard
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/whitelist/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/whitelist/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/whitelist/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/whitelist/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/aggressive/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/aggressive/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/aggressive/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/aggressive/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/hacking/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/hacking/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/hacking/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/hacking/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/warez/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/warez/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/warez/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/warez/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/drugs/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/drugs/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/drugs/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/drugs/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/mail/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/mail/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/mail/urls
2015-11-14 22:14:07 [8510] urllist empty, removed from memory
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/suspect/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/suspect/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/suspect/urls
2015-11-14 22:14:07 [8510] urllist empty, removed from memory
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/personal/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/personal/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/personal/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/personal/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/ads/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/ads/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/ads/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/ads/urls.db
2015-11-14 22:14:07 [8510] init domainlist /var/lib/squidguard/db/violence/domains
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/violence/domains.db
2015-11-14 22:14:07 [8510] init urllist /var/lib/squidguard/db/violence/urls
2015-11-14 22:14:07 [8510] INFO: create new dbfile /var/lib/squidguard/db/violence/urls.db
2015-11-14 22:14:07 [8510] INFO: squidGuard 1.5 started (1447506847.331)
2015-11-14 22:14:07 [8510] INFO: db update done
2015-11-14 22:14:07 [8510] INFO: squidGuard stopped (1447506847.374)
■Squid3と連携する設定を「# ACCESS CONTROLS」の手前に挿入。
$ ls -l /etc/squidguard/squidGuard.conf /usr/bin/squidGuard
-rw-r----- 1 proxy proxy 1792 11月 14 23:20 /etc/squidguard/squidGuard.conf
-rwxr-xr-x 1 root root 96280 12月 26 2014 /usr/bin/squidGuard
$ sudo cp /etc/squid3/squid.con{f,f.`date '+%Y%m%d'`}
$ sudo diff /etc/squid3/squid.con{f,f.`date '+%Y%m%d'`}
582,585d581
< redirect_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
< redirect_children 8
< redirector_bypass on
<
■旧来の「/etc/init.d/squid3 restart」は結果的にsystemdを呼び出すので、
どちらでも良い。
$ sudo squid3 -k check
$ sudo /etc/init.d/squid3 restart || sudo systemctl restart squid3.service
■2000行以下の「www」で始まるドメインリストのみでアクセステスト
※ホワイトリストについては、通過が意図した動作なので問題ありませんが、
ブラックリストについては上位で必ずブロック出来る環境で試してください。
$ wc -l */*s | awk -F\/ '{print $1}' | \
awk '/[a-z]$/{cnt[$2]+=$1};END{for (key in cnt){if(cnt[key]<2000){print "grep ^www "key"/domains"}}}' | \
sh | awk '{print "w3m -dump "$1" | head -2"}' | sh
Deny Pages!
Deny Pages!
Deny Pages!
Deny Pages!
ログイン/サインアップ
*
ナビゲーションをスキップ
JP
■ログに残ることを確認
$ sudo find /var/log/squidguard/block/ -type f -size +1 -ls
2622864 4 -rw-r--r-- 1 proxy proxy 1219 11月 14 23:22 /var/log/squidguard/block/personal.log
■IPv6の無効
$ sudo netstat -anp | grep ^..p6
udp6 0 0 ::1:49566 ::1:50151 ESTABLISHED 11869/(pinger)
$ sudo grep "^pinger\|0.0.0.0\$" /etc/squid3/squid.conf
pinger_enable off
udp_incoming_address 0.0.0.0
udp_outgoing_address 0.0.0.0
$ sudo squid3 -k check && sudo squid3 -k reconfigure