Ubuntu に squid で BASIC 認証付き Proxy を構築する
以前に RedHat 系 Linux を前提とした squid で「BASIC 認証アリ / キャッシュしない」Proxy を作る というメモを書きました。 今回は Ubuntu 20.04LTS 環境へ同様に squid をインストールする方法をメモしておきます。 以前のメモ同様、以下の方針とします。
- BASIC 認証させる
- キャッシュさせない(配下のコンテンツが頻繁に更新される想定)
squid のインストール
apt
で squid をインストールします。 後の手順で BASIC 認証用のパスワードを生成する際に htpasswd
を利用するので apache2-utils もインストールしておきます。
| apt -y install squid apache2-utils
|
今回は squid 4.10 がインストールされました。
| # 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 認証用のパスワードファイルを作成を作成します。
| htpasswd -c -b /etc/squid/htpasswd 'USER' 'PASS'
|
squid を再起動して完了です。
| 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
|