ProtonMail Bridgeとは
ProtonMail Bridgeは、ProtonMailをThunderbirdやOutlookなどの一般的なEmailクライアントと統合できるソフトウェアです。
ProtonMail側とBridgeがHTTPSのAPIで通信、Emailクライアントは、ローカルのSMTP/IMAPサーバーを実行するBridgeと通信する仕組みです。
この機能は有料会員限定の機能として提供されていますが、2020年4月にはソースコードが公開されています。
Hydroxideとは
HydroxideはSimon Serさんが開発している、Bridgeの非公式オープンソース実装です。Go言語で開発されています。
Bridgeと違い、CLIのみでGUIは提供されていません。また、Debianなど主要なLinuxディストリビューション用のパッケージは配布されておらず、自分でビルドする必要があります。(VoidLinuxのxbpsにはありました)
ProtonMail APIとOnion Service経由で通信
Hydroxideはデフォルトで、「https://mail.protonmail.com/api」と通信するようですが、ProtonMailのAPIはOnion Service(.onionアドレス)経由でもアクセス可能です。
Onion Serviceを使用する利点として、クライアント側IPアドレスの秘匿、E2EE(ただし、これはHTTPSのみで満たしているが)などが挙げられます。
ビルド
HydroxideをビルドするにはGo 1.13以上が必要です。
Debianの場合、APTでgolang
パッケージをインストールします。Busterのリポジトリだと1.11なので、Backportsリポジトリを使用してください。
# apt install -t buster-backports golang //Goのバージョン確認 $ go version
HydroxideのGitリポジトリから、ソースコードをCloneします。
$ git clone https://github.com/emersion/hydroxide.git $ cd hydroxide/
ソースコードの修正
Onion Serviceを経由で通信するようにソースコードを修正します。
修正するファイルは、auth.go
とmain.go
の2つです。
//main.goの「mail.protonmail.com」を「protonirockerxow.onion」に置き換え $ sed -e 's/mail.protonmail.com/protonirockerxow.onion/' cmd/hydroxide/main.go //auth.goの「http://www.protonmail.ch」を「https://protonirockerxow.onion」に置き換え $ sed -e 's/http:\/\/www.protonmail.ch/https:\/\/protonirockerxow.onion/' protonmail/auth.go
追記(2023/03/22): ProtonMailのブランド変更に伴ってドメイン名が変わったので書き換えてください
旧 新 mail.protonmail.com mail.proton.me protonirockerxow.onion protonmailrmez3lotccipshtkleegetolb73fuirgj7r4o4vfu7ozyd.onion
修正できたら、go build
でビルドします。
$ GO111MODULE=on go build ./cmd/hydroxide
ビルドが正常に完了すると、カレントディレクトリにhydroxide
という実行ファイルが生成されています。
Hydroxideの実行
Onion ServiceにアクセスするにはTorを経由する必要がありますが、torsocks
は上手く機能しなかったので、HTTPS_PROXY
変数を設定することにします。(torsocksが使えないのは、goがlibcに依存しておらずLD_PRELOADが機能しない為だと思う)
hydroxide auth
でログインしAPIキーを生成します。$ HTTPS_PROXY='socks5://127.0.0.1:9050' ./hydroxide auth <ProtonMail ID>
hydroxide smtp/imap
でローカルSMTP/IMAPサーバーを実行します。(サーバーはフォアグラウンドで実行されます。)$ HTTPS_PROXY='socks5://127.0.0.1:9050' ./hydroxide smtp
$ HTTPS_PROXY='socks5://127.0.0.1:9050' ./hydroxide imap
メールクライアントでログインします。
クライアント毎の設定方法は公式サイトで解説されています。
パスワードは
hydroxide auth
で生成されたAPIキー、SMTP/IMAPサーバーのアドレスはlocalhost
を指定します。
これでメールクライアントからProtonMailを送受信できるようになります。
実際にOnion Service経由でアクセス出来ているか確認するには、--debug
オプションを使ってください。
Hydroxideの実行時には必ずHTTPS_PROXY
変数を設定する必要があります。忘れると.onionアドレスにアクセスできないとエラーを吐いて、通信エラーになります。(設定し忘れてもリークはしないと思いますが)
パケットキャプチャで雑に確認した限り、生IPのリークはしていなかったです。
メッセージ送信後にエラーが出る
少なくともThunderbird使用時、メッセージ送信後にメッセージを保存できないというエラーが出ます。
これは、(多分)送信済みメッセージをSentフォルダに保存できないということで、HydroxideのIssueを漁っていると言及されていました。曰く、APIの仕様とのこと。
Thunderbirdだと、フォールバックでローカルメールに保存することが可能なようです。