- スマートデバイス(Android、iOS両方)でブラウジング中に出てくる広告が超ウザい。
- スマートデバイスのブラウザで「戻る」ボタンを押しても、キャッシュ再読み込みではなくページの再取得をしてしまう。
- 宅内の端末が増えてきたので、adblockやFilterProxy等の設定をするのが面倒。
という問題を解消するため、Debian-Squeezeを入れたCuboxにSquidGuard+Squid+Polipoを入れて、宅内LAN用のコンテンツフィルタとキャッシュサーバを立てたので、その時のメモをまとめておく。
■TXキュー長の変更
CuboxのNIC(カードじゃないけど…)は内部でバッファを持っているので、OSのTXキュー長を"0"に設定しておく。
(ちなみにデフォルト値は"1000")
# ifconfig eth0 txqueuelen 0
■Polipoのインストール
外部サーバとの通信高速化のためPolipoを利用する。
キャッシュプロキシには後述のSquidを利用するため、Polipo側のキャッシュは利用しない。
# sudo apt-get install polipoうちのconfigはこんな感じ。
# nano /etc/polipo/config
とりあえずIPv4にのみ対応させておいたけど、そろそろIPv6にも対応させておいたおいた方がいいかな…。
Debian-Wheezyが出たら(もしくは引っ越し後に)考えよう。
--------------------------------------------------設定したらPolipoを再起動しておく。
proxyAddress = "0.0.0.0"
allowedClients = 127.0.0.1, 192.168.1.0/24
chunkHighMark = 819200
objectHighMark = 512
diskCacheRoot = ""
localDocumentRoot = ""
disableIndexing = false
disableServersList = false
dnsQueryIPv6 = no
dnsUseGethostbyname = yes
pmmFirstSize = 524288
pmmSize = 262144
relaxTransparency = maybe
--------------------------------------------------
# sudo /etc/init.d/polipo restart
■Squidのインストール
Squidをキャッシュプロキシとして利用する。
PolipoとSquidのどちらを親プロキシにするかは諸説あるが、今回は
クライアント → (SquidGuard) → Squid → Polipo → 外部サーバとなるよう、Polipoを親プロキシとして設定する。
# apt-get install squid以下はCuboxをSDカードのみで利用し、メモリキャッシュのみで運用する場合の設定例。
# cp -p /etc/squid/squid.conf /etc/squid/squid.conf.org
# nano /etc/squid/squid.conf
MicrosoftUpdateやニコニコ動画等のページ、cgi等の結果はキャッシュしないようにしている。
--------------------------------------------------(以下、acl関連は省略)
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
redirect_children 5
redirector_bypass on
acl query urlpath_regex cgi-bin \? \.php$ \.asp$ \.shtml$ \.cfm$ \.cfml$ \.phtml$ \.php3$ \.js \.jsp
acl nocache-domain dstdomain .microsoft.com .nicovideo.jp .smilevideo.jp
always_direct allow query
always_direct allow nocache-domain
no_cache deny query
no_cache deny nocache-domain
acl all src all
http_port 8080
cache_peer 127.0.0.1 parent 8123 7 no-query no-digest no-netdb-exchange http11 default
hierarchy_stoplist cgi-bin ?
cache_mem 256 MB
cache_dir null /var/tmp
maximum_object_size 20480 KB
access_log none
cache_store_log none
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
negative_ttl 1 minutes
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
half_closed_clients off
visible_hostname ProxyServer
nonhierarchical_direct off
prefer_direct off
never_direct allow all
tcp_recv_bufsize 65535 bytes
hosts_file /etc/hosts
ipcache_size 4096
forwarded_for off
coredump_dir none
pipeline_prefetch on
--------------------------------------------------
ウチではeSATA接続のSSD上にキャッシュを配置しているため、実際には"cache_mem"をコメントアウトし、以下の設定を有効にしている。
--------------------------------------------------
cache_dir coss [cache_dir]/cache_s 128 block-size=512 max-size=16384 membufs=4
cache_dir coss [cache_dir]/cache_m 1024 block-size=512 max-size=131072 membufs=8
cache_dir aufs [cache_dir]/cache_l 4096 16 64
maximum_object_size 1024 MB
--------------------------------------------------
redirect_programにSquidGuardを指定しているため、サービス再起動等はSquidGuardのインストール後に行う。
■SquidGuardのインストール
コンテンツフィルタとしてSquidGuardを利用する。
# apt-get install squidGuardフィルタ用のブラックリストは用意されていないため、別途取得して展開しておく。以下はその取得例。
# cp -p /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf.org
# cd /tmpフィルタリングしたいブラックリストをSquidGuardに設定する。
# wget http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist
# tar zxvf bigblacklists.tar.gz
# cd blacklists
# cp -Rf * /var/lib/squidguard/db/
# cd /var/lib/squidguard/db
# chown -R proxy:proxy db
# nano /etc/squid/squid.confウチの設定はこんな感じ。
good と local は、自前で用意したホワイトリストとブラックリストを設定している。存在しない場合は設定自体の削除が必要。
usersとdefaultの設定を分ける必要は無いけど、まぁ将来の拡張用ということで。
--------------------------------------------------
dbhome /var/lib/squidguard/db
logdir /var/log/squid
src users {
ip 192.168.1.0/24
}
dest good {
domainlist good/domains
urllist good/urls
}
dest local {
domainlist local/domains
urllist local/urls
expressionlist local/expressions
}
dest antispyware {
domainlist antispyware/domains
urllist antispyware/urls
}
dest ads {
domainlist ads/domains
urllist ads/urls
}
dest spyware {
domainlist spyware/domains
}
acl {
users {
pass good !local !antispyware !ads !spyware all
redirect http://[CuboxAddress]/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
default {
pass good !local !antispyware !ads !spyware all
redirect http://[CuboxAddress]/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
}
--------------------------------------------------
ここまで来たら、一旦SquidGuardの設定をチェック。
# squid -f /etc/squid/squid.conf -z問題が無いようなら、SquidGuardで設定したブラックリスト、ホワイトリストをBerkleyDB化してSquidを再起動する。
# squidGuard -d -C allあとはクライアント側からCuboxの8080ポートをプロキシに設定すれば設定完了。
# service squid reload
# /etc/init.d/squid restart
とりあえず、Squidのみの状態で一週間、Polipoも入れた状態でさらに一週間使ってるけど、特に問題らしい問題も発生していないので、安定してると言えるかと。
Cuboxの今後の課題(というか、やりたいこと)は…
- Privoxy+Ziproxyでフィルタリングの強化&高速化
- IPv6対応
- 透過プロキシ化
- DNSキャッシュサーバを構築して高速化
- L2TP/IPSecのVPNサーバを構築
くらいかなぁ。
RaspberryPiと違って、NICが1000Baseに対応してるのと、AES復号化に使える専用コプロセッサを積んでるのはCuboxの強みだしね。
RaspberryPiは、ひとまずMPDサーバとか、宅内WebAPサーバとして使っていくことにしよう。
…丁度よく、「月刊Stereo」2013年1月号付録のUSB-DAC『LXU-OT2』も確保してあることだし!
【2015/04/11追記】CuboxからRaspberryPi2にキャッシュサーバを移行したため、興味のある方はそちらもご覧ください。
キャッシュサーバとownCloudサーバをRaspberryPi2に移行する-IPv6対応(1)
I Love your article. You cant visit my website : free apk editor
返信削除