跳转至内容

Sendmail

来自 ArchWiki

Sendmail 是来自 Unix 世界的经典 邮件传输代理 (MTA)。本文基于 邮件服务器 构建。

本文的目标是为本地用户账户设置 Sendmail,不使用 MySQL 或其他数据库,并允许创建仅限邮件的账户 (mail-only accounts)

安装

本文或本章节的准确性存在争议。

原因: sendmail 可以与 procmail 之外的其他 MDA 配合使用。(在 Talk:Sendmail#MDA_compatibility 中讨论)

安装 sendmailAUR, procmailAURm4 软件包。

添加用户

为每个希望在 username@your-domain.com 接收电子邮件的用户创建一个 Linux 用户。要添加仅限邮件的账户(即可以接收邮件,但不能拥有 shell 访问权限或登录 X 的用户),你可以这样添加

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

配置

获取 TLS 证书

警告 如果你部署 TLS,请务必遵循 weakdh.org 的指南禁用 SSLv3 以防止漏洞。更多信息请参阅 服务端 TLS

获取证书,请参见 OpenSSL#Usage

sendmail.cf

本文或本章节的准确性存在争议。

原因: 这些引号是否正确,以及这些行尾的 dnl 语句是否必要?(在 Talk:Sendmail 中讨论)

创建文件 /etc/mail/sendmail.mc。你可以在 /usr/share/sendmail-cf/README 文件中阅读配置 sendmail 的所有选项。

警告 如果你创建自己的 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

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

aliases.db

编辑文件 /etc/mail/aliases,取消 #root: human being here 行的注释,并将其修改为如下所示

/etc/mail/aliases
root:         your-username

你可以在那里为你的用户名添加别名,例如

/etc/mail/aliases
coolguy:      your-username
somedude:     your-username

然后使用以下命令进行处理

# newaliases

virtusertable.db

创建你的 virtusertable 文件,并在其中放入包含域名的别名(如果你的服务器托管了多个域名,这将非常有用)

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

然后使用以下命令进行处理

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

开机启动

启用/启动 以下单元。

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

SASL 认证

将用户添加到 SASL 数据库中以进行 SMTP 认证。

# saslpasswd2 -c your-username

技巧与提示

将某个域的所有邮件转发给特定用户

要将发往 my-other.tld 域中任何用户的所有邮件转发到 your-username@your-domain.com

/etc/mail/virtusertable
@my-other.tld        your-username@your-domain.com

不要忘记再次使用以下命令进行处理

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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.