squid の設定

ALL
スポンサーリンク

Proxyサーバ squid の設定についてです。
以下、CentOS6 での設定です。

  • 設定サンプル
  • 最低限の設定変更箇所
  • 詳しい説明

スポンサーリンク

設定サンプル

squid の設定ファイルは次の場所にあり、これを修正します。

/etc/squid/squid.conf

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl nodes src 192.168.1.0/24
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
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow nodes
http_access deny all
http_port 8080
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
cache_mem 32 MB
cache_dir ufs /var/spool/squid 4000 16 256
maximum_object_size 65536 KB
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

最低限の設定変更箇所

次の4か所です。

  1. アクセスを許可する接続元アドレスを設定する
  2. acl nodes src 行で指定します。
    書式は、
    acl nodes src アドレス
    です。
    アドレスは、IPアドレス(xx.xx.xx.xxの形式)や、CIDR表記(xx.xx.xx.xx/yyの表記)で指定します。
    例)
    acl nodes src 192.168.1.0/24
    acl nodes src 192.168.24.100

  3. アクセスを許可するポート番号を設定する
  4. acl Safe_ports port 行で指定します。
    書式は、
    acl Safe_ports port ポート番号
    です。
    ポート番号は、いくつも列挙できます。ポート番号の範囲をハイフン(-)でも表記できます。
    例)
    acl Safe_ports port 21 80
    acl Safe_ports port 210
    acl Safe_ports port 1025-65535

  5. squid のポート番号を設定する
  6. http_port 8080 の行がポート番号なので、ここを変更します。
    特に無ければ、このまま使用します。

  7. キャッシュサイズを設定する
  8. cache_mem 32 MB
    cache_dir ufs /var/spool/squid 4000 16 256
    maximum_object_size 65536 KB
    

    特に無ければ、このまま使用します。
    変更する場合は、次の個所で設定します。

    キャッシュが使用するメモリサイズ(MB):cache_mem の 32 を変更
    キャッシュが使用するディスクサイズ(MB):cache_dir の 4000 を変更
    キャッシュできる最大ファイルサイズ(KB):maximum_object_size の 65536 を変更

詳しい説明

aclの定義

アクセス権限を示す acl(アクセスコントロールリスト)を定義します。
書式は「acl acl名 タイプ 引数」です。
“acl名” は acl を表す名前です。自由につけます。squid では、このacl名を指定して各種設定を記述します。
“タイプ” は、acl のタイプを指定します。以降で説明します。
“引数” は、”タイプ” によって異なります。

定義した acl それぞれについて、後述の http_access 行で許可/拒否の設定を行います。

なお、squid へのアクセスはデフォルトでは全て拒否の設定です。
(後述の http_access deny all)

従って、明示的に許可したいアクセスを記述しておく必要があります。

acl manager proto cache_object

squid をキャッシュサーバとして動作させる場合は、この行が必要です。
キャッシュマネージャへのアクセス権を設定しています。
タイプが proto の場合、引数はプロトコルを示します。
ここでは acl名 manager として、タイプ:proto、プロトコル:cache_object を定義しています。

acl localhost src 127.0.0.1/32 ::1
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

ここでは acl名 localhost,localnet として、ローカルホスト/ローカルネットのアドレスを定義しています。
タイプが src の場合、引数は squidへの接続元アドレスを示します。
アドレスは、IPアドレス(xx.xx.xx.xxの形式)や、CIDR表記(xx.xx.xx.xx/yyの表記)で指定します。
ここで指定したアドレスからの squid へのアクセスは、後述の
http_access allow localhost
http_access allow localnet
によって許可されます。

acl nodes src 192.168.1.0/24

ここでは acl名 nodes として、アドレスを定義しています。
タイプが src の場合、引数は squidへの接続元アドレスを示します。
アドレスは、IPアドレス(xx.xx.xx.xxの形式)や、CIDR表記(xx.xx.xx.xx/yyの表記)で指定します。
ここで指定したアドレスからの squid へのアクセスは、後述の
http_access allow nodes
によって許可されます。

ポートの定義

acl SSL_ports port 443

SSL通信用のポートをacl名 SSL_ports で定義しています。

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のタイプが port の場合、引数にはポート番号を指定します。
ここでは、acl名 Safe_ports で、ポート 80,21,443,70,… を定義しています。

ここで指定したポート以外へのアクセスは、後述の
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
によって拒否されます。

なお、SSL通信(ポート番号443) は、acl名 SSL_ports でも、acl名 Safe_ports でも定義することに注意して下さい。

acl CONNECT method CONNECT

aclのタイプが method の場合、引数にはHTTPのリクエストメソッドを指定します。
ここでは、acl名 CONNECT で、HTTPのリクエストメソッド CONNECT を定義しています。

squidへのアクセスの許可/拒否

先に定義した各aclについて、squidへのアクセスの許可(allow)/拒否(deny)を指定します。
書式は
許可の場合: http_access allow [!]acl名
拒否の場合: http_access deny [!]acl名
です。
acl名の初めに ! を付ければ、「指定された acl名 以外」の意味になります。

acl名を複数列挙した場合は、列挙されたacl全てを満たす場合になります

http_access allow manager localhost

例えば上の設定では、アクセスが acl「manager」「localhost」を満たす場合に、そのアクセスを許可します。
「manager」はキャッシュマネージャへのアクセス、「localhost」は 127.0.0.1/32 ::1 なので、この行の意味は、「ローカル(127.0.0.1/32 ::1)からのキャッシュマネージャへのアクセスのみ許可(allow)する」です。

http_access deny manager

manager(キャッシュマネージャへのアクセス)を拒否(deny)します。
但し、先の行の「http_access allow manager localhost」でローカル(127.0.0.1/32 ::1)からのアクセスは、既に許可されていることに注意して下さい。

http_access deny !Safe_ports

acl「Safe_ports」で定義されていないポート番号へのアクセスを拒否しています。

http_access deny CONNECT !SSL_ports

acl名 CONNECT で定義の条件を満たし、かつ、acl名 SSL_ports で定義の条件を満たさないものを、拒否(deny)します。
(acl名の初めに ! を付ければ、指定された acl を満たさない場合になります)
(acl名を複数列挙した場合は、列挙された acl全てを満たす場合になります)

SSL_ports以外の CONNECTメソッドによる接続を拒否(deny)します。

http_access allow localnet
http_access allow localhost

先述の、acl localnet~,acl localhost~ の行で定義されていたローカルホスト/ローカルネットからのアクセスを許可します。

http_access allow nodes

先述の、acl nodes~ の行で定義されていたアドレスからのアクセスを許可します。

http_access deny all

最後に、ここまでの設定で許可されなかった、残り全てのアクセスは拒否します。

http_port 8080

squid のポート番号を設定します。

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

キュッシュの保存期間を設定します。
書式は、
refresh_pattern [-i] regex min percent max [options]
です。

regex:
キャッシュ対象を正規表現で指定します。-i を付けると大文字小文字の区別を付けません。

キャッシュから返すか、サーバから直接取得するかは、min,percent,max の値によります。

キャッシュされてからmin(分)未満の場合:
キャッシュから返します。

キャッシュされてからmax(分)を超えた場合:
キャッシュから返さずにサーバから取得します。

キャッシュされてからmin(分)~max(分)の場合:
「min÷サーバで作成(変更)されてからの時間(分)」が percent%以下の場合、キャッシュから返します。
超えていた場合は、キャッシュから返さずにサーバから取得します。

例えば、動的コンテンツである cgi はキャッシュしないように、URL に cgiで良く使われる cgi-bin が含まれていたらサーバから取得するように下記のようにしてします。

refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
cache_mem 32 MB
cache_dir ufs /var/spool/squid 4000 16 256
maximum_object_size 65536 KB

キャッシュの設定です。
cache_mem はキャッシュが使用するメモリサイズ(MB)です。
cache_dir はキャッシュとして使用するディスクサイズを指定します。
書式は
cache_dir ufs キャッシュディレクトリ キャッシュ用ディスクサイズ(MB) L1レベルのディレクトリ数 L2レベルのディレクトリ数
です。
“キャッシュディレクトリ” 下に、”L1レベルのディレクトリ数” の数のディレクトリが出来、更にその各ディレクトリ下に “L2レベルのディレクトリ数” の数のディレクトリが出来て、キャッシュを構成します。
maximum_object_size はキャッシュできる最大ファイルサイズ(KB)です。

request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

プロキシ経由でアクセスしているように見せない為の設定です。
プロキシで利用される環境変数 HTTP_X_FORWARDED_FOR,HTTP_VIA,HTTP_CACHE_CONTROL を接続先WEBサーバに送信しないようにします。

以上、squidの設定についてでした。

参考

squid : Optimising Web Delivery
実践でも役立つLPICドリル(11):Apache&Squidアクセス制御/ユーザー認証の設定 (2/4) – @IT
Squidでのキャッシュ保存期間の設定(refresh_pattern) – takami_hirokiの日記
squidを使う | 技術情報 | Webシステム開発・運用、サーバー・ネットワーク設計から保守まで 雲屋ネットワークにおまかせ

コメント