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
 + 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
 + カレントを移動する。
  # 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
 + PID 用のディレクトリを作成。
  # mkdir /usr/local/squid/var/run
  # mkdir /usr/local/squid/var/run/subsys
 ※これは /var/run とかにした方がいいかもしれないけど。
 + ロック用のディレクトリを作成。
  # mkdir /usr/local/squid/var/lock
 + ログディレクトリを作成。
  # mkdir /usr/local/squid/var/logs
 ※これは多分インストールで作成されてると思う。
 + キャッシュとログのディレクトリのオーナーを squid に変更する。
  # chown squid.squid /usr/local/squid/var/cache
  # chown squid.squid /usr/local/squid/var/logs
  # chown squid.squid /usr/local/squid/var/run -R
  # chown squid.squid /usr/local/squid/var/lock
 或いは、こうかな。
  # chown -R squid.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 でコンパイルしてみる [#w0346b02]
 
 Windows で squid をコンパイルする場合は、主に MinGW(+ msys)を使う方法と、Cygwin を使う方法がある。それぞれの環境の導入方法などは [[こちら>UNIX on Windows]] を参考に。Visual Studio でもコンパイラを GCC にすればいけるかもしれないけど、私は試してない。
 
 基本的なやり方は Linux でのやり方(上述)と同じだが、[[公式サイトの解説:http://wiki.squid-cache.org/SquidFaq/CompilingSquid]] によれば、それぞれ configure に次のオプションをつけた方が良いらしい。
 
 ''MinGW の場合''
  $ ./configure \
  --disable-wccp \
  --disable--wccpv2 \
  --enable-win32-service \
  --enable-default-hostsfile=none
 
 ''Cygwin の場合''
  $ ./configure \
  --disable-wccp \
  --disable--wccpv2
 
 disable-wccp というのは、Windows は POSIX が使えないので、それを無効にするオプションらしい。 enable-win32-service は Windows のサービスとしてコンパイルするということだと思う。
 
 *** msys での起動パス [#j1659e52]
 msys で squid を起動しようとすると、パスがおかしいためか起動できない。(どう見てもあるはずのファイルがないよと怒られる)
 
 デフォルトでは、インストール先が /usr/local/squid となるが、これは msys が指す /usr/local(実パスは (msysインストールフォルダ)\local )ではなく、C:\usr\local を指している為。
 
 なので、インストールフォルダをまるまる C:\usr\local\squid にコピーして DOS プロンプトで起動してやれば動く。
 
  C:\> cd C:\usr\local\squid\sbin
  C:\usr\local\squid\sbin> squid -z
  C:\usr\local\squid\sbin> squid
 
 ちなみに、Cygwin ならそのまま動作するようだ。
 
 *** 3.1.3 はコンパイルできない? [#qb4bd8be]
 [[squid-2.7.STABLE9:http://www.squid-cache.org/Versions/v2/2.7/]] や [[squid-3.0.STABLE25:http://www.squid-cache.org/Versions/v3/3.0/]] であれば、特に問題なくコンパイルできた。configure も make もエラーなし。ただ、現時点(2010/05/19)の最新バージョンである [[squid-3.1.3:http://www.squid-cache.org/Versions/v3/3.1/]] は上手くコンパイルできない。これは MinGW でも Cygwin でも同様。ただ、エラーの内容が両者で異なる。MinGW の場合、sys/ipc.h, sys/shm.h, sys/msg.h が見つからない、というエラー。これらのファイルは Linux の GCC にはついているようだが、MinGW にはない。 Cygwin の場合、compat/os/mswin.h のコンパイルで、定義の衝突やら未定義やらのエラーが大量に出る。STABLE じゃないから?
 
 どちらも何か調整が必要なのかもしれない。もう少し調べてみよう...
 
 ** 起動スクリプトをつくる [#d0567eff]
 
 yum でインストールされたスクリプトを参考に、以下のようなスクリプトを書いてみた。
 
 #code(sh){{
 #!/bin/bash
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
 # install dir
 prefix=/usr/local/squid
 # exec dir
 exec_prefix=${prefix}
 # program name
 progname=squid
 # lock file
 lockfile=/usr/local/squid/var/lock/subsys/$progname
 lockfile=${prefix}/var/lock/subsys/$progname
 # program path
 prog=/usr/local/squid/sbin/squid
 prog=${prefix}/sbin/squid
 # config file path
 conffile=/usr/local/squid/etc/squid.conf
 conffile=${prefix}/etc/squid.conf
 # log file
 logfile=/usr/local/squid/var/logs/squid.out
 logfile=${prefix}/var/logs/squid.out
 # PID file
 pidfile=/usr/local/squid/var/run/squid.pid
 pidfile=${prefix}/var/run/squid.pid
 # shutdown timeout
 stoptimeout=20
 stoptimeout=120
 
 RETVAL=0
 
 start() {
 	echo -n $"Starting $prog: "
 	echo -n $"Starting $progname: "
 	$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: "
 	echo -n $"Stopping $progname: "
 	$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]]
 
 ** Cache Manager を使えるようにする [#j4b4ce7a]
 
 キャッシュマネージャというのは、squid がとっているログ情報を Web 上で閲覧できるようにするスクリプト。squid をインストールすると、漏れなく付属してくるが、デフォルトのままでは使えない。
 
 あと、Web サーバの Apache の設定もする必要がある。多分。
 
 + Apache がない場合は、まずインストール。
  # rpm -qa | grep httpd
 して、何も表示されない場合は未インストールなので入れる。&br;
  # yum install httpd
 + スクリプトを置くディレクトリを作成。&br;
  # mkdir /var/www/cgi-bin/squid
 ※ /var/www/cgi-bin は Apache をインストールすれば作成されているはず。
 + スクリプトが実行できるように、httpd.conf を編集。
  # vi /etc/httpd/conf/httpd.conf
 &br;
 以下の設定を追加。
  <Directory "/var/www/cgi-bin/squid">
    order allow,deny
    allow from all
  </Directory>
 ※ アクセス元を限定する場合は allow from の後に指定する。
 + cachemgr.cgi を スクリプトディレクトリにコピー。
 -- cachemgr.cgi は /usr/local/squid/libexec の下にある。&br;
  # cp /usr/local/squid/libexec/cachemgr.cgi /var/www/cgi-bin/squid
 + cachemgr.conf を設定。
 -- /usr/local/squid/etc の下の cachemgr.conf には デフォルトで localhost だけが設定されているので、これにポート番号をつける。
  # vi /usr/local/squid/etc/cachemgr.conf
 &br;
  localhost:3128
 ※ ポート番号は squid が使っているポート番号。
 + squid.conf で、キャッシュマネージャにアクセスできるように設定。
 -- ここは LAN 内の接続からならアクセスできるようにする。&br;
  acl example_nw src 192.168.0.0/24
 という定義を追加して、http_access deny manager という行の直前に&br;
  http_access allow manager example_nw
 を追加する。&br;
 ※ example_nw という名前は何でも OK。
 
 これでキャッシュマネージャは使えるようになってるはずなので、Apache と squid をリロードして確認。
 
  # /etc/rc.d/init.d/httpd restart
  # /usr/local/squid/sbin/squid -k reconfigure
 
 これで、ブラウザから http://(プロキシサーバ)/cgi-bin/squid/cachemgr.cgi にアクセスしてみる。
 
 「Cache Manager Interface」の画面が出たら、そのまま「continue」ボタンを押す。ユーザは設定してないので、Manager name と Password は空で OK。
 
 統計情報の一覧が表示されれば、設定完了。
 
 *** Permission denied が出る場合 [#e5307bd2]
 環境によっては上記の設定だけだとパーミッションで蹴られる。
 
  Cache Manager Error
  (プロキシサーバ) (13) Permission denied
 
 /usr/local/squid/var/cache や /logs のパーミッションを確認しても問題なさそうという場合は SELinux が疑われる。
 
 /var/log/audit/audit.log を確認してみて、
 
  type=AVC msg=audit(1274851190.959:27996): avc:  denied  { name_connect } 
  for  pid=4083 comm="cachemgr.cgi" dest=3128 
  scontext=unconfined_u:system_r:httpd_sys_script_t:s0 
  tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket
  type=SYSCALL msg=audit(1274851190.959:27996): arch=40000003 syscall=102 
  success=no exit=-110 a0=3 a1=bf83cb70 a2=8615078 a3=3 items=0 ppid=2537 
  pid=4083 auid=500 uid=48 gid=489 euid=48 suid=48 fsuid=48 egid=489 sgid=489 
  fsgid=489 tty=(none) ses=1 comm="cachemgr.cgi" exe="/var/www/cgi-bin/squid
  /cachemgr.cgi" subj=unconfined_u:system_r:httpd_sys_script_t:s0 key=(null)
 
 みたいなログが出てたら、SELinux がクロ。
 
 GNOME なら、「システム」→「管理」→「SELinux Management」を開いて、左ペインから「システムドメイン」を選択し、右ペインで「httpd_sys_script」を選択して「許容」しておくと幸せになれるかも。
 
 *** 参考サイト [#kb2ef0c1]
 - [[Squidの設定 【Squid Web プロキシ & キャッシュ】:http://squid.robata.org]]
 -- [[キャッシュマネージャ:http://squid.robata.org/faq_9.html]]
 
 ** カスタマイズしてみる [#gfc242ed]
 
 ちょっと高度。
 
 - [[Squid 3.x  Developer Programming Guide :http://squid.treenet.co.nz/Doc/Code/index.dyn]]
 
 ** 外部リンク [#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]]
 - [[Squid プロキシサーバの設定:http://unixlife.jp/unixlife/linux/s-squid.jsp]]
 - [[システム/サーバ構築:http://www.stackasterisk.jp/tech/systemConstruction/index.jsp]]
 -- [[プロキシサーバSquid:http://www.stackasterisk.jp/tech/systemConstruction/squidSat01_01.jsp]]
 -- [[SquidGurardによるアクセス制御:http://www.stackasterisk.jp/tech/systemConstruction/squidGuard01_01.jsp]]
 -- [[squidの統計情報:http://www.stackasterisk.jp/tech/systemManagement/squidStat01_01.jsp]]
  
 
 
 -----
 [[MLEXP. Wiki]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS