13.3. 基本的なプロキシサーバーの設定

Squid の設定ファイルは、/etc/squid/squid.conf です。/etc/squid/squid.conf には非常に多くのコメントが記述されており、設定に関する詳細はこのドキュメントから得ることができます。また、/etc/squid/squid.conf には非常に多くの設定項目(タグ)が存在しますが、基本的なプロキシサーバーを構築するために設定すべきタグはそれほど多くはありません。

また、各タグの既定値は、次のように #Default: とコメントで記述されています。この既定値をそのまま使用する場合はコメントを外す必要はありません。

#Default:
# cache_mem 8 MB

本ガイドでは、WWW におけるプロキシサーバーを構築するために必要と思われる代表的なタグについてのみ解説しますが、いちど全体に目を通しておくことをお勧めします。

基本的なタグは以下の通りです。

http_port 3128
# cache_mem 8 MB
# cache_swap_low 90
# cache_swap_high 95
# maximum_object_size 4096 KB
# ipcache_size 1024
# ipcache_low 90
# ipcache_high 95
# ftp_user Squid@
# ftp_passive on
# cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log squid
# cache_log /var/log/squid/cache.log
# cache_store_log /var/log/squid/store.log
# cache_mgr root
# visible_hostname

上記タグの他にも Squid へのアクセス制御を指定する acl や http_access タグも重要です。以下では、これらのタグについて解説します。

13.3.1. ネットワークに関する設定

http_port port [options]

プロキシサーバーがクライアントからのリクエストを待ち受けるポート番号を指定します。Turbolinux 11 Server には 3128 の指定があるので、HTTP プロキシのポート番号として一般的に使用される 8080 に変更したい場合には以下の通り編集する必要があります。

http_port 8080

以下の 3 つの書式で指定することができます。1 つ目はポート番号単独の指定です。他は、ホスト名、IP アドレスとポート番号の組み合わせの指定です。

http_port port [Options]
http_port hostname:port [options]
http_port IP:port [options]

主な options は以下の通りです。詳細は、squid.conf のコメント行を参照してください。

表 13-2.

transparent 透過型プロキシの指定。
tproxyLinux TPROXY のサポート。クライアントの IP アドレスを保持して外部に接続します。
accelアクセラレータモード(リバースプロキシ)。defaultsite、vhost、vport の指定も必要。
defaultsite=domainnameアクセラレータモードで、リクエストに Host: ヘッダが含まれなかった場合に使用するデフォルトドメインの指定。
vhostアクセラレータモードでのバーチャルドメインサポート。
vportアクセラレータモードでの IP ベースバーチャルホストサポート。vport=nn のようにポート番号を指定できます。
protocol=アクセラレータモードで使用する プロトコルの指定です。デフォルトは http です。

ティップ

Squid の以前のバージョンにあった httpd_accel_host や httpd_accel_uses_host_header は、Squid 2.6 では、http_port の options指定の defaultsite や vhost に変更されています。

13.3.2. キャッシュに関する設定

cache_mem memory_size

Web コンテンツをキャッシュするメモリサイズを指定します。既定値は 8MB です。

cache_swap_low percentage、cache_swap_high percentage

キャッシュを整理するための上限と下限を指定します。キャッシュのためのメモリ領域が cache_swap_high(95%)に達したらアクセスされていないオブジェクトの整理を開始し、cache_swap_low(90%)になるとオブジェクトの整理を停止します。

maximum_object_size object_size

キャッシュするオブジェクトの最大サイズです。このサイズより大きなオブジェクトはキャッシュの対象となりません。既定値は 4MB です。

ipcache_size number

Squid が行った IP アドレスの名前解決をキャッシュする数を指定します。既定値は 1024 です。

ipcache_low percentage、ipcache_high percentage

IP アドレスのキャッシュを整理するための上限と下限を指定します。キャッシュの数が ipcache_size の ipcache_high(95%)に達したらアクセスされていないキャッシュの整理を開始し、ipcache_low(90%)になると整理を停止します。

cache_dir Type Maxobjsize Directory-Name Mbytes Level-1 Level-2

キャッシュディレクトリの指定です。使用する記憶装置システムのタイプ(Type)、キャッシュディレクトリのパス(Directory-Name)、容量(Maxobjsize)、Level-1 および Level-2 のディレクトリの個数(Level-1Level-2)を指定します。Type は通常 ufs を指定します。キャッシュディレクトリの既定値は /var/spool/squid で容量は 100MB です。Level-1 はキャッシュディレクトリの下に作られるサブディレクトリの数で、デフォルトは 16 個です。Level-2 はそれぞれの Level-1 のディレクトリに作られるサブディレクトリの数で、デフォルトは 256 個です。また、cache_dir は複数行にわたって指定でき、これにより異なるパーティションのディスク領域を同時に使用することもできます。

13.3.3. Anonymous FTP アクセスに関する設定

ftp_user username

Anonymous FTP サイトに接続する際のパスワードとして使用するメールアドレスを使用します。Squid 専用のメールアドレスを用意して、そのアドレスを指定するとよいでしょう。

ftp_passive on|off

Squid が FTP プロキシとして動作する際に、PASSIVE モードを使用するかどうかを指定します。PASSIVE モードを使用するには on、使用しないには off を指定します。

13.3.4. ログに関する設定

access_log filename [logformat name [acl acl ...]]

クライアントからの要求を記録するログファイルを指定します。ファイルは受け取った HTTP と ICP 要求を記録します。logformat name には、logformat ディレクティブで設定をしたフォーマットの名前を指定します。デフォルト定義の squid というフォーマットで /var/log/squid/access.log 出力が設定されています。

cache_log filename

キャッシュの状況を記録するログファイルを指定します。既定値は /var/log/squid/cache.log です。なお、debug_options タグでは、このファイルへ記録するログレベルを変更することができます。

cache_store_log filename

キャッシュ管理の動作状況を記録するログファイルを指定します。キャッシュから消去されたオブジェクトやオブジェクトがキャッシュされた保存期間が記録されます。既定値は /var/log/squid/store.log です。

13.3.5. アクセスコントロールに関する設定

Squid でアクセスコントロールの設定を行うには、acl タグについて理解しておく必要があります。acl タグは、以下の書式で指定します。

acl aclname acltype string1 ...
acl aclname acltype filename

aclname には任意の名前を指定できます。filename を指定する場合は、string1 の部分を指定したファイル内に 1 行ずつ記述します。

acltype に指定できる代表的なものとしては、以下のタイプが存在します。また、指定した acltype により、string1 へ記述する内容は異なります。

acl aclname src ipaddress/netmask ...

ipaddress/netmask で指定した送信元の IP アドレスに対して acl 名(aclname)を設定します。また、IP アドレスを -(ハイフン)で区切ることにより、IP アドレスの範囲を指定することも可能です。

acl aclname dst ipaddress/netmask ...

ipaddress/netmask で指定した送信先の IP アドレスに対して acl 名(aclname)を設定します。

acl aclname srcdomain domainname ...

送信元の IP アドレスの逆引きを行い,その結果のドメイン名(domainname)に対して acl 名(aclname)を設定します。

acl aclname dstdomain domainname ...

送信先のドメイン名(URL から得たドメイン名が domainname)に対して acl 名(aclname)を設定します。

acl aclname url_regex URL ...

URL で指定した URL に対して acl 名(aclname)を設定します。

acl aclname URL urlpath_regex URL ...

URL に指定した文字列を含む URL に対して acl 名(aclname)を設定します。

acl aclname time day-abbrevs h1:m1-h2:m2

曜日や時刻に対して acl 名(aclname)を設定します。day-addrevs には、S(日曜日)、M(月曜日)、T(火曜日)、W(水曜日)、H(木曜日)、F(金曜日)、A(土曜日)の指定が可能です。h1:m1-h2:m2 には時刻の指定をします。h1:m1 は必ず h2:m2 より前の時刻でなければなりません。

acl aclname port port ...

port で指定したポート番号に対して acl 名(aclname)を設定します。

acl aclname proto protocol ...

protocol で指定したプロトコル名に対して acl 名(aclname)を設定します。

acl aclname method HTTP_method ...

HTTP_method で指定した HTTP のメソッドに対して acl 名(aclname)を設定します。

acl aclname browser browser

browser で指定したブラウザ名に対して acl 名(aclname)を設定します。

/etc/squid/squid.conf には、以下のような acl タグがデフォルトで設定されています。

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
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

上記のように定義された acl タグは http_access タグなどにより参照されます。http_access は、aclname の定義にマッチするクライアントのリクエストに対するアクセス制御を指定します。http_access の書式は以下の通りです。

http_access allow|deny [!]aclname

このように、aclname の指定にマッチするクライアントからのアクセスに対して、http_access タグで許可、拒否の設定を行います。Turbolinux 11 Server の標準設定では、以下のコメントにもあるように、すべてのクライアントからのアクセスを拒否する設定となっています。

acl all src 0.0.0.0/0.0.0.0
#Default:
# http_access deny all

したがって、基本的には、アクセスを許可するクライアントを http_access タグで指定していきますが、http_access タグを指定する際には、その順序に意味がありますので注意が必要です。Squid のアクセス制御では、記述された順番通りに http_access タグのルールを調査し、ルールとマッチしたパケットは、それ以降のルールを調査しません。つまり、パケットがルールとマッチした時点で調査は終了します。したがって、ルールの順序を誤ると本来、破棄すべきパケットが通過してしまう可能性がありますので注意してください。例えば、client.example.com へのアクセスを許可した後に、example.com ドメインを持つホストからのアクセスを拒否しても、client.example.com へのアクセスは許可されたままとなります。

Turbolinux 11 Server の /etc/squid/squid.conf には、あらかじめいくつかの http_access タグが記述されており、クライアントからのアクセスを制限しています。標準で設定されている http_access タグを以下に示します。

(1)|http_access allow manager localhost
(2)|http_access deny manager
(3)|http_access deny !Safe_ports
(4)|http_access deny CONNECT !SSL_ports
(5)|http_access allow localhost
(6)|http_access deny all

これらの httpd_access タグの意味は以下の通りです。

(1) は、manager と localhost という acl 名を指定しています。これは、cache_object プロトコルは localhost のみ使用可能とする指定です。cache_object はキャッシュマネージャが使用する特別なプロトコルです。

(2) は、(1) で許可した localhost 以外からのキャッシュマネージャの使用を拒否する指定です。

(3) は、acl 名 safe_port で指定したポート以外のアクセスを拒否する指定です。

(4) は、CONNECT メソッドの使用は SSL を使用したポート以外は拒否する指定です。

(5) は、localhost からのアクセスを許可する指定です。

(6) は、(1)〜(5)で許可したクライアント以外のすべてのクライアントからのアクセスを拒否する指定です。

上記の設定を参照するとわかるように、Turbolinux 11 Server の標準設定では、ローカルホスト以外からのプロキシサーバーへアクセスは、全て拒否しています。したがって、クライアントに対してプロキシサーバーの使用を許可するには、許可するホストを指定する必要があります。

標準の /etc/squid/squid.conf には、以下の行がコメントとして記述されていますので、この行の下にアクセスを許可するホストを記述していきます。

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

例えば、192.168.0.0/255.255.255.0 のネットワークに存在するクライアントからのアクセスを許可するには、以下のような設定を記述します。

acl our_networks src 192.168.0.0/255.255.255.0

省略

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

この例では、192.168.0.0/255.255.255.0 にマッチするホストに対し、our_networks という acl 名を指定し、http_access タグで our_networks に対するアクセスを許可しています。

13.3.6. 管理に関する設定

cache_mgr Admin_mailid

キャッシュサーバーのエラーメールを受信する管理者のメールアドレスを Admin_mailid に指定します。既定値は root です。

visible_hostname any_hostname

エラーメッセージなどにおいて、特別なホスト名を表示したい場合は、any_hostname にホスト名を指定します。既定値では、gethostname() 関数の戻り値が使用されます。

13.3.7. Squid の起動

必要な設定が終了したら Squid を起動するために以下のコマンドを実行します。項13.6 もあわせて参照してください。

# /etc/init.d/squid start

これで、内部ネットワークのクライアントが外部の Web サーバーへアクセスする場合には、このプロキシサーバーが代行することになります。なお、クライアント側では、使用している Web ブラウザの設定を変更し、起動したプロキシサーバーの IP アドレスとポート番号を指定する必要があります。