29.4 設定ファイル/etc/squid/squid.conf

Squidのプロキシサーバ設定は、すべて/etc/squid/squid.confファイル内で行います。Squidを初めて起動する場合、このファイル内で設定を変更する必要はありませんが、外部クライアントは最初はアクセスを拒否されます。プロキシはlocalhostに使用できます。デフォルトポートは3128です。プリインストール済みの/etc/squid/squid.conf設定ファイルには、オプションの詳細と多数の例が用意されています。ほぼすべてのエントリは(コメント行を示す) #記号で始まり、関連する指定が行末にあります。示されている値は、ほぼ常にデフォルト値に関係しているため、パラメータを実際に変更せずにコメント記号を削除しても、ほとんどの場合に影響はありません。サンプルはそのまま残し、変更したパラメータと共にオプションを次の行に挿入することをお勧めします。この方法では、簡単にデフォルト値に戻し、変更と比較することができます。

[Tip]更新後の設定ファイルの変更について

Squidを旧バージョンから更新した場合は、新規の/etc/squid/squid.confを編集し、旧バージョンのファイルで行った変更のみを適用することをお勧めします。旧バージョンのsquid.confファイルを使用すると、オプションが変更されたり新たな変更が加えられているために、設定が機能しなくなる危険性があります。

29.4.1 一般設定オプション(選択)

http_port 3128

これは、Squidがクライアントリクエストをリスンするポートです。デフォルトポートは3128ですが、8080も一般的です。必要な場合は、複数のポート番号を空白で区切って指定します。

cache_peer hostname type proxy-port icp-port

ここでは、たとえばISPのプロキシを使用する場合に、親プロキシを入力します。hostnameには、使用するプロキシの名前とIPアドレスを入力し、typeにはプロキシを入力します。proxy-port には、ブラウザで使用する親の演算子でも指定されているポート番号 (通常は 8080) を入力します。icp-portは、7に設定するか、親のICPポートが不明で、その使用がプロバイダに無関係な場合は0に設定します。また、ICPプロトコルの使用を禁止するため、ポート番号に続けてdefaultおよびno-queryを指定することもできます。このように指定すると、Squidはプロバイダのプロキシに関する限り通常のブラウザのように動作します。

cache_mem 8 MB

このエントリは、Squidで頻繁に求められる応答に対して使用できるメモリ容量を定義します。デフォルトは8MBです。これは、Squidのメモリ使用量を指定せず、メモリ使用量を超えても構いません。

cache_dir ufs /var/cache/squid/ 100 16 256

cache_dirエントリは、すべてのオブジェクトが格納されるディスク上のディレクトリを定義します。末尾の数値は、使用される最大ディスク領域(単位MB)と第1レベルと第2レベルのディレクトリ数を示します。ufsパラメータは残しておく必要があります。デフォルトでは、/var/cache/squid ディレクトリに 100MB のディスク領域を使用して 16個のサブディレクトリが作成され、各サブディレクトリにぞれぞれ 256個以上のサブディレクトリが含まれます。使用するディスク領域を指定するときには、予備のディスク領域を十分に残しておきます。ここでは、使用可能ディスク領域の 50 ~ 80%が最も有効です。ディレクトリが多すぎるとパフォーマンスが低下する可能性があるため、ディレクトリに関する最後の2つの数値を増やす場合は注意してください。複数のディスクでキャッシュを共有する場合は、複数のcache_dir行を入力します。

cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log

この3つのエントリには、Squidのすべてのアクションが記録されるパスを指定します。通常、ここでは何も変更しません。Squidの使用負荷が大きい場合は、キャッシュとログファイルを複数のディスクに分散すると有効な場合があります。

emulate_httpd_log off

このエントリをonに設定すると、読込み可能なログファイルが生成されます。ただし、一部の評価プログラムではこの形式のログファイルを解釈できません。

client_netmask 255.255.255.255

このエントリを使用して、ログファイルでクライアントのIPアドレスをマスクします。ここで「255.255.255.0」と入力すると、IPアドレスの最終桁はゼロに設定されます。このようにして、クライアントのプライバシーを保護できます。

ftp_user Squid@

このエントリでは、Squidで匿名FTPログインに使用する必要のあるパスワードを設定します。一部のFTPサーバには電子メールアドレスの妥当性がチェックされるため、ここでは有効な電子メールアドレスを指定できます。

cache_mgr webmaster

Squidが予期せずにクラッシュした場合のメッセージ送信先となる電子メールアドレスを指定します。デフォルトはwebmasterです。

logfile_rotate 0

squid -k rotateを実行すると、Squidは保護されたログファイルを循環利用することができます。このプロセス中にファイルに番号が割り当てられ、指定した値に達すると最も古いファイルが上書きされます。SUSE Linuxではログファイルのアーカイブと削除が/etc/logrotate/squid設定ファイル内で検出された自動実行ジョブにより実行されるため、デフォルト値は0です。

append_domain <domain>

append_domainには、未指定の場合に自動的に追加されるドメインを指定します。通常、ブラウザに「www」と入力して独自Webサーバにアクセスできるように、このエントリには独自ドメインを入力します。

forwarded_for on

このエントリをoffに設定すると、SquidではHTTPリクエストからクライアントのIPアドレスとシステム名が削除されます。設定しない場合は、次のような行がヘッダに追加されます。

X-Forwarded-For: 192.168.0.0
negative_ttl 5 minutes; negative_dns_ttl 5 minutes

通常、これらの値を変更する必要はありません。ただし、ダイヤルアップ接続を使用する場合は、インターネットが一時的にアクセス不能になる場合があります。Squidは、失敗したリクエストを記録してから新規リクエストの発行を拒絶しますが、インターネット接続は再確立されています。このような場合は、minutessecondsに変更し、ブラウザの更新機能を使用すると、数秒後にダイヤルアッププロセスが再開されます。

never_direct allow acl_name

Squidがインターネットからリクエストを直接取り込むのを防ぐには、上記のコマンドを使用して他のプロキシに強制的に接続します。このプロキシは、あらかじめcache_peerに入力しておく必要があります。acl_nameとしてallを指定すると、すべてのリクエストは「」に直接転送されます。たとえば、プロキシの使用を奨励しているプロバイダや、ファイアウォールによるインターネットへのダイレクトアクセスを拒否しているプロバイダを使用している場合は、この設定が必要な場合があります。

29.4.2 アクセス制御オプション

Squidには、プロキシへのアクセスを制御する詳細システムが用意されています。ACLを実装することで、このシステムを簡単かつ包括的に設定できます。そのためには、順次処理されるルールを持ったリストが必要です。ACLは定義しなければ使用できません。alllocalhostなどのデフォルトACLがいくつか用意されています。ただし、ACLを定義しただけで、実際に適用されるわけではありません。実際に適用するには、http_accessルールも共に定義する必要があります。

acl <acl_name> <type> <data>

ACLの定義には、3つ以上の指定が必要です。名前 <acl_name> は任意に選択できます。<type> は、/etc/squid/squid.conf ファイルの ACCESS CONTROLS セクションにある多数のオプションから選択できます。<data> の指定は個々の ACL タイプに応じて異なり、ホスト名、IP アドレスまたは URL を使用するなど、ファイルから読み込むこともできます。次に単純な例を示します。

acl mysurfers srcdomain .my-domain.com
acl teachers src 192.168.1.0/255.255.255.0
acl students src 192.168.7.0-192.168.9.0/255.255.255.0
acl lunch time MTWHF 12:00-15:00
http_access allow <acl_name>

http_accessでは、プロキシの使用を許可されるユーザと、インターネット上でどのユーザが何にアクセスできるかを定義します。それには、ACLを指定する必要があります。localhostおよびallの定義はすでに前述しており、この2つのACLではdenyまたはallowを介してアクセスを拒否または許可できます。多数のhttp_accessエントリを含むリストを作成できます。各エントリは上から下へと処理され、発生順に従って個々のURLへのアクセスが許可または拒否されます。最後のエントリは、常にhttp_access deny allにする必要があります。次の例では、localhostはすべてに自由にアクセスできますが、他のホストはいずれもアクセスを完全に拒否されます。

http_access allow localhost
http_access deny all

また、このルールの使用を示す次の例では、グループteachersは常にインターネットへのアクセス権を持ちます。グループstudentsは月曜日から金曜日のランチタイム中にのみアクセス権を取得します。

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

http_accessエントリを含むリストは、読みやすいように/etc/squid/squid.confファイルの指定の位置にのみ入力してください。つまり、次の2つの間に入力します。

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

 

http_access deny all
redirect_program /usr/bin/squidGuard

このオプションでは、squidGuardなど、望ましくないURLをブロックできるリダイレクタを指定します。インターネットアクセスは、プロキシ認証と適切なACLを使用してユーザグループごとに個別に制御できます。 squidGuardは別途にインストールして設定できるパッケージです。

auth_param basic program /usr/sbin/pam_auth

ユーザのプロキシ認証が必要な場合は、pam_authなどの対応するプログラムを設定します。ユーザがpam_authに初めてアクセスすると、ログインウィンドウが表示され、ユーザ名とパスワードを入力することになります。また、有効なログインを持つクライアント以外はインターネットを使用できないように、ACLも必要です。

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

proxy_authの後のREQUIREDは、許可されるユーザ名のリストまたはそのリストへのパスで置き換えることができます。

ident_lookup_access allow <acl_name>

ここでは、ACLで定義されたクライアントすべてについてidentリクエストを実行させ、各ユーザの識別情報を検索させます。<acl_name>all を適用すると、すべてのクライアントに対して有効になります。また、すべてのクライアントでidentデーモンを実行する必要があります。Linuxの場合、そのためにはpidentdパッケージをインストールします。Microsoft Windows の場合は、インターネットからダウンロードできるフリーソフトウェアが提供されています。identが正常に検索されたクライアントのみが許可されるように、対応するACLをここで定義します。

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

この場合も、REQUIREDを許可されるユーザ名のリストで置き換えることができます。identを使用すると、その検索がリクエストごとに繰り返されるため、アクセス速度が少し低下する場合があります。