61
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTTPS対応のプロキシサーバー構築

Last updated at Posted at 2018-11-06

背景

数年前までは、通信はHTTPばかりばかりだったので、プロキシサーバーを経由してアクセス元を隠蔽することは簡単だった。しかし、ここ数年でHTTPSが増えたことで、サーバー・クライアント間がセキュアに繋がり、隠蔽された通信が行われるようになったため、プロキシサーバーが一度中間にたってクライアントにわたすという手順が踏めなくなった。
とはいえ、アクセス元を隠蔽したいという需要は減っていない。ゆえに、HTTPSでもプロキシサーバーが通信を仲介できるような仕組みを構築する。

注意点

本手法は、本来サーバー・クライアント間でセキュア通信するはずのHTTPSプロトコルを、プロキシサーバーが一度デクリプションして読み取れる状態にすることから、サーバー・クライアント間の通信の機密性と完全性を侵害します。
利用の前に、クライアントに危険性をしっかり説明して、合意を得てください。さもなければ法的な問題が生じる可能性があります。

環境

Amazon EC2
Ubuntu Server 18.04 LTS

squidのビルド

CentOS7だとsquidをインストールした際にSSL_BUMPが有効になっているらしいが、Ubuntuだとなってないようなので、ソースコードからビルドする。

/etc/apt/sources.listに以下を追加して、

deb-src http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted

sudo apt-get updateを実行する。

その後、依存関係をインストールする。

sudo apt install devscripts build-essential fakeroot libssl-dev libldap2-dev libpam0g-dev libdb-dev cdbs libsasl2-dev debhelper libcppunit-dev libkrb5-dev comerr-dev libcap2-dev libecap3-dev

以下でソースコードを取得する。

apt-get source squid3

以下の設定ファイルを開いて、ビルドパラメータを追加。
squid3-3.5.27/debian/rules

--with-openssl \
--enable-ssl \
--enable-ssl-crtd \

ビルド実行

./configure
debuild -us -uc -b
dpkg-checkbuilddeps: error: Unmet build dependencies: libexpat1-dev libxml2-dev pkg-config libnetfilter-conntrack-dev nettle-dev libgnutls28-dev dh-apparmor

エラーで落ちるので、以下を実行

sudo apt-get install libexpat1-dev libxml2-dev pkg-config libnetfilter-conntrack-dev nettle-dev libgnutls28-dev dh-apparmor

再度ビルド実行

debuild -us -uc -b

squid3.5.27はopensslのv1.1に対応していないようなので、v1.0をインストールする。

sudo apt-get purge libssl-dev
sudo apt-get install libssl1.0-dev

再度ビルド実行

debuild -us -uc -b

一つ上のディレクトリにdebファイルができているので、インストールする。

sudo dpkg -i squid*.deb

依存関係が足りていないので、以下のコマンドでインストール

apt --fix-broken install

再度インストール

sudo dpkg -i squid*.deb

やっとインストール完了

CA証明書の作成

適当なディレクトリを作成して、以下を実行。

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem  -out myCA.pem

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

以下のコマンドで、キャッシュディレクトリを作成する。

sudo /usr/lib/squid3/ssl_crtd -c -s /var/lib/ssl_db
sudo chown proxy:proxy -R /var/lib/ssl_db

squidの設定

以下の設定ファイルを書き換える。

/etc/squid/squid.conf

コメント多すぎるので、こちらに習ってviのコマンドでコメント消す。

:%s/^#.*$//g
:g/^$/d

以下をコメントアウト

http_access deny all
http_port 3128

末尾に以下を追記。cert=の部分は、CA証明書を作成した箇所を指定して、YOUR_IP_ADDRESSと書いた部分は、アクセスを許可するIPアドレスを指定する。

visible_hostname proxy.server
http_port 10080 ssl-bump \
  cert=/home/ubuntu/key/myCA.pem \
  generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
acl myacl src YOUR_IP_ADDRESS/24
http_access allow myacl
http_access deny all
forwarded_for off
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

squidの起動

キャッシュを削除し、

sudo squid -z

以下のコマンドでsquidを起動

sudo systemctl start squid

ステータス確認

sudo systemctl status squid

EC2のネットワーク設定

ここまでの状態でプロキシサーバーが起動するので、EC2のコンソールから10080ポートを開ける。

クライアント側の設定

EC2インスタンスに割り当てられているIPアドレスを確認して、PCのプロキシ設定から、プロキシサーバーの10080ポートを指定する。

証明書のインストール

CA証明書の作成にて作成した証明書を、プロキシを利用するPC上でインストールし、常に信頼するようにする。
これをしないと全httpsサイトで警告が出るようになる。

参考

squid-cache wiki
SSL/HTTPS対応の透過型プロキシを立てる(SSL Bump) | web net FORCE
TLS1.2が使えない環境のためのProxy (squid)設定
5分で作るPROXYサーバー
Ubuntuでsquidを使って個人プロキシサーバーを作る

61
78
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?