Sendmail (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Sendmail翻译,最后翻译时间:2016-08-26,点击这里可以查看翻译后英文页面的改动。

Sendmail 是来自 UNIX 世界的经典 SMTP 服务器。Arch Linux 还提供了 Postfix

本文的目的是为本地用户账户设置 Sendmail,不使用 mysql 或者其它数据库,同时允许建立所谓 mail-only 账户

本文仅描述了配置 Sendmail 的必需步骤;要添加 IMAP 与 POP3 服务,您可以考虑阅读 Dovecot 的内容。

安装

安装 软件包 sendmailAUR, procmailm4

DNS 记录

您应当拥有一个域名,并且编辑所拥有域名的 MX 记录指向你的服务器。请注意一些服务器在处理指向 CNAMEs 的 MX 记录时会出现问题,所以你应当考虑将 MX 记录指向一个 A 记录。

添加用户

为每个需要接收邮件的用户创建 [[Users and groups|Linux 用户,每个用户会拥有类似 username@your-domain.com 的电子邮件地址。但是如果你想要添加 mail-only 账户,即仅能处理电子邮件,但不能使用 shell 或 X 进行登录的账户,您可以按如下步骤添加该类账户:

# useradd -m -s /usr/bin/nologin username

注:在此之后,您可以随时通过修改 /etc/passwd 等方式更改账户类型与属性。

配置

创建 SSL 证书

Warning: If you plan on implementing SSL/TLS, know that some variations and implementations are still vulnerable to attack. For details on these current vulnerabilities within SSL/TLS and how to apply appropriate changes to Sendmail, visit http://disablessl3.com/ and https://weakdh.org/sysadmin.html

生成一个 key 并对其签名,请阅读 OpenSSL 以了解更多信息,Let's Encrypt 提供了免费认证。

Warning: 使用经过口令加密(具有 passphrase)的服务器的密钥文件可能导致 Sendmail 启用 TLS 失败。如果出现问题,请参考 这里 移除已有密钥文件的口令。
Note: 建议将服务器密钥与证书统一放在 /etc/mail/certs/ 目录下,并移除服务器密钥文件的组可读与其它可读权限。之后 sendmailconfig 工具可能会自动更改该文件夹下文件的属主、属组与权限。

sendmail.cf

创建文件 /etc/mail/sendmail.mc,并以此为基础使用 m4 工具生成 sendmail.cf 文件。

您可以由 /usr/share/sendmail-cf/README 文件了解配置 sendmail 的全部选项。

Warning: 无论是从头创建自己的 sendmail.mc 文件,还是在已有的 sendmail.mc 文件基础上进行修改,请时刻牢记,在非 TLS 情况下使用明文验证是十分危险的行为。除非您明确了解自己行为的意义,请使用以下示例中的方法强制进行 TLS 验证以确保安全性。

下面是在 TLS 之上进行身份验证的配置文件示例。例子包含了解释工作原理的注释,这些注释以 dnl 这个单词起始。

/etc/mail/sendmail.mc
include(`/usr/share/sendmail-cf/m4/cf.m4')
define(`confDOMAIN_NAME', `your-domain.com')dnl
FEATURE(use_cw_file)
dnl  The following allows relaying if the user authenticates,
dnl  and disallows plaintext authentication (PLAIN/LOGIN) on
dnl  non-TLS links:
define(`confAUTH_OPTIONS', `A p y')dnl
dnl
dnl  Accept PLAIN and LOGIN authentications:
TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
dnl
dnl Make sure this paths correctly point to your SSL cert files:
define(`confCACERT_PATH',`/etc/ssl/certs')
define(`confCACERT',`/etc/ssl/cacert.pem')
define(`confSERVER_CERT',`/etc/ssl/certs/server.crt')
define(`confSERVER_KEY',`/etc/ssl/private/server.key')
dnl
FEATURE(`virtusertable', `hash /etc/mail/virtusertable.db')dnl
OSTYPE(linux)dnl
MAILER(local)dnl
MAILER(smtp)dnl

然后使用使用

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

命令生成 sendmail.cf 文件。

Note: 如果您对 sendmail.cf 语法感兴趣,请参阅 这篇文章 了解详情。

sendmail.conf

sendmail.conf 文件,如果存在,则也是配置 Sendmail 并最终生成 sendmail.cf 的一个配置文件。请阅读文件内含的注释了解详细信息。

local-host-names

请将您的域名写入 local-host-names 文件:

/etc/mail/local-host-names
localhost
your-domain.com
mail.your-domain.com
localhost.localdomain

请确保您的域名可以被 /etc/hosts 文件解析。

access.db

创建文件 /etc/mail/access 然后写入规则以配置邮件转发、允许收信与拒信。假设你在 10.5.0.0/24 有一个 VPN,而且你希望转发来自该 IP 段的所有邮件:

/etc/mail/access
10.5.0 RELAY
127.0.0 RELAY

然后使用

# makemap hash /etc/mail/access.db < /etc/mail/access

命令处理生成 sendmail 可以使用的配置数据库。

aliases.db

编辑文件 /etc/mail/aliases ,反注释这一行: #root: human being here 并将其修改如下:

root:         your-username

你可以在此添加用户的别名。例如:

coolguy:      your-username
somedude:     your-username

然后使用

# newaliases

命令进行处理。

virtusertable.db

创建 virtusertable 文件并在其中写入含有域名的别名:(这项功能在您的服务器绑定多域名时十分有用)

/etc/mail/virtusertable
your-username@your-domain.com         your-username
joe@my-other.tk                       joenobody

然后使用

# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

命令进行处理。

开机自动启动

启用并启动下列服务。请阅读 守护进程 了解详情。

  • saslauthd.service
  • sendmail.service
  • sm-client.service

SASL 验证

将用户添加至 SASL 数据库并设置用于 SMTP 身份验证的密码。

# saslpasswd2 -c your-username

注:您可以设置使用异于 SASL 的身份验证途径。这需要进一步修改配置文件,这里不赘述。

小窍门

将某个域名的全部邮件转发至特定邮箱

若需将 my-other.tk 域名下所有用户的电子邮件转发到 your-username@your-domain.com,请在 /etc/mail/virtusertable 文件中添加以下一行:

@my-other.tk        your-username@your-domain.com

不要忘记再次使用如下命令更新配置数据库:

# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable