Sendmail
Sendmail 是来自 Unix 世界的经典 邮件传输代理 (MTA)。本文基于 邮件服务器 构建。
本文的目标是为本地用户账户设置 Sendmail,不使用 MySQL 或其他数据库,并允许创建仅限邮件的账户 (mail-only accounts)。
安装
安装 sendmailAUR, procmailAUR 和 m4 软件包。
添加用户
为每个希望在 username@your-domain.com 接收电子邮件的用户创建一个 Linux 用户。要添加仅限邮件的账户(即可以接收邮件,但不能拥有 shell 访问权限或登录 X 的用户),你可以这样添加
# useradd -m -s /usr/bin/nologin username
配置
获取 TLS 证书
获取证书,请参见 OpenSSL#Usage。
sendmail.cf
创建文件 /etc/mail/sendmail.mc。你可以在 /usr/share/sendmail-cf/README 文件中阅读配置 sendmail 的所有选项。
这是一个使用 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.servicesendmail.servicesm-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