SSL/HTTPS対応の透過型プロキシを立てる(SSL Bump)

2018年4月16日Linuxsquid, SSL, VPN, プロキシ

squid3で透過型プロキシをたてるとき、標準ではSSL/HTTPSの通信の中身を確認することは出来ない。しかし、いわゆる「SSL Bump」という、Squidの中で一度SSLをほどき、そしてsquidで処理をし終わった後に再度SSLをかけるような処理を採用することで、SSL/HTTPSのアクセスでもsquidでキャッシュをすることが出来る。

この方法は、じつは「中間者攻撃」と非常によく似ている方法なので注意が必要なのだが、squidを利用したキャッシュサーバーの構築では非常に優れている方法なので、今回はこちらを用いて透過型プロキシを構築していく。

透過型プロキシとする理由は、VPN接続時に自動的にこちらに接続されるように仕向けるため。

squid3をSSL/HTTPSに対応するようリビルド

Sourceファイルをダウンロード出来るようにaptを編集

標準でaptからインストールされるsquid3はHTTPS/SSLに対応していないので、sourceをダウンロードしオプションを追加してあげることで対応する。

まずはじめに、sourceをダウンロードできるようにリポジトリをaptに追加する。/etc/apt/sources.listに以下を追加して、apt-get update。

build用のパッケージをいくつかインストール

Xenicalになっているの通りで、Ubuntu 16.04用。他のバージョンのかたは適宜書き直すこと。

その後、ビルドに必要なパッケージをインストールする。

ソースの取得とオプションの編集

さて、ようやくソースコードをダウンロードし、オプションを変更する準備ができた。こんな感じでソースを取得する。

なお、実行したディレクトリの直下に「squid3-3.5.12」というフォルダが出来る。インストールされるsquid3のバージョンによってはバージョン名は違うかも。

debian/rulesを編集。ここに「DEB_CONFIGURE_EXTRA_FLAGS」という形でずらずらとオプションが書いてあるので、以下2つのオプションを追加。

あとは、これをビルドしてdebパッケージにする。

別にソースからやってもいいんだけど、debパッケージのほうがあとあと色々と楽なので、こんな手法を採用した次第。

ちなみに、結構時間がかかる。終了すると、「squid3-3.5.12」フォルダのひとつ上に以下のファイルが生成されているはずだ。

  • squid3_3.5.12-1ubuntu7_all.deb
  • squid_3.5.12-1ubuntu7_amd64.deb
  • squid-cgi_3.5.12-1ubuntu7_amd64.deb
  • squidclient_3.5.12-1ubuntu7_amd64.deb
  • squid-common_3.5.12-1ubuntu7_all.deb

いらないパッケージもありそうだが、面倒なので全部インストール。どうせaptで入れたら全部入るわけだし。なお、途中で「squid-langpackがねえよ」といわれたので、こいつだけ個別にインストール。

CA証明書の作成

以前の記事でCA証明書を作成しているので、これを流用。下記を参照のこと。このうち、「/etc/ipsec.d/cacert/cacert.pem」「/etc/ipsec.d/private/caprivatekey.pem」を用いる。

caprivatekey.pemは、以下のコマンドで作成することが可能。

SSL用のキャッシュディレクトリ作成

以下の要領で作成。

squidの設定

/etc/squid/squid.confを開き、今回の構成にあうように設定をする。

iptablesの設定

今回、squidは80番ポート用(HTTP通信用)を3178ポートで、443ポート用(SSL通信用)を3179ポートで動かしているので、それぞれをiptablesを用いて転送するように設定。一部squidがエラーを吐き出したので、一番したの2行を追加している。

クライアント側での対応

クライアント側には特段あらたな設定を追加する必要はないが、squid3で使用したCA証明書がインストールされている必要がある。下記VPNの構築作業で使用したCA証明書を用いているので今回はとくに設定をしていないが、cacert.derのみ新たにインストールが必要な場合がある。iPhoneの場合は、設定の「一般」から証明書を信頼することを忘れずに。

さくらVPS上のUbuntuにstrongswanでIKEv2 VPNサーバー(証明書認証)を構築する
普段はUbuntu上に構成したStrongswanを用いているのだが、さくらのVPSで構築したOpenVPNサーバーが意外と良かったので、今回はstrongswanでIPSecなV

squidを起動する

さて、これでsquidを起動する準備が整った。

きちんと動作していれば、/var/log/squid/access.logにアクセスログがずらずらと出てくるようになる。これでsquidを使ったキャッシュサーバーの構築が完了した。