第十二章:Webmail

第十二章:Webmail安装 Roundcube配置 Roundcube安装调试最终设置密码插件升级Roundcube

像Thunderbird和mutt这样的邮件客户端很有用,但让空姐从笔记本电脑屏幕上扫描登机牌是获得伊渥克舱指定座位的好方法。您可以从任何设备访问的基于web的客户端都很有用。许多人从未使用过真正的邮件客户端,只知道如何使用基于网络的电子邮件。如果你提供电子邮件服务,你需要网络邮件。

我们将使用Roundcube(https://roundcube.net/),一个数据库支持的PHP应用程序。它维护良好,灵活,并提供了添加LDAP集成和日历等功能的模块。Roundcube适用于小型站点,但对于大型环境,它也支持Redis和memcached等缓存引擎。即使是小型安装也会使用用户帐户、地址簿等数据库。它支持下一章讨论的行业标准Sieve邮件过滤协议。

安装 Roundcube

大多数操作系统都提供完全可用的Roundcube软件包。使用它。它应该将PHP代码安装在一个目录中,将文档目录安装在其他目录中,并将某些目录设置为可由web服务器写入。该文档包括一个INSTALL文件,讨论如何设置MariaDB数据库,命令如下:

数据库密码不仅适用于应用程序:它是Roundcube GUI的管理密码。使用一个你能可靠地输入三个密码中最好的一个。

拥有数据库后,配置web服务器以支持应用程序。Roundcube提供了一个 .htaccess 文件,用于重写URL和保护敏感文件。许多web服务器已禁用基于 .htaccess 的配置。您可以启用 .htaccess ,也可以将提供的 .htacccess 中的设置直接复制到Apache web服务器配置中。将设置集成到web服务器配置中无疑更正确。

浏览到您配置的URL。Roundcube尚未配置,因此您将收到一条自定义的Roundcube错误消息,但它会告诉您web服务器看到了Roundcube。

配置 Roundcube

Roundcube使用配置文件,但它们提供了一个方便的安装程序来为您创建初始文件,而不是从头开始构建。与许多方便的安装程序不同,它通常有效。将您的web浏览器指向Roundcube的安装程序子目录,您将看到一个列出Roundcube所有依赖项的页面。检查是否缺少共享库和PHP模块。操作系统包很棒,但并非所有打包者都能引入所有依赖项,也并非所有环境都需要所有依赖项。Roundcube将PHP的LDAP模块列为依赖项,但如果您没有使用LDAP,请不要安装它。PHP的ImageMagick模块也是一个依赖项,它拖动了各种共享库和程序以及Ghostscript和Cups,可能还有秘密战斗站的蓝图。不过,用户希望他们的webmail客户端支持图片,所以请安装它。您还将看到不使用的数据库的错误。如果Roundcube看到它有MariaDB/MySQL支持,你就没事了。

当你点击“下一步”时,你会得到一个Roundcube选项列表。第一部分包含用于组成网页的基本界面详细信息,如 product_namesupport_url 。其他功能是可选的,比如与谷歌的拼写检查服务集成。

下一节将讨论日志记录。默认情况下,Roundcube会记录到应用程序目录中的文件。在生产环境中,我建议使用syslog,这样您就可以像管理任何其他应用程序一样管理Roundcube日志。对于您的第一次设置,请使用Roundcube的本机文件日志记录。

然后我们进行数据库设置。输入数据库名称、用户名和密码。

下面是IMAP设置和SMTP设置。这很棘手。Roundcube使用选项 ssl 表示“TCP端口需要TLS”,这就是我们在端口993上配置IMAP的方式。tls 选项意味着“使用机会tls”,就像587端口上的邮件提交一样。Roundcube将尝试使用给定的主机名验证X.509服务器证书,如果不能,则拒绝连接。虽然您可能在与MTA相同的主机上运行Roundcube,但您的证书不包括主机名 localhost 。使用实际的主机名。

在我的安装中,IMAP应该设置为使用 ssl://mail.ratoperatedvehicle.com:993 。 SMTP服务器应设置为 ssl://mail.ratoperatedvehicle.com:465

如果您的Roundcube只支持一个域,您可以添加一个默认域。列出的邮箱与大多数邮件客户端(包括Thunderbird和Outlook)使用的邮箱匹配,因此除非您想创建额外的文件夹,否则不要更改它们。

安装程序提供了显示设置的选择,但在您第一次安装Roundcube时,您不知道默认设置会让您感到多么恼火。让他们独处,直到你真正感到烦恼。

最后,安装程序允许您选择插件。下一章需要 managesieve 。当我们进行垃圾邮件过滤时,您可能还会发现 markasjunk 很有用。如果您预计会遇到问题,您可能需要 debug_loggerpassword 插件允许用户更改自己的密码。你可能想要那个。

在页面底部,您将看到一个 Create Config (创建配置)按钮。单击它。安装程序将向您显示配置文件的内容。web服务器没有写入实际配置文件的权限。使用文本编辑器将内容复制到应用程序目录中的空白 config.inc.php 中,或者单击“ save to /tmp”按钮,然后将其复制到该应用程序目录。这个基本配置应该足以让Roundcube运行。安装配置文件后,点击 Continue

安装程序的第三页验证您的设置是否有效,并为您提供测试SMTP和IMAP的机会。如果一切正常,你的测试成功,你就完成了。修复错误是“安装程序很容易”和“只需编辑配置文件”之间的界限。此页面读取已安装的配置文件,因此您可以重新加载页面以测试配置更改。 defaults.inc.php 文件列出了Roundcube的所有配置选项及其默认设置。其中大多数仅适用于特殊情况、大型环境或支持过时的软件。

安装调试

Roundcube默认记录到网站日志目录中的文件。日志在调试期间特别有用。Roundcube有一个通用的问题日志 logs/error.log ,但支持对SQL、IMAP和SMTP事务以及LDAP进行单独的日志记录。如果部分配置失败,请首先验证您是否在端口993上将IMAP设置为 ssl ,在端口465上将SMTP设置为 ssl 。然后根据需要启用数据库、IMAP或SMTP的调试。

设置这些会将所有事务写入 sql.logimap.logsmtp.log 。在安装程序页面上重新测试配置,测试输出将记录到文件中。如果你使用OpenSSL或 mysql(1) 连接到服务,你会得到同样的输出。不过,这些日志可能会变得相当大,所以不要启用它们。

Roundcube还有其他调试选项,例如用于HTTP会话和Redis集成。有关详细信息,请查看 defaults.inc.php

最终设置

一旦安装程序停止抱怨,配置长期日志记录并禁用安装程序。

据推测,您将使用Roundcube一段时间。日志将会生长。在将任何应用程序投入生产之前,安排日志管理。您可以旋转Roundcube日志目录中的日志,也可以让Roundcube将其日志馈送到syslog。日志管理是syslog的目的,所以使用它。不过,不要将Roundcube日志转储到邮件日志中。这就像把你的网络服务器日志放在邮件日志中。为Roundcube分配自己的设施。以下是在传统 syslogd(8)rsyslogd(8) “基本”格式中如何做到这一点。

重新启动syslogd并使用 logger(1) 测试您的配置。

日志中显示的消息表示您的日志记录有效。现在告诉Roundcube使用syslogd:

通过返回安装程序页面并测试IMAP或SMTP来测试这一点。调试输出应显示在日志文件中。一旦你知道Roundcube日志记录有效,就注释掉调试日志记录。

最后,禁用安装程序。您可以删除安装程序文件夹及其所有内容,但这可能会使计划的包完整性检查在每次运行时都出现问题。一些打包系统甚至可以恢复更改的文件。禁用 config.inc.php 中的安装程序。

您一直在使用的浏览器会话将具有安装程序页面的缓存和有效的会话cookie,但新的浏览器会话无法访问它。

将web浏览器指向Roundcube目录。它会询问您的用户名和密码。web界面类似于其他web邮件界面。在下一章中,我们将使用Roundcube的ManageSieve功能构建服务器端邮件过滤器。

Roundcube有更多的内置功能和附加插件,可以自己填满一本书。他们有一个维护良好的维基、一个社区论坛和一个活跃的bug跟踪器。如果您需要更多功能,请查看。它们可能存在。

密码插件

虽然您已经配置了Roundcube的核心,但它也是用户更改密码的方便场所。首先在 config.inc.php 中启用密码插件。Roundcube忽略未启用的插件。

在子目录 plugins/password 中找到插件。将插件的 config.inc.php.dist 文件复制到 config.inc.php ,并对该文件进行所有更改。除非您想在下一次升级时丢失更改,否则不要编辑 config.inc.php.dist 。该插件支持多种密码后端,包括LDAP。虽然您不会找到明确标记的PostfixAdmin支持,但SQL驱动程序就足够了。

首先,设置 password_driver 以使用SQL驱动程序:

该插件可以通过将 password_minimum_score 设置为 05 的范围来评估新密码的质量。 0 允许人们将密码更改为 password ,而 5 需要极其复杂的密码。对于普通用户,我将其设置为 1

使用 password_db_dsn 选项告诉插件在哪里可以找到数据库。数据库连接字符串应与Roundcube配置的数据源名称(Data Source Name —— DSN)相同。这是一个与传递状态通知完全不同的DSN,Roundcube配置向导为您解决了这个问题。将Roundcube的 db_dsnw 设置的值复制到插件的 password_db_dsn 中。

使用 password_algorith 告诉密码插件我们的密码使用什么哈希方法。我们正在使用Blowfish:

现在棘手的部分是:将 password_query 设置为更新用户密码的数据库查询。DSN允许插件以必要的权限连接到正确的数据库,但查询必须包含数据库名称。更改PostfixAdmin密码的查询如下:

该插件为新密码提供了方便的 %P 宏,为用户名提供了 %u 宏,数据库名称永远不会改变。我们的测试数据库名为泥浆。这为我们提供了这个 config.inc.php 设置:

插件现在已经准备好了。查看日志中的错误并进行测试。

升级Roundcube

部署Roundcube之前的最后一点注意事项。该软件包安装简单。新版本并不那么简单。每个新的Roundcube版本都包含一个升级文档,其中包含如何将插件和数据库无缝移动到新版本的具体说明。仔细地遵循它。我无法提供详细信息,因为升级各不相同。

我们现在可以看看服务器端的邮件过滤。