系统管理指南:网络服务

sendmail 版本 8.12 中的更改

本节介绍了有关以下主题的信息。

sendmail 版本 8.12 支持 TCP 包装

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 的信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”。

sendmail 版本 8.12 中的配置文件 submit.cf

从版本 8.12 开始,sendmail 包括一个附加配置文件 /etc/mail/submit.cf。此submit.cf 文件用于在邮件提交程序模式而非守护进程模式下运行 sendmail。与守护进程模式不同,邮件提交程序模式不要求 root 权限,因此这一新模式可以提供更好的安全性。

请参见以下列出的 submit.cf 功能:

请注意以下情况:

可区分 sendmail.cf 与 submit.cf 的功能

sendmail.cf 配置文件用于守护进程模式。使用此文件时,sendmail 用作邮件传输代理 (mail transfer agent, MTA),该代理由 root 启动。


/usr/lib/sendmail -L sm-mta -bd -q1h

请参见以下列出的 sendmail.cf 的其他特性:

sendmail 版本 8.12 中功能的更改

除添加 submit.cf 之外,在功能方面还有以下更改:

sendmail 版本 8.12 中新增或过时的命令行选项

下表介绍了 sendmail 的新增或过时的命令行选项。sendmail(1M) 手册页介绍了其他命令行选项。

表 14–19 sendmail 版本 8.12 中新增或过时的命令行选项

选项 

说明 

-Ac

表示即使操作模式未指明初始邮件提交,仍希望使用配置文件 submit.cf。有关 submit.cf 的更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。

-Am

表示即使操作模式指明初始邮件提交,仍希望使用配置文件 sendmail.cf。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。

-bP

表示要列显每个队列中的项数。 

-G

表示通过命令行提交的邮件将用于中继,而不用于初始提交。如果地址不是全限定地址,则会拒绝该邮件。不会进行公理化。 如 ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,将来的发行版中可能会拒绝形式不正确的邮件。

-L tag

将用于系统日志消息的标识符设置为所提供的 tag。

-q[!]I substring

仅处理其中一个收件人包含此 substring 的作业。添加 ! 之后,该选项仅处理其中一个收件人不包含此 substring 的作业。

-q[!]R substring

仅处理队列 ID 中包含此 substring 的作业。添加 ! 之后,该选项仅处理队列 ID 中不包含此 substring 的作业。

-q[!]S substring

仅处理发件人包含此 substring 的作业。添加 ! 之后,该选项仅处理发件人不包含此 substring 的作业。

-qf

一次处理队列中保存的邮件而不使用 fork 系统调用,并在前台运行该进程。请参阅 fork(2) 手册页。

-qGname

仅处理 name 队列组中的邮件。

-qptime

使用为每个队列派生的单个子项并以特定时间间隔来处理队列中保存的邮件。该子项在队列的每两次运行之间处于休眠状态。这一新选项与 -qtime 类似,后者会定期派生一个子项来处理队列。

-U

如 ftp://ftp.sendmail.org 上的 sendmail 分发所包含的发行说明所述,在版本 8.12 之前不提供此选项。邮件用户代理应使用 -G 参数。

sendmail 版本 8.12 中新增的用于 PidFile 和 ProcessTitlePrefix 选项的参数

下表介绍了新增的用于 PidFile 和 ProcessTitlePrefix 选项的宏处理参数。有关这些选项的更多信息,请参见 sendmail(1M) 手册页。

表 14–20 用于PidFile 和 ProcessTitlePrefix 选项的参数

宏 

说明 

${daemon_addr}

用于提供守护进程地址(例如 0.0.0.0) 

${daemon_family}

用于提供守护进程系列(例如 inet 和 inet6)

${daemon_info}

用于提供守护进程信息(例如 SMTP+queueing@00:30:00) 

${daemon_name}

用于提供守护进程名称(例如 MSA) 

${daemon_port}

用于提供守护进程端口(例如 25) 

${queue_interval}

用于提供队列运行间隔(例如 00:30:00) 

sendmail 版本 8.12 中新增的已定义宏

下表介绍了新增的、保留以供 sendmail 程序使用的宏。这些宏的值在内部指定。有关更多信息,请参见 sendmail(1M) 手册页。

表 14–21 sendmail 新增的已定义宏

宏 

说明 

${addr_type}

用于将当前地址标识为信封发件人地址或收件人地址。 

${client_resolve}

用于保存 ${client_name} 的解析调用结果:OK、FAIL、FORGED 或 TEMP。

${deliveryMode}

用于指定 sendmail 正在使用的当前传送模式,而不是 DeliveryMode 选项的值。

${dsn_notify}、${dsn_envid}、${dsn_ret}

用于保存对应的 DSN 参数值。 

${if_addr}

用于为传入连接提供接口的地址,前提是该接口不属于回送网络。此宏对于虚拟驻留特别有用。 

${if_addr_out}、${if_name_out}、${if_family_out}

用于避免重用 ${if_addr}。可分别保存以下值。

用于传出连接的接口地址。 

用于传出连接的接口主机名。 

用于传出连接的接口系列。 

${if_name}

用于为传入连接提供接口的主机名,对于虚拟驻留特别有用。  

${load_avg}

用于检查并报告运行队列中当前的平均作业数。 

${msg_size}

用于在收集邮件之前,在 ESMTP 对话框中保存邮件大小 (SIZE=parameter) 的值。此后,此宏将保存 sendmail 计算的邮件大小并将其用于 check_compat 中。有关 check_compat 的信息,请参阅表 14–25。

${nrcpts}

用于保存经过验证的收件人数。 

${ntries}

用于保存尝试传送的次数。 

${rcpt_mailer}、${rcpt_host}、${rcpt_addr}、${mail_mailer}、${mail_host}、${mail_addr}

用于保存 RCPT 和 MAIL 参数的分析结果,这是从邮件传送代理 ($#mailer)、主机 ($@host) 和用户 ($:addr) 中解析出的右侧 (right-hand side, RHS) 三重参数。

sendmail 版本 8.12 中新增的宏

本节中的表介绍了新增的用于生成 sendmail 配置文件的宏。

表 14–22 新增的用于生成 sendmail 配置文件的宏

宏 

说明 

LOCAL_MAILER_EOL

用于覆盖本地邮件程序缺省的行结束字符串。 

LOCAL_MAILER_FLAGS

用于在缺省情况下添加 Return-Path: 头。

MAIL_SETTINGS_DIR

用于包含邮件设置目录的路径(包括结尾斜杠)。 

MODIFY_MAILER_FLAGS

用于改进 *_MAILER_FLAGS。此宏可以设置、添加或删除标志。

RELAY_MAILER_FLAGS

用于为中继邮件程序定义新增标志。 

sendmail 版本 8.12 中新增的 MAX 宏

使用以下宏可以配置在 sendmail 降低传送速度之前可以接收的命令的最大数目。可在编译时设置这些 MAX 宏。下表中的最大值也表示当前的缺省值。

表 14–23 新增的 MAX 宏

宏 

最大值 

每个宏检查的命令 

MAXBADCOMMANDS

25 

未知命令 

MAXNOOPCOMMANDS

20 

NOOP、VERB、ONEX、 XUSR

MAXHELOCOMMANDS

3 

HELO、EHLO

MAXVRFYCOMMANDS

6 

VRFY、EXPN

MAXETRNCOMMANDS

8 

ETRN


注 –

通过将宏的值设置为零可以禁用宏检查。


sendmail 版本 8.12 中新增和修订的 m4 配置宏

本节中的表介绍了 sendmail 中新增和修订的 m4 配置宏。可使用以下语法来声明这些宏。


symbolic_name(`value')

如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。

表 14–24 sendmail 中新增和修订的 m4 配置宏

m4 宏

说明 

FEATURE()

有关详细信息,请参阅sendmail 版本 8.12 中对 FEATURE() 声明的更改。

LOCAL_DOMAIN()

此宏可向类 w ($=w) 中添加项。

MASQUERADE_EXCEPTION()

用于定义不能伪装的主机或子域的新宏。 

SMART_HOST()

现在,此宏可用于用括号括起来的地址,如 user@[host]。

VIRTUSER_DOMAIN() 或 VIRTUSER_DOMAIN_FILE()

使用这些宏时,请在 $=R 中包括 $={VirtHost}。请记住,$=R 是可以中继的主机名集合。

sendmail 版本 8.12 中对 FEATURE() 声明的更改

有关对 FEATURE() 声明的特定更改信息,请参阅下表。

要使用新增和修订的 FEATURE 名称,请使用以下语法。


FEATURE(`name', `argument')

如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。

表 14–25 新增和修订的 FEATURE() 声明

FEATURE() 的名称

说明 

compat_check

参数:请参阅以下段落中的示例。 

使用此新增的 FEATURE(),可以在由发件人地址和收件人地址组成的访问映射中查找关键字。此 FEATURE() 由字符串 <@> 来分隔。例如 sender@sdomain<@>recipient@rdomain。

delay_checks

参数:friend(用于启用垃圾邮件-朋友测试)或 hater(用于启用垃圾邮件-攻击者测试)。

可延迟所有检查的新增 FEATURE()。通过使用 FEATURE(`delay_checks'),在客户机分别连接或发出 MAIL 命令时,将不调用规则集 check_mail 和 check_relay, 而是由 check_rcpt 规则集调用上述规则集。有关详细信息,请参阅 /etc/mail/cf/README 文件。

dnsbl

参数:此 FEATURE() 最多可以接受两个参数:

  • DNS 服务器名

  • 拒绝邮件

新增的 FEATURE(),可以多次使用以检查 DNS 查找的返回值。请注意,通过此 FEATURE() 可以指定临时查找失败时的行为。

enhdnsbl

参数:域名。 

新增的 FEATURE(),它是 dnsbl 的增强版本,可用于检查 DNS 查找的返回值。有关更多信息,请参阅 /etc/mail/cf/README。

generics_entire_domain

参数:None。 

新增的 FEATURE(),使用它还可以将 genericstable 应用于 $=G 的子域。

ldap_routing

参数:有关详细信息,请参阅 http://www.sendmail.org 中的 “Release Notes”。

可实现 LDAP 地址路由的新增 FEATURE()。

local_lmtp

参数:具有 LMTP 功能的邮件程序的路径名。缺省为 mail.local,它在此 Solaris 发行版中具有 LMTP 功能。

该 FEATURE() 现在可将本地邮件程序的传送状态通知 (delivery status notification, DSN) 诊断代码类型设置为正确的值 SMTP。

local_no_masquerade

参数:无。 

可用于避免伪装本地邮件程序的新增 FEATURE()。

lookupdotdomain

参数:无。 

也可用于在访问映射中查找 .domain 的新增 FEATURE()。

nocanonify

参数:canonify_hosts 或无参数。

该 FEATURE() 现在包括以下功能。

将 CANONIFY_DOMAIN 或 CANONIFY_DOMAIN_FILE 指定的一系列域传递给 $[ 和 $] 运算符进行公理化。

如果将 canonify_hosts 指定为其参数,则可以对仅包含主机名的地址(如 <user@host>)进行公理化。

向包含多个组成部分的地址添加尾随句点。 

no_default_msa

参数:无。 

这一新增的 FEATURE() 可禁用 m4 生成的配置文件中 sendmail 的缺省设置,以“侦听”多个不同端口,这是 RFC 2476 的实现。

nouucp

参数:reject(不允许使用 ! 标记)或 nospecial(允许使用 ! 标记)。

该 FEATURE() 可确定是否允许在地址的本地部分中使用 ! 标记。

nullclient

参数:无。 

该 FEATURE() 现在可提供标准配置的完整规则集,从而允许执行防垃圾邮件检查。

preserve_local_plus_detail

参数:无。 

通过这一新增的 FEATURE(),可在 sendmail 将地址传递给本地传送代理时保留地址中的 +detail 部分。

preserve_luser_host

参数:无。 

如果使用 LUSER_RELAY,则通过这一新增的 FEATURE() 可以保留收件人主机的名称。

queuegroup

参数:无。 

通过这一新增的 FEATURE(),可以选择基于完整电子邮件地址或基于收件人的域的队列组。

relay_mail_from

参数:domain 是一个可选参数。

如果邮件发件人在访问映射中列为 RELAY 并使用 From: 头行来标记,则通过这一新增的 FEATURE() 可进行中继。如果给定可选的 domain 参数,则还会检查邮件发件人的域部分。

virtuser_entire_domain

参数:无。 

现在,可以使用该 FEATURE() 来应用 $={VirtHost},这是一个新类,用于匹配可由 VIRTUSER_DOMAIN 或 VIRTUSER_DOMAIN_FILE 填充的 virtusertable 项。

FEATURE(`virtuser_entire_domain') 还可以将类 $={VirtHost} 应用于整个子域。

不再支持以下 FEATURE() 声明。

表 14–26 不支持的 FEATURE() 声明

FEATURE() 的名称

替代 

rbl

FEATURE(`dnsbl') 和 FEATURE(`enhdnsbl') 将替代已删除的 FEATURE()。

remote_mode

MASQUERADE_AS(`$S') 将替代 /etc/mail/cf/subsidiary.mc 中的FEATURE(`remote_mode')。$S 是 sendmail.cf 中的 SMART_HOST 值。

sun_reverse_alias_files

FEATURE(`genericstable')。

sun_reverse_alias_nis

FEATURE(`genericstable')。

sun_reverse_alias_nisplus

FEATURE(`genericstable')。

sendmail 版本 8.12 中对 MAILER() 声明的更改

MAILER() 声明可指定对传送代理的支持。要声明传送代理,请使用以下语法。


MAILER(`symbolic_name')

请注意以下更改。

有关邮件程序的更多信息,请参阅邮件程序与 sendmail。如果需要生成新的 sendmail.cf 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。

sendmail 版本 8.12 中新增的传送代理标志

下表介绍了新增的传送代理标志,缺省情况下不会设置这些标志。这些单字符标志是布尔型的。通过在配置文件的 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,
表 14–27 新增的邮件程序标志

标志 

说明 

%

除非使用 ETRN 请求或以下队列选项之一选择排队的邮件,否则使用此标志的邮件程序不会尝试向邮件的初始收件人或队列运行中传送邮件:-qI、-qR 或 -qS。

1

此标志可禁用邮件程序发送空字符的功能(例如 \0)。

2

此标志可禁用 ESMTP 并要求改用 SMTP。 

6

此标志可使邮件程序将头缩减至 7 位。 

sendmail 版本 8.12 中新增的用于传送代理的等式

下表介绍了新增的可用于 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 文件,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。


注 –

通常,仅当进行微调时,才会修改 mailer 目录中的等式定义。


表 14–28 用于传送代理的新增等式

等式 

说明 

/=

参数:目录的路径。 

用于指定执行邮件程序之前要应用 chroot() 的目录。

m=

参数:以前使用 define() 例程定义的以下任意 m4 值

    SMTP_MAILER_MAXMSGS,用于 smtp 邮件程序


    LOCAL_MAILER_MAXMSGS,用于 local 邮件程序


    RELAY_MAILER_MAXMSGS,用于 relay 邮件程序


用于限制 smtp、local 或 relay 邮件程序每次连接时传送的邮件数量

W=

参数:时间增量 

用于指定在发送所有数据后等待邮件程序返回的最长时间 

sendmail 版本 8.12 中新增的队列功能

以下列表提供了有关新增队列功能的详细信息。

有关任务信息,请参阅管理队列目录(任务列表)。

sendmail 版本 8.12 中对 LDAP 的更改

以下列表介绍了在将轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 用于 sendmail 时的一些更改。

以下示例显示了这些标记在用于 “*” 查找时的差异。

表 14–29 标记的比较

LDAP 映射规范 

规范等效形式 

结果 

-k"uid=%s"

-k"uid=*"

匹配具有用户属性的任何记录 

-k"uid=%0"

-k"uid=\2A"

匹配具有名称 “*” 的用户

下表介绍了新增的 LDAP 映射标志。

表 14–30 新增的 LDAP 映射标志

标志 

说明 

-1

要求返回单个匹配项。如果返回多个匹配项,则结果与未找到任何记录等效。 

-r never|always|search|find

设置 LDAP 别名取消引用选项。 

-Z size

限制要返回的匹配项数。 

sendmail 版本 8.12 中对内置邮件程序的更改

原有的 [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 /var/run/lmtpd

现在,系统将检查 [IPC] 邮件程序中的第一个邮件程序参数是否具有合法值。下表提供了第一个邮件程序参数的可能值。

表 14–31 第一个邮件程序参数的可能值

值 

说明 

A=FILE

用于 UNIX 域套接字传送 

A=TCP

用于 TCP/IP 连接 

A=IPC

不再用作第一个邮件程序参数 

sendmail 版本 8.12 中新增的规则集

下表列出了新增规则集并介绍了这些规则集的功能。

表 14–32 新规则集

集 

说明 

check_eoh

将在头之间收集的信息关联并检查是否缺少头。此规则集用于宏存储映射,并在收集所有头后调用。  

check_etrn

使用 ETRN 命令(与 check_rcpt 使用 RCPT 类似)。

check_expn

使用 EXPN 命令(与 check_rcpt 使用 RCPT 类似)。

check_vrfy

使用 VRFY 命令(与 check_rcpt 使用 RCPT 类似)。

以下列表介绍了新增的规则集功能。

sendmail 版本 8.12 中对文件的更改

请注意以下更改。

sendmail 版本 8.12 和配置中的 IPv6 地址

从 8.12 版本的 sendmail 开始,在配置中使用的 IPv6 地址应以 IPv6: 标记作为前缀,以正确标识地址。如果不标识 IPv6 地址,则不会使用前缀标记。