序章

電子メールは現代のコミュニケーションの非常に重要な部分であるため、電子メールパイプラインのすべての部分のセキュリティを念頭に置くことが重要です。 Roundcube は、強力なセキュリティ機能とプラグインリポジトリからの広範なカスタマイズオプションを備えたウェブメールクライアントです。 この記事では、基本的な既存のRoundcubeインストールをさらに保護する方法について説明します。

Roundcubeの初期設定でIMAPおよびSTMP設定を構成するときにSSLを使用した場合、Roundcubeから電子メールサーバーへの接続はすでに保護されています。 ただし、ブラウザからRoundcubeへの接続はそうではなく、メール自体は平文で送信されます。 Roundcubeアカウント自体も、パスワードによってのみ保護されます。

このチュートリアルでは、次の方法でメールパイプラインのこれら3つの部分を保護します。

  • Let’sEncryptを使用してApacheにSSLを追加します。
  • Roundcubeプラグインを使用して2要素認証をRoundcubeアカウントに追加します。
  • Roundcubeプラグインを使用して、GPGを使用して電子メールに署名および暗号化します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • このUbuntu16.04チュートリアルのRoundcubeに従って、Roundcubeがインストールされた1つのUbuntu16.04サーバー。 この前提条件のチュートリアルを完了すると、完全に機能しますが、部分的に安全ではないWeb電子メールクライアントが作成されます。
  • Google Authenticator( iOS Android )などのTOTP互換アプリがインストールされたスマートフォンまたはタブレット。 これを使用して、2要素認証を設定します。

多要素認証の詳細については、 Ubuntu16.04でSSHの多要素認証を設定する方法の概要を参照してください。 GPGの詳細については、GPGを使用してメッセージを暗号化および署名する方法を参照してください。

ステップ1—Roundcubeへの安全なアクセスにSSLを追加する

現在、ブラウザでサーバーのドメイン名を使用してRoundcubeインストールにアクセスすると、HTTPSではなくHTTP経由で接続されます。 ブラウザから電子メールサーバーまでの通信チェーン全体を完全に保護するには、Roundcubeへのこの接続でSSL/TLSを使用する必要があります。

これを行う簡単な方法の1つは、Let’sEncryptの無料のSSL証明書を使用することです。 RoundcubeはLAMPスタックの上にセットアップされるため、 Ubuntu 16.04でLet’sEncryptを使用してApacheを保護する方法に従って、セットアップの詳細なウォークスルーを確認できます。 簡単な要約は次のとおりです。

まず、Let’sEncryptClientをインストールします。

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache

次に、SSL証明書を取得し、自動更新が機能することを確認します。 example.comをドメインに置き換え、サブドメインまたはエイリアスに追加の-dフラグを使用します。

  1. sudo certbot --apache -d example.com
  2. sudo certbot renew --dry-run

対話型構成中(sudo certbot --apache -d example.comを入力した後)、基本セットアップまたはセキュアセットアップのどちらが必要かを尋ねられたら、必ずセキュアを選択してください。 これにより、すべてのHTTPトラフィックがHTTPSにリダイレクトされます。

これで、コンピューターからRoundcubeインストールへの安全な接続が確立されました。これにより、IMAP/SMTP電子メールサーバーへの安全な接続が確立されます。 電子メール通信のセキュリティを向上させるためにできることはまだいくつかありますが、プラグインが必要です。

次のステップでは、プラグインを使用して、2要素認証を追加することでRoundcubeアカウントのセキュリティを強化します。

ステップ2—2要素認証プラグインのインストール

RoundcubeプロジェクトはプラグインのGUI機能に取り組んでいますが、現時点では、すべてのプラグインをコマンドラインからインストールする必要があります。 これを行うには2つの方法があります。

  • 手動インストール、これは利用可能な最初の方法でした。 これには、プラグイン(通常、.zipファイルまたはGitリポジトリ内のいずれか)をダウンロードし、Roundcube構成ファイル/var/www/roundcube/config/config.inc.phを変更してプラグインを有効にすることが含まれます。
  • 半自動インストール。これはより最新の方法です。 これは、PHPパッケージマネージャーであるComposerに応答して、構成ファイルで指定したプラグインをインストールします。

一部のプラグインは、一方のインストール方法を他方よりも推奨しています。 2FAプラグインは両方の方法で動作し、推奨されないため、ここでは、使いやすさから半自動インストールを使用します。

Composerは、$RC_HOME/composer.jsonに保存されているcomposer.jsonファイルによって制御されます。 その構成ファイルを作成してComposerを有効にします。 Roundcubeにはcomposer.json-distという基本構成ファイルが付属しているので、そのコピーから始めます。

  1. cd /var/www/roundcube
  2. sudo cp composer.json-dist composer.json

このデフォルトファイルにはすでにいくつかのコアプラグインが指定されているため、次にComposerを実行してこれらをインストールし、初期構成を完了します。 必ず/var/www/roundcubeディレクトリからComposerを実行してください。

  1. sudo composer install

次に、2FAプラグインを追加するには、composer.jsonファイルに追加する必要があります。

プラグイン行の構文は"organization/plugin_name": "version_or_branch"です。 したがって、2FAプラグインの場合、追加する行は "alexandregz/twofactor_gauthenticator": "dev-master"です。

composer.jsonファイルを開いて、nanoまたはお気に入りのテキストエディタを使用して編集します。

  1. sudo nano /var/www/roundcube/composer.json

"require": {で始まるrequireブロックを探します。 中括弧({})の間の各行は、プラグイン行です。 ブロック内のすべてのプラグイン行は、最後のエントリを除いてコンマで終了する必要があります。

ブロックの最後に2FAプラグインの行を追加し、前の行に必ずコンマを追加してください。

/var/www/roundcube/composer.json
. . .
"require": {
    "php": ">=5.4.0",
    "pear/pear-core-minimal": "~1.10.1",
    "pear/net_socket": "~1.2.1",
    "pear/auth_sasl": "~1.1.0",
    "pear/net_idna2": "~0.2.0",
    "pear/mail_mime": "~1.10.0",
    "pear/net_smtp": "~1.7.1",
    "pear/crypt_gpg": "~1.6.2",
    "pear/net_sieve": "~1.4.0",
    "roundcube/plugin-installer": "~0.1.6",
    "endroid/qr-code": "~1.6.5",
    "alexandregz/twofactor_gauthenticator": "dev-master"
},
. . .

ファイルを保存して閉じてから、Tell Composerを実行してパッケージ情報を更新し、新しいプラグインをインストールします。

  1. sudo composer update

プラグインを有効にするかどうかをComposerから尋ねられたら、Yと入力して続行します。 インストールしたら、Roundcubeからログアウトし、再度ログインしてプラグインを有効にします。

プラグインがインストールされたので、RoundcubeのGUIを介してアカウントに2FAを設定するために使用する必要があります。

ステップ3—アカウントで2FAを有効にする

開始するには、ブラウザのサーバーIPまたはドメインを使用してRoundcubeにログインします。 右隅にある設定ボタンをクリックしてから、左側のナビゲーションで2要素認証をクリックします。

Roundcube 2-Factor Authentication settings page

[2要素認証オプション]セクションで、アクティブ化チェックボックスをクリックしてから、シークレットの作成をクリックします。

次に、回復コードの表示をクリックし、表示された4つの回復コードを安全な場所に保管します。 トークンを生成できない場合(たとえば、携帯電話を紛失した場合)は、これらのコードを使用してログインします。

最後に、保存ボタンをクリックします。

これにより2FAが有効になりますが、Google認証システムなどのTOTP互換アプリにシークレットを追加する必要があります。 シークレットを保存した後に表示されるShowQR コードボタンをクリックし、アプリでコードをスキャンします。 スキャンが機能しない場合は、シークレットを手動で入力することもできます。

Roundcube 2-Factor Authentication QR code

最後に、アプリがコードを生成したら、コードの確認ボタンの横のフィールドにコードを入力して動作することを確認し、そのボタンをクリックします。 動作する場合は、コードOK と表示されたウィンドウが表示され、下部にあるOKボタンをクリックしてそのウィンドウを閉じることができます。 問題がある場合は、アプリにシークレットを再度追加してみてください。

デジタル通信を保護する最後のステップは、電子メールで送信する実際のメッセージを暗号化することです。 次のステップでは、Enigmaというプラグインを使用してこれを行います。

ステップ4—GPGで暗号化された電子メールを有効にする

Enigmaプラグインは、署名され暗号化された電子メールの表示と送信のサポートを追加します。 前のRoundcubeインストールチュートリアルに従った場合、Enigmaプラグインはインストールですでに有効になっています。 そうでない場合は、ステップ2で2FAプラグインに使用したのと同じ手順に従って、Enigmaプラグインを今すぐ追加できます。

まず、いくつかのデフォルトの暗号化オプションを有効にする必要があります。 Roundcubeにログインし、右上隅にある設定ボタンをクリックします。 そこから、環境設定をクリックし、セクションリストの下の暗号化をクリックします。

Set Encryption Settings

メインオプションリストには7つの暗号化設定があります。 7つすべてを有効にすると、セキュリティが最大になりますが、使いやすさにはある程度のトレードオフが伴います。

メインオプションメニューの各オプションとそれぞれの提案(必須、推奨、またはオプション)を次に示しますが、ユースケースに合った設定を選択する必要があります。

  • メッセージの暗号化と署名を有効にする:必要です。 これにより、メッセージに署名して暗号化することができます。
  • メッセージ署名の検証を有効にする推奨。 誰かがあなたに署名された電子メールを送信した場合、この設定により、Roundcubeは電子メールアドレスとキーによって送信者を確認しようとします。
  • メッセージ復号化を有効にする:推奨。 誰かが暗号化された電子メールを送信した場合、この設定により、RoundcubeはGPGキーを使用してそれを復号化します。
  • デフォルトですべてのメッセージに署名します:オプション。 これは、送信先の人がGPGをサポートしていない場合でも、送信するすべての電子メールに署名します。 そうでない場合は、メールの下部に文字の塊が表示されます。 メールを作成するときにこのオプションを切り替えることもできます。
  • デフォルトですべてのメッセージを暗号化する:オプション。 これにより、電子メールを送信する相手の公開鍵を持っていると仮定して、送信するすべての電子メールが暗号化されます。 メールを作成するときにこのオプションを切り替えることもできます。
  • デフォルトで公開PGP鍵を添付します:オプション。 これにより、送信するすべての電子メールに添付ファイルとしてGPG公開鍵が追加されます。 受信者がGPGをサポートしている場合、電子メールクライアントはキーを確認してキーリングにインストールし、暗号化された電子メールを送信できるようにします。
  • の秘密鍵パスワードを保持すると、Roundcubeが電子メールを暗号化または復号化するときに入力したパスフレーズを記憶する時間が設定されるため、毎回入力する必要はありません。

設定を選択したら、保存をクリックします。次に、設定列のIDをクリックします。

Update Identity

デフォルト設定は、サインアップした電子メールアドレスを持つ単一のIDです。 メールをクリックし、表示名欄にご記入ください。 オプションで、Organizationなどの他のフィールドに入力できます。 完了したら、保存ボタンをクリックします。

構成の最後の部分は、キーの作成です。 左側のナビゲーションでPGPKeysをクリックします。

すでにGPGキーをお持ちの場合は、右上のインポートをクリックして秘密キーをインポートしてから、もう一度クリックして公開キーをインポートできます。

GPGキーがない場合、または新しいキーを作成する場合は、PGPキー列の下部にあるプラス( + )ボタンをクリックします。 そこから、キーを作成するIDを選択し、キーの強度を選択します(キーのサイズが大きいほど、暗号化を解除するのは難しくなりますが、暗号化の実行は遅くなります)。 最後に、強力なパスワードを選択して、保存をクリックします。

警告:Chromeを使用しているときにRoundcubeで新しいキーを作成できないバグがあります。 通常Chromeを使用している場合は、一時的に別のブラウザに切り替えて新しいキーを作成します。 Chromeにキーがあると、キーペアのインポートと署名/暗号化が期待どおりに機能します。

確認済みの署名済み電子メールを受信すると、Roundcubeは上部に緑色の確認済み署名from通知を表示します。

Signed Email

暗号化された電子メールを受信して復号化すると、Roundcubeはメッセージ復号化通知を表示します。

Decrypted Email

メッセージでGPG暗号化を使用するには、左上のメールアイコンをクリックしてから、作成をクリックして新しいメールを作成します。 暗号化アイコンをクリックして、使用可能な暗号化オプションを確認します。 これらは、暗号化設定で選択した内容によって異なります。 推奨事項に従った場合は、このメッセージにデジタル署名するこのメッセージを暗号化する公開鍵を添付するが表示されます。 メールを送信するときは、必要な暗号化オプションを確認してください。

結論

SSL、2要素認証、GPG暗号化を追加することで、電子メールパイプラインの安全性が大幅に向上します。 ここから、 Roundcubeプラグインリポジトリを探索して、Roundcubeの拡張とカスタマイズを続けることができます。