- 追加された行はこの色です。
- 削除された行はこの色です。
squid は プロキシキャッシュのサービス。&br;
オープンソース(ライセンスは GPL)。クラスプラットフォーム。ヤリイカだそうです。
- [[squid(公式/英語):http://www.squid-cache.org/]]
-- [[Squid Versions(Download):http://www.squid-cache.org/Versions/]]
- [[Squid cache (Wikipedia):http://ja.wikipedia.org/wiki/Squid_cache]]
ソースは 2.x まで C、3.0 から C++ になっているので注意。&br;
3.x 系の安定バージョンは 2010年 05月 現在 3.1.3。
#contents
** とりあえず使ってみる [#pf8edc27]
Fedora 12 などの最近の Linux には squid をインストール時に組み込めたりする。&br;
インストールで導入してない場合は、パッケージをインストールして使ってみる。
+ スーパーユーザになる。
$ su -
$ su
+ squid をインストールする。
# yum install squid
+ /etc/squid/squid.conf を開いて、次の項目を変更、追加。&br;
-- "acl CONNECT method CONNECT" の次の行くらいに以下を追記。&br;
acl example_net src 192.168.0.0/255.255.255.0
※"example_net" は何でも良い。下の http_access allow の記述に合わせる。&br;
※この IP はローカル使用を想定してます。
-- "http_access deny all" の前の行に以下を追記。&br;
http_access allow example_net
※"example_net" は何でも良い。上の acl の記述に合わせる。
-- "http_access deny all" の次の行くらいに以下を追記。&br;
forwarded_for off
-- 次の行を追記。(多分どこでも良い)&br;
visible_hostname squid.example.com
※ローカルで使用する名前なら何でも良い。
-- 次の行を追記。(多分どこでも良い)&br;
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
+ 「システム」→「管理」→「ファイアーウォール」を開く。
+ 画面左ペインから「その他のポート」を選択。
+ 画面右ペインで「追加」を押して 3128 番(squid)を選択して「OK」。
+ 「適用」を押して設定画面を閉じる。
+ squid を起動。
/etc/rc.d/init.d/squid start
+ 自動起動の設定もしておく(任意)
# chkconfig squid on
これで、このサーバを介してインターネットに接続してみる。
IE8 なら、「ツール」→「インターネットオプション」→「接続」タブ→「LANの設定」で「プロキシサーバ」のチェックボックスを ON にして、アドレスに上記で設定した Linux サーバの IPを、ポートに 3128 を設定。
Firefox の場合も 「ツール」→「オプション」→「詳細」タブ→「ネットワーク」タブの接続グループに同様の設定がある。
上記設定をして、どこかインターネットのページ(www.yahoo.co.jp とか)を開いてみる。開ければ、とりあえず動いてるということ。
** コンパイルして実行してみる [#p052867c]
今度は yum ではなく、squid のソースから導入してみる。
+ まず、ダウンロード。
-- [[squid downlad:http://www.squid-cache.org/Versions/]]
-- どこでもいいけど、ここは /home/(ユーザ名)/download に squid-3.1.x.tar.gz として保存したとする。
+ スーパーユーザになる。&br;
$ su -
$ su
+ カレントを移動する。
# cd /home/(ユーザ名)/download
+ ダウンロードした書庫を展開する。
# tar zxvf squid-3.1.x.tar.gz
※squid-3.1.x というディレクトリができる。
+ カレントを移動する。
# cd squid-3.1.x
+ configure して Makefile をつくる。
# ./configure
インストール先はデフォルトで /usr/local/squid になるので、これを変えたい場合は prefix オプションで指定する。&br;
# ./configure --prefix=/hoge/squid
とか。
+ make する。
# make
+ 特にエラーがなければインストールする。
# make install
+ ここまでで、/usr/local/squid にインストールされているはずなので、確認。
# ls /usr/local/squid
+ squid 用のグループがあるか確認。
# grep squid /etc/group
-- 見つかれば、すでにあるということ。私の環境には以下のようなグループが既にあった。
squid:x:23:
※yum で squid を入れると勝手に作成されるのかな。。ちとよくわからん。
-- ない場合は作成。
# groupadd squid
+ squid 用のユーザがいるか確認。
# grep squid /etc/passwd
-- 私の環境には以下のようなユーザが既にいた。
squid:x:23:23::/var/spool/squid:/sbin/nologin
-- いない場合は作成。
# useradd -g squid -s /sbin/nologin squid
※明示的なログインを不可にするので、ホームディレクトリはいらんでしょう。多分。
+ キャッシュディレクトリを作成。
# mkdir /usr/local/squid/var/cache
+ ロック用のディレクトリを作成。
# mkdir /usr/local/squid/var/lock
+ ログディレクトリを作成。
# mkdir /usr/local/squid/var/logs
※これは多分インストールで作成されてると思う。
+ キャッシュとログのディレクトリのオーナーを squid に変更する。
# chown squid /usr/local/squid/var/cache
# chown squid /usr/local/squid/var/logs
# chown squid /usr/local/squid/var/run
# chown squid /usr/local/squid/var/lock
或いは、こうかな。
# chown -R squid /usr/local/squid/var
+ squid.conf を設定する。
-- 上記 yum で設定したものがあれば /usr/local/squid/etc にコピー。
# mv /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.org ← 一応バックアップ
# cp /etc/squid/squid.conf /usr/local/squid/etc/squid.conf
-- なければ、上記を参考に設定。
# vi /usr/local/squid/etc/squid.conf
-- 上記に加えて、以下も設定。
--- cache_dir の設定を変更。
#cache_dir ufs /var/spool/squid 100 16 256
cache_dir ufs /usr/local/squid/var/cache 1024 16 256
※コメントになってるので、有効にしてパスとサイズを書き換える。&br;
※ここは サイズ 1G としてますが、お好みで。
--- coredump_dir の設定変更。
#coredump_dir /var/spool/squid
coredump_dir /usr/local/squid/var/cache
+ キャッシュディレクトリを作成させる。
# sudo squid /usr/local/squid/sbin/squid -z
※ユーザ squid が所有者となるように sudo で実行。
ここまでで、一応動くようになっているはず。
squid ユーザで、とりあえずログ出力させながら起動してみる。
# sudo squid /usr/local/squid/sbin/squid -NCd1
※-NCd1 というのは、非デーモン、デバッグモードで起動する、というオプションです。&br;
※実行後プロンプトに復帰しないので、停止させる場合は Ctrl + C で。
特にエラーが出ていないようなら、Windows などの PC で接続してみる。&br;
Windows 側のインターネットの設定方法は、上述と同じで。
''Windows でのコンパイルについて''
Windows 上で MinGW を使ってコンパイルを試みたが、結論からいうと上手くいかない。&br;
[[公式サイトの通り:http://wiki.squid-cache.org/SquidFaq/CompilingSquid#MinGW_.28Windows.29]] にやってみたら、configure までは問題なさそうなんだけど、make でコケる。
どうやら、sys/ipc.h, sys/shm.h, sys/msg.h という 3 つのファイルが Linux の GCC にはついているようだが、MinGW にはこれらがない。squid はこれらを include しているようで、make しようとすると、そんなファイルはないと怒られてしまう。
もう少し調べてみよう...
*** 起動スクリプトをつくる [#d0567eff]
yum でインストールされたスクリプトを参考に、以下のようなスクリプトを書いてみた。
#code(sh){{
#!/bin/bash
# Source function library.
. /etc/rc.d/init.d/functions
# program name
progname=squid
# lock file
lockfile=/usr/local/squid/var/lock/subsys/$progname
# program path
prog=/usr/local/squid/sbin/squid
# config file path
conffile=/usr/local/squid/etc/squid.conf
# log file
logfile=/usr/local/squid/var/logs/squid.out
# PID file
pidfile=/usr/local/squid/var/run/squid.pid
# shutdown timeout
stoptimeout=20
RETVAL=0
start() {
echo -n $"Starting $prog: "
$prog -f $conffile >> $logfile 2>&1
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockfile
[ $RETVAL -eq 0 ] && echo_success
[ $RETVAL -ne 0 ] && echo_failure
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
$prog -k shutdown -f $conffile >> $logfile 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
rm -f $lockfile
timeout=0;
while : ; do
[ -f $pidfile ] || break
if [ $timeout -ge $stoptimeout ]; then
RETVAL=1
break
fi
sleep 1 && echo -n "."
timeout=$((timeout+1))
done
echo_success
echo
else
echo_failure
if [ ! -e $lockfile ]; then
RETVAL=0
fi
echo
fi
return $RETVAL
}
reload() {
$prog -k reconfigure -f $conffile
}
restart() {
stop
start
}
rhstatus() {
status $prog && $prog -k check -f $conffile
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|force-reload)
reload
;;
restart)
restart
;;
status)
rhstatus
;;
*)
echo $"Usage: $0 {start|stop|status|reload|force-reload}"
exit 2
esac
exit $?
}}
これを /usr/local/squid/var/bin に squid.debug などとして保存して実行してみる。
# /usr/local/squid/var/bin/squid.debug start
多分、キャッシュに書き込み権限がないと怒られて、うまく起動できない。
root で実行してるのに権限がないとは何事か!と悩んだのだけど、最近の Linux には SELinux という権限を管理するモジュールが組み込まれていて、これが有効だと root といえども、他人が所有権を持っているファイルを自由にできないらしい。
一番簡単なのは、SELinux 自体を無効にしてしまうことだが、乱暴過ぎるので、squid を実行するユーザを squid.conf に設定する。
ということで、squid.conf を開く。
# vi /usr/local/squid/etc/squid.conf
適当なところに以下の2行を追加。(多分どこでも良い)
cache_effective_user squid
cache_effective_group squid
これで、squid というユーザで実行されるようになる。
*** 参考サイト [#f6813d62]
- [[シェルスクリプト(Bash):http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html]]
** 参考 [#id28b92e]
- [[プロキシサーバー構築(Squid):http://fedorasrv.com/squid.shtml]]
- [[Fedora 12 でプロキシサーバー構築(squid):http://ytooyama.spaces.live.com/blog/cns!916D80FD288EB35A!902.entry]]
- [[Proxyキャッシュサーバ設定術―Squidの設定:http://arika.org/doc/sd.200112]]
- [[squidのインストールと設定:http://www.rose.sannet.ne.jp/nterasim/linux/squidinst.html]]
-----
[[MLEXP. Wiki]]