用户工具

站点工具


doc:o:opensmtpd_intro

OpenSMTPD 简介

OpenSMTPD 是 OpenBSD 下面的一个子项目,据介绍可以让普通的电脑和其他运行 SMTP 服务的系统进行通信。其特点就是配置简单,容易上手。

安装

# cd /usr/ports/mail/opensmtpd
# make install clean

准备

首先,我们要禁止系统的 sendmail 服务。在 /etc/rc.conf 里面写:

sendmail_enable="NONE"

这样下次系统启动时,任何 sendmail 的服务都不会启动。如果有必要,也可以现在就结束 sendmail 进程。

# pkill -TERM sendmail

配置文件

smtpd.conf

我们需要处理两个文件,都在 /usr/local/etc/mail 下面,分别是 smtpd.conf 和 secrets。这个简介的目的是用 OpenSMTPD 将邮件接力发送到 gmail 的 smtp 服务,同时也让 opensmtpd 负责本地邮件发送。所以 opensmtpd.conf 配置如下:

第一行设置监听端口和主机名称。这个不用过多解释。

listen 127.0.0.1 hostname xxx.yyy.zzz

第二行设置邮件队列的过期时间为 4 小时:

expire 4h

第三行利用系统的 aliases 文件来识别别名。'file' 的意思是说明这是一个普通的文本文件。

table aliases file:/etc/aliases

第四行设置远端 smtp 服务器的密码,密码存储在 'secrets.db' 这个文件中。'db' 的意思就是说这不是普通文本文件:

table secrets db:/usr/local/etc/mail/secrets.db

第五行设置本地邮件的转发。'deliver to mbox' 的意思是将邮件发送到 /var/mail 下。我们还有其他选择,具体可以参阅 smtpd.conf(5) 的 manual

accept for local alias <aliases> deliver to mbox

第六行根据发件人地址发送到 gmail 进行邮件接力。其中我们还可以做一些规则的细化,比如将 'local' 这个关键字替换为 CIDR 格式的 IP 地址范围,比如:10.0.0.0/24 等。

accept from local sender abc@gmail.com for any relay via secure+auth://abc@smtp.gmail.com:587 auth <secrets>
accept from local sender xyz@gmail.com for any relay via secure+auth://xyz@smtp.gmail.com:587 auth <secrets>

最后,整个 smtpd.conf 的文件内容如下:

listen 127.0.0.1 hostname xxx.yyy.zzz

expire 4h

table aliases file:/etc/aliases
table secrets db:/usr/local/etc/mail/secrets.db

accept for local alias <aliases> deliver to mbox

accept from local sender abc@gmail.com for any relay via secure+auth://abc@smtp.gmail.com:587 auth <secrets>
accept from local sender xyz@gmail.com for any relay via secure+auth://xyz@smtp.gmail.com:587 auth <secrets>

secrets

'secrets' 这个文件里面存储的是远端 smtp 的密码。比如:

abc abc@gmail.com:PASSWORD
xyz xyz@gmail.com:PASSWORD

这个文件的权限必须为 0600,我们必须执行如下命令:

# chmod 0600 secrets

然后用 opensmtpd 的 makemap 来生成 'secrets.db' 这个文件:

# /usr/local/libexec/opensmtpd/makemap secrets

运行

最后,在关闭了 sendmail 后,我们可以启动了:

# echo 'smtpd_enable="YES"' >> /etc/rc.conf
# service smtpd start

客户端 SMTP 设置

如果要使用刚才我们设置的本地 OpenSMTPD 服务,我们必须在 OpenSMTPD 所在的机器上拥有一个账户。网络管理员可以让这个账户使用 /usr/sbin/nologin 作为 shell,这样账户就不能登录这个机器,增加一些安全性。然后,我们在需要使用这个 smtp 服务的地方使用如下配置就可以了:

smtp 服务器地址: 127.0.0.1
smtp 服务端口: 25
smtp 服务器用户名称:你在此服务器上的用户名
smtp 服务器用户密码:密码

总结

为什么要使用 OpenSMTPD 呢?首要原因就是其配置简单容易上手,其次就是提供了比较细化的规则来掌控局域网内的邮件收发机制。我们无须在不同的场合设置不同的邮件 smtp 服务了,只要在 smtpd.conf 里设置好转发规则,那么局域网内所有的机器都可以使用 OpenSMTPD 的服务来发送邮件。总之,邮件发送的逻辑简化了,发送邮件的行为也可以控制了。特别适合带有严厉规则防火墙的局域网。

/data/vhosts/wiki-data/pages/doc/o/opensmtpd_intro.txt · 最后更改: 2014/04/26 15:22 由 kapo