Skip to content

Ubuntu に squid で BASIC 認証付き Proxy を構築する

以前に RedHat 系 Linux を前提とした squid で「BASIC 認証アリ / キャッシュしない」Proxy を作る というメモを書きました。 今回は Ubuntu 20.04LTS 環境へ同様に squid をインストールする方法をメモしておきます。 以前のメモ同様、以下の方針とします。

  • BASIC 認証させる
  • キャッシュさせない(配下のコンテンツが頻繁に更新される想定)

squid のインストール

apt で squid をインストールします。 後の手順で BASIC 認証用のパスワードを生成する際に htpasswd を利用するので apache2-utils もインストールしておきます。

1
apt -y install squid apache2-utils

今回は squid 4.10 がインストールされました。

1
2
# squid -v
Squid Cache: Version 4.10

設定ファイルの修正

squid.conf の設定ファイルは /etc/squid/squid.conf にあります。 これを以下のように修正します。 下記の例では Listen するポートをデフォルトの 3128/TCP のままにしていますが、必要に応じて変更します。 BASIC 認証用のパスワードファイルは /etc/squid/htpasswd に作成する想定で設定します。 BASIC 認証に使うライブラリが RedHat 系だと /usr/lib64/squid/basic_ncsa_auth なのですが、Ubuntu ではディレクトリが異なるので注意します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cat << EOF > /etc/squid/squid.conf
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/htpasswd
auth_param basic children 8
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 5 hours
acl password proxy_auth REQUIRED
http_access allow password
no_cache deny all
http_port 3128
cache_store_log none
coredump_dir /var/spool/squid
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
ipcache_size 5120
EOF

BASIC 認証の設定

htpasswd で BASIC 認証用のパスワードファイルを作成を作成します。

1
htpasswd -c -b /etc/squid/htpasswd 'USER' 'PASS'

squid を再起動して完了です。

1
systemctl restart squid.service

Chrome の設定

Chrome で宛先毎に Proxy サーバを切り替えたり、直接インターネット接続させたりと、挙動を変えるには Proxy SwitchyOmega が便利です。 Proxy SwitchyOmega を使えば宛先毎にルール (利用する Proxy) を切り替えるだけでなく、BASIC 認証情報を事前に設定しておくことも可能です。

参考

デフォルトの /etc/squid/squid.conf (コメント除外版)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8  # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10  # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16  # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12  # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16  # RFC 1918 local private network (LAN)
acl localnet src fc00::/7        # RFC 4193 local private network range
acl localnet src fe80::/10       # RFC 4291 link-local (directly plugged) machines
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 deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
include /etc/squid/conf.d/*
http_access allow localhost
http_access deny all
http_port 3128
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 \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern .  0 20% 4320