この記事で紹介する設定は動作確認を目的とし、検証用のローカルネットワークで使用することを前提とするものです。本番環境でSquidを運用する場合は、セキュアな設定になるよう公式ドキュメント等をご確認ください。
環境
Ubuntu 24.04 LTS (WSL)
ひとまずSquidを動かしてみる
~$ sudo apt update
~$ apt search ^squid
...
squid/noble 6.6-1ubuntu5 amd64
Full featured Web Proxy cache (HTTP proxy GnuTLS flavour)
...
squid-openssl/noble 6.6-1ubuntu5 amd64
Full featured Web Proxy cache (HTTP proxy OpenSSL flavour)
squid
の方はインストールしてもSSL復号には対応できないため、squid-openssl
を入れます。
~$ sudo apt install squid-openssl
~$ squid -v
Squid Cache: Version 6.6
Service Name: squid
Ubuntu linux
...
systemdでSquidのステータスを確認します。問題なくインストールできている場合は active (running)
となります。
~$ sudo systemctl status squid
● squid.service - Squid Web Proxy Server
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-06-28 22:36:42 JST; 14min ago
...
ポート開放
~$ sudo ufw status
sudo: ufw: command not found
ufwがデフォルトでは入っていなかったためインストールします。
~$ sudo apt install ufw
ufwを有効にしてSquidのデフォルトのポート8080を開放します。
~$ sudo ufw status
Status: inactive
~$ sudo ufw enable
~$ sudo ufw allow 8080
~$ sudo ufw reload
~$ sudo ufw status
Status: active
To Action From
-- ------ ----
8080 ALLOW Anywhere
8080 (v6) ALLOW Anywhere (v6)
動作に必要な最低限の設定を行う
設定ファイルのバックアップを取り、パーミッションを書き込み不可に変更します。
~$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.default
~$ sudo chmod a-w /etc/squid/squid.conf.default
~$ ll /etc/squid/squid.conf.default
-r--r--r-- 1 root root 351158 Jun 29 10:15 /etc/squid/squid.conf.default
最低限の設定を入れます。(元々あった記載はすべて削除します)
~$ sudo vim /etc/squid/squid.conf
# ポートを指定
http_port 8080
# すべての通信を許可する
http_access allow all
# キャッシュしない
cache deny all
# 日時を読みやすいフォーマットに変更
logformat localtime %{%Y-%m-%d %H:%M:%S}tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log daemon:/var/log/squid/access.log localtime
設定を反映させるためにSquidを再起動します。
~$ sudo systemctl restart squid
logformatについてはこちらの記事もどうぞ
HTTPのWebサイトへの通信を見てみる
適当なPCにプロキシを設定します。
WSLが入っているのと同じマシンであればlocalhostでOKです
Squidのログを表示しておきます。
~$ sudo tail -f /var/log/squid/access.log
ログ表示を止めるときは Ctrl+c
プロキシを設定したPCでHTTPのWebサイトにアクセスします。
例)環境省_日光湯元ビジターセンター_奥日光の自然
2024-06-30 15:54:46.239 69 ::1 TCP_MISS/200 5751 GET http://nikkoyumoto-vc.com/nature/ - HIER_DIRECT/157.112.189.57 text/html
アクセスしたWebサイトへのリクエストがログに表示されたら成功です。
TCP_MISS
の MISS
というのはキャッシュが存在しなかったことを示すコードであるため、問題ありません。
Squid Log Files | Squid Web Cache wiki
HTTPSのWebサイトへの通信を見てみる
HTTPSのWebサイトにアクセスします。
例)尾瀬の見どころ | 尾瀬保護財団
2024-06-30 15:55:54.412 7021 ::1 TCP_TUNNEL/200 32381 CONNECT oze-fnd.or.jp:443 - HIER_DIRECT/194.91.3.126 -
HTTPSの場合、プロキシサーバーからはCONNECTの通信しか見えず、アクセス先のドメインしか分かりません。通常、HTTPSでは第三者(プロキシサーバー)が通信を覗き見ることはできないことが分かります。
HTTPSのWebサイトへの通信を復号できるようにする
SSL Bumpを利用してHTTPSの通信も見えるようにします。
鍵と証明書のペアを生成する
~$ cd /etc/squid/
/etc/squid$ sudo openssl req -new -newkey rsa:2048 -days 3653 -nodes -x509 -keyout bump.key -out bumpCA.crt
---
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Squid Private CA
Email Address []:
DHパラメーターのファイルを生成する
/etc/squid$ sudo openssl dhparam -outform PEM -out bump_dhparam.pem 2048
/etc/squid$ cd
生成したファイルのパーミッションを変更する
~$ ll /etc/squid
total 376
drwxr-xr-x 3 root root 4096 Jun 30 15:15 ./
drwxr-xr-x 90 root root 4096 Jun 30 13:01 ../
-rw------- 1 root root 1704 Jun 30 15:14 bump.key
-rw-r--r-- 1 root root 1306 Jun 30 15:15 bumpCA.crt
-rw-r--r-- 1 root root 424 Jun 30 15:15 bump_dhparam.pem
drwxr-xr-x 2 root root 4096 Jun 28 22:36 conf.d/
-rw-r--r-- 1 root root 1791 Apr 1 17:03 errorpage.css
-rw-r--r-- 1 root root 659 Jun 30 14:30 squid.conf
-r--r--r-- 1 root root 351158 Jun 29 10:15 squid.conf.default
/etc/squid$ sudo chown proxy:proxy /etc/squid/bump*
/etc/squid$ sudo chmod 400 /etc/squid/bump*
~$ ll /etc/squid
total 376
drwxr-xr-x 3 root root 4096 Jun 30 15:15 ./
drwxr-xr-x 90 root root 4096 Jun 30 13:01 ../
-r-------- 1 proxy proxy 1704 Jun 30 15:14 bump.key
-r-------- 1 proxy proxy 1306 Jun 30 15:15 bumpCA.crt
-r-------- 1 proxy proxy 424 Jun 30 15:15 bump_dhparam.pem
drwxr-xr-x 2 root root 4096 Jun 28 22:36 conf.d/
-rw-r--r-- 1 root root 1791 Apr 1 17:03 errorpage.css
-rw-r--r-- 1 root root 659 Jun 30 14:30 squid.conf
-r--r--r-- 1 root root 351158 Jun 29 10:15 squid.conf.default
証明書DBを用意する
~$ sudo mkdir /var/lib/squid
~$ sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 16MB
Initialization SSL db...
Done
/etc/squid$ sudo chown -R proxy:proxy /var/lib/squid
~$ ll /var/lib/squid
total 12
drwxr-xr-x 3 proxy proxy 4096 Jun 30 15:21 ./
drwxr-xr-x 34 root root 4096 Jun 30 11:18 ../
drwxr-xr-x 3 proxy proxy 4096 Jun 30 15:21 ssl_db
squid.confに設定を追加する
~$ sudo vim /etc/squid/squid.conf
# SSL Bumpのオプションを追加
http_port 8080 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB tls-cert=/etc/squid/bumpCA.crt tls-key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3,SINGLE_DH_USE,SINGLE_ECDH_USE tls-dh=prime256v1:/etc/squid/bump_dhparam.pem
# 証明書生成設定
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 16MB
# 証明書の検証エラーでも許可する
sslproxy_cert_error allow all
# すべての通信をデコード対象とする
ssl_bump stare all
http_access allow all
cache deny all
logformat localtime %{%Y-%m-%d %H:%M:%S}tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
access_log daemon:/var/log/squid/access.log localtime
設定を反映させるためにSquidを再起動します。
~$ sudo systemctl restart squid
クライアントPCに証明書をインポートする
プロキシを設定するPCに証明書を配置し、インポートします。
$ sudo cp /etc/squid/bumpCA.crt /mnt/c/Users/Yocaji/Desktop/
HTTPSのWebサイトにアクセスする
Squidのログを表示しておきます。
$ sudo tail -f /var/log/squid/access.log | grep oze
HTTPSのWebサイトにアクセスし、CONNECTだけでなくGETリクエストのログも表示されたら成功です。
2024-06-30 15:41:09.926 43 ::1 NONE_NONE/200 0 CONNECT oze-fnd.or.jp:443 - HIER_DIRECT/194.91.3.126 -
2024-06-30 15:41:10.626 699 ::1 TCP_MISS/200 27728 GET https://oze-fnd.or.jp/oza/a-sp/ - HIER_DIRECT/194.91.3.126 text/html
この時、ブラウザで証明書を確認すると本来のアクセス先の証明書ではなくSquidの証明書となっていることが分かります。