サーバソフトウェア

【squid.conf】acl設定書式 ~複数条件や正規表現(url_regex), http_accessの順番, whitelist~

squid.conf の設定

squid.conf では主に acl を定義し、その acl を使ってアクセス制御ルール (http_access allow/deny)を作っていきます。設定変更時は SQUID の再起動 (systemctl restart squid) が必要です。

acl の書式

acl  [acl-name]  [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.1 10.1.1.2

パターン②

acl Clients src 10.1.1.1
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 deny Clients
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 Clients src 10.1.1.0/24
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 localhost manager
http_access allow deny manager

は、cache manager へのアクセスをローカルホストに限定するルールです。また、

http_access deny !Safe_ports

は、Safe_ports で定義したポート番号以外の宛先ポートを拒否するルールで ( ! は否定を意味する)、

http_access deny CONNECT !SSL_ports

は、SSL_ports 以外の CONNECT メソッド接続を拒否するルールです。

ホワイトリストの作り方

ホワイトリストはファイルに追記していくタイプで作る方が良いでしょう。例えば /etc/squid/acl/whitelist.txt というファイルを作成し、そこにアクセス許可するドメインを追記していきます。

--- /etc/squid/acl/whitelist.txt ---

test.co.jp
example.com
nesuke.com

----

次に squid.conf に以下の acl を追加します。

acl Whitelist dstdomain "/etc/squid/acl/Whitelist.txt"

そして同様に squid.conf に以下のルールを追加します。

http_access allow Whitelist
http_access deny all

request_header_access

http リクエストのヘッダの情報を削除することができます。

例えば Referer: www.example.com がセットされた場合のみは Referer を削除せず、それ以外は全て Referer を削除したい場合は以下のようにします。

acl URL2 referer_regex ^http://www\.exapmle\.com/
request_header_access Referer allow URL2
request_header_access Referer deny all

request_header_replace

http リクエストのヘッダの情報を置き換えることができます。

例えば http ヘッダの User-Agent に nesuke-proxy とセットしたい場合は以下のようにします。

request_header_replace User-Agent nesuke-proxy

コメント

タイトルとURLをコピーしました