Sendmail
Sendmail 是 Unix 世界中经典的 邮件传输代理。本文建立在 邮件服务器 的基础上。
本文的目标是为本地用户账户设置 Sendmail,不使用 MySQL 或其他数据库,并允许创建“仅限邮件的账户”。
安装
安装 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,并将您希望能够中继邮件的基地址放在那里。假设您有一个 VPN 位于 10.5.0.0/24,并且您想从中继该范围内的任何 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