squid.conf の設定
squid.conf では主に acl を定義し、その acl を使ってアクセス制御ルール (http_access allow/deny)を作っていきます。設定変更時は SQUID の再起動 (systemctl restart squid) が必要です。
acl の書式
acl-name は ACL を識別する名前です。
acl の種類の例
src = 送信元IP/NWアドレス
dst = 宛先IP/NWアドレス
dstdomain = 宛先ドメイン(example.com と書けば abc.example.com も a.b.c.example.comも含まれる)
port = 宛先ポート番号
method = http メソッド (GET , PUT , CONNECT , HEAD , DELETE 等)
url_regex = http の宛先 URL の正規表現
referer_regex = http の Referer の正規表現
acl のサンプル例
acl の OR 条件は、縦に並べても横に並べてもOKです。例えば以下は共に(送信元が 10.1.1.1 もしくは 10.1.1.2) を意味します。
パターン①
パターン②
acl Clients src 10.1.1.2
url_regex は宛先 URL の正規表現を指定できます。以下は www.example.com, www1.exapmle.com, www2.example.com, www3.example.com の各サーバへのアクセスに合致する acl です。(referer_regex も書き方は同様です。)
acl URL1 url_regex ^http://www[1-3]?\.exapmle\.com/
http_access の順序
http_access は上から順番に評価していきます。ルールに合致したら以降は見ません。
http_access allow localnet
http_access deny all
と書かれていたら、1 行目の Clietns の acl に引っ掛かったらアクセス拒否、それ以外で localnet の acl に引っ掛かったらアクセス許可、それにも引っ掛からなかったらアクセス拒否される、というルールになります。
http_access の複数条件
AND条件を指定したい場合は http_access の後に記載する acl-name を横並びにします。例えば送信元が 10.1.1.0/24 、かつ、宛先ドメインが example.com の通信を許可する場合は以下のようにします。
acl SVdom dstdomain example.com test.co.jp
http_access allow Clients SVdom
AND 条件なのでこれに dst の acl も付けてはいけません。(宛先 URL を限定し、かつ宛先 IP アドレスも限定することになる)
manager は最初から準備されている cache manager 宛を意味する acl の名前です。デフォルト設定となっている
http_access allow deny manager
は、cache manager へのアクセスをローカルホストに限定するルールです。また、
は、Safe_ports で定義したポート番号以外の宛先ポートを拒否するルールで ( ! は否定を意味する)、
は、SSL_ports 以外の CONNECT メソッド接続を拒否するルールです。
ホワイトリストの作り方
ホワイトリストはファイルに追記していくタイプで作る方が良いでしょう。例えば /etc/squid/acl/whitelist.txt というファイルを作成し、そこにアクセス許可するドメインを追記していきます。
--- /etc/squid/acl/whitelist.txt ---
test.co.jp example.com nesuke.com
----
次に squid.conf に以下の acl を追加します。
そして同様に squid.conf に以下のルールを追加します。
http_access deny all
request_header_access
http リクエストのヘッダの情報を削除することができます。
例えば Referer: www.example.com がセットされた場合のみは Referer を削除せず、それ以外は全て Referer を削除したい場合は以下のようにします。
request_header_access Referer allow URL2
request_header_access Referer deny all
request_header_replace
http リクエストのヘッダの情報を置き換えることができます。
例えば http ヘッダの User-Agent に nesuke-proxy とセットしたい場合は以下のようにします。
コメント