パソコン鳥のブログ

アクセスカウンタ

zoom RSS squid の設定

<<   作成日時 : 2017/03/18 09:25   >>

トラックバック 0 / コメント 0

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システム開発・運用、サーバー・ネットワーク設計から保守まで 雲屋ネットワークにおまかせ

テーマ

関連テーマ 一覧


月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
squid の設定 パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる