2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

SquidによるProxyサーバ!

Squidは、WebやFTPなどに対応したプロキシサーバソフトウェアである。プロキシサーバとは、ローカルネットワークとインターネットの間に設置して、2つのネットワークにまたがるデータ転送を仲介するサーバだ。数あるWebプロキシサーバの中でも、Squidはデータのキャッシング性能が高いことで知られており、以前にアクセスしたことのあるサイトに対しては、WebやFTPなどのレスポンスを速くしたり、トラフィックを滅少させることができる。LinuxサーバやISDNルータでIPマスカレードの機能が使えるようになっていれば、LANでつないだどのマシンからもインターネットを利用できるが、これに加えてSquidを導入すれば、さらにストレスのないWebブラウジングが可能になる。


1. Squidのキャッシュ動作
Squidは、Webなどのデータを転送すると同時に、そのデータをディスクやメモリに保存しておく。再ぴ同じデータを送るようクライアントから要求されると、保存していたデータが更新されていないかをWebサーバやFTPサーバに問い合わせる。更新されていなければ保存していたデータをクライアントに送り出し、更新されていれぱ、サーバから最新のデータを取得してクライアントに送り出す(図1)

 図1

毎回データを転送してくるのに比べ、更新の確認はわずかなデータ量で済むうえ、保存していたデータは、LANで高速に転送できる。インターネットヘの接続に、ISDNや電話回線のように低速な回線を利用している場合は、キャッシュにヒットすれば数十倍の速度が得られるのだ。さらに、SquidはDNS(Domain Name Service)サーバにアクセスする専用プログラムを持っており、これを複数実行することで名前解決の高速化も図っている。


2.ProxyServer( Squid )の機能
Proxy(プロキシ)の意味は、「代理」でありSquid(スキッド)は「イカ」を意味している。ProxyServer(以下Squidと言う)の機能を大きく分けると二つの意味がある。

■ アクセスしたWebページをキャッシュして、クライアントからWebページへのアクセスの高速化を実現する。
■ LAN側のクライアントから直接インターネットにアクセスさせないことによって、セキュリティを確保することが出来る。さらには、LAN側のクライアントから観覧するインターネット上の有害なコンテンツの制限をすることが出来る。

大きく分けて、このような機能をSquidは備えている。また、Squid実装したサーバでは一般的に次のような接続方法で運用する。

図2

1)ReverseProxy(アクセラレータモード)
インターネット側からのWebページアクセスをフォワードして、SquidのWebキャッシュでWebアクセスを高速化する方法である。LAN側からは直接インターネットへのアクセスは出来ないので、必ずProxyサーバを中継しなければならない。ただし、この方法はグローバル側からのアクセスに対しても Proxyサーバとして機能してしまうため、設定方法によっては踏み台になってしまう可能性があるので注意が必要だ(図2左側)。コンテンツフィルタとしての有害サイトブロック機能も、このReverseProxyタイプで構成するのがベストだと思う。

2)透過Proxy(串)
世の中でよく言われている「串」とは、この透過Proxyのことを言っている。
ReverseProxyでは、LAN側の全てのクライアントのブラウザにProxyサーバのホスト名もしくはIPアドレスの設定及びポート番号等の設定が必要となるため手間がかかる。しかし、この方法はProxyサーバを強制的にルータの後に串刺しが如くProxyサーバを挿入して、ゲートウェイマシン兼 Proxyサーバと言う構成を作る形となる。つまり、ipchainsでの80番ポートへのアクセスをSquidのHTTPポートに変換すると言うような感じである。一般的にProxyで「串」と呼ばれてるのは、この透過Proxyの事である(図2右側)。


3. Squidのインストール
RedHatLinuxやLaser5Linuxなどでは、ディストリビューションに含まれているので、rpmコマンドなどを使ってCD-ROMからインストールする。TurboLinux 4.0/4.2の場合は少々面倒だ。バイナリCDにはSquidは収録されていないので、別途入手する必要がある。製品版ではコンパニオンCDに収録されているが、パージョンが古くお勧めできない。また、残念ながらターボリナックスジャパンのWebサイトにも新しいパージョンは用意されていない。そこで、RedHatLinux6.1用のRPMパッケージを流用しよう。このパイナリパッケージはglibc2.1を必要とするので、そのままTurboLinuxにインストールすることはできないが、ソースRPMパッケージを入手し、リビルドすればTurboLinuxでも利用することができる。まずは、RingServerProjectのFTPサーバからファイルをダウンロード ここ にアクセスしよう。ファイルが手に入ったら、rootユーザになってリビルドする。

# rpm –rebuild squid-2.2.STABLE4-8.src.rpm2000年当時のバージョンで有るため、現在はバージョンがアップされている可能性あり!!)

これで、/usr/src/turbo/RPMS/i386 ディレクトリにバイナリパッケージが作られるので、これをインストールする。現段階での最新版は、2000年1月に発表された2.3STABLE1だが、2.2STABLEならまず問題ないだろう。


4. Squidの設定
Squidの設定は、/etc/squid/squid.confというファイルで行う。rpmパッケージではなく、オリジナルのtarボールからビルドした場合は、/usr/local/squid/squid.confとなる。
このファイルでは、“#”で始まる行はコメントとして無視される。各設定項目の詳しい説明とデフォルト設定がコメントとして書かれているので、かなり長いファイルになっている。適常は、アクセス制限を変更するだけで十分だろう。
rpmパッケージをインストールした状態ではlocalhost、すなわちLinuxサーバ自身からだけ利用できるようになっている。これでは導入した意味がないので、ローカルネットワークにあるマシンからも利用できるようにしよう。/etc/squid/squid.confをエディタで開き、“ACCESS CONTROLS”セクションにある”acl CONNECT Method CONNECT”と書かれた次の行に、

acl mitynet src 192.168.1.0/255.255.255.0

と1行で書いて追加する。この例では、ローカルネットワークで192.168.1.0~192.168.1.255のIPアドレスを利用しているものとして、この範囲内のIPアドレスをmitynetという名前のアクセスリストとして定義している。次に、” http_access deny all ”と書かれた行の前に、

http_access allow mitynet

という行を追加する。これにより、先ほど定義したhomenetに属するマシンからのアクセスを許可する。これでSquidを起動すれば、すぐに利用できるが、好みや環境に合わせてカスタマイズすることもできる。比較的よく使われるパラメータをいくつか紹介しておこう。

http_port 8080

Squidに接続するためのポートを指定する。8080のほか、3128や10080がよく使われる。

cache_mem 16 MB

キャッシユに割り当てるメモリの量を指定する。搭載しているメモリに余裕があれば、この数宇を大きくするとパフォーマンスが上がる。

cache_dir /var/spool/spuid 200 16 256

キャッシュデータを保存するディレクトリと容量などを指定する。ここでは、200Mバイト(デフォルトでは100Mバイト)を割り当て16個のサブディレクトリの下に256個ずつのサブディレクトリを作ってデータを保存する。
このパラメータを使用した /etc/squid/squid.conf 俺の鯖の設定が以下である(但し、赤字は説明書き)。

# vi /etc/squid/squid.conf

visible_hostname michi.hogehoge.com
# エラー・メッセージなどで特別なホスト名を指定したい場合は、これを定義する。デフォルトでは、squidのソース中のgethostname()の返り値が使用される。クラスタに多数のキャッシュを持っており、IPフォワードに関するエラーを得るならば、このセッティングを備えた個々の名前を定義しなければならない。

http_port 8080
# squidがHTTPクライアント・リクエストを受け取るソケット・アドレス。この場合は、Port 8080。

cache_mem 16MB
# squidのキャッシュメモリに16Mバイトのメモリを割り当てる。

cache_dir /var/spool/squid 200 16 256
# キャッシュエリアの場所とその最大サイズを定義。通常はデフォルトのままで良い。この場合は、/var/spool/squidへキャッシュサイズ200MB領域を確保し、「ディレクトリー」の下に作り出される最初のレベルのサブディレクトリーの数を16個(デフォルトは16)、第1レベルディレクトリの下に作られる第2レベルのサブディレクトリーの数を256個(デフォルトは256)作ることが出来る。尚、このディレクトリのアクセス権は後述の「cache_effective_user」で指定したユーザがアクセスできるようになっている必要がある。

redirect_program /usr/local/bin/squidclamav
# squidclamavをリダイレクトプログラムとして起動(ウィルススキャナー等のプラグインソフトをsquidと連携して動かす場合)。

redirect_children 15
# squidclamavに必要なチャイルドプロセス、15個(ウィルススキャナー等のプラグインソフトをsquidと連携して動かす場合)。

acl all src 0.0.0.0/0.0.0.0
# ソース(~へ)0.0.0.0/0.0.0.0をラベルallとして定義。

acl to_localhost dst 127.0.0.0/8
# ディスティネーション(~から)アドレス127.0.0.0/8をラベルto_localhostとして定義。

acl manager proto cache_object
# cachemgr.cgiと言う統計情報を出すためのプログラムが使用するcache_objectにmanagerという名前を定義している。

acl localhost src 127.0.0.1/32
# ソース(~へ)127.0.0.1/32をラベルlocalhostとして定義。

acl SSL_ports port 443 563
# Port 443(https)と563(snews)をラベルSSL_portsとして定義。

acl Safe_ports port 80 21 443 563 70 210 1025-65535
# Port 80(http)と21(ftp)と443(https)と563(snews)と70(gopher)と210(wais)と1025~65535(unregistered ports)迄をラベルSafe_portsとして定義。

acl CONNECT method CONNECT
# 接続するためのメソッドをラベルCONNECTとして定義。

acl mitynet src 192.168.255.0/255.255.255.0
# ソース(~へ)192.168.255.0/255.255.255.0をラベルmitynetとして定義。

http_access allow localhost
# localhostからのhttpアクセスは許可する。

http_access allow mitynet
# mitynetへのhttpアクセスは許可する。

http_access deny to_localhost
# to_localhostへのhttpアクセスは禁止する。

url_rewrite_access deny localhost
# localhostからの要求をリダイレクタへ送るのは禁止する。 デフォルトで、すべての要求をリダイレクタへ送る。

http_access deny manager
# managerへのhttpアクセスは禁止する。

http_access deny !Safe_ports
# Safe_portsリストにないポートへのURLでのポート番号指定を禁止する。

http_access deny CONNECT !SSL_ports
# SSL_ports以外のポートへの接続を禁止する。

http_access deny all
# それ以外は全てアクセス禁止。

icp_access deny all
# icpアクセス全て禁止。

forwarded_for off
# Proxyを使用しているローカルIPを隠蔽。

cache_effective_user proxy
# squidをここで指定したユーザ権限で動作させる。尚、「cache_dir」とログ関係のディレクトリがここで指定したユーザで書き込めるようにしておく必要がある。

注:
1)Winny等のP2Pソフトは、acl Safe_ports portのようなポート番号での許可/拒否ができないため、acl PROTOCOL proto https https ftp gopherのように、プロトコルで許可/拒否した方が良い。意識して上の設定では、https https ftp gopher以外のプロトコルは許可していない。
2)以下の事柄はソースでSquidをインストールした場合だ。
Squid支援ツールがsquidと一緒にインストールされるコマンドである。これはSquid経由でWebサイトにアクセスするコマンドラインで、URLを指定すると対応する情報をゲットできる。

# /usr/local/squid/bin/client http://www.xxxxxxxx.org/ja/index.html

ヘッダも含めたすべての情報が標準出力される。まあ、これだけではあまり役に立ちそうなきはしないが、 -mオプションでpurgeを指定すると指定したURLに対応するキャッシュ中のデータを削除できるというお得なこともある。

# /usr/local/squid/bin/client -m purge http://www.xxxxxxxx.org/ja/index.html

ただし、この場合は、PURGEでのアクセスが許可されている必要が有るので注意が必要だ。つまり、上記の設定squid.confの記述で、

acl localhost src 127.0.0.1/255.255.255.255
acl purge method PURGE
http_access allow purge localhost
http_access deny purge

が必要になる。

3)cachemgr.cgi
Squidで提供される機能に、cachemgr.cgiと言うプログラムがある。cachemgr.cgiという名前からわかる通り CGIプログラムとして作られているもので、色々な機能を提供してくれる。cachemgr.cgiは通常のmake installではインストールされない。したがって、使用に際しては、適当なディレクトリへコピーして使うことになる。ただし、CGIが動くところへコピーしなければならない。

# cp cachemgr.cgi /usr/local/apache/cgi-bin/

使い方はcachemgr.cgiに対してブラウザでアクセスするだけである。ただし、cache_objectプロトコルでのアクセスが許可されていることが必要である。以下の設定が必要。

acl manager proto cache_object
http_access allow manager localhost
http_access deny manager


5. キャッシュ領域の初期化
インストールが終わったらキャッシュ領域を初期化する。squidの実行モジュールのパスを確認する。

# which squid
/usr/sbin/squid

# /usr/sbin/squid -zここで、パーミッションエラーが出たら、

# chmod 777 /var/cache

これでもう一度、/usr/sbin/squid -zを実行する。


6. Squidの起動
Squidの設定が終わったら早速起動しよう。RPMパッケージからインストールしていればという起動スクリブトが作られているので、

# /etc/rc.d/init.d/squid start

とすればSquidが起動する。初回起動時は/var/spool/squidディレクトリにキャッシュディレクトリを作るのでしばらく時間がかかる。Linuxの起動とともにSquidも動作させるょうにするためには、Linuxconf(画面1)、ntsysv、turboservice(画面2)などのツールを使うと簡単だ。

画面1 LinuxconfでSquidを自動起動設定
画面2 turboserviceでSquidを自動起動設定

7. Webブラウザの設定
Squidを利用するためには、Webブラウザの設定でプロキシサーバを使うようにする必要がある。例として、Squidが動作しているLinuxサーバのIPアドレスを192.168.1.1、Squidのポート番号をここでは8080としている。
Microsoft Internet Explorer 5.0では、[ツール]メニューの[インターネットオブション]を開き、[接続]タブを選んだあと、[LANの設定]ボタンを押す。すると画画3のダイアログが開くので、「プロキシサーバー」の[ブロキシサーバーを使用する]チェックボックスにチェックを入れて、[アドレス]にLinuxサーバのIPアドレス192.168.1.1を、[ポート]にSquidのポート香号8080を指定する。
Netscape Navigatorの場合は、[編集]メニューから[設定]を選び、開いたウィンドウの「カテゴリ」ツリーの詳細を展開して[ブロキシ]を選ぷ。ウィンドウの右側で[手動でプロキシを設定する]ラジオボタンにチェックして、[表示]ボタンを押して現れた画面で画面4のように設定する。データを蓄積してキャッシュにヒットするようになるまでにしばらく時問がかかるが、徐々に効果が現れるので気にせず使おう。Squidでキャッシユしたデータは、利用者全員で共用するため、複数のユーザーが同じサイトを見る機会が多い場合は効き目が現れるのも早くなる。

画面3 InternetExplorer5.0のProxy設定
画面4 ネスケのProxy設定

以上

コメント