Sendmail
Sendmail 是经典的 Unix 世界的 邮件传输代理。本文建立在 邮件服务器 的基础上。
本文的目标是为本地用户帐户设置 Sendmail,无需使用 MySQL 或其他数据库,并允许创建仅邮件帐户。
安装
安装 sendmailAUR、procmailAUR 和 m4 软件包。
添加用户
为每个想要在 username@your-domain.com 接收电子邮件的用户创建一个 Linux 用户。要添加仅邮件帐户,即可以接收电子邮件但不能拥有 shell 访问权限或登录 X 的用户,您可以像这样添加他们
# useradd -m -s /usr/bin/nologin username
配置
获取 TLS 证书
要获取证书,请参阅 OpenSSL#用法。
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.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