SUSE 11 で Squid3 を導入、設定

タブブラウザが一般的になり、ブラウザの種類も増えると、一つのコンピューターで多くのウェブページを開いて...ということが一般的になってきました。おまけに gmail や google Calender などのクラウドサービスを標準で使う所もあるでしょう。BYODによって、持ち込みのBYODタブレットを社内の無線ルータにつないで、「トイレの個室で Youtube を見る」なんてことも当たり前になります。

そうなると、いかにWAN回線の効率化を行うかが課題となります。

ここではSUSE Linux 11 で squid キャッシュを作り、チューニングを行う方法を説明します。

SLES11 ではデフォルトでは squid 2.7 系がインストールされます。目先を変えてここでは squid 3.x 系をインストールしてみました。

参考文献:SUSE 公式(日本語)
第30章 Squidプロキシサーバ

-インストール-

YaST > Software Management より squid を検索すると、 squid 2 と 3 の選択肢が出てきます。
SUSE 11 で Squid3 を導入、設定_a0056607_18382847.jpg

スペースキーで "Squid 3 WWW Proxy" を選びます。

Yast(YaST2) でインストールすると、 2.7 系に上書きされてしまうので Yast 用のプラグインは無効(削除)にしておくと良いでしょう。ここでは squid3 をインストールします。

squidcache:/etc/squid # rpm -qa | grep squ
:squidGuard-1.4-13.6.1
squidGuard-doc-1.4-13.6.1
squid3-3.1.12-8.10.1
squidcache:/etc/squid # :



SUSE のパッケージにある squid3 の conf ファイルは以下の通りです。従来のマニュアルを兼ねた squid.conf は必要最小限の設定ファイルとなりました。従来の形式の squid.conf は squid.conf.documented に置き換えられています。

squidcache:/etc/squid # ls -l
total 244
-rw-r--r-- 1 root root 419 Dec 22 2011 cachemgr.conf
-rw-r--r-- 1 root root 419 Dec 22 2011 cachemgr.conf.default
-rw-r--r-- 1 root root 1547 Dec 22 2011 errorpage.css
-rw-r--r-- 1 root root 1547 Dec 22 2011 errorpage.css.default
lrwxrwxrwx 1 root root 26 Apr 10 13:40 errors -> /usr/share/squid/errors/de
-rw-r--r-- 1 root root 11651 Dec 22 2011 mime.conf
-rw-r--r-- 1 root root 421 Dec 22 2011 msntauth.conf
-rw-r--r-- 1 root root 421 Dec 22 2011 msntauth.conf.default
-rw-r--r-- 1 root root 2557 Dec 22 2011 squid.conf
-rw-r--r-- 1 root root 2557 Dec 22 2011 squid.conf.default
-rw-r--r-- 1 root root 200091 Dec 22 2011 squid.conf.documented



-設定-

squid.conf の初期設定は次のように非常にすっきりしたものになっています。

squidcache:/etc/squid # cat squid.conf
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet

# Allow localhost always proxy functionality
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir aufs /var/cache/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
squidcache:/etc/squid #



-変更部分-

デフォルトで使ってもかまいませんが、一般的なものとしてここでは 8080 のポート番号にしました。 cachemgr を使う場合を考慮して 80 はあえて使いませんでした。

# http_port 3128
http_port 8080



-追加部分-

# キャッシュディレクトリの指定がコメントアウトされているので、キャッシュサイズ(ここでは8G)、階層数を記述します。

#cache_dir aufs /var/cache/squid 100 16 256
cache_dir ufs /var/cache/squid 8000 16 256



# パフォーマンスに関わる記述です。最大キャッシュオブジェクトサイズは 128Mb としました。

maximum_object_size 128 Mb
maximum_object_size_in_memory 32 Mb



#dns キャッシュを行う場合のDNSサーバーのアドレスです。
#イントラ用DNSと google のDNSキャッシュを指定しました。
#(覚えやすいので...)

dns_nameservers 192.168.1.2 8.8.4.4 8.8.8.8

# squid のバージョンや内部の IP アドレス、ホストを相手に記録させないための設定です。
# 一部のサイトでは匿名プロクシ経由のアクセスを禁止する場合があるため、
# この設定をしました。


via off
header_replace User-Agent Nutscrape/1.0 (CP/M; 8-bit)
visible_hostname unknown
forwarded_for off

※header_replace の行は効果があるとは思えないのですが....

この状態で squid を起動します。/etc/init.d/squid start をしても良し、yast > System > System Service(Runlevel) で初期起動設定を行い start しても良いでしょう。

SUSE 11 で Squid3 を導入、設定_a0056607_18474751.jpg


「かくにん君」などのサイトにアクセスしてみて squid キャッシュ経由で、squid のバージョンや内部ホスト名などの情報が漏洩していないことを確認します。デフォルトのままだと、squid キャッシュのバージョンから、内部のPCの名前、ローカルアドレスなどがバレバレとなってしまいます。かくにん君はこちら
http://www.ugtop.com/spill.shtml
SUSE 11 で Squid3 を導入、設定_a0056607_18495923.jpg

LAN内での運用ということでこういう設定にしました。LAN 外部に設置する場合、全世界に「匿名串」を提供することになるので注意が必要です。

-動作確認 cachemanager-

squid には squidclient という「動作状態確認ツール」がありますが、ここでは cachemanager を使います。
事前に apache2 をインストールしておきます。cgi を /srv/www/cgi-bin にコピーします。

squidcache:/etc/squid # find / -name "cachemgr*"
/usr/lib64/squid/cachemgr.cgi
/usr/share/man/man8/cachemgr.cgi.8.gz
/usr/share/doc/packages/squid3/scripts/cachemgr.readme
/etc/squid/cachemgr.conf.default
/etc/squid/cachemgr.conf
squidcache:/etc/squid # ls /srv/www/
cgi-bin htdocs
squidcache:/etc/squid # cp /usr/lib64/squid/cachemgr.cgi /srv/www/cgi-bin/ -v
`/usr/lib64/squid/cachemgr.cgi' -> `/srv/www/cgi-bin/cachemgr.cgi'

squidcache:/etc/squid #



cachemanager の conf ファイルを修正します。デフォルトポートを使う場合は変更の必要はありませんが、 8080 のようにポート番号を変えた場合は次のように変更します。

squidcache:/etc/squid # cat cachemgr.conf
# コメント行略
localhost:8080
squidcache:/etc/squid #


ここで apache2 をリスタートさせます。

# /etc/init.d/apache2 restart



ブラウザから

http://MySquidCache.intra/cgi-bin/cachemgr.cgi



にアクセスします。パスワードは設定していないので localhost:8080 を選んだまま continue します。
SUSE 11 で Squid3 を導入、設定_a0056607_18544239.jpg


# squidclient -h localhost -p 8080 mgr:client_list

を実行した時と同じ内容の動作状態がブラウザで確認できます。メニューの 2/3 あたりに client_list を確認するリンクがあります。
SUSE 11 で Squid3 を導入、設定_a0056607_18552396.jpg


cachemgr はブラウザでどのユーザからも参照できます。ただし一部の作業を許可する場合は、次のように squid.conf に記述を追加します。シャットダウンを許可する場合は

# cache_mgr
cache_mgr squidman
cachemgr_passwd yourpassword shutdown



と記述します。
SUSE 11 で Squid3 を導入、設定_a0056607_1224625.jpg

シャットダウン操作だけ Authentication (squidman/yourpassword)が必要になります。cachemgr_passwd の許可するコマンドリストはsquid.conf.documented に詳しく書かれています。


一週間程度稼動させた squid3 のキャッシュヒット率は 40% を超えました。実際にはここまでは行くことはなさそうですが、業務の内容によっては20%程度は目標としておきたいところです。
SUSE 11 で Squid3 を導入、設定_a0056607_18563515.jpg


mrtg で見てみると、青線(output) が緑(in)よりはるかに多く 「ブラウザ立ち上げっぱなし」でかなり効果が出ているようです。
SUSE 11 で Squid3 を導入、設定_a0056607_10342097.png


--
本来は、"Youtube のコンテンツを快適にできないか" という不純な動機でした。しかし、これらの動画サイトや Windows Update といったサービスは「重い」にも関わらず、 squid ではキャッシュできないようです。ということで回線容量の確保にはあまり squid キャッシュサーバーは貢献できないようです。

また最近のブラウザはどれもこれらのコンテンツをブラウザキャッシュとして保管していない(できない?)ようです。これはおそらくサイト側の作りによってキャッシュが行われないような仕組みになっているためだろうなと思います。もし、他に良いアイディアがあればコメント下さい。


逆に「まじめにお仕事をしている」人にとっては、繰り返し参考にするウェブサイトは、キャッシュヒット率が上がります。隣のヤツが不純な動機でトイレで隠れて動画サイトばかりを見ていても、かなり快適に仕事ができるという「非常に良い効果」があるでしょう。

本来であれば、トランスペアレントにしても良いのですが、隊障害性対策やインフラやトポロジの変更が必要です。

zabbix2 で状態を管理していると、幾つかの Disk Busy のアラートが上がっていました。 /var/cache/squid は出来れば本体とは別なディスクデバイスを使い、別パーティションとしたほうが良いようです。あるいは、思い切りメモリを増設して RAM ディスクをキャッシュパーティションとするのも手段かも知れません。あるいは、SSDをキャッシュとするのも良いアイディアでしょう。SSDの寿命を考えてもどうせキャッシュデータですからそういう割り切り方も良いでしょう。

仮想環境で運用するならルートパーティションのディスクイメージはHDDに収容し、キャッシュ用の仮想ディスクは SSD という方法もあります。本来「キャッシュ」データですからSSDの寿命を考えても「消耗品」と割り切れば、この構成も良いアイディアでしょう。

個人的にはSSDをデータ保管のためサーバーで使うのは止めた方がいいと思いますが、キャッシュ目的で消耗品だと思えばそういう選択もアリだなと思います。

ということで、"きゃりーぱみゅぱみゅ"の「にんじゃりばんばん」を何十回もロードしたにも関わらず、 squid やブラウザキャッシュは有効にならずに、コンピューターの中ではなく私の頭の中にキャッシュされてしまいました。すっかり頭の中のキャッシュが「にんじゃりばんばん」です。トイレの隣の個室で「にんじゃりばんばん」を鼻歌でほざいていたら、私かも知れません。こういったコンテンツはコンピュータを使わず「心に染み付くまで楽しめ」というメッセージなのでしょうね。

※もっと「こうしたほうがいいよ」というご意見があれば歓迎します。

続き
squid の効率をチェックして、キャッシュをクリアする。


問い合わせは
islandcenter.jp


-Keyword-
SUSE SLES11 Squid3 キャッシュ 設定 チューニング
by islandcenter | 2013-04-10 19:03 | SUSE | Comments(0)