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か所です。
- アクセスを許可する接続元アドレスを設定する
- アクセスを許可するポート番号を設定する
- squid のポート番号を設定する
- キャッシュサイズを設定する
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
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
http_port 8080 の行がポート番号なので、ここを変更します。
特に無ければ、このまま使用します。
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システム開発・運用、サーバー・ネットワーク設計から保守まで 雲屋ネットワークにおまかせ
コメント