2021年1月11日月曜日

Squid入門

プロキシサーバーといえばデファクトスタンダードともいえるSquid。このSquidの基本的な設定について記載する。

プロキシサーバーとして動作する設定ではあるが、本記事の内容だけでは、パフォーマンス面やセキュリティ面において考慮不足となる事項が多数ある点に注意すること。

Squidのバージョン

今回設定したSquidのバージョンは以下の通り。
# squid -v
------------------------------
Squid Cache: Version 3.5.20

設定ファイル「squid.conf

Squidの設定ファイルである、/etc/squid/squid.confファイルをコメント付きで以下に記載する。細かな説明は後述する。
# cat /etc/squid/squid.conf
------------------------------
# 接続クライアントのネットワークを指定
acl localnet src 192.168.33.0/24
acl localnet src 192.168.11.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

# /etc/squid/blacklistファイルに拒否するドメインを記載
acl blacklist dstdomain "/etc/squid/blacklist"

http_access deny blacklist

http_access deny !Safe_ports    # Safe_portsで指定したポート以外を拒否
http_access deny CONNECT !SSL_ports # SSL_portsで指定したポート以外を拒否

# キャッシュマネージャーへのアクセスはlocalhostのみ許可
http_access allow localhost manager
http_access deny manager

# 接続クライアントの許可設定
http_access allow localnet      # localnetで指定したネットワークを許可
http_access allow localhost     # localhostを許可
http_access deny all            # すべてを拒否

# 待ち受けポートを8080に指定
http_port 8080

# キャッシュの設定
cache_mem 256 MB
cache_dir ufs /var/spool/squid 200 16 256

# coredump出力先を設定
coredump_dir /var/spool/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

# エラーページにバージョンを表示させない
httpd_suppress_version_string on

squid.confの詳細説明

acl

その名の通りACL (Access Control List)を設定する。ここで作成したACLをhttp_access文で指定し、アクセス制御を行う。

今回は以下を設定している。
  • localnet:squidを利用するクライアントのネットワークアドレス
  • SSL_ports:httpsで利用するポート
  • Safe_ports:httpで利用するポート
  • CONNECT:httpsで利用するメソッド
  • blacklist:アクセスを拒否するドメインを指定する。/etc/squid/blacklistファイルにテキストで羅列する

http_access

実際のアクセス制御を設定する。今回は以下を設定している。
  1. blacklistに記載されたドメインへのアクセスは拒否
  2. Safe_ports以外のポートを利用したアクセス要求は拒否
  3. SSL_ports以外のポートでCONNECTメソッドを利用するアクセス要求は拒否
  4. キャッシュマネージャー(※)へのアクセスはlocalhostのみ許可
  5. squidへのアクセスはlocalnetとlocalhostのみ許可
  6. 上記に該当しない通信はすべて拒否
※キャッシュマネージャー:Squidの統計情報を表示するCGIユーティリティ

http_accessは上から順番に評価されていくので、複雑な設定をする際は評価順を考慮すること。

http_port

Squidが待ち受けるポート番号を指定する。今回は8080で設定。

cache_mem / cache_dir

cache_memはキャッシュとして使用するメモリ量を指定する(デフォルト256MB)。

cache_dirは、キャッシュとして使用するディスク量を指定する。cache_dir文において、「ufs」を指定しているが、ufsとはSquidで使用されるファイルフォーマットとなる。ufsを指定した際の構文は以下の通りとなる。
cache_dir ufs Directory-Name Mbytes L1 L2

Mbytesは確保するファイル容量となる。L1、L2はキャッシュディレクトリに作成するディレクトリの分割数を示す。L1=16、L2=256がデフォルトであり、特に変更する必要はないだろう。

なお、Squidのキャッシュディレクトリを作成する際は、以下コマンドを実行する。
# squid -z

coredump_dir

coredumpを出力する際のディレクトリを指定する。

refresh_pattern

キャッシュの更新期間に関する設定を行う。構文は以下の通り。
refresh_pattern [-i] regex min percent max [options]

今回、squid.confでは以下の通り設定している。
#キャッシュ更新間隔の設定
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

例えば、ftpサイトのキャッシュは、最低1440分(1日)保持、最大10080分(7日)保持される。1日~7日の間は、対象ファイルの「鮮度」を計算して、キャッシュ要否を判断する。鮮度の計算は以下となり、この計算結果が20%を下回った場合はデータはまだ新しいものと判断し、キャッシュされたデータを読み込む動作をする。

 鮮度 = キャッシュ経過時間 / 対象ファイルの作成日からの経過時間

httpd_suppress_version_string

Squidのエラーページのフッターにsquidのバージョン表示をさせない設定となる。一般的に使用しているソフトウェアのバージョン情報は利用者に開示しないことがセオリーとなるので、設定しておいた方がよいだろう。

▼変更前
Fri, 29 Dec 2017 12:47:20 GMTにt3023ce72 (squid/3.5.20)が生成しました。

▼変更後
Fri, 29 Dec 2017 12:45:04 GMTにt3023ce72 (squid)が生成しました。

Squidのキャッシュを無効化をする方法

近年では、動的に更新されるWebページが多く存在しており、そのようなサイトではキャッシュされた情報が影響して表示がうまくできなくなる場合がある。また、特にインターネット回線速度も十分にあるような環境においては、キャッシュを無効化することも選択肢のひとつとなるだろう。

Squidにてキャッシュを無効化するには、squid.confに以下2行を追加すればよい。
acl NOCACHE src all
cache deny NOCACHE

設定の反映方法

以下コマンドでSquidをreloadすることで設定が反映される。
# systemctl reload squid

参考

・Squid configuration directive cache_dir
http://www.squid-cache.org/Doc/config/cache_dir/

・Squid configuration directive cache_mem
http://www.squid-cache.org/Doc/config/cache_mem/

・Squid configuration directive refresh_pattern
http://www.squid-cache.org/Doc/config/refresh_pattern/

更新履歴

  • 2018/1/4 新規作成
  • 2021/1/11 キャッシュ無効化設定を追記。また、全体的に記事を整形

2 件のコメント:

  1. httpd_suppress_version_stringの例は逆ではないでしょうか?

    返信削除
  2. 確かにそうですね。。。修正しました。

    返信削除

人気の投稿