跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:网络服务 Oracle Solaris 11 Information Library (简体中文) |
MILTER(用于 sendmail 的邮件过滤器 API)
sendmail 版本 8.13 支持运行 SMTP 时使用 TLS
sendmail 版本 8.13 中新增和修订的配置文件选项
sendmail 版本 8.13 中新增和修订的 FEATURE() 声明
sendmail 版本 8.12 中的配置文件 submit.cf
可区分 sendmail.cf 与 submit.cf 的功能
sendmail 版本 8.12 中新增的用于 PidFile 和 ProcessTitlePrefix 选项的参数
sendmail 版本 8.12 中新增和修订的 m4 配置宏
sendmail 版本 8.12 中对 FEATURE() 声明的更改
sendmail 版本 8.12 中对 MAILER() 声明的更改
sendmail 版本 8.12 中新增的用于传送代理的等式
sendmail 版本 8.12 和配置中的 IPv6 地址
邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、程序、术语和概念。
vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。
此项增强功能将收到的发件人电子邮件地址与 .vacation.filter 文件中的域列表或电子邮件地址列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。
.vacation.filter 可能包含以下类似项:
company.com mydomain.com onefriend@hisisp.com anotherfriend@herisp.com
请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹配,该发件人的地址必须包含列出的域。例如,somebody@dept.company.com 和 someone@company.com 都可与域项 company.com 匹配。
有关更多信息,请参见 vacation(1) 手册页。
|
|
/etc/mail 目录中有一个子目录 cf,其中包含生成 sendmail.cf 文件所需的全部文件。表 14-9 中显示了 cf 的内容。
为支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。但是,请注意以下例外情况。Shell 脚本 /usr/lib/mail/sh/check-hostname 和 /usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。
表 14-9 用于邮件服务的 /etc/mail/cf 目录的内容
|
表 14-10 /usr/lib 目录的内容
|
如表 14-11 所示,还有几个其他文件和目录可用于邮件服务。
表 14-11 用于邮件服务的其他文件
|
邮件服务由以下程序的组合提供,这些程序按图 14-2 的简图中所示进行交互。
图 14-2 邮件程序的交互
下面对邮件程序的交互进行了说明。
用户使用程序(如 mailx)发送邮件。有关更多信息,请参见 mailx(1) 手册页。
邮件由生成它的程序收集,然后传递给 sendmail 守护进程。
sendmail 守护进程解析邮件中的地址(将其划分为可识别的段)。该守护进程使用配置文件 /etc/mail/sendmail.cf 中的信息来确定网络名的语法、别名、转发信息和网络拓扑。通过使用此信息,sendmail 可以确定邮件要到达收件人所必须采用的路由。
sendmail 守护进程将邮件传递给相应系统。
本地系统中的 /usr/lib/mail.local 程序将邮件传送至邮件收件人在 /var/mail/ username 目录中的邮箱。
通知收件人邮件已到达,收件人使用 mail、mailx 或类似程序检索邮件。
sendmail 可以使用不同类型的通信协议,如 TCP/IP 和 UUCP。
sendmail 可以实现 SMTP 服务器、邮件排队和邮件列表。
sendmail 可以通过使用符合以下命名约定的模式匹配系统来控制名称解释。
基于域的命名约定。通过域技术可以区分物理命名和逻辑命名问题。有关域的更多信息,请参阅邮件地址。
临时技术,如提供对于其他网络中的主机而言看似位于本地的网络名。
任意(早期)命名语法。
完全不同的命名方案。
Oracle Solaris 操作系统使用 sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。
sendmail 负责接收电子邮件并将其传送给本地传送代理,如 mail.local 或 procmail。
sendmail 是一个邮件传输代理,用于接受来自用户代理(如 mailx 和 Mozilla 邮件)的邮件并通过 Internet 将其路由至目标。
sendmail 控制用户以下列方式发送的电子邮件:
确定收件人的地址
选择合适的传送程序
以传送代理可以处理的格式重写地址
根据需要重新格式化邮件头
最后将已转换的邮件传递给邮件程序以进行传送
有关 sendmail 程序的更多信息,请参阅以下主题。
sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。
服务器更改
域范围的更改
面向一个用户的更改
此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。
一种重新路由机制是别名。
根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射到地址。
请考虑名称服务别名的以下优点和缺点。
使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由更改时,名称服务别名会产生延迟时间。
名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。
请考虑使用服务器别名文件的以下优点和缺点。
通过使用服务器别名文件,指定的服务器上能够成为 root 的任何用户都可管理重新路由。
传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。
更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。
普通用户将不能管理此更改。
有关更多信息,请参阅本章中的邮件别名文件。有关任务列表,请参阅第 13 章中的管理邮件别名文件(任务列表)。
第二种机制是转发。
通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位置。
其他邮箱
不同的邮件程序
其他邮件主机
通过使用 .forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章中的.forward 文件。有关任务列表,请参阅第 13 章中的管理 .forward 文件(任务列表)。
最后一种重新路由机制是包含。
通过此机制,用户可维护别名列表而不会要求 root 访问。要提供此功能,root 用户必须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由邮件。有关包含的更多信息,请参阅本章中的/etc/mail/aliases 文件。有关任务列表,请参阅第 13 章中的管理邮件别名文件(任务列表)。
注 - 读取邮件的程序(如 /usr/bin/mailx)可以有自己的别名,该别名在邮件到达 sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件或 NIS。查找顺序是由 svc:/system/name-service/switch 服务确定的。请参阅 nsswitch.conf(4)手册页。
sendmail 很可靠。该程序用于正确传送每封邮件。任何邮件都不会完全丢失。
sendmail 会尽可能使用现有软件进行传送。例如,用户会与邮件生成程序和邮件发送程序进行交互。提交邮件时,邮件生成程序会调用 sendmail,后者将邮件路由至正确的邮件程序。由于有些发送器可能是网络服务器,有些邮件程序可能是网络客户机,因此可将 sendmail 用作 Internet 邮件网关。有关该过程的更详细说明,请参见邮件程序的交互。
可将 sendmail 配置为用于包括多个网络的复杂环境。sendmail 会检查地址的内容及其语法,以确定要使用的邮件程序。
sendmail 使用配置文件来控制邮件配置,而不要求将该配置信息编译成代码。
用户可以维护各自的邮件列表。此外,各个用户还可以指定各自的转发机制,而无需修改域范围的别名文件,该文件通常位于由 NIS 维护的域范围别名中。
每个用户可以指定定制邮件程序,以处理传入邮件。定制邮件程序可以提供返回内容为 "I am on vacation." 等类似邮件的功能。有关更多信息,请参见 vacation(1) 手册页。
sendmail 可将地址批处理至单独一台主机,以减少网络通信流量。
配置文件控制 sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写规则以及邮件头格式。sendmail 程序使用 /etc/mail/sendmail.cf 文件中的信息来执行其功能。
Oracle Solaris 操作系统在 /etc/mail 目录中提供了两个缺省配置文件。
submit.cf,用于在邮件提交程序模式而非守护进程模式下运行 sendmail 的配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。
设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:
要设置邮件主机或邮件网关,需要设置邮件配置所需的中继邮件程序和中继主机参数。有关任务信息,请参阅第 13 章中的设置邮件服务(任务列表)或更改 sendmail 配置。请注意,在 sendmail 版本 8.13 中,不再需要 main.cf 文件。
以下列表介绍了可以根据站点的要求来更改的一些配置参数。
时间值,用于指定以下信息。
读取超时。
将邮件返回给发件人之前,该邮件在队列中保持未传送状态的时间长度。请参阅sendmail 版本 8.12 中新增的队列功能。有关任务列表,请参阅管理队列目录(任务列表)。
传送模式,用于指定传送邮件的快速程度。
负荷限制,可在繁忙期间提高效率。这些参数可防止 sendmail 尝试传送大型邮件、向许多收件人传送邮件以及向已长时间关闭的站点传送邮件。
维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有唯一的格式要求。
如果要查找任务信息,请参阅第 13 章中的管理邮件别名文件(任务列表)。
.mailrc 文件中列出的别名仅能由拥有该文件的用户进行访问。借助此限制,用户可以建立由其控制并且仅能由所有者使用的别名文件。.mailrc 文件中的别名遵循以下格式。
alias aliasname value value value ...
aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。
如果用户为 scott 建立的个人别名在名称服务中与 scott 的电子邮件地址不匹配,则会出现错误。他人尝试回复此用户生成的邮件时,邮件会路由至错误的人员。唯一的解决方法是使用其他任一别名机制。
知道别名名称和包含该文件的系统的主机名的任何用户都可以使用 /etc/mail/aliases 文件中建立的任何别名。本地 /etc/mail/aliases 文件中的分发列表格式遵循以下格式。
aliasname: value,value,value ...
aliasname 是用户向此别名发送邮件时使用的名称,value 是有效的电子邮件地址。
如果网络未运行名称服务,则每个系统的 /etc/mail/aliases 文件都应包含用于所有邮件客户机的项。可以在每个系统中编辑该文件,也可在一个系统中编辑该文件,然后再将其复制到其他所有系统中。
/etc/mail/aliases 文件中的别名以文本形式存储。编辑 /etc/mail/aliases 文件时,需要运行 newaliases 程序。此程序将重新编译数据库并使别名可以二进制形式供 sendmail 程序使用。有关任务信息,请参阅第 13 章中的如何设置本地邮件别名文件。
可以仅为本地名称(当前主机名或无主机名)创建别名。例如,如果用户 ignatz 在系统 saturn 中有一个邮箱,则 /etc/mail/aliases 文件中可包含该用户的以下别名项。
ignatz: ignatz@saturn
应为每台邮件服务器创建一个管理帐户。创建此类帐户的方法是在邮件服务器上为 root 指定一个邮箱并在 /etc/mail/aliases 文件中为 root 添加一项。例如,如果系统 saturn 是邮箱服务器,则可向 /etc/mail/aliases 文件中添加项 root: sysadmin@saturn。
通常,仅有 root 用户才能编辑此文件。另外,还可选择创建以下项。
aliasname: :include:/path/aliasfile
aliasname 是用户在发送邮件时使用的名称,/path/aliasfile 是包含别名列表的文件的全路径。该别名文件应包括电子邮件项(每行一项),并且不包括任何其他符号。
user1@host1 user2@host2
可在 /etc/mail/aliases 中定义附加的邮件文件,以保留日志或备份副本。以下项会将发送给 aliasname 的所有邮件都存储在 filename 中。
aliasname: /home/backup/filename
另外,还可以将邮件路由至其他进程。以下示例将邮件副本存储在 filename 中并列出副本。
aliasname: "|tee -a /home/backup/filename |lp"
有关任务列表,请参阅第 13 章中的管理邮件别名文件(任务列表)。
本地域中的所有用户都可以使用 NIS aliases 映射中的各项。原因是 sendmail 程序可以使用 NIS aliases 映射而非本地 /etc/mail/aliases 文件来确定邮件地址。 有关更多信息,请参阅 nsswitch.conf(4)手册页。
NIS aliases 映射中的别名遵循以下格式。
aliasname: value,value,value ...
aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。
NIS aliases 映射应包含用于所有邮件客户机的各项。通常,只有 NIS 主服务器中的 root 用户才能更改这些项。对于经常更改的别名,最好不要选择此类型。但是,如果这些别名指向其他别名文件,则这类别名将很有用,如以下语法示例所示。
aliasname: aliasname@host
aliasname 是用户发送邮件时使用的名称,host 是包含 /etc/mail/alias 文件的服务器的主机名。
有关任务信息,请参阅第 13 章中的如何设置 NIS mail.aliases 映射。
用户可在其起始目录中创建一个 .forward 文件,以供 sendmail 以及其他程序用于重定向邮件或发送邮件。请参阅以下主题。
有关任务列表,请参阅第 13 章中的管理 .forward 文件(任务列表)。
以下列表介绍了可以避免或轻松解决问题的一些情况。
如果邮件未传送至预期的地址,请检查该用户的 .forward 文件。用户可能已将 .forward 文件放入了 host1 的起始目录,该文件会将邮件转发至 user@host2。当邮件到达 host2 时,sendmail 会在 NIS 别名中检查 user 并将邮件发回至 user@host1。此路由将产生循环以及更多退回的邮件。
要避免安全问题,请勿将 .forward 文件放在 root 和 bin 帐户中。如有必要,请改用 aliases 文件转发邮件。
要使 .forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设置)。
.forward 文件必须只能由文件所有者写入。此限制可以防止其他用户破坏安全性。
至起始目录的路径必须只能由 root 拥有和写入。例如,如果 .forward 文件位于 /export/home/terry 中,则 /export 和 /export/home 必须只能由 root 拥有和写入。
实际起始目录应只能由用户写入。
.forward 文件不能是符号链接,并且此文件不能包含多个硬链接。
可以创建 .forward. hostname 文件以重定向发送给特定主机的邮件。例如,如果用户的别名已从 sandy@phoenix.example.com 更改为 sandy@example.com,请在 sandy 的起始目录中放入一个 .forward.phoenix 文件。
% cat .forward.phoenix sandy@example.com "|/usr/bin/vacation sandy" % cat .vacation.msg From: sandy@example.com (via the vacation program) Subject: my alias has changed My alias has changed to sandy@example.com. Please use this alias in the future. The mail that I just received from you has been forwarded to my new address. Sandy
在本示例中,在通知发件人发生别名更改后,可将邮件转发至正确地址。由于 vacation 程序仅允许一个邮件文件,因此每次仅能转发一封邮件。但是,如果邮件不是特定于主机,则 .forward 文件可将一个休假邮件文件用于多台主机。
对转发机制的另一种扩展是 .forward+detail 文件。detail 字符串可以是除运算符字符之外的任意字符序列。运算符字符包括 .:%&!^[]+.通过使用此类型的文件,可以确定是否有其他人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子邮件地址 sandy+test1@example.com,该用户将能够识别将来传送给此别名的任何邮件。缺省情况下,将根据别名和 .forward+detail 文件对发送至 sandy+test1@example.com 别名的所有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至 sandy@example.com,但用户可以看到 To: 邮件头中的更改。
此文件用于存储 sendmail 的启动选项,以免在升级主机时删除这些选项。可以使用以下变量。
选择要用于客户机守护进程的其他选项,该守护进程会查看仅客户机队列 (/var/spool/clientmqueue) 并可用作客户机队列运行器。不会进行任何语法检查,因此在更改此变量时请务必小心。
与 QUEUEINTERVAL 选项类似,CLIENTQUEUEINTERVAL 用于设置邮件队列运行的时间间隔。但是,CLIENTQUEUEINTERVAL 选项将控制客户机守护进程的功能而非主服务器守护进程的功能。通常,主服务器守护进程可将所有邮件都传送至 SMTP 端口。但是,如果邮件负荷过高或主服务器守护进程未运行,则邮件会进入仅客户机队列 /var/spool/clientmqueue。然后,检查仅客户机队列的客户机守护进程将用作客户机队列处理器。
可使 SMTP 客户机和服务器立即交互,而无需等待达到队列运行间隔,该间隔是周期性的。服务器可以立即传送队列中转至指定主机的部分。有关更多信息,请参阅 etrn(1M) 手册页。
选择用于启动 sendmail 的模式。使用 -bd 选项或不予以定义。
选择要用于主服务器守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务必小心。
设置邮件队列在主服务器守护进程中的运行间隔。# 可以是一个正整数,后跟 s(秒)、m(分钟)、h(小时)、d(天)或 w(星期)。在启动 sendmail 之前会先检查语法。如果间隔为负或者该项不是以合适字母结尾,则会忽略该间隔,sendmail 将以 15 分钟的队列间隔启动。
启用一个在队列运行间隔之间休眠的持久性队列运行器,而不是为每个队列运行间隔启用一个新队列运行器。可将此选项设置为 p,这是唯一可用的设置。否则,将不设置此选项。