めずらしくAnsible系以外の記事になります。

Repsonaというプロジェクト管理ツールが個人的に気に入っていて、会社でも使いたいなーと思っているのですが、会社のHTTPS復号環境だと、ログイン画面の直前でWebSocket用のJavaScriptの読み込みで失敗するようでした。

環境

  • OS: CentOS Linux release 7.7.1908
  • squid: 3.5.20
  • クライアント用ブラウザ: Firefox 78.0.2

手順

Squidのインストール

yumコマンドでインストールを行います。

$ sudo yum -y install squid

インストール後、バージョン確認と有効になっているOptionを確認。以下のように、有効になっているオプションが表示されますが、このなかで --enable-ssl-crtd と --with-openssl の2点が入っていれば、HTTPS復号プロキシは利用可能です。

オレオレ認証局の証明書と鍵の作成

Squidのディレクトリに移動し、オレオレ認証局の証明書と鍵を作成します。

$ cd /etc/squid
$ sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout secret.key -out squidCA.pem

結果、認証局証明書(squidCA.pem)と秘密鍵(secret.key)の作成が完了しました。

f:id:tatematsu_san:20200713202933p:plain
f:id:tatematsu_san:20200713202933p:plain

認証局証明書の取得、信頼するルートCAへのインポート

SCPなどを用いて、squidCA.pemをプロキシクライアント端末へ取得し、ブラウザの証明書ストアへインポートします。

Firefoxであれば、設定→オプション→「プライバシーとセキュリティ」→「証明書」から証明書マネージャを開き、pemファイルをインポートします。

証明書ファイルの所有者・権限の変更

以下コマンドを入力し、証明書ファイルをsquid:squidの所有権に変更します。

$ sudo chown squid:squid squidCA.pem
$ sudo chmod 400 squidCA.pem

証明書キャッシュの作成と初期化、所有権の変更

以下コマンドで、証明書キャッシュの作成と初期化を行います。

$ sudo mkdir -p /var/lib/squid
$ sudo /usr/lib64/squid/ssl_crtd -c -s /var/lib/squid/ssl_db
$ sudo chown -R squid:squid /var/lib/squid

/etc/squid/squid.confの修正

以下の箇所の変更を行います。

http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/squidCA.pem key=/etc/squid/secret.key
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 4MB
sslcrtd_children 5
ssl_bump server-first all
sslproxy_cert_error deny all

firewalldの設定追加

Squid用のTCP3128について、着信を許可します。

$ sudo firewall-cmd --add-port=3128/tcp --zone=public --permanent
$ sudo firewall-cmd --reload

SELINUXのPermissive

Enforceのままだと証明書キャッシュの生成に失敗するので、とりあえずPermissiveにします。

$ sudo setenforce permissive

サービスの起動と動作確認

systemctlコマンドでsquidサービスを起動します。

$ sudo systemctl start squid

クライアントのプロキシ設定と動作確認

プロキシを設定し、HTTPSサイトにアクセスしたときに証明書の認証局が書き換わっており、Squidのアクセスログに詳細なパス情報が記録されていればOK。

上手く行かない時は…

だいたい、/var/log/squid/cache.logか、/var/log/messagesに理由が書いてあります。

まとめ

大分雑な環境ですが、こんな形でSquidでHTTPS復号を行うプロキシサーバを立てることができました。

実運用考えた場合、squidのスタートアップだけでなく、SELINUXもConfigいじったりしないといけませんし、復号除外用のACLが書けるような設定にしたり、プロセス数をチューニングしたりと色々考える必要がありますので、そのあたりは適宜調整していただければ。

何かのお役に立てば幸いです。今度はこれ、Playbook化しよっと。

参考にさせていただいたサイト


https://tenko.hatenablog.jp/entry/2020/07/13/221814

バックアップ日時: 2026年1月12日