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 + ロック用のディレクトリを作成。 # 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 でコンパイルしてみる [#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 のサービスとしてコンパイルするということだと思う。 ちなみに、[[squid-2.7.STABLE9:http://www.squid-cache.org/Versions/v2/2.7/]] であれば、特に問題なくコンパイルできた。configure も make もエラーなし。ただ、現時点(2010/05/19)の最新安定バージョン(というか C++ バージョン)である [[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 のコンパイルで、定義の衝突やら未定義やらのエラーが大量に出る。 どちらも何か調整が必要なのかもしれない。もう少し調べてみよう... ** 起動スクリプトをつくる [#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]]