跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中管理 sendmail 服务 Oracle Solaris 11.1 Information Library (简体中文) |
MILTER(用于 sendmail 的邮件过滤器 API)
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 邮件程序
UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 邮件程序
sendmail 版本 8.13 支持运行 SMTP 时使用 TLS
sendmail 版本 8.13 中新增和修订的配置文件选项
TCP 包装提供了一种实现访问权控制的方法,即根据访问控制列表 (access control list, ACL) 检查请求特定网络服务的主机的地址。请求将相应地被授权或拒绝。除了提供此项访问控制机制外,TCP 包装还会记录对网络服务的主机请求,这是一项有用的监视功能。可能受到访问控制的网络服务包括 rlogind、telnetd 和 ftpd。
从版本 8.12 开始,sendmail 将允许使用 TCP 包装。此项检查不会忽略其他安全标准。通过在 sendmail 中启用 TCP 包装,可以在授权请求前进行检查以验证网络请求的来源。请参见 hosts_access(4) 手册页。
注 - 从 Solaris 9 发行版开始,inetd(1M) 和 sshd(1M) 中将支持 TCP 包装。
有关 ACL 的信息,请参见《Oracle Solaris 11.1 管理:安全服务》中的"使用访问控制列表保护 UFS 文件"。
从版本 8.12 开始,sendmail 包括一个附加配置文件 /etc/mail/submit.cf。此 submit.cf 文件用于在邮件提交程序模式而非守护进程模式下运行 sendmail。与守护进程模式不同,邮件提交程序模式不要求 root 特权,因此这一新模式可以提供更好的安全性。
请参见以下列出的 submit.cf 功能:
sendmail 使用 submit.cf 在邮件提交程序 (mail-submission program, MSP) 模式下运行,该模式可提交电子邮件并可由程序(如 mailx)以及用户启动。请参阅 sendmail(1M) 手册页中有关 -Ac 选项和 -Am 选项的说明。
submit.cf 可用于以下操作模式中:
-bm,此为缺省操作模式
-bs,它使用标准输入来运行 SMTP
-bt,此为用于解析地址的测试模式
sendmail 在使用 submit.cf 时不会作为 SMTP 守护进程运行。
sendmail,它使用 submit.cf 时将使用仅客户机邮件队列 /var/spool/clientmqueue,该队列中保存未传送至 sendmail 守护进程的邮件。仅客户机队列中的邮件由客户机“守护进程”来传送,该守护进程实际用作客户机队列运行器。
缺省情况下,sendmail 会定期使用 submit.cf 来运行 MSP 队列(也称为仅客户机队列)/var/spool/clientmqueue。
/usr/lib/sendmail -Ac -q15m
请注意以下事项:
从 Solaris 9 发行版开始,将自动提供 submit.cf。
安装 Solaris 9 发行版或更新发行版之前,submit.cf 不要求执行任何规划或预备过程。
除非指定配置文件,否则 sendmail 将根据需要自动使用 submit.cf。基本上,sendmail 知道哪些任务适合 submit.cf,哪些任务适合 sendmail.cf。
sendmail.cf 配置文件用于守护进程模式。使用此文件时,sendmail 用作邮件传输代理 (mail transfer agent, MTA),该代理由 root 启动。
/usr/lib/sendmail -L sm-mta -bd -q1h
请参见以下列出的 sendmail.cf 的其他特性:
除添加 submit.cf 之外,在功能方面还有以下更改:
从 sendmail 版本 8.12 开始,仅有 root 可以运行邮件队列。有关更多详细信息,请参阅 mailq(1) 手册页中介绍的更改。有关新任务的信息,请参阅管理队列目录(任务列表)。
邮件提交程序模式运行时无需 root 特权,这可能会导致 sendmail 无法访问某些文件(例如 .forward 文件)。因此,sendmail 的 -bv 选项为用户提供的输出可能具有误导性。没有切实可行的解决方法。
在 sendmail 版本 8.12 之前,如果不在守护进程模式下运行 sendmail,则只会阻止传入邮件的传送。从 sendmail 版本 8.12 开始,如果不使用缺省配置运行 sendmail 守护进程,则还会阻止外发邮件的传送。客户机队列运行器(又称为邮件提交程序)必须能够将邮件提交至本地 SMTP 端口上的守护进程。如果客户机队列运行器尝试打开与本地主机的 SMTP 会话,并且守护进程未侦听 SMTP 端口,则邮件将保留在队列中。缺省配置确实会运行守护进程,因此使用缺省配置时不会出现此问题。但是,如果已禁用守护进程,请参阅如何使用 sendmail.cf 的备用配置管理邮件传送以寻找解决此问题的方法。
下表介绍了 sendmail 的新增或过时的命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。
表 3-18 sendmail 版本 8.12 中新增或过时的命令行选项
|
下表介绍了新增的用于 PidFile 和 ProcessTitlePrefix 选项的宏处理参数。有关这些选项的更多信息,请参见 sendmail(1M) 手册页。
表 3-19 PidFile 和 ProcessTitlePrefix 选项的参数
|
下表介绍了新增的、保留以供 sendmail 程序使用的宏。这些宏的值在内部指定。有关更多信息,请参阅 sendmail(1M) 手册页。
表 3-20 sendmail 新增的已定义宏
|
本节中的表介绍了新增的用于生成 sendmail 配置文件的宏。
表 3-21 新增的用于生成 sendmail 配置文件的宏
|
使用以下宏可以配置在 sendmail 降低传送速度之前可以接收的命令的最大数目。可在编译时设置这些 MAX 宏。下表中的最大值也表示当前的缺省值。
表 3-22 新增的 MAX 宏
|
注 - 通过将宏的值设置为零可以禁用宏检查。
本节中的表介绍了 sendmail 中新增和修订的 m4 配置宏。可使用以下语法来声明这些宏。
symbolic-name(`value')
如果需要生成新的 sendmail.cf 文件,请参阅第 2 章中更改 sendmail 配置。
表 3-23 sendmail 中新增和修订的 m4 配置宏
|
有关对 FEATURE() 声明的特定更改信息,请参阅下表。
要使用新增和修订的 FEATURE 名称,请使用以下语法。
FEATURE(`name', `argument')
如果需要生成新的 sendmail.cf 文件,请参阅第 2 章中更改 sendmail 配置。
表 3-24 新增和修订的 FEATURE() 声明
|
表 3-25 不支持的 FEATURE() 声明
|
MAILER() 声明可指定对传送代理的支持。要声明传送代理,请使用以下语法。
MAILER(`symbolic-name')
请注意以下更改。
在此新版本的 sendmail 中,MAILER(`smtp') 声明现在包括一个附加邮件程序 dsmtp,该邮件程序通过使用 F=% 邮件程序标志可提供即时传送。dsmtp 邮件程序定义使用新增的 DSMTP_MAILER_ARGS,后者缺省为 IPC $h。
MAILER 使用的规则集的数量已删除。现在无需按顺序列出 MAILER,但 MAILER(`uucp') 除外。 如果使用了 uucp-dom 和 uucp-uudom,则它必须在 MAILER(`smtp') 之后。
有关邮件程序的更多信息,请参阅邮件程序与 sendmail。如果需要生成新的 sendmail.cf 文件,请参阅第 2 章中更改 sendmail 配置。
下表介绍了新增的传送代理标志,缺省情况下不会设置这些标志。这些单字符标志是布尔型的。通过在配置文件的 F= 语句中包括或排除标志,可以设置或取消设置标志,如以下示例所示。
Mlocal, P=/usr/lib/mail.local, F=lsDFMAw5:/|@qSXfmnz9, S=10/30, R=20/40, Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990, Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990, Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990, Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040,
表 3-26 新增的邮件程序标志
|
下表介绍了新增的可用于 M 传送代理定义命令的等式。以下语法说明如何在配置文件中已存在的等式后附加新的等式或参数。
Magent-name, equate, equate, ...
以下示例中包括新的 W= 等式。此等式可指定在发送所有数据后等待邮件程序返回的最长时间。
Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990, W=2m
在为 m4 配置修改值的定义时,请使用以下示例中提供的语法。
define(`SMTP_MAILER_MAXMSGS', `1000')
上一示例将 smtp 邮件程序每次连接时传送的邮件数量限制为 1000。
如果需要生成新的 sendmail.cf 文件,请参阅第 2 章中更改 sendmail 配置。
注 - 通常,仅当进行微调时,才会修改 mailer 目录中的等式定义。
表 3-27 用于传送代理的新增等式
|
此发行版可支持多个队列目录。要使用多个队列,请在配置文件中提供以星号 (*) 结尾的 QueueDirectory 选项值,如以下示例所示。
O QueueDirectory=/var/spool/mqueue/q*
选项值 /var/spool/mqueue/q* 使用以 "q" 开头的所有目录(或指向这些目录的符号链接)作为队列目录。请勿在 sendmail 运行时更改队列目录结构。除非在非守护进程队列运行中使用冗余标志 (-v),否则队列运行会创建一个单独进程来运行每个队列。新项将随机指定给队列。
新增的队列文件命名系统使用的文件名保证在 60 年内唯一。使用此系统,可在不使用复杂的文件系统锁定的情况下指定队列 ID,并简化排队的项在队列之间的移动。
从版本 8.12 开始,仅有 root 才能运行邮件队列。有关更多详细信息,请参阅 mailq(1) 手册页中介绍的更改。有关新任务的信息,请参阅管理队列目录(任务列表)。
为适应信封拆分,现在队列文件名长度为 15 个字符,而不是 14 个字符。将不再支持名称限制为 14 个字符的文件系统。
有关任务信息,请参阅管理队列目录(任务列表)。
以下列表介绍了在将轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 用于 sendmail 时的一些更改。
LDAPROUTE_EQUIVALENT() 和 LDAPROUTE_EQUIVALENT_FILE() 允许指定等效的主机名,这些主机名将替换为用于 LDAP 路由查找的伪装域名。有关更多信息,请参阅 /etc/mail/cf/README。
如 ftp://ftp.sendmail.org 上的 sendmail 分发部分所包含的发行说明所述,LDAPX 映射已重命名为 LDAP。请针对 LDAP 使用以下语法。
Kldap ldap options
此发行版支持一次 LDAP 查找返回多个值。请使用 -v 选项将要返回的值放入用逗号分隔的字符串中,如下所示。
Kldap ldap -v"mail,more-mail"
如果 LDAP 映射声明中未指定任何 LDAP 属性,则会返回找到的所有匹配属性。
此版本的 sendmail 可防止使用 LDAP 别名文件规范中带引号的关键字和值字符串内的逗号来将单个项划分为多个项。
此版本的 sendmail 为 LDAP 映射提供了一个新选项。使用选项 -Vseparator,可指定一个分隔符,这样查找便可返回由相关的 separator 分隔的属性和值。
除了使用 %s 标记解析 LDAP 过滤器规范外,还可以使用新标记 %0 对关键字缓冲区进行编码。%0 标记会对 LDAP 特殊字符应用字面含义。
以下示例显示了这些标记在用于 "*" 查找时的差异。
表 3-28 标记的比较
|
下表介绍了新增的 LDAP 映射标志。
表 3-29 新增的 LDAP 映射标志
|
原有的 [TCP] 内置邮件程序不可用。请改用 P=[IPC] 内置邮件程序。进程间通信 ([IPC]) 内置邮件程序现在可向支持它的系统中的 UNIX 域套接字进行传送。可将此邮件程序与侦听指定套接字的 LMTP 传送代理结合使用。示例邮件程序可能如下所示。
Mexecmail, P=[IPC], F=lsDFMmnqSXzA5@/:|, E=\r\n, S=10, R=20/40, T=DNS/RFC822/X-Unix, A=FILE /system/volatile/lmtpd
现在,系统将检查 [IPC] 邮件程序中的第一个邮件程序参数是否具有合法值。下表提供了第一个邮件程序参数的可能值。
表 3-30 第一个邮件程序参数的可能值
|
表 3-31 新规则集
|
以下列表介绍了新增的规则集功能。
编号的规则集也已命名,但仍然可以按编号访问相应的规则集。
H 头配置文件命令允许为头检查指定缺省的规则集。仅当未对个别头指定各自的规则集时,才会调用此规则集。
如果配置文件的版本为 9 或更高版本,则不删除规则集中的注释(即括号内的文本)。例如,以下规则可匹配输入 token (1),但不匹配输入 token。
R$+ (1) $@ 1
sendmail 即使由于 TCP 包装或 check_relay 规则集而拒绝命令,也会接受 SMTP RSET 命令。
如果多次设置 OperatorChars 选项,则会收到警告。另外,请勿在定义规则集之后设置 OperatorChars。
如果声明的规则集无效,则会忽略该规则集的名称以及其中的各行。该规则集行不会添加至 S0。
为支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。有关详细信息,请参阅/etc/mail/cf 目录的内容。但请注意,shell 脚本 /usr/lib/mail/sh/check-hostname 和 /usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。
/usr/lib/mail/cf/main-v7sun.mc 的新名称是 /etc/mail/cf/cf/main.mc。
/usr/lib/mail/cf/subsidiary-v7sun.mc 的新名称是 /etc/mail/cf/cf/subsidiary.mc。
helpfile 现在位于 /etc/mail/helpfile 中。旧名称 (/etc/mail/sendmail.hf) 具有指向新名称的符号链接。
trusted-users 文件现在位于 /etc/mail/trusted-users 中。在升级过程中,如果检测到旧名称 (/etc/mail/sendmail.ct) 而未检测到新名称,则会创建从旧名称到新名称的硬链接。否则,不会进行任何更改。缺省内容为 root。
local-host-names 文件现在位于 /etc/mail/local-host-names 中。在升级过程中,如果检测到旧名称 (/etc/mail/sendmail.cw) 而未检测到新名称,则会创建从旧名称到新名称的硬链接。否则,不会进行任何更改。缺省内容的长度为零。
从 8.12 版本的 sendmail 开始,在配置中使用的 IPv6 地址应以 IPv6: 标记作为前缀,以正确标识地址。如果不标识 IPv6 地址,则不会使用前缀标记。