介绍
由于电子邮件是现代通信的重要组成部分,因此务必牢记电子邮件管道所有部分的安全性。 Roundcube 是一个网络邮件客户端,具有强大的安全功能和来自其插件存储库的广泛自定义选项。 本文介绍了如何进一步保护现有的基本 Roundcube 安装。
如果您在 Roundcube 的初始设置中配置 IMAP 和 STMP 设置时使用了 SSL,那么从 Roundcube 到您的电子邮件服务器的连接已经是安全的。 但是,从您的浏览器到 Roundcube 的连接不是,并且您的电子邮件本身是明文发送的。 您的 Roundcube 帐户本身也仅受密码保护。
在本教程中,您将通过以下方式保护电子邮件管道的这三个部分:
- 使用 Let's Encrypt 将 SSL 添加到 Apache。
- 使用 Roundcube 插件将 双因素身份验证 添加到您的 Roundcube 帐户。
- 使用 GPG 通过 Roundcube 插件对电子邮件进行签名和加密。
先决条件
要遵循本教程,您将需要:
- 按照此 Roundcube on Ubuntu 16.04 教程 安装了一台装有 Roundcube 的 Ubuntu 16.04 服务器。 完成此先决条件教程后,您将拥有一个功能齐全但部分不安全的 Web 电子邮件客户端。
- 安装了与 TOTP 兼容的应用程序的智能手机或平板电脑,例如 Google Authenticator(iOS、Android)。 您将使用它来设置两因素身份验证。
您可以在 How To Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04 的介绍中了解有关多重身份验证的更多信息。 您可以在 如何使用 GPG 对消息进行加密和签名 中了解有关 GPG 的更多信息。
第 1 步 — 添加 SSL 以保护对 Roundcube 的访问
现在,如果您在浏览器中使用服务器的域名访问 Roundcube 安装,您将通过 HTTP 而不是 HTTPS 进行连接。 为了完全保护从浏览器到电子邮件服务器的整个通信链,此与 Roundcube 的连接应使用 SSL/TLS。
一种简单的方法是使用 Let's Encrypt 的免费 SSL 证书。 Roundcube 设置在 LAMP 堆栈之上,因此您可以按照 How To Secure Apache with Let's Encrypt on Ubuntu 16.04 进行详细的设置演练。 这是一个简短的摘要:
首先,安装 Let's Encrypt 客户端。
sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-apache
然后获取您的 SSL 证书并验证自动续订是否有效。 将 example.com
替换为您的域,并为任何子域或别名使用额外的 -d
标志。
sudo certbot --apache -d example.com sudo certbot renew --dry-run
在交互式配置过程中(输入 sudo certbot --apache -d example.com
后),当询问您是否需要基本或安全设置时,请确保选择 secure。 这将确保所有 HTTP 流量都重定向到 HTTPS。
现在,您的计算机与 Roundcube 安装之间建立了安全连接,这反过来又与您的 IMAP/SMTP 电子邮件服务器建立了安全连接。 您还可以做一些其他事情来提高电子邮件通信的安全性,但它们需要插件。
下一步使用插件通过添加两因素身份验证来加强 Roundcube 帐户的安全性。
第 2 步 — 安装双重身份验证插件
虽然 Roundcube 项目正在开发插件的 GUI 功能,但目前,所有插件都必须通过命令行安装。 有两种方法可以做到这一点:
- 手动安装,这是第一种可用的方法。 这涉及下载插件(通常是
.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
的基本配置文件,所以我们将从它的副本开始。
cd /var/www/roundcube sudo cp composer.json-dist composer.json
在这个默认文件中已经指定了一些核心插件,所以接下来,运行 Composer 来安装这些插件并完成它的初始配置。 确保从 /var/www/roundcube
目录运行 Composer。
sudo composer install
接下来,要添加 2FA 插件,我们需要将其添加到 composer.json
文件中。
插件行的语法是 "organization/plugin_name": "version_or_branch"
。 所以对于 2FA 插件,您将添加的行是 "alexandregz/twofactor_gauthenticator": "dev-master"
。
使用 nano
或您喜欢的文本编辑器打开 composer.json
文件进行编辑。
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 更新其包信息以安装新插件。
sudo composer update
当 Composer 询问您是否要启用插件时,输入 Y
继续。 安装完成后,退出 Roundcube 并重新登录以启用插件。
现在插件已安装,我们需要通过 Roundcube 的 GUI 在我们的帐户上设置 2FA。
第 3 步 — 在您的帐户上启用 2FA
要开始使用,请在浏览器中使用您的服务器 IP 或域登录 Roundcube。 单击右上角的 Settings 按钮,然后单击左侧导航中的 2-Factor Authentication。
在 2-Factor Authentication options 部分,单击 Activate 复选框,然后单击 Create secret。
接下来,单击显示恢复码,将显示的四个恢复码保存在安全的地方。 如果您无法生成令牌(例如,如果您丢失了手机),您将使用这些代码登录。
最后点击【X19X】保存【X27X】按钮。
这将启用 2FA,但现在您需要将密钥添加到与 TOTP 兼容的应用程序中,例如 Google Authenticator。 点击保存密码后出现的显示二维码二维码按钮,并使用您的应用扫描二维码。 如果扫描不起作用,您也可以手动输入密码。
最后,一旦您的应用程序生成代码,请通过在 检查代码 按钮旁边的字段中输入代码来确保它可以正常工作,然后单击该按钮。 如果有效,您将看到一个显示 Code OK 的窗口,您可以单击底部的 OK 按钮关闭该窗口。 如果有问题,请尝试将密钥重新添加到您的应用中。
保护您的数字通信的最后一步是加密您通过电子邮件发送的实际消息。 我们将在下一步使用名为 Enigma 的插件执行此操作。
第 4 步 — 使用 GPG 启用加密电子邮件
Enigma 插件 增加了对查看和发送签名加密电子邮件的支持。 如果您按照 之前的 Roundcube 安装教程 进行操作,那么您的安装中已经启用了 Enigma 插件。 如果没有,您可以按照在第 2 步中用于 2FA 插件的相同程序现在添加 Enigma 插件。
首先,我们需要启用一些默认加密选项。 登录 Roundcube,点击右上角的【X37X】设置【X49X】按钮。 从那里,单击 Preferences,然后单击 Section 列表下的 Encryption。
Main Options列表中有7个加密设置。 启用所有 7 项将提供最大的安全性,但这会在可用性方面进行一些权衡。
以下是 主选项 菜单中的每个选项以及我们对每个选项的建议(必要、推荐或可选),但您应该选择适合您的用例的设置:
- 启用消息加密和签名:必需。 这允许您对消息进行签名和加密。
- 启用消息签名验证推荐。 如果有人向您发送签名的电子邮件,此设置会使 Roundcube 尝试通过他们的电子邮件地址和密钥来验证发件人。
- 启用消息解密:推荐。 如果有人向您发送加密的电子邮件,此设置将使 Roundcube 使用您的 GPG 密钥对其进行解密。
- 默认签署所有消息:可选。 这会为您发送的每封电子邮件签名,即使您发送邮件的人没有 GPG 支持。 如果他们不这样做,他们会在电子邮件底部看到一大堆字符。 您也可以在撰写电子邮件时切换此选项。
- 默认加密所有消息:可选。 这会加密您发送的每封电子邮件,假设您拥有要发送电子邮件的人的公钥。 您也可以在撰写电子邮件时切换此选项。
- 默认附加我的公共PGP密钥:可选。 这会将您的 GPG 公钥作为附件添加到您发送的每封电子邮件中。 如果收件人有 GPG 支持,他们的电子邮件客户端将看到密钥并将其安装到他们的密钥环中,这样他们就可以向您发送加密的电子邮件。
- Keep private key passwords for 设置 Roundcube 在加密或解密电子邮件时记住您输入的密码的时间,因此您不必每次都输入。
选择设置后,单击 Save。 接下来,单击 Settings 列中的 Identities。
默认设置是您注册时使用的电子邮件地址的单一身份。 单击电子邮件并填写 显示名称 字段。 您可以选择填写其他字段,例如 Organization。 完成后,单击保存按钮。
配置的最后一部分是创建密钥。 单击左侧导航中的 PGP 密钥。
如果您已有 GPG 密钥,您可以点击右上角的 Import 并导入您的密钥,然后再次单击它以导入您的公钥。
如果您没有 GPG 密钥,或者如果您想创建一个新的,请单击 PGP 密钥 列底部的加号 (+) 按钮。 从那里,选择您要为其创建密钥的身份并选择密钥强度(密钥大小越大,破解加密越难,但执行加密的速度越慢)。 最后,选择一个强密码并点击保存。
警告:在使用 Chrome 时,存在阻止在 Roundcube 中创建新密钥的错误。 如果您通常使用 Chrome,请暂时切换到其他浏览器以创建新密钥。 一旦 Chrome 中有密钥,导入密钥对和签名/加密就会按预期工作。
当您收到一封经过验证的签名电子邮件时,Roundcube 会在顶部显示一个绿色的 Verified signature from 通知:
当您收到并解密加密的电子邮件时,Roundcube 会显示 Message decrypted 通知:
要在邮件中使用 GPG 加密,请单击左上角的 Mail 图标,然后单击 Compose 来撰写新电子邮件。 单击 Encryption 图标以查看可供您使用的加密选项。 这些取决于您在加密设置中选择的内容。 如果您遵循我们的建议,您应该会看到 对此消息进行数字签名、加密此消息和附加我的公钥。 发送电子邮件时,请检查所需的加密选项。
结论
通过添加 SSL、双因素身份验证和 GPG 加密,您的电子邮件管道明显更加安全。 从这里开始,您可以通过探索 Roundcube 插件库 继续扩展和自定义 Roundcube。