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 タグも重要です。以下では、これらのタグについて解説します。
プロキシサーバーがクライアントからのリクエストを待ち受けるポート番号を指定します。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 | 透過型プロキシの指定。 |
| tproxy | Linux 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 に変更されています。 |
Web コンテンツをキャッシュするメモリサイズを指定します。既定値は 8MB です。
キャッシュを整理するための上限と下限を指定します。キャッシュのためのメモリ領域が cache_swap_high(95%)に達したらアクセスされていないオブジェクトの整理を開始し、cache_swap_low(90%)になるとオブジェクトの整理を停止します。
キャッシュするオブジェクトの最大サイズです。このサイズより大きなオブジェクトはキャッシュの対象となりません。既定値は 4MB です。
Squid が行った IP アドレスの名前解決をキャッシュする数を指定します。既定値は 1024 です。
IP アドレスのキャッシュを整理するための上限と下限を指定します。キャッシュの数が ipcache_size の ipcache_high(95%)に達したらアクセスされていないキャッシュの整理を開始し、ipcache_low(90%)になると整理を停止します。
キャッシュディレクトリの指定です。使用する記憶装置システムのタイプ(Type)、キャッシュディレクトリのパス(Directory-Name)、容量(Maxobjsize)、Level-1 および Level-2 のディレクトリの個数(Level-1、Level-2)を指定します。Type は通常 ufs を指定します。キャッシュディレクトリの既定値は /var/spool/squid で容量は 100MB です。Level-1 はキャッシュディレクトリの下に作られるサブディレクトリの数で、デフォルトは 16 個です。Level-2 はそれぞれの Level-1 のディレクトリに作られるサブディレクトリの数で、デフォルトは 256 個です。また、cache_dir は複数行にわたって指定でき、これにより異なるパーティションのディスク領域を同時に使用することもできます。
Anonymous FTP サイトに接続する際のパスワードとして使用するメールアドレスを使用します。Squid 専用のメールアドレスを用意して、そのアドレスを指定するとよいでしょう。
Squid が FTP プロキシとして動作する際に、PASSIVE モードを使用するかどうかを指定します。PASSIVE モードを使用するには on、使用しないには off を指定します。
クライアントからの要求を記録するログファイルを指定します。ファイルは受け取った HTTP と ICP 要求を記録します。logformat name には、logformat ディレクティブで設定をしたフォーマットの名前を指定します。デフォルト定義の squid というフォーマットで /var/log/squid/access.log 出力が設定されています。
キャッシュの状況を記録するログファイルを指定します。既定値は /var/log/squid/cache.log です。なお、debug_options タグでは、このファイルへ記録するログレベルを変更することができます。
キャッシュ管理の動作状況を記録するログファイルを指定します。キャッシュから消去されたオブジェクトやオブジェクトがキャッシュされた保存期間が記録されます。既定値は /var/log/squid/store.log です。
Squid でアクセスコントロールの設定を行うには、acl タグについて理解しておく必要があります。acl タグは、以下の書式で指定します。
acl aclname acltype string1 ... acl aclname acltype filename |
aclname には任意の名前を指定できます。filename を指定する場合は、string1 の部分を指定したファイル内に 1 行ずつ記述します。
acltype に指定できる代表的なものとしては、以下のタイプが存在します。また、指定した acltype により、string1 へ記述する内容は異なります。
ipaddress/netmask で指定した送信元の IP アドレスに対して acl 名(aclname)を設定します。また、IP アドレスを -(ハイフン)で区切ることにより、IP アドレスの範囲を指定することも可能です。
ipaddress/netmask で指定した送信先の IP アドレスに対して acl 名(aclname)を設定します。
送信元の IP アドレスの逆引きを行い,その結果のドメイン名(domainname)に対して acl 名(aclname)を設定します。
送信先のドメイン名(URL から得たドメイン名が domainname)に対して acl 名(aclname)を設定します。
URL で指定した URL に対して acl 名(aclname)を設定します。
URL に指定した文字列を含む URL に対して acl 名(aclname)を設定します。
曜日や時刻に対して acl 名(aclname)を設定します。day-addrevs には、S(日曜日)、M(月曜日)、T(火曜日)、W(水曜日)、H(木曜日)、F(金曜日)、A(土曜日)の指定が可能です。h1:m1-h2:m2 には時刻の指定をします。h1:m1 は必ず h2:m2 より前の時刻でなければなりません。
port で指定したポート番号に対して acl 名(aclname)を設定します。
protocol で指定したプロトコル名に対して acl 名(aclname)を設定します。
HTTP_method で指定した HTTP のメソッドに対して acl 名(aclname)を設定します。
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 に対するアクセスを許可しています。
キャッシュサーバーのエラーメールを受信する管理者のメールアドレスを Admin_mailid に指定します。既定値は root です。
エラーメッセージなどにおいて、特別なホスト名を表示したい場合は、any_hostname にホスト名を指定します。既定値では、gethostname() 関数の戻り値が使用されます。
必要な設定が終了したら Squid を起動するために以下のコマンドを実行します。項13.6 もあわせて参照してください。
# /etc/init.d/squid start |
これで、内部ネットワークのクライアントが外部の Web サーバーへアクセスする場合には、このプロキシサーバーが代行することになります。なお、クライアント側では、使用している Web ブラウザの設定を変更し、起動したプロキシサーバーの IP アドレスとポート番号を指定する必要があります。