Squid の設定ファイルは、/etc/squid/squid.conf です。/etc/squid/squid.conf には非常に多くのコメントが記述されており、設定に関する詳細はこのドキュメントから得ることができます。また、/etc/squid/squid.conf には非常に多くの設定項目(タグ)が存在しますが、基本的なプロキシサーバーを構築するために設定すべきタグはそれほど多くはありません。
また、各タグの既定値は、次のように #Default: とコメントで記述されています。この既定値をそのまま使用する場合はコメントを外す必要はありません。
#Default: # http_port 3128 |
本ガイドでは、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 # cache_access_log /var/log/squid/access.log # cache_log /var/log/squid/cache.log # cache_store_log /var/log/squid/store.log # cache_mgr root # visible_hostname |
上記タグの他にも Squid へのアクセス制御を指定する acl や http_access タグも重要です。以下では、これらのタグについて解説します。
プロキシサーバーがクライアントからのリクエストを待ち受けるポート番号を指定します。既定値は 3128 なので、HTTP プロキシのポート番号として一般的に使用される 8080 に変更したい場合にはコメントをはずして修正する必要があります。
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 要求を記録します。既定値は /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 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 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 は、http_port で指定したポートへのアクセス制御を指定します。http_access の書式は以下の通りです。
http_access allow|deny [!]aclname |
このように、aclname の指定にマッチするクライアントからのアクセスに対して、http_access タグで許可、拒否の設定を行いますが、Squid の標準設定では、以下のコメントにもあるように、すべてのクライアントからのアクセスを拒否する設定となっています。
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 10 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 |
これらの httpd_access タグの意味は以下の通りです。
(1) は、manager と localhost という acl 名を指定しています。これは、cache_object プロトコルは localhost のみ使用可能とする指定です。cache_object はキャッシュマネージャが使用する特別なプロトコルです。
(2) は、(1) で許可した localhost 以外からのキャッシュマネージャの使用を拒否する指定です。
(3) は、acl 名 safe_port で指定したポート以外のアクセスを拒否する指定です。
(4) は、CONNECT メソッドの使用は SSL を使用したポート以外は拒否する指定です。
(5) は、localhost 以外のアクセスを拒否する指定です。
上記の設定を参照するとわかるように、Turbolinux 10 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 internal src 192.168.0.0/255.255.255.0 省略 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS http_access allow internal |
この例では、192.168.0.0/255.255.255.0 にマッチするホストに対し、internal という acl 名を指定し、http_access タグで intenal に対するアクセスを許可しています。
キャッシュサーバーのエラーメールを受信する管理者のメールアドレスを Admin_mailid に指定します。既定値は root です。
エラーメッセージなどにおいて、特別なホスト名を表示したい場合は、any_hostname にホスト名を指定します。既定値では、gethostname() 関数の戻り値が使用されます。
必要な設定が終了したら Squid を起動するために以下のコマンドを実行します。項12.6 もあわせて参照してください。
# /etc/init.d/squid start |
これで、内部ネットワークのクライアントが外部の Web サーバーへアクセスする場合には、このプロキシサーバーが代行することになります。なお、クライアント側では、使用している Web ブラウザの設定を変更し、起動したプロキシサーバーの IP アドレスとポート番号を指定する必要があります。