使用虚拟域设置 Postfix

来自 Alpine Linux

Postfix 1.9 版本

概述

我们的目标是创建一个 Postfix 配置来托管多个邮件域名。
我想记录如何设置以及如何维护它。

完成 Postfix 安装后,您可以继续安装(取决于您的需求)

  • clamav
  • gross
  • dovecot
  • 其他邮件相关应用

请查看 Hosting_services_on_Alpine#Mail 以获取各种替代方案和说明。

初始设置

将 alpine-1.9.3-x86.iso (或更高版本) 刻录到 CD 并启动机器。
建议:按照 设置 SSH 服务器 的说明进行操作,以便能够远程管理此机器。

Postfix

安装

apk_add postfix

准备

我们需要在此系统上创建一个用户,该用户具有在您的系统上读取/写入邮件的权限。
我们称此用户为 vmail(如果您愿意,可以选择其他名称)。
系统将提示您输入密码。

adduser vmail

现在我们需要知道该用户获得的 gid/uid。
记下这些数字,您将在接下来的配置中需要它们(在我的情况下,我获得了 uid/gid '1001')。

grep vmail /etc/passwd

这个新创建的用户将需要在 mail 组中拥有权限。
编辑 /etc/group 并将 vmail 添加到 postdrop 组。请看下面的示例

postdrop:x:208:vmail

创建缺失目录

似乎我们缺少 /var/spool/mail,所以我们需要创建它

mkdir /var/spool/mail

创建虚拟邮件目录

在接下来的配置中,我们将指定 /var/spool/mail/vhosts/ 作为 virtual_mailbox_base,因此我们需要创建它。

mkdir /var/spool/mail/vhosts

并且我们需要为我们的 vmail 用户授予权限,以便他可以在此文件夹中读取/写入。

chown vmail:postdrop /var/spool/mail/vhosts

配置

FIXME: 以下配置还需要更多工作

/etc/postfix/main.cf

这些是从默认值更改的变量

## These settings differers from the default config ##
soft_bounce = yes   # For testing
myhostname = mail.example.net
mydomain = example.net
myorigin = $mydomain
mydestination = localhost, mail.localdomain, localhost.localdomain, localdomain   # See 'virtual_mailbox_domains' for more information
mynetworks = 192.168.10.0/24, 127.0.0.0/8
relayhost =
in_flow_delay = 1s
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

## The following is added to the config ##
local_transport = virtual
virtual_mailbox_domains = example.net
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
virtual_alias_maps = hash:/etc/postfix/valias

smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions =
        reject_unauth_pipelining,
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_invalid_hostname, reject_non_fqdn_hostname,
        reject_non_fqdn_sender, reject_non_fqdn_recipient,
        reject_unknown_sender_domain, reject_unknown_recipient_domain,
        reject_unauth_destination, 
        permit
smtpd_data_restrictions = reject_unauth_pipelining, permit

/etc/postfix/valias

postmaster@example.net user1@example.net
hostmaster@example.net user2@example.net

/etc/postfix/vmailbox

user1@example.net      example.net/user1/
user2@example.net      example.net/user2/
@example.net           example.net/catchall #everyone else doesn't match rule above

创建数据库

一旦您创建了上述配置文件,您需要生成一些数据库

postmap /etc/postfix/vmailbox
postmap /etc/postfix/valias

我不能 100% 确定是否需要下一个命令,但我认为您需要创建 'aliases' 数据库。

postmap /etc/postfix/aliases

启动 Postfix

是时候启动了。希望它能工作!

/etc/init.d/postfix start

调试

如果出现问题,您应该查看您的系统日志。
我个人习惯在调试时 tail 日志文件

tail -f /var/log/messages

添加/移除邮箱

在上面的示例中,我们使用 /etc/postfix/vmailbox 来存储我们的邮箱列表。
要添加/移除邮箱,您需要编辑此文件,然后重建数据库。

vi /etc/postfix/vmailbox
postmap /etc/postfix/vmailbox

现在我们已经完成了重新配置,我们希望 Postfix 开始使用新设置。

postfix reload