跳转到主要内容

于 2025年04月08日 摘录自 Postfix 配置参数

Postfix main.cf 文件格式

Postfix main.cf 配置文件中定义了一小部分用于控制 Postfix 邮件系统运行的参数。未明确定义的参数将应用默认值。

main.cf 文件的一般格式如下:

  • 逻辑行格式为“参数 = 值”。程序读取配置时会忽略“=”号两边和逻辑行末尾的空格。
  • 程序读取配置时会略过空行(包括仅有空格的行)和注释行(首个非空格字符为“#”号的行)。
  • 逻辑行行首应为非空格字符,以空格开头的行将视为逻辑行的延续。
  • 参数值可以引用其他参数。
    • “$name”和“${name}”表达式将递归替换为命名参数的值。参数名只能使用字符集 [a-zA-Z0-9_] 中的字符。未定义的参数值将使用空值。
    • 当“$name”非空时,表达式“${name?value}”和“${name?{value}}”将被替换为“value”。参数名只能使用字符集 [a-zA-Z0-9_] 中的字符。Postfix ≥ 2.2 和 ≥ 3.0 版本分别支持这些形式。
    • 当“$name”为空时,表达式“${name:value}”和“${name:{value}}”将被替换为“value”。参数名只能使用字符集 [a-zA-Z0-9_] 中的字符。Postfix ≥ 2.2 和 ≥ 3.0 版本分别支持这些形式。
    • 表达式“${name?{value1}:{value2}}”在“$name”非空时替换为“value1”,在“$name”为空时替换为“value2”。“value1”中的“{}”为必填项,“value2”中的“{}”为可选项。参数名只能使用字符集 [a-zA-Z0-9_] 中的字符。需 Postfix ≥ 3.0 版本。
    • “${...}”中的第一项可以是以下形式的关系表达式:“{value3} == {value4}”。除了“==”(相等)操作符,Postfix 还支持“!=”(不等式)、“<”、“≤”、“≥”和“>”。当两个操作数均为数字时,比较方式为数字比较,否则比较方式为词法比较。需 Postfix ≥ 3.0 版本。
    • 除特别注明外,每个“值”都要进行递归命名参数和关系表达式评估。
    • 每个“{value}”前后的空白将被忽略。
    • 指定“$$”可产生单个“$”字符。
    • 传统形式“$(...)”等同于首选形式“${...}”。
  • 当多次定义同一参数时,只会记住最后一个实例。
  • 否则,main.cf 参数定义的顺序并不重要。

本文档的其余部分是对所有 Postfix 配置参数的说明。默认值显示在参数名称后面的括号中,可以使用"postconf -d"命令查询。

注意:这并不是邀请您更改 Postfix 配置参数。不必要的更改可能会影响邮件系统的运行。

2bounce_notice_recipient (默认值:postmaster)

无法退回发件人的无法投递邮件的收件人。使用notify_classes参数可启用此功能。

access_map_defer_code (默认值:450)

Postfix SMTP 服务器对access(5)映射 "defer "操作(包括"defer_if_permit"或"defer_if_reject")的数字响应代码。在 Postfix 2.6 之前,响应代码为硬编码 "450"。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.6 及更高版本中可用。

access_map_reject_code (默认值:554)

Postfix SMTP 服务器对access(5)映射 "拒绝 "操作的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

address_verify_cache_cleanup_interval (默认值:12h)

verify(8)地址验证数据库清理运行之间的时间间隔。此功能要求数据库支持 "删除 "和 "序列 "操作符。指定零间隔可禁用数据库清理。

每次数据库清理运行后,verify(8)守护进程都会记录保留和删除的条目的数量。当守护进程在"postfix reload"、"postfix stop"或$max_idle秒内无请求后提前终止时,清理运行会被记录为 "部分"。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

Postfix 2.7 中提供了这一功能。

address_verify_default_transport (默认值:$default_transport)

覆盖地址验证探针的默认传输参数设置。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_local_transport (默认值:$local_transport)

覆盖地址验证探针的local_transport参数设置。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_map (默认值:参见 "postconf -d "输出)。

用于存储持久地址验证状态的查找表。该表由verify(8)服务维护,并在进程释放权限之前打开。

默认情况下,查找表是持久的(Postfix 2.7 及更高版本)。指定一个空表名可将信息保存在易失性内存中,在"postfix 重载"或"postfix 停止"后会丢失。这是 Postfix 2.6 及更早版本的默认设置。

在文件系统中指定一个不会被填满的位置。如果数据库损坏,世界就会毁灭。要恢复数据库,请删除(不是:截断)文件并执行"postfix reload"。

Postfix 守护进程在打开该文件时不使用 root 权限(Postfix 2.5 及更高版本)。因此,该文件必须存储在 Postfix 所有的目录下,如data_directory。作为迁移辅助工具,在非 Postfix 目录下打开该文件的尝试将被重定向到 Postfix 所有的data_directory,并记录警告。

例如

address_verify_map = hash:/var/lib/postfix/verify
address_verify_map = btree:/var/lib/postfix/verify

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_negative_cache (默认值:是)

启用缓存地址验证失败的探测结果。启用此功能后,缓存可能会很快被垃圾污染。禁用此功能后,Postfix 将为每次查找生成一个地址探针。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_negative_expire_time (默认值:3d)

探测失败后从地址验证缓存中失效的时间。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_negative_refresh_time (默认值:3h)

地址验证探针失败后需要刷新的时间。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_pending_request_limit (默认值:参见 "postconf -d "输出)。

防止地址验证请求挤爆 Postfix 队列的安全限制。默认情况下,待处理请求的数量限制为活动队列最大容量的 1/4(qmgr_message_active_limit)。队列管理器会通过临时取消超出限制的请求来强制执行该限制。这只会影响未知地址和已过期的非活动地址,因为在活动地址过期之前,verify(8)守护进程会自动刷新该地址。

该功能在 Postfix 3.1 及更高版本中可用。

address_verify_poll_count (默认:正常:3, 重载:1)

查询verify(8)服务的次数,以确定地址验证请求是否已完成。

默认情况下,Postfix SMTP 服务器在非过载条件下最多轮询三次verify(8)服务,而在过载时则只轮询一次。在 Postfix 2.5 及更早版本中,SMTP 服务器默认情况下总是轮询verify(8)服务最多三次。

指定 "1 "可执行一种粗略的 "灰名单 "形式,即总是推迟新地址的首次交付请求。

例如

# Postfix ≤ 2.6 默认
address_verify_poll_count = 3
# Poor man's greylisting
address_verify_poll_count = 1

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_poll_delay (默认值:3 秒)

为完成正在进行的地址验证请求而进行的查询之间的延迟。

默认轮询延迟时间为 3 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_positive_expire_time (默认值:31d)

探测成功后从地址验证缓存中失效的时间。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_positive_refresh_time (默认值:7d)

地址验证探针成功后需要刷新的时间。探测失败时,地址验证状态不会更新(乐观缓存)。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_relay_transport (默认值:$relay_transport)

覆盖地址验证探针的relay_transport参数设置。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_ relayhost(默认值:$ relayhost)

覆盖地址验证探针的relayhost参数设置。该信息可通过transport(5)表覆盖。

该功能在 Postfix 2.1 及更高版本中可用。

地址验证发件人 (默认:$ double_bounce_sender)

地址验证探测中使用的发件人地址;在 Postfix 2.5 之前,默认为 "postmaster"。为避免在地址探测时出现问题,Postfix SMTP 服务器会将探测发件人地址排除在所有 SMTPD 访问块之外。

如果要使用空发件人地址,请指定一个空值(address_verify_sender=)或 <>。请注意,有些网站会拒绝来自 <> 的邮件,尽管 RFC 要求接受此类地址。

例如

address_verify_sender = <>
address_verify_sender = postmaster@mydomain

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_sender_dependent_default_transport_maps (默认值:$sender_dependent_default_transport_maps)

覆盖地址验证探针的发送方相关默认传输映射参数设置。

该功能在 Postfix 2.7 及更高版本中可用。

address_verify_sender_dependent_relayhost_maps (默认值:$ sender_dependent_relayhost_maps)。

覆盖地址验证探针的发送方依赖中继主机映射参数设置。

该功能在 Postfix 2.3 及更高版本中可用。

address_verify_sender_ttl (默认值:0 秒)

地址验证探针发件人地址随时间变化部分的变化间隔时间。与时间相关的部分会被附加到用address_verify_sender参数指定的地址的本地部分。当探测发件人地址为空发件人(即address_verify_sender值为空或 <>)时,此功能将被忽略。

一直以来,探测发件人地址都是固定的。这导致此类地址最终出现在垃圾邮件发送者的邮件列表中,并造成网络和处理资源的浪费。

要启用随时间变化的探测发件人地址,请指定一个非零的时间值。请至少指定几个小时,以避免与使用灰色列表的发件人发生问题。避免使用较好的 TTL 值,以降低结果的可预测性。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.9 及更高版本中可用。

address_verify_service_name (默认:验证)

verify(8)地址验证服务的名称。该服务维护发件人和/或收件人地址验证探测器的状态,并根据其他 Postfix 进程的请求生成探测器。

address_verify_transport_maps (默认值:$transport_maps)

覆盖地址验证探针的transport_maps参数设置。

该功能在 Postfix 2.1 及更高版本中可用。

address_verify_virtual_transport (默认值:$virtual_transport)

覆盖地址验证探针的virtual_transport参数设置。

该功能在 Postfix 2.1 及更高版本中可用。

别名数据库 (默认值:参见 "postconf -d "输出)。

"newaliases"或"sendmail -bi"更新的用于local(8)发送的别名数据库。

这是一个单独的配置参数,因为并非所有用$alias_maps指定的表都必须是本地文件。

例如

alias_database = hash:/etc/aliases
alias_database = hash:/etc/mail/aliases

别名映射 (默认值:参见 "postconf -d "输出)。

可选的查找表仅使用电子邮件地址本地部分(无域)进行搜索,且仅适用于本地(8)收件人;这与virtual_alias_maps不同,后者通常使用完整的电子邮件地址(包括域)进行搜索,且适用于所有收件人:本地(8)、虚拟和远程。aliases(5) 中记录了alias_maps表的格式和查找方法。有关 Postfix 地址操作的概述,请参阅ADDRESS_REWRITING_README文档。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序查找表,直到找到匹配为止。注意:这些查找是递归的。

默认列表取决于系统。在使用 NIS 的系统中,默认情况下先搜索本地别名数据库,然后再搜索 NIS 别名数据库。

如果更改了别名数据库,请运行"postalias /etc/alias"(或系统中存储邮件别名文件的地方),或直接运行"newaliases"来创建必要的 DBM 或 DB 文件。

local(8)发送代理不允许在别名映射中使用正则表达式替换 $1 等,因为这将打开一个安全漏洞。

local(8)发送代理会默默地忽略在alias_maps 中使用proxymap(8)服务器的请求。相反,它会直接打开表。在 Postfix 2.2 版之前,local(8)发送代理会以致命错误终止。

例如

alias_maps = hash:/etc/aliases, nis:mail.aliases
alias_maps = hash:/etc/aliases

allow_mail_too_commands (默认:别名、转发)

限制本地 (8)邮件发送到外部命令。默认情况下,禁止向 :include: 文件中的"|command "发送邮件(请参见aliases(5),了解定义该术语的文本)。

指定零个或多个:aliasforwardinclude,以分别允许在aliases(5)、.forward 文件或 :include: 文件中执行命令。

例如

allow_mail_too_commands = alias、forward、include

allow_mail_too_files (默认:别名、转发)

限制本地 (8)邮件发送到外部文件。默认情况下不允许在 :include: 文件中使用"/file/name "目标地址(请参阅aliases(5),了解定义该术语的文本)。

指定零个或多个:aliasforwardinclude,以分别允许在aliases(5)、.forward 文件和 :include: 文件中使用"/file/name "目标地址。

例如

allow_mail_too_files = 别名、转发、包含

allow_min_user (默认值:否)

允许发件人或收件人地址的第一个字符为"-"。默认情况下不允许这样做,以避免通过命令行传递电子邮件地址的软件出现意外。此类软件无法区分恶意地址和真正的命令行选项。虽然可以通过在命令行中插入"--"选项结束符来防止这种情况,但这很难在全球范围内一致执行。

从 Postfix 2.5 版开始,这一功能由trivial-rewrite(8) 实现。在早期版本中,该功能由qmgr(8)实现,仅限于收件人地址。

allow_percent_hack (默认值:是)

启用将表格 "user%domain "重写为 "user@domain"。默认情况下已启用。

注意:从 Postfix 2.2 版开始,只有当以下条件之一为真时,才会发生报文头地址重写:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

例如

allow_percent_hack = no

allow_srv_lookup_fallback (默认值:否)

当 SRV 记录查找失败或不存在 SRV 记录时,将退回到 MX 或 IP 地址查找,就像未启用 SRV 记录查找一样。

 

该功能在 Postfix 3.8 及更高版本中可用。

allow_untrusted_routing (默认值:否)

使用发件人指定的路由(user[@%!]remote[@%!]site)将来自不信任客户端的邮件转发到与$relay_domains 匹配的目的地。

默认情况下,该功能是关闭的。这就堵住了一个令人讨厌的开放式中继漏洞,在这个漏洞中,备份 MX 主机可能被诱骗将垃圾邮件转发给主 MX 主机,然后主 MX 主机再向全世界发送垃圾邮件。

该参数还可控制具有发件人指定路由的非本地地址是否能与 Postfix 访问表匹配。默认情况下,此类地址不能与 Postfix 访问表匹配,因为地址是模糊的。

alternate_config_directories (默认值:空)

非默认 Postfix 配置目录列表,可通过命令行中的"-cconfig_directory"(对于sendmail(1),使用"-C "选项)或 MAIL_CONFIG 环境参数指定。

该列表必须在默认的 Postfixmain.cf文件中指定,并将被postqueue(1)postdrop(1) 等 set-gid Postfix 命令使用。

指定绝对路径名,用逗号或空格分隔。注意:不支持 $name 扩展。

always_add_missing_headers (默认值:否)

如果不存在,则始终添加 (Resent-) 发件人:、收件人:、日期:或邮件 ID: 头信息。Postfix 2.6 及更高版本仅在客户端符合local_header_rewrite_clients参数设置时添加这些报头。早期的 Postfix 版本总是添加这些报头;这可能会破坏涵盖不存在报头的 DKIM 签名。undisclosed_recipients_header(未披露收件人头)参数设置决定是否添加 To: 头。

always_bcc (默认值:空)

可选地址,用于接收 Postfix 邮件系统收到的每封邮件的 "盲碳拷贝"。

注意:在 Postfix 2.3 及更高版本中,添加 BCC 地址就像指定 NOTIFY=NONE 一样。如果 BCC 地址无法投递,只要所有下游软件都执行RFC 3461,发件人就不会收到通知。

注意:在 Postfix 2.2 及更早版本中,当 BCC 地址无法投递时,发件人将收到通知。

注意:自动 BCC 收件人只针对新邮件生成。为避免邮件服务器循环,在 Postfix 内部转发邮件或 Postfix 自行生成邮件后,不会生成自动 BCC 收件人。

注意:自动 BCC 收件人受地址规范化(添加缺失域)、canonical_mapsmasquerade_domainsvirtual_alias_maps 的限制。

砧板速率时间单位 (默认值:60秒)

计算客户连接费率和其他费率的时间单位。

该功能由 Postfix 2.2 及更高版本中的anvil(8)服务实现。

默认时间间隔相对较短。由于更新频率很高,anvil(8)服务器只使用易失性内存。因此,只要进程终止,信息就会丢失。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

anvil_status_update_time (默认值:600秒)

anvil(8)连接和速率限制服务器记录峰值使用信息的频率。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

append_at_myorigin (默认值:是)

对于本地提交的邮件,在不含域名信息的邮件地址上附加"@$myorigin"字符串。对于远程提交的邮件,则附加"@$remote_header_rewrite_domain "字符串。

注 1:该功能默认已启用,不得关闭。Postfix 不支持无域地址。

注 2:在 Postfix 2.2 版中,只有当以下条件之一为真时,才会发生报文头地址重写:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

append_dot_mydomain (默认值:Postfix ≥ 3.0:否,Postfix < 3.0:是)

对于本地提交的邮件,在没有".domain "信息的地址上附加".$mydomain"字符串。对于远程提交的邮件,则附加".$remote_header_rewrite_domain "字符串。

注 1:禁用后(Postfix 3.0 及更高版本),用户将无法向 "user@partialdomainname "发送邮件,而必须指定完整的域名。

注 2:在 Postfix 2.2 版中,只有当以下条件之一为真时,才会发生报文头地址重写:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

应用程序事件排水时间 (默认值:100秒)

postkick(1)命令等待请求进入 Postfix 守护进程输入缓冲区多长时间后才放弃。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

authorized_flush_users (默认值: static:anyone)

有权冲洗队列的用户列表。

默认情况下,所有用户都可以刷新队列。如果调用用户是超级用户或$mail_owner用户,则总是允许访问。否则,将在系统密码文件中查找进程的真实 UID,只有相应的登录名在访问列表中时,才允许访问。用户名 "unknown "用于在密码文件中找不到真实UID的进程。

指定用户名列表、"/file/name "或"type:table"模式,以逗号和/或空白分隔。该列表从左到右匹配,搜索在第一个匹配时停止。文件/名称 "模式会被其内容替换;"type:table"查找表会在名称与查找键匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可从列表中排除某个名称。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

该功能在 Postfix 2.2 及更高版本中可用。

authorized_mailq_users (默认值: static:anyone)

有权查看队列的用户列表。

默认情况下,所有用户都可以查看队列。如果调用用户是超级用户或$mail_owner用户,则总是允许访问。否则,将在系统密码文件中查找进程的真实 UID,只有相应的登录名在访问列表中时,才允许访问。用户名 "unknown "用于在密码文件中找不到真实UID的进程。

指定用户名列表、"/file/name "或"type:table"模式,以逗号和/或空白分隔。该列表从左到右匹配,搜索在第一个匹配时停止。文件/名称 "模式会被其内容替换;"type:table"查找表会在名称与查找键匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将用户名从列表中排除。仅 Postfix 2.4 及更高版本支持"!/file/name "形式。

该功能在 Postfix 2.2 及更高版本中可用。

authorized_submit_users (默认值: static:anyone)

有权使用sendmail(1)命令(以及postdrop(1)辅助命令)提交邮件的用户列表。

默认情况下,允许所有用户提交邮件。否则,将在系统密码文件中查找进程的真实 UID,只有相应的登录名在访问列表中,才允许访问。用户名 "未知 "用于在密码文件中找不到真实 UID 的进程。要拒绝所有用户的邮件提交访问权限,请指定一个空列表。

指定用户名列表、"/file/name "或"type:table"模式,以逗号和/或空白分隔。该列表从左到右匹配,搜索在第一个匹配时停止。文件/名称 "模式会被其内容替换;"type:table"查找表会在名称与查找键匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将用户名从列表中排除。仅 Postfix 2.4 及更高版本支持"!/file/name "形式。

例如

authorized_submit_users = !www,static:all

该功能在 Postfix 2.2 及更高版本中可用。

authorized_verp_clients (默认值:$mynetworks)

允许哪些远程 SMTP 客户端指定 XVERP 命令。该命令要求每次只向一个收件人发送邮件,并按收件人设置返回地址。

默认情况下,只有受信任的客户端才允许指定 XVERP。

该参数在 Postfix 1.1 版中引入。Postfix 2.1 版将该参数更名为smtpd_authorized_verp_clients,并将默认值改为无。

指定网络/网络掩码模式列表,以逗号和/或空白分隔。掩码指定主机地址网络部分的位数。您还可以指定主机名或 .域名(首部的点会导致域名匹配其下面的任何名称)、"/文件/名称 "或"type:table"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将地址或网络块排除在列表之外。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注意:IP 版本 6 地址信息必须在authorized_verp_clients值的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

backwards_bounce_logfile_compatibility (默认值:是)

生成额外的bounce(8)日志文件记录,以便 Postfix 2.0 之前的版本能够读取。为了实现更复杂的功能,需要使用当前的、更具扩展性的 "name = value "格式。

该功能在 Postfix 2.1 及更高版本中可用。

berkeley_db_create_buffer_size (默认值:16777216)

用于创建 Berkeley DB 哈希表或 btree 表的程序的每表 I/O 缓冲区大小。指定字节数。

该功能在 Postfix 2.0 及更高版本中可用。

berkeley_db_read_buffer_size (默认值:131072)

用于读取 Berkeley DB 哈希表或 btree 表的程序的每表 I/O 缓冲区大小。指定字节数。

该功能在 Postfix 2.0 及更高版本中可用。

best_mx_transport (默认值:空)

当 Postfix SMTP 客户端检测到 "邮件循环返回到我自己 "错误条件时,应将邮件发送到何处。当本地 MTA 是 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains 或$virtual_mailbox_domains 中未列出的目的地的最佳 SMTP 邮件交换器时,就会出现这种情况。默认情况下,Postfix SMTP 客户端会将此类邮件作为无法投递邮件退回。

例如,指定"best_mx_transport= local "可将邮件从 Postfix SMTP 客户端发送到local(8)发送代理。您可以指定master.cf文件中定义的任何邮件发送 "transport "或 "transport:nexthop"。有关 "transport "或 "transport:nexthop "的语法和含义,请参阅 transport(5)手册。

不过,这一功能的代价很高,因为当本地(8)投递代理正在工作时,它会占用 Postfix SMTP 客户端进程。对于 Postfix 来说,在一个表格或数据库中列出所有托管的域更有效率。

biff (默认:是)

是否使用本地biff服务。该服务会向使用 UNIX 命令"biffy "请求新邮件通知的用户发送 "新邮件 "通知。

出于兼容性考虑,该功能默认开启。在有大量交互式用户的系统中,biff服务可能会消耗性能。在main.cf中指定"biff= no "即可禁用。

body_checks (默认:空)

body_checks(5)手册中指定的用于内容检查的可选查找表。

注意:在 Postfix 2.0 之前的版本中,这些规则会检查主报文头之后的所有内容。

body_checks_size_limit (默认:51200)

对邮件正文段(或附件,如果你喜欢用这个词)中的多少文本进行body_checks检查。限制文本数量是为了避免扫描巨大的附件。

该功能在 Postfix 2.0 及更高版本中可用。

bounce_notice_recipient (默认值:postmaster)

Postfix 未投递邮件的邮件头和 Postfix 未接收邮件的 SMTP 会话副本的 postmaster 通知收件人。使用notify_classes参数可启用此功能。

bounce_queue_lifetime (默认值:5d)

当投递失败并出现临时错误,且在队列中的时间已达到bounce_queue_lifetime的限制时,就会将退回邮件视为无法投递。默认情况下,该限制与普通邮件相同。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

如果邮件投递只尝试一次,则指定为 0。

该功能在 Postfix 2.1 及更高版本中可用。

bounce_service_name (默认值:bounce)

bounce(8)服务的名称。该服务会保存尝试发送失败的记录,并生成未发送通知。

该功能在 Postfix 2.0 及更高版本中可用。

bounce_size_limit (默认值:50000)

在未送达通知中发送的原始信息文本的最大数量。指定字节数。邮件会以 message/rfc822(完整原文)或 text/rfc822-headers(仅邮件头)的形式返回。在 Postfix 2.4 及以前的版本中,邮件总是以 message/rfc822 的形式返回,超过大小限制时会被截断。

备注

  • 如果增加此限制,则应按比例增加mime_nesting_limit值。
  • 更改时要小心。当跳转邮件的大小超过本地或远程 MTA 的邮件大小限制时,过大的值将导致未送达通知丢失。

bounce_template_file (默认值:空)

包含退回邮件模板的配置文件的路径名。这些模板会覆盖内置的投递状态通知 (DSN) 消息模板,包括无法投递邮件、延迟邮件、成功投递或投递验证。bounce(5)手册页面介绍了如何编辑和测试模板文件。

模板邮件正文可能包含对 Postfix 配置参数的 $name 引用。在将文件放入 Postfix 配置目录前,可使用"postconf -b file_name"预览 $name 扩展的结果。

该功能在 Postfix 2.3 及更高版本中可用。

broken_sasl_auth_clients (默认值:否)

实现与执行过时版本 AUTH 命令(RFC 4954)的远程 SMTP 客户端的互操作性。此类客户端的例子有 MicroSoft Outlook Express 版本 4 和 MicroSoft Exchange 版本 5.0。

指定"broken_sasl_auth_clients= yes "可让 Postfix 以非标准方式公布 AUTH 支持。

规范类 (默认:信封发送方、信封接收方、头信息发送方、头信息接收方)

哪些地址需要使用canonical_maps地址映射。默认情况下,canonical_maps地址映射适用于信封发件人和收件人地址,以及标头发件人和标头收件人地址。

指定一个或多个:envelope_sender、envelope_recipient、header_sender、header_recipient

该功能在 Postfix 2.2 及更高版本中可用。

canonical_maps (默认值:空)

用于邮件标题和信封的可选地址映射查找表。该映射适用于信封和标题中的发件人和收件人地址,由canonical_classes参数控制。这通常用于清理传统邮件系统中的脏地址,或用 Firstname.Lastname 代替登录名。canonical(5) 中记录了表格格式和查找方法。有关 Postfix 地址操作的概述,请参阅ADDRESS_REWRITING_README文档。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序查找表,直到找到匹配为止。注意:这些查找是递归的。

如果您使用此功能,请在每次更改后运行"postmap /etc/postfix/canonical"以创建必要的 DBM 或 DB 文件。更改将在一分钟左右后可见。使用"postfix reload"可消除延迟。

注意:在 Postfix 2.2 版中,只有在启用报文头地址重写时才会出现报文头地址映射:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

例如

canonical_maps = canonical_maps = hash:/etc/postfix/canonical

cleanup_replace_stray_cr_lf (默认值:是)

用空格符替换邮件内容中的每个杂散 <CR> 或 <LF> 字符,以防止向外 SMTP 走私,并使 Postfix 添加的 DKIM 或其他签名的评估与远程邮件服务器处理此类字符的方式无关。

SMTP 不允许使用此类字符,除非它们是 <CR><LF> 序列的一部分。杂散 <CR> 或 <LF> 字符可用于向外 SMTP 走私,即攻击者使用 Postfix 服务器发送带有非标准 End-of-DATA 序列的邮件内容,从而在远程 SMTP 服务器上触发向内 SMTP 走私。

替换发生在所有其他内容管理之前,也在 Postfix 添加 DKIM 等签名之前;如果签名是先创建的,替换可能会使签名失效。

除了防止 SMTP 走私外,替换杂散的 <CR> 或 <LF> 字符还能确保以后邮件系统的签名验证结果不会取决于该邮件系统如何以依赖于实现的方式处理这些杂散字符。

注意:如果使用"receive_override_options=no_header_body_checks",该功能将被禁用。

该功能在 Postfix ≥ 3.9、3.8.5、3.7.10、3.6.14 和 3.5.24 中可用。

cleanup_service_name (默认值:cleanup)

清理(8)服务的名称。该服务将地址改写为标准格式,并执行规范(5)地址映射和虚拟(5)别名。

该功能在 Postfix 2.0 及更高版本中可用。

command_directory (默认值:见 "postconf -d" 输出)。

所有 postfix 管理命令的位置。

命令执行目录 (默认值:空)

用于向外部命令发送的local(8)发送代理工作目录。不更改目录会导致发送延迟。

command_execution_directory值不受 Postfix 配置参数 $name 扩展的限制。相反,在使用命令执行目录之前,会对其进行以下 $name 扩展。扩展在发送请求的上下文中进行。$name 扩展的结果将使用execution_directory_expansion_filter参数指定的字符集进行过滤。

用户

收件人的用户名。

$shell

收件人的登录 shell 路径名。

主页

收件人的主目录。

收件人

完整的收件人地址。

扩展名

可选的收件人地址扩展名。

$domain

收件人域名。

本地

整个收件人本地部分。

收件人分隔符

收件人地址中的地址扩展分隔符(Postfix 2.11 及更高版本),或系统范围内的收件人地址扩展分隔符(Postfix 2.10 及更早版本)。

${name?value}

${name?{value}}(后缀 ≥ 3.0)

$name非空时,扩展为值

${name:value}

${name:{value}}(Postfix ≥ 3.0)

$name为空时,扩展为值

${name?{value1}:{value2}}(后缀 ≥ 3.0)

$name非空时,扩展为value1,否则为value2

您也可以指定 ${name} 或 $(name)来代替 $name。

该功能在 Postfix 2.2 及更高版本中可用。

command_expansion_filter (默认值:参见 "postconf -d" 输出)。

限制local(8)发送代理允许在$mailbox_command$command_execution_directory 的 $name 扩展名中使用的字符。超出允许范围的字符将用下划线代替。

命令时间限制 (默认值:1000秒)

向外部命令发送的时限。本地 (8)发送代理使用此限制,管道 (8)发送代理也默认使用此限制。

注意:如果将该时间限制设置为较大值,则必须同时更新全局ipc_timeout参数。

compatibility_level (默认值:0)

一个安全网,可使 Postfix 在升级到较新的 Postfix 版本后,使用向后兼容的默认设置运行。

在向后兼容开启的情况下(main.cf compatibility_level值小于 Postfix 内置值),Postfix 会查找保留为隐式默认值的设置,并在需要向后兼容的默认设置时记录一条信息。

using backwards-compatible default setting name=value
    to [accept a specific client request]
using backwards-compatible default setting name=value
    to [enable specific Postfix behavior]

具体信息详见COMPATIBILITY_README。如果在合法请求的上下文中记录了此类消息,系统管理员应在main.cfmaster.cf 等文件中将向后兼容设置永久化:

# postconf name=value
# postfix reload

当不再需要永久保留向后兼容设置时,管理员应更新main.cf 中的compatibility_level设置,关闭向后兼容:

# postconf compatibility_level=N
# postfix reload

对于N,请指定postfix(1)警告信息中记录的数字:

警告:要禁用向后兼容性,请使用“postconf
    compatibility_level=N”和“postfix reload”。

从 Postfix 3.6 版开始,上述警告信息中的兼容级别就是引入最后一次不兼容更改的 Postfix 版本。级别格式为major.minor.patch,其中patch通常省略,默认为 0。早期的兼容性级别为 0、1 和 2。

注意:这还引入了对"<level"、"<=level "和其他操作符的支持,以比较兼容性级别。如果使用标准操作符"<"、"<="等,兼容性级别 "3.10 "将小于 "3.9",这是不可取的。

该功能在 Postfix 3.0 及更高版本中可用。

config_directory (默认值:请参阅 "postconf -d "输出)。

Postfixmain.cfmaster.cf配置文件的默认位置。可通过以下机制推翻默认位置:

  • MAIL_CONFIG 环境变量(守护进程和命令)。
  • -c "命令行选项(仅限命令)。

对于使用 set-gid 权限运行的 Postfix 命令,覆盖config_directory要么需要 root 权限,要么需要在默认的main.cf文件中使用alternate_config_directories参数列出该目录。

confirm_delay_cleared (默认:否)

发送 "您的信息被延迟 "通知后,在延迟消除时通知发件人。这可能会导致在长时间网络中断结束时突然出现大量通知,因此默认情况下是禁用的。

另请参阅:delay_warning_time

该功能在 Postfix 3.0 及更高版本中可用。

connection_cache_protocol_timeout (默认:5 秒)

连接缓存连接、发送或接收操作的时间限制。该时限在客户端中强制执行。

该功能在 Postfix 2.3 及更高版本中可用。

connection_cache_service_name (默认值:scache)

scache(8)连接缓存服务的名称。该服务维护一个有限的缓存会话池。

该功能在 Postfix 2.2 及更高版本中可用。

连接缓存状态更新时间 (默认值:600秒)

scache(8)服务器记录使用统计数据的频率,包括逻辑目的地和物理端点的连接缓存命中率和未命中率。

connection_cache_ttl_limit (默认:2 秒)

scache(8)连接缓存服务器允许的最大生存时间值。指定较大 TTL 的请求将以允许的最大 TTL 储存。这一额外控制的目的是保护基础架构不受粗心大意者的破坏。缓存 TTL 已由$max_idle 限定。

content_filter (默认值:空)

邮件排队后,将整个邮件发送到指定的传输:目的地传输名称指定了master.cf 中邮件发送代理定义的第一个字段;下一跳目的地的语法在相应发送代理的手册页中有说明。有关外部内容过滤器的更多信息,请参阅 PostfixFILTER_README文件。

备注

  • 该设置的优先级低于在access(5)header_checks(5)body_checks(5)表中指定的 FILTER 操作。
  • 空的下一跳过滤目的地的含义取决于版本。Postfix 2.7 及更高版本将使用收件人域名;早期版本将使用$myhostname。为与 Postfix 2.6 或更早版本兼容,请指定"default_filter_nexthop=$myhostname",或指定具有明确下一跳目标的 content_filter值。

cyrus_sasl_config_path (默认值:空)

Cyrus SASL 应用程序配置文件的搜索路径,目前仅用于查找$smtpd_sasl_path.conf 文件。指定以冒号分隔的零个或多个目录,或使用 Cyrus SASL 内置搜索路径的空值。

注意:某些基于 Debian 的 Postfix 发行版会忽略"cyrus_sasl_config_ path"参数设置,强制 Postfix 打开文件/etc/postfix/sasl/smtpd.conf

当使用 Cyrus SASL 2.1.22 或更高版本编译时,该功能可在 Postfix 2.5 及更高版本中使用。

daemon_directory (默认值:请参阅 "postconf -d "输出)。

包含 Postfix 支持程序和守护程序的目录。人类不应直接调用这些程序。该目录必须为 root 所有。

daemon_table_open_error_is_fatal (默认值:否)

Postfix 守护进程在打开查找表时如何处理错误:逐步降级还是立即终止。

(默认)

逐步降级:守护进程记录 "错误 "类型的信息,并在功能降低的情况下继续执行。不依赖于不可用表的功能将正常工作,而依赖于该表的功能将导致 "警告 "类型的消息。
notify_classes参数值包含 "data "类时,Postfix SMTP 服务器和客户端将报告会话记录,并显示由于表不可用而出现的错误。

(历史行为)

立即终止:守护进程记录一条 "致命 "信息并立即终止。该选项减少了通过 Postfix 的可能代码路径,因此可能比默认值更安全。

为合理起见,在守护进程的整个生命周期内,"错误 "类型消息的数量限制为 13 条。

该功能在 Postfix 2.9 及更高版本中可用。

守护进程超时 (默认:18000s)

Postfix 守护进程处理一个请求可能需要多少时间,然后才会被内置看门狗定时器终止。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

data_directory (默认值:参见 "postconf -d "输出)。

存放 Postfix 可写入数据文件(例如:缓存、伪随机数)的目录。该目录必须为mail_owner账户所有,不得与非 Postfix 软件共享。

该功能在 Postfix 2.5 及更高版本中可用。

debug_peer_level (默认值:2)

当 nexthop 目的地、远程客户端或服务器名称或网络地址与debug_peer_list参数给出的模式相匹配时,冗长日志记录级别的递增。

Postfix 3.6 及更高版本中提供了每附件跳调试日志功能。

debug_peer_list (默认值:空)

可选的 nexthop 目的地、远程客户端或服务器名称或网络地址模式列表,如果匹配,则会导致冗长日志级别按$debug_peer_level 中指定的数量增加。

Postfix 3.6 及更高版本中提供了每附件跳调试日志功能。

指定域名、网络/网络掩码模式、"/文件/名称 "模式或"type:table"查找表。类型:表 "查找的右侧结果将被忽略。

域名的模式匹配由父域名匹配子域名参数值中是否包含"debug_peer_list"控制。

例如

debug_peer_list = 127.0.0.1
debug_peer_list = example.com

debugger_command (默认为空)

使用 -D 选项调用 Postfix 守护进程时要执行的外部命令。

使用 "command ... & sleep 5"(命令 ... & 睡眠 5),这样调试器就能在进程开始前连接上。如果使用基于 X 的调试器,请确保在启动 Postfix 前设置好 XAUTHORITY 环境变量。

注意:在将命令传递给默认命令解释器之前,该命令需经过 $name 扩展。指定"$$"可产生一个"$"字符。

例如

debugger_command =
    PATH=/usr/bin:/usr/X11R6/bin
    ddd$daemon_directory/$process_name $process_id& sleep 5

default_database_type (默认值:参见 "postconf - d "输出)。

用于newaliases(1)postalias(1)postmap(1)命令的默认数据库类型。在许多 UNIX 系统中,默认类型是dbmhash。默认设置在 Postfix 系统启动时冻结。

例如

default_database_type = hash
default_database_type = dbm

default_delivery_slot_cost (默认值:5)

允许 Postfix 队列管理器的调度程序抢先发送一条信息的频率。

每个传输系统都会为每条信息维护一个所谓的 "可用传送时隙计数器"。当另一条信息使用的传送时段(即对传送代理的调用)不超过当前信息计数器的累积值(或最终累积值--请参阅下文的时段借用)时,一条信息就会被另一条信息抢占。该参数控制着计数器的递增频率--在每个default_delivery_slot_cost收件人被递送后进行递增。

成本为 0 时,将完全禁用抢占式调度。调度算法可以使用的最小值是 2,如果你想最大限度地提高信息吞吐率,可以使用这个值。虽然没有最大值,但使用超过 50 的值也没什么意义。

之所以不将 2 设为默认值,是因为该参数会影响邮件列表邮件的递送。在最坏的情况下,投递时间会比禁用抢先调度程序时多出 (cost+1/cost) 到 (cost/cost-1) 倍。默认值 5 可以提供合理的邮件响应时间,同时确保即使在最坏的情况下,邮件列表的递送时间也不会延长超过 20%-25%。

使用transport_delivery_slot_cost指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

例如

default_delivery_slot_cost = 0
default_delivery_slot_cost = 2

default_delivery_slot_discount (默认值:50)

运输工具特定 _delivery_slot_discount 设置的默认值。

该参数可加快信息抢发的时间。无需等到所需的投递时段全额可用,而是当transport_delivery_slot_discount占所需投递时段的百分比加上transport_delivery_slot_loan仍有待累积时,就可以进行抢占。请注意,在稍后再次抢占之前,仍需累积全部数量。

使用transport_delivery_slot_discount指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

default_delivery_slot_loan (默认值:3)

运输工具特定 _delivery_slot_loan 设置的默认值。

该参数可加快信息抢发的时间。无需等到所需的投递时段全额可用,而是当transport_delivery_slot_discount占所需投递时段的百分比加上transport_delivery_slot_loan仍有待累积时,就可以进行抢占。请注意,在稍后再次抢占之前,仍需累积全部数量。

使用transport_delivery_slot_loan指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

default_delivery_status_filter (默认值:空)

Postfix 发送代理中的可选过滤器,用于替换成功或失败发送的发送状态代码或说明文本。这允许用永久错误状态代码(5.X.X)替换临时错误状态代码(4.X.X),反之亦然,但不允许用不成功状态代码(4.X.X 或 5.X.X)替换成功状态代码(2.X.X),反之亦然。

注意:(smtp|lmtp)_delivery_status_filter 对每个收件人只应用一次:当发送成功时、当发送被 5XX 拒绝时或当没有更多备用 MX 或 A 目的地时。使用smtp_reply_filterlmtp_reply_filter检查所有发送尝试的响应。

可以使用以下参数为特定的传送代理实施过滤器:lmtp_delivery_status_filterlocal_delivery_ status_filterpipe_delivery_ status _ filtersmtp_ delivery_status_filtervirtual_delivery_status_filter。这些参数支持与此处所述相同的过滤器语法。

指定零个或多个"type:table"查询表名,用逗号或空白分隔。每次向收件人成功或失败发送邮件时,都会按指定顺序查询这些表,查询文本的结构如下:

增强状态代码 SPACE 解释性文本

第一个匹配表获胜。查询结果必须与查询结构相同,成功状态代码(2.X.X)必须替换为成功状态代码,不成功状态代码(4.X.X 或 5.X.X)必须替换为不成功状态代码,解释性文本字段必须非空。其他结果将导致警告。

例 1:通过覆盖增强状态代码中的第一个数字,将特定的软 TLS 错误转换为硬错误。

/etc/postfix/main.cf:
    smtp_delivery_status_filter = pcre:/etc/postfix/smtp_dsn_filter
/etc/postfix/smtp_dsn_filter:
    /^4(\.\d+\.\d+ TLS is required, but host \S+ refused to start TLS: .+)/
        5$1
    /^4(\.\d+\.\d+ TLS is required, but was not offered by host .+)/
        5$1
    # 不要将以下内容改为硬退信。
    # 
    # 4.\d+.\d+ TLS is required, but our TLS engine is unavailable
    # 4.\d+.\d+ TLS is required, but unavailable
    # 4.\d+.\d+ Cannot start TLS: handshake failure

例 2:审查每个收件人的投递状态文本,使其在远程发件人请求确认成功投递时不会显示目的地命令或文件名。

/etc/postfix/main.cf:
    local_delivery_status_filter = pcre:/etc/postfix/local_dsn_filter
/etc/postfix/local_dsn_filter:
    /^(2\S+ delivered to file).+/ $1
    /^(2\S+ delivered to command).+/ $1

备注

  • 该功能不会覆盖软反弹安全网。
  • 此功能将更改记录到 maillog 文件中的增强状态代码和文本,以及在投递确认或未投递通知中向发件人报告的状态代码和文本。

该功能在 Postfix 3.0 及更高版本中可用。

default_destination_concurrency_failed_cohort_limit (默认值:1)

必须有多少个伪端口发生连接或握手失败,特定目的地才会被视为不可用(并暂停继续发送)。指定 0 则禁用此功能。目的地的伪队列失败计数会在每次发送完成后重置,而该特定目的地不会出现连接或握手失败。

伪队列是指与目的地交付并发量相等的交付次数。

使用transport_destination_concurrency_failed_cohort_limit指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

该功能在 Postfix 2.5 中可用。默认设置与 Postfix 早期版本兼容。

default_destination_concurrency_limit (默认值:20)

向同一目的地并行发送的默认最大次数。这是通过lmtp(8)pipe(8)smtp(8)virtual(8)发送代理进行发送的默认限制。当每个目的地的收件人限制 > 1 时,目的地就是域,否则就是收件人。

使用transport_destination_concurrency_limit指定特定于传输的超限,其中transport是信息交付传输的master.cf名称。

default_destination_concurrency_negative_feedback (默认值:1)

在连接或握手失败的情况下完成交付后,每个目的地的交付并发负反馈量。反馈值范围为 0...1(含 1)。负反馈时,并发量在长度为 1/ 反馈的序列开始时递减。这与正反馈不同,正反馈是在长度为 1/ 反馈的序列结束时增加并发量。

从 Postfix 2.5 版开始,负反馈无法将发送并发量减少到零。相反,当失败的伪队列计数达到$default_destination_concurrency_failed_cohort_limit(或$transport_destination_concurrency_failed_cohort_limit)时,目的地就会被标记为死亡(暂停继续发送)。要使调度程序完全不受连接或握手失败的影响,请指定零反馈值和零失败伪队列限制。

指定以下一种形式:

编号 

/ 号 

常量反馈。该值范围必须为 0...1(含 0)。默认设置 "1 "与 Postfix 2.5 之前的版本兼容,在 2.5 之前的版本中,发送目的地的发送并发量会在一次伪队列失败后降为零(并暂停继续发送)。

数量 /并发 

变量反馈为"数字/(交付并发量)"。数字范围必须为 0...1(含 1)。当数字等于 "1 "时,每次伪队列失败后,目的地的传送并发量都会递减 1。

伪队列是指与目的地交付并发量相等的交付次数。

使用transport_destination_concurrency_negative_feedback指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

该功能在 Postfix 2.5 中可用。默认设置与 Postfix 早期版本兼容。

default_destination_concurrency_positive_feedback (默认值:1)

在无连接或握手失败的情况下完成交付后,每个目的地的交付并发正反馈量。反馈值范围为 0...1(包括 1)。并发量会增加,直到达到每个目的地的最大并发量限制。使用正反馈时,并发量在长度为 1/ 反馈的序列结束时递增。这与负反馈不同,在负反馈中,并发量会在长度为 1/ 反馈的序列开始时递减。

指定以下一种形式:

编号 

/ 号 

常量反馈。该值范围必须为 0...1(含 0)。默认设置 "1 "与 Postfix 2.5 以前的版本兼容,在 2.5 以前的版本中,每次伪队列成功后,目标地址的发送并发量都会加倍。

数量 /并发 

变量反馈为"数字/(交付并发量)"。数字范围必须为 0...1(含 1)。当数字等于 "1 "时,每次伪队列成功后,目的地的传送并发量都会递增 1。

伪队列是指与目的地交付并发量相等的交付次数。

使用transport_destination_concurrency_positive_feedback指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

该功能在 Postfix 2.5 及更高版本中可用。

default_destination_rate_delay (默认值:0 秒)

通过同一信息传送传输方式向同一目的地传送单个信息之间插入的默认延迟量。指定一个非零值,可将这些信息传送速率限制为最多每$default_destination_rate_delay 一次。

由此产生的行为取决于相应的每个目的地收件人限制值。

  • 当相应的每个目的地收件人限制 > 1 时,速率延迟指定了向同一域交付的间隔时间。不同域将并行发送,但须遵守master.cf 中指定的进程限制。
  • 由于相应的每个目的地收件人限制等于 1,速率延迟指定了向同一收件人发送信息的间隔时间。根据master.cf 中指定的流程限制,不同的收件人会并行发送。

要启用延迟,请指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

注意:延迟由队列管理器执行。延迟计时器状态不会在"postfix 重载"或"postfix 停止"后继续存在。

使用transport_destination_rate_delay指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

注意:如果_destination_rate_delay 不为零,请将transport_destination_concurrency_failed_cohort_limit设置为 10 或更大,以防止 Postfix 在仅发生一次连接或握手错误后,就推迟同一目的地的所有邮件。

该功能在 Postfix 2.5 及更高版本中可用。

default_destination_recipient_limit (默认值:50)

每次发送信息时收件人的默认最大数量。这是通过lmtp(8)pipe(8)smtp(8)virtual(8)发送代理发送信息的默认限制。

将该参数设置为 1 会对电子邮件的发送产生如下影响:

  • 它改变了相应的每个目的地并发限制的含义,从向同一域交付的并发限制变为向同一收件人交付的并发限制。不同的收件人将并行交付,但须遵守master.cf 中指定的进程限制。
  • 它改变了相应的每个目的地速率延迟的含义,从向同一域交付之间的延迟变为向同一收件人交付之间的延迟。同样,不同的接收者会被并行交付,但须遵守master.cf 中指定的流程限制。
  • 它以类似的方式改变了其他相应的按目的地设置的含义,从向同一域发送的设置变为向同一收件人发送的设置。

使用transport_destination_recipient_limit指定特定于传输的覆盖范围,其中transport是信息交付传输的master.cf名称。

default_extra_recipient_limit (默认值:1000)

对内存中收件人数量施加的每个传输额外限制的默认值。这个额外的收件人空间是为 Postfix 队列管理器的调度程序用另一条信息抢先处理一条信息时,突然需要一些额外的收件人插槽来处理所选信息而保留的,以避免性能下降。

使用transport_extra_recipient_limit指定特定于传输的覆盖范围,其中transport是信息交付传输的master.cf名称。

default_filter_nexthop (默认值:空)

content_filter或 FILTER 请求未指定明确的下一跳目的地时,使用$default_filter_nexthop代替;当该值为空时,使用收件人地址中的域。为与 Postfix 2.6 及更早版本兼容,请指定"default_filter_nexthop= $myhostname",或在每个content_filter值或 FILTER 操作中指定一个明确的下一跳目的地。

该功能在 Postfix 2.7 及更高版本中可用。

default_minimum_delivery_lots (默认值:3)

信息必须有多少收件人才能调用 Postfix 队列管理器的调度算法。永远不会积累至少这么多发送时段的报文(也受制于时段成本参数)永远不会被抢占。

使用transport_minimum_delivery_slots指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

default_privs (默认值:nobody)

local(8)发送代理向外部文件或命令发送时使用的默认权限。当请求从root 拥有的aliases(5)文件或代表root 发送时,将使用这些权限。请勿指定特权用户或 postfix 所有者

default_process_limit (默认值:100)

提供特定服务的 Postfix 子进程的默认最大数量。对于特定服务,可在master.cf文件中更改此限制。

default_rbl_reply (默认值:参见 "postconf -d "输出)。

Postfix SMTP 服务器对被 RBL 限制拒绝的请求的默认响应模板。该模板可被可选的rbl_reply_maps查找表中的特定条目推翻。

该功能在 Postfix 2.0 及更高版本中可用。

该模板不支持 Postfix 配置参数 $name 替换。相反,它支持对以下属性进行精确的一级 $name 替换:

客户

客户端主机名和 IP 地址,格式为 name[address]。

客户地址

客户端 IP 地址。

客户端名称

客户端主机名或 "未知"。详情请参阅reject_unknown_client_hostname

$reverse_client_name

通过地址->名称查询得到的客户端主机名,或 "未知"。详情请参阅reject_unknown_reverse_client_hostname

$helo_name

HELO 或 EHLO 命令中给出的主机名或空字符串。

$rbl_class

拒绝列入清单的实体类型:客户端主机、直升机指令、发送方地址或接收方地址。

$rbl_code

通过maps_rbl_reject_code配置参数指定的 SMTP 响应代码。注意:数字 SMTP 响应代码是必需的,必须出现在回复的开头。在 Postfix 2.3 及更高版本中,该信息后面可能会出现RFC 3463增强状态代码。

$rbl_domain

RBL 域(不含任何=地址过滤器),其中 $rbl_what 被列入拒绝列表。

$rbl_reason

$rbl_what 被否定的原因,或空字符串。

$rbl_what

被退订的实体(IP 地址、主机名、域名或域名被退订的电子邮件地址)。

收件人

收件人地址,如果地址为空,则为 <>。

收件人域名

收件人域名或空字符串。

收件人姓名

收件人地址的本地部分,如果地址为空,则为 <>。

发件人

发件人地址,如果地址为空,则为 <>。

发件人域名

发件人域名或空字符串。

发送人姓名

发件人地址本地部分,如果地址为空,则为 <>。

${name?value}

${name?{value}}(后缀 ≥ 3.0)

$name非空时,扩展为值

${name:value}

${name:{value}}(Postfix ≥ 3.0)

$name为空时,扩展为值

${name?{value1}:{value2}}(后缀 ≥ 3.0)

$name非空时,扩展为value1,否则为value2

您也可以指定 ${name} 或 $(name)来代替 $name。

注意:当在 RBL 回复模板中指定增强状态代码时,该代码会被修改。当同一 RBL 响应模板用于客户端、helo、发送方或接收方访问限制时,需要进行以下转换。

  • 在拒绝发件人地址时,Postfix SMTP 服务器会将收件人 DSN 状态(如 4.1.1-4.1.6)转换为相应的发件人 DSN 状态,反之亦然。
  • 在拒绝非地址信息(如 HELO 命令参数或客户端主机名/地址)时,Postfix SMTP 服务器会将发件人或收件人的 DSN 状态转换为通用的非地址 DSN 状态(如 4.0.0)。

default_recipient_limit (默认值:20000)

每个传输对内存中收件人数量的默认上限。当信息被分配到相应的传输后,这些限制将优先于全局的qmgr_message_recipient_limit。另请参阅default_extra_recipient_limitqmgr_message_recipient_minimum

使用transport_recipient_limit指定特定于传输的覆盖范围,其中transport是信息交付传输的master.cf名称。

default_recipient_refill_delay (默认值:5 秒)

每个传输重新加载收件人的默认最大延迟时间。当内存中无法同时容纳所有收件人时,至少每隔这么多秒加载一次。即使$default_recipient_refill_limit设置得过高,也能确保收件人及时加载邮件,避免邮件发送过慢。

使用transport_recipient_refill_delay指定特定于传输的覆盖,其中transport是信息交付传输的master.cf名称。

该功能在 Postfix 2.4 及更高版本中可用。

default_recipient_refill_limit (默认值:100)

默认情况下,每次加载的收件人数量限制。当内存中无法同时容纳所有收件人时,会分批加载更多收件人,每次至少加载这么多。另请参阅 $default_recipient_refill_delay,当该限制过高导致发送速度过慢时,收件人批次可能会低于此值。

使用transport_recipient_refill_limit指定特定于传输的覆盖范围,其中transport是信息交付传输的master.cf名称。

该功能在 Postfix 2.4 及更高版本中可用。

default_transport (默认值:smtp)

默认域类的默认邮件发送传输和下一跳目的地:与 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains、$virtual_mailbox_domains 或$relay_domains 不匹配的收件人域。当sender_dependent_default_transport_maps返回结果时,这些信息将不会被使用,您可以使用transport(5)表覆盖这些信息。

对于默认域类中的收件人域:

 

指定一个形式为transport: nexthop的字符串,其中transportmaster.cf 中定义的邮件发送传输名称。如果是 SMTP 或 LMTP,请指定一个或多个目的地,中间用逗号或空格隔开(Postfix 3.5 及更高版本)。

例如

default_transport = uucp:relayhostname

默认传输速率延迟 (默认值:0 秒)

通过同一信息传送传输系统(无论目的地)进行的单个信息传送之间插入的默认延迟量。如果指定一个非零值,则可将信息传送速率限制为最多每$default_transport_rate_delay 一次。

使用transport_transport_rate_delay指定特定于传输的覆盖,其中初始传输是信息交付传输的master.cf名称。

例如:将 SMTP 外发邮件限制为每分钟最多发送 3 封。

/etc/postfix/main.cf:
    smtp_transport_rate_delay = 20s

要启用延迟,请指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

注意:延迟由队列管理器执行。

该功能在 Postfix 3.1 及更高版本中可用。

default_verp_delimiters (默认: +=)

两个默认的 VERP 分隔符。当 SMTP XVERP 命令或"sendmail -XV"命令行选项(Postfix 2.2 及更早版本:-V)未指定明确的分隔符时,就会使用这两个字符。指定verp_delimiter_filter设置所允许的字符。

该功能在 Postfix 1.1 及更高版本中可用。

defer_code (默认值:450)

当远程 SMTP 客户端请求被 "推迟 "限制拒绝时,Postfix SMTP 服务器的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

defer_service_name (默认: defer)

延迟服务的名称。该服务由bounce(8)守护进程执行,负责维护发送尝试失败的记录,并生成未发送通知。

该功能在 Postfix 2.0 及更高版本中可用。

defer_transports (默认值:空)

除非有人发出"sendmail -q"或类似命令,否则不应投递邮件的邮件投递工具名称。指定master.cf 第一个字段中出现的零个或多个邮件发送传输名称。

例如

defer_transports = smtp

delay_logging_resolution_limit (默认值:2)

记录延迟值时小数点后的最大位数。在 0...6 的范围内指定一个数字。

为提高可读性,延迟记录仅使用有限的有效数字:

延迟=a/b/c/d "日志的格式如下:

  • a = 从报文到达到最后一个活动队列条目的时间。
  • b = 从最后一个活动队列条目到开始连接设置的时间。
  • c = 连接设置时间。对于 SMTP,这是指发送 MAIL FROM 命令前的时间:对于新连接,包括 DNS 查询、TCP、EHLO 和 STARTTLS 协议握手;对于重复使用的连接,包括 DNS 查询、按域或 IP 地址查找连接缓存,以及使用 RSET 进行有效性探测。
  • d = 信息传输时间。对于 SMTP,首先要发送 MAIL FROM。

该功能在 Postfix 2.3 及更高版本中可用。

delay_notice_recipient (默认值:postmaster)

$delay_warning_time时间单位内无法投递的邮件的邮件头的 postmaster 通知收件人。

另请参见:delay_warning_timenotify_classes

delay_warning_time (默认值:0h)

发件人收到仍在排队的邮件的邮件头副本的时间。确认_延迟_清除参数控制延迟清除时的发件人通知。

要启用此功能,请指定一个不为零的时间值(一个整数值加上一个指定时间单位的可选单字后缀)。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

另请参见:delay _notice_recipientnotify_classesconfirm_delay_cleared

deliver_lock_attempts (默认:20)

尝试获取邮箱文件或bounce(8)日志文件独占锁的最大次数。

deliver_lock_delay (默认值:1 秒)

尝试获取邮箱文件或bounce(8)日志文件独占锁的间隔时间。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

destination_concurrency_feedback_debug (默认值:否)

让队列管理器的反馈算法变得冗长,以便进行性能分析。

该功能在 Postfix 2.5 及更高版本中可用。

detect_8bit_encoding_header (默认值:是)

通过查看 Content-Transfer-Encoding: 消息头自动检测 8BITMIME 主体内容;历史上,这种行为被硬编码为 "始终开启"。

该功能在 Postfix 2.5 及更高版本中可用。

disable_dns_lookups (默认值:否)

在 Postfix SMTP 和 LMTP 客户端中禁用 DNS 查询。禁用后,将使用 getaddrinfo() 系统库例程查找主机,该例程通常也在 /etc/hosts 中查找。从 Postfix 2.11 起,该参数已被弃用;请使用smtp_dns_support_level代替。

DNS 查询默认已启用。

disable_mime_input_processing (默认值:否)

在接收邮件时关闭 MIME 处理。这意味着不会对 Content-Type: 信息标题进行特殊处理,而且在最初的信息标题之后的所有文本都被视为信息正文的一部分。

该功能在 Postfix 2.0 及更高版本中可用。

默认情况下,MIME 输入处理功能已启用,需要使用该功能才能识别邮件内容中的 MIME 标头。

disable_mime_output_conversion (默认值:否)

禁用将 8BITMIME 格式转换为 7BIT 格式。当目标地址不支持 8BITMIME 时,需要进行 MIME 输出转换。

该功能在 Postfix 2.0 及更高版本中可用。

disable_verp_bounces (默认值:否)

禁用为每个收件人发送一份退回报告。

默认情况下,ezmlm 需要每个收件人一个。

该功能在 Postfix 1.1 及更高版本中可用。

disable_vrfy_command (默认值:否)

禁用 SMTP VRFY 命令。这可以阻止一些用于窃取电子邮件地址的技术。

例如

disable_vrfy_command = no

dns_ncache_ttl_fix_enable (默认值:否)

启用未来 libc 不兼容的解决方法。Postfix 实现RFC 2308否定回复缓存依赖于 res_query() 和 res_search() 调用 res_send() 的承诺,即使请求的记录不存在,也会在应用程序缓冲区中返回服务器响应。如果这一承诺被破坏,请指定 "yes "以启用 DNS 信誉查询的变通方法。

该功能在 Postfix 3.1 及更高版本中可用。

dnsblog_reply_delay (默认值:0 秒)

人为延迟 DNS 响应的调试辅助工具。

Postfix 2.8 中提供了这一功能。

dnsblog_service_name (默认值:dnsblog)

master.cfdnsblog(8)服务条目的名称。该服务执行 DNS 允许/禁用列表查询。

该功能在 Postfix 2.8 及更高版本中可用。

dnssec_probe (默认值:ns:.)

Postfix 用于确定 DNSSEC 验证是否可用的 DNS 查询类型(默认值:"ns")和 DNS 查询名称(默认值:".")。

背景:Postfix DANE 支持需要 DNSSEC 验证;这可确保 Postfix 接收到带有安全 TLS 服务器证书信息的 TLSA 记录。当 DNSSEC 验证不可用时,使用机会性DANE 发送的邮件将不会受到 TLSA 记录中服务器证书信息的保护,而使用强制性DANE 发送的邮件则根本无法发送。

默认情况下,Postfix 进程将在以下情况下发送 DNSSEC 探测:1)进程进行了请求 DNSSEC 验证的 DNS 查询;2)进程未收到对该查询或之前查询的 DNSSEC 验证响应;3)进程尚未发送 DNSSEC 探测。

 

当 DNSSEC 探测器无响应或响应未通过 DNSSEC 验证时,Postfix 会记录 DNSSEC 验证可能不可用的警告。

例如

warning:DNSSEC 验证可能不可用
warning: reason:dnssec_probe'ns:.' received a response that is not DNSSEC validated
warning: reason:dnssec_probe'ns:.' received no response:Server failure

DNSSEC 验证不可用的可能原因:

  • 本地 /etc/resolv.conf 文件指定的 DNS 解析器不验证 DNSSEC 签名(Postfix 守护进程在 chroot jail 中运行时为 $queue_directory/etc/resolv.conf)。
  • 本地系统库没有将 "DNSSEC 已验证 "位传递给 Postfix,或者 Postfix 不知道如何要求系统库这样做。

默认情况下,DNSSEC 探测器会询问 DNS 根区域的 NS 记录,因为解析器应始终缓存该信息。如果 Postfix 在无法访问 DNS 根区的网络上运行,请指定不同的探针,或指定一个空的dnssec_probe值来禁用该功能。

该功能在 Postfix 3.6 及更高版本中可用。该功能已在 Postfix 3.5.9、3.4.19、3.3.16 和 3.2.21 版本中回传。3.2.21.

dont_remove (默认值:0)

不要删除队列文件并将其保存到 "已保存 "的邮件队列中。这是一种调试辅助工具。要检查 Postfix 队列文件的封套信息和内容,请使用postcat(1)命令。

double_bounce_sender (默认: double-bounce)

邮件系统生成的邮局管理员通知的发件人地址。所有发往该地址的邮件都会被静默丢弃,以终止邮件退回循环。

重复过滤限制 (默认值:1000)

别名(5)虚拟(5)别名扩展或显示队列(8)时,地址重复过滤器记忆的最大地址数。

empty_address_default_transport_maps_lookup_key (默认值:<>)

将用来代替空发件人地址的发件人相关默认传输地图搜索字符串。

该功能在 Postfix 2.7 及更高版本中可用。

empty_address_local_login_sender_maps_lookup_key (默认值:<>)。

local_login_sender_maps表中使用的查找键,而不是空发件人地址。

该功能在 Postfix 3.6 及更高版本中可用。

empty_address_recipient (默认值: MAILER-DAEMON)

发往空地址的邮件的收件人。Postfix 在 SMTP 命令中不接受此类地址,但由于配置或软件错误,仍可能在本地创建此类地址。

empty_address_relayhost_maps_lookup_key (默认值:<>)。

发送方依赖的中继主机映射搜索字符串,该字符串将用于替代空发送方地址。

Postfix 2.5 及更高版本提供了这一功能。在早期版本中,对于空发件人地址,会跳过发件人依赖中继主机映射(sender_dependent_relayhost_maps)查找。

enable_errors_to (默认值:否)

向非标准 Errors-To: 报文头指定的地址报告邮件投递错误,而不是信封发件人地址(Postfix 2.2 版取消了此功能,Postfix 2.1 版默认关闭此功能,Postfix 旧版本始终开启此功能)。

启用_idna2003_兼容性 (默认值:否)

在将 UTF-8 域名转换为/从用于 DNS 查询的 ASCII 格式时,启用 IDNA2003 和 IDNA2008 之间的 "过渡 "兼容性。指定 "是 "可与 Postfix ≤ 3.1 兼容(不推荐)。这会影响包含德文 sz 和希腊文 zeta 的域名的转换。更多示例请参见https://unicode.org/cldr/utility/idna.jsp

该功能在 Postfix 3.2 及更高版本中可用。

启用长队列标识 (默认值:否)

启用长的、不重复的队列 ID(队列文件名)。不重复名称的好处是可以简化日志文件分析和队列迁移(无需运行 "postsuper "来更改与其报文文件 inode 编号不匹配的队列文件名)。

注意:请参阅下文,了解如何将长队列文件名转换为 Postfix ≤ 2.8。

将参数值更改为 "是 "会产生以下影响:

  • 现有队列文件名不受影响。
  • 创建的新队列文件名如 3Pt2mN2VXxznjll。这些文件以 52 个字符的字母表编码,其中包括数字(0-9)、大写字母(B-Z)和小写字母(b-z)。出于安全考虑,字母表中不包含元音 (AEIOUaeiou)。名称格式为6 个或更多字符表示时间(以秒为单位),4 个字符表示时间(以微秒为单位),"z "表示 "z";其余部分是用 52 个字符的前 51 个字符编码的文件编码号。
  • 新信息有一个包含queueID@myhostname 的 Message-ID 标头。
  • mailq (postqueue -p) 输出的队列 ID 列更宽。空格分隔字段的数量不变。

     

  • hash_queue_depth算法使用队列文件创建时间的第一个字符(微秒),然后转换为十六进制表示。这与使用"enable_long_queue_ids= no "创建队列文件名时产生的队列散列行为相同。

将参数值更改为 "否 "会产生以下影响:

  • 现有的长队列文件名会重命名为短队列文件名(同时运行 "postfix reload "或 "postsuper")。
  • 新建队列文件的名称如 C3CD21F3E90,由包含数字(0-9)和大写字母(A-F)的十六进制字母组成。名称格式为5 个字符表示时间(以微秒为单位),其余为文件 inode 号码。
  • 新邮件的 Message-ID 标头为YYYYMMDDHHMMSS.queueid@ myhostname,其中YYYYMMDDHHMMSS为年、月、日、时、分、秒。
  • mailq (postqueue -p) 的输出格式与 Postfix ≤ 2.8 相同。

     

  • hash_queue_depth算法使用队列文件名的第一个字符,以及以微秒为单位的文件创建时间的十六进制表示法。

在迁移到 Postfix ≤ 2.8 之前,需要使用以下命令将长队列文件名转换为短名称:

# postfix stop
# postconfenable_long_queue_ids=no
# postsuper

重复 postsuper 命令,直到它不再报告队列文件名更改。

该功能在 Postfix 2.9 及更高版本中可用。

启用原始收件人 (默认值:是)

在地址改写为不同地址后(例如使用别名或规范映射),启用对原始收件人地址的支持。

原始收件人地址的使用方法如下:

最终交付

如果"enable_original_recipient= yes"(启用 原始收件人 = 是),原始收件人地址就会存储在X-Original-To 报文头中。该标题可用于区分共享同一邮箱的不同收件人。

重复数据删除

如果使用"enable_original_recipient= yes",则清理(8)守护进程会根据(原始收件人、可能改写的收件人)对的内容执行重复收件人消除。否则,cleanup(8)守护进程将只根据可能被改写的收件人地址来消除重复的收件人。

注意:在 Postfix ≤ 3.2 版本中,"enable_original_recipient=no"设置会中断对别名地址或改写地址的地址验证(Postfix 无法将地址验证结果存储在原始探测目标地址下,而只能将结果存储在改写地址下)。

该功能在 Postfix 2.1 及更高版本中可用。Postfix 2.0 版本将此参数设置为"是"。Postfix 2.0 之前的版本不支持原始收件人地址。

启用线程弹跳 (默认值:否)

通过包含带有原始邮件 ID 值的 References: 和 In-Reply-To:标头,启用链接到原始邮件的未送达、成功和延迟通知。这样做有利有弊。

好处 

这样,邮件阅读器就能在与原始邮件相同的邮件线程中显示投递状态通知。

弱势 

这样,用户就很容易误删整个电子邮件线程(所有相关邮件),而不是只删除未送达通知。

该功能在 Postfix 3.6 及更高版本中可用。

error_notice_recipient (默认值:postmaster)

由策略、资源、软件或协议错误引起的邮件递送问题通知的收件人。这些通知通过notify_classes参数启用。

error_service_name (默认值:error)

error(8)伪投递代理的名称。该服务总是将邮件退回为无法投递。

该功能在 Postfix 2.0 及更高版本中可用。

execution_directory_expansion_filter (默认值:参见 "postconf -d "输出)。

限制local(8)发送代理允许在$command_execution_directory 的 $name 扩展名中使用的字符。超出允许范围的字符将被下划线取代。

该功能在 Postfix 2.2 及更高版本中可用。

expand_owner_alias (默认值:否)

在向有 "owner-aliasname "同伴别名的别名 "aliasname"发送邮件时,将信封发件人地址设置为 "owner-aliasname "别名的扩展名。通常,Postfix 会将信封发件人地址设置为 "owner-aliasname "别名的名称。

export_environment (默认值:参见 "postconf -d" 输出)。

Postfix 进程向非 Postfix 进程输出的环境变量列表。在偏 System-V 的系统中,需要使用 TZ 变量来合理计时。

指定名称和/或 name=value 对的列表,以空格或逗号分隔。指定"{ name=value }"可保护参数值中的空格或逗号(开头"{"后和结尾"}"前的空格将被忽略)。Postfix 2.1 及更高版本支持 name=value 格式;Postfix 3.0 及更高版本支持使用 {}。

例如

export_environment = TZ PATH=/bin:/usr/bin

extract_recipient_limit (默认值:10240)

当使用"sendmail -t"提交邮件时,Postfix 从邮件标题中提取的收件人地址的最大数量。

Postfix 2.1 版取消了这一功能。

fallback_relay (默认值:空)

为无法找到或无法到达的 SMTP 目的地提供的可选中继主机列表。在 Postfix 2.3 中,该参数更名为smtp_fallback_relay

默认情况下,如果找不到目的地,邮件会被退回给发件人;如果目的地无法到达,邮件会被推迟投递。

后备中继必须是 SMTP 目的地。请指定域、主机、主机:端口、[主机]:端口、[地址]或[地址]:端口;[主机]形式将关闭 MX 查询。如果指定多个 SMTP 目的地,Postfix 将按指定顺序尝试它们。

注意:在 Postfix 2.2 之前,为备份或主 MX 域中继邮件时,请勿使用fallback_relay功能。当最终目的地不可用时,邮件将在 Postfix MX 主机和fallback_relay主机之间循环。

Postfix 2.2 及更高版本不会对其作为 MX 主机的目的地使用fallback_relay功能。

fallback_transport (默认值:空)

本地(8)递送代理在别名(5)或 UNIX 密码数据库中找不到的名称时应使用的可选报文递送传输方式。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

fallback_transport_maps (默认值:空)

对于本地(8)递送代理无法在别名(5 或 UNIX 密码数据库中找到的收件人,可选择带有按收件人信息递送传输的查找表。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

出于安全考虑,该功能不允许在正则表达式映射中使用 $number 替换。

该功能在 Postfix 2.3 及更高版本中可用。

fast_flush_domains (默认值:$relay_domains)

可选的目的地列表,该列表列出了符合每个目的地日志文件要求的目的地,以及排队发送到这些目的地的邮件。

默认情况下,Postfix 只为 Postfix SMTP 服务器愿意中继的目的地维护 "快速刷新 "日志文件(即默认情况下:"fast_flush_domains=$relay_domains";请参阅postconf(5)手册中的relay_domains参数)。

指定主机或域、"/file/name "模式或"type:table"查找表的列表,以逗号和/或空格分隔。用空格分隔长行,以空格开始下一行。/文件/名称 "模式会被其内容替换;当域或其父域作为查找键出现时,"type:table"查找表就会与之匹配。

域名的模式匹配由父域名匹配子域名参数值中是否包含"fast_flush _domains"控制。

指定"fast_flush_domains="(即为空)可完全禁用该功能。

fast_flush_purge_time (默认值:7d)

删除每个目的地 "快速刷新 "日志文件空文件的时间。

您可以用数字指定时间,也可以用数字后面的字母表示时间单位:s=秒、m=分、h=小时、d=天、w=周。默认时间单位为天。

fast_flush_refresh_time (默认值:12h)

非空但未读取的每个目的地 "快速刷新 "日志文件需要刷新的时间。日志文件内容的刷新是通过请求发送日志文件中列出的所有报文进行的。

您可以用数字指定时间,也可以用数字后面的字母表示时间单位:s=秒、m=分、h=小时、d=天、w=周。默认时间单位为小时。

故障注入代码 (默认值:0)

强制特定的内部测试失败,以测试对难以重现的错误的处理。

flush_service_name (默认: flush)

flush(8)服务的名称。该服务按目的地维护日志文件,其中包含为这些目的地排队的邮件的队列文件名。

该功能在 Postfix 2.0 及更高版本中可用。

force_mime_input_conversion (默认值:否)

header_checksbody_checks、Milters 和 after-queue 内容过滤器之前,将声称是 8 位的正文内容转换为带引号的可打印内容。此功能不影响发送到smtpd_proxy_filter 的信息。

典型的用例是 MTA 在对外发信息进行签名前进行这种转换,这样当信息被发送到不宣布支持 8BITMIME 的 MTA 时,或当信息行超过 SMTP 长度限制时,签名仍然有效。

该功能在 Postfix ≥ 3.9 中可用。

fork_attempts (默认值:5)

尝试 fork() 子进程的最大次数。

fork_delay (默认:1 秒)

尝试 fork() 子进程之间的延迟。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

forward_expansion_filter (默认值:参见 "postconf -d "输出)。

限制local(8)发送代理在 $name 扩展$forward_path 时允许使用的字符。超出允许范围的字符将用下划线代替。

forward_path (默认值:参见 "postconf -d "输出)。

local(8)发送代理搜索列表,用于通过用户指定的发送方式查找 .forward 文件。找到的第一个文件将被使用。

forward_path值不受 Postfix 配置参数 $name 扩展的限制。相反,在实际搜索之前,会对forward_path进行以下 $name 扩展。使用forward_expansion_filter参数指定的字符集过滤 $name 扩展的结果。

用户

收件人的用户名。

$shell

收件人的登录 shell 路径名。

主页

收件人的主目录。

收件人

完整的收件人地址。

扩展名

可选的收件人地址扩展名。

$domain

收件人域名。

本地

整个收件人本地部分。

收件人分隔符

在收件人地址中找到的地址扩展分隔符(Postfix 2.11 及更高版本),或使用全系统收件人地址扩展分隔符指定的 "第一 "分隔符(Postfix 3.5.22、3.6.12、3.7.8、3.8.3 及更高版本)。历史上,这一直是系统范围内的收件人地址扩展分隔符(Postfix 2.10 及更早版本)。

${name?value}

${name?{value}}(后缀 ≥ 3.0)

$name非空时,扩展为值

${name:value}

${name:{value}}(Postfix ≥ 3.0)

$name为空时,扩展为值

${name?{value1}:{value2}}(后缀 ≥ 3.0)

$name非空时,扩展为value1,否则为value2

您也可以指定 ${name} 或 $(name)来代替 $name。

例如

forward_path = /var/forward/$user
    forward_path = /var/forward/$user/.forward$recipient_delimiter$extension,
    /var/forward/$user/.forward

frozen_delivered_to (默认值:是)

仅在开始尝试发送时更新一次本地(8)发送代理对 Delivered-To: 地址的设置(参见prepend_delivered_header);在扩展别名或 .forward 文件时不要更新 Delivered-To: 地址。

该功能在 Postfix 2.3 及更高版本中可用。在 Postfix 旧版本中,该参数的作用与设置为 "否 "相同。旧版设置可能会对深嵌套的别名或 .forward 文件造成很大影响。当别名或 .forward 文件更改了 Delivered-To: 地址时,就会在邮件转发时占用一个队列文件和一个清理进程实例。

full_name_encoding_charset (默认值:utf-8)

Postfix 自动生成RFC 2047编码全名时将输出的字符集名称(也称为 "charset")。对非 ASCII 全名进行编码可以避免使用 SMTPUTF8,从而避免与不支持 SMTPUTF8 的网站不兼容。

编码后的名称在使用带引号可打印编码时看起来像"=?charset?q?gibberish?=",在使用 base64 编码时看起来像"=?charset?b?gibberish?="。Postfix 对简短或大部分为可打印 ASCII 的全名使用带引号可打印编码,否则使用 base64 编码。

背景:当使用 Postfixsendmail(1)命令提交一封没有发件人:标题的邮件时,Postfixcleanup(8)守护进程会添加一个发件人:标题,并尝试使用 Postfixsendmail(1)"-F" 选项、Postfixsendmail(1 )"NAME "环境变量或 UNIX 密码数据库中的 GECOS 字段指定的发件人全名。在后一种情况下,Postfix 将用登录名替换"&"字符,并将 ASCII 码小写字母转换为大写字母。

注意:Postfix 不进行字符集之间的转换。在 Postfix sendmail 的"-F "选项、Postfix sendmail 的 "NAME "环境变量或 UNIX 密码数据库的 GECOS 字段中,full_name_encoding_charset参数指定了全名的字符集。该参数值也是编码全名的一部分,并告知邮件用户代理如何显示解码后的乱码。

指定一个有效的字符集名称,如 "utf-8 "或 "iso-8859-1"(使用 Latin1 编码的全名应指定后者)。字符集名称不区分大小写。当字符集名称违反RFC 2047语法时,Postfix 将记录警告并跳过全名。

该功能在 Postfix ≥ 3.10 中可用。

hash_queue_depth (默认:1)

使用hash_queue_names参数列出的队列目录的子目录级数。队列散列是通过创建一个或多个具有单字符名称的目录级别来实现的。最初,这些目录名等于队列文件名的第一个字符,以及文件创建时间(以微秒为单位)的十六进制表示。

对于长队列文件名,队列散列产生的结果与短队列文件名相同。以微秒为单位的文件创建时间会被转换成十六进制形式,然后再用于队列散列。与长队列文件名的基数 52 编码相比,基数 16 编码能更精确地控制子目录的数量。

更改hash_queue_nameshash_queue_depth参数后,执行"postfix reload"命令。

hash_queue_names (默认:deferred,延迟)

分隔在多个子目录层的队列目录名称。

在 Postfix 2.2 版之前,哈希队列的默认列表要大得多。文件系统技术的改进表明,不再需要对接收 队列活动队列进行散列。哈希目录的减少加快了重启 Postfix 所需的时间。

更改hash_queue_nameshash_queue_depth参数后,执行"postfix reload"命令。

头地址令牌限制 (默认:10240)

地址报文头中允许的最大地址标记数。超过限制的信息将被丢弃。该限制由cleanup(8)服务器执行。

header_checks (默认:空)

用于检查主要非 MIME 报文头内容的可选查找表,详见header_checks(5)手册页面。

header_from_format (默认:标准)

Postfix 生成的From:头信息的格式。当本地程序(如 /bin/mail通过 Postfixsendmail(1)命令提交不带 "发件人:"头信息的邮件时,该设置会影响 "全名 "信息的显示。

请指定以下选项之一:

标准(默认)

生成格式为"From: name< address>"的邮件头。这是 Postfix 3.3 的默认设置。

陈旧

生成格式为"发件人: 地址 姓名"的邮件头。这是 Postfix 3.3 之前的行为。

备注

  • 姓名信息不可用或信封发件人地址为空时,Postfix 会生成"发件人: 地址"格式。这与 Postfix 3.3 之前的行为相同。
  • 标准格式中,如果名称包含RFC 5322 中定义的特殊符号或"!%"地址运算符,则会被加引号。
  • Postfixsendmail(1)命令从-F命令行选项、NAME环境变量或 UNIX 密码文件中获取名称信息。

该功能在 Postfix 3.3 及更高版本中可用。

header_size_limit (默认:102400)

存储报文头的最大内存容量(字节)。如果报文头过大,多余部分将被丢弃。该限制由cleanup(8)服务器执行。

helpful_warnings (默认:是)

记录关于有问题的配置设置的警告,并提供有用的建议。

该功能在 Postfix 2.0 及更高版本中可用。

home_mailbox (默认值:空)

可选的邮箱文件路径名,相对于local(8)用户的主目录。

指定一个以"/"结尾的路径名,用于 qmail 式发送。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

例如

home_mailbox = 邮箱
home_mailbox = Maildir/

hopcount_limit (默认值:50)

主报文标题中允许的 Received: 报文标题的最大数量。超过限制的邮件会被退回,以阻止邮件循环。

html_directory (默认值:参见 "postconf -d "输出)。

描述如何构建、配置或操作特定 Postfix 子系统或功能的 Postfix HTML 文件的位置。

ignore_mx_lookup_error (默认值:否)

忽略无响应的 DNS MX 查询。默认情况下,Postfix SMTP 客户端会延迟发送,并在延迟一段时间后再次尝试。这种行为是 SMTP 标准所要求的。

指定"ignore_mx_lookup_error= yes "可强制进行 DNS A 记录查询。这违反了 SMTP 标准,可能导致邮件投递错误。

ignore_srv_lookup_error (默认值:否)

当 SRV 记录查找失败时,退回到 MX 或 IP 地址查找,就像未启用 SRV 记录查找一样。

该功能在 Postfix 3.8 及更高版本中可用。

import_environment (默认值:参见 "postconf -d "输出)。

Postfix 特权进程将从非 Postfix 父进程导入的环境变量列表,或 name=value 环境重载。非特权实用程序将执行 name=value 重载,但不会改变其进程环境。相关环境变量示例

TZ

在大多数类似 System-V 的系统中,可能需要它来合理计时。

显示屏

用于使用 X-windows 调试器调试 Postfix 守护进程。

XAUTHORITY

用于使用 X-windows 调试器调试 Postfix 守护进程。

MAIL_CONFIG

需要使"postfix -c"正常工作。

postlog_service

需要使"maillog_file"在守护进程初始化时工作。

postlog_hostname

需要使"maillog_file"在守护进程初始化时工作。

指定名称和/或 name=value 对的列表,以空格或逗号分隔。指定"{ name=value }"可保护环境变量值中的空白或逗号(开头"{"之后和结尾"}"之前的空白将被忽略)。Postfix 2.1 及更高版本支持 name=value 形式;Postfix 3.0 及更高版本支持使用 {}。

in_flow_delay (默认值:1 秒)

当报文到达率超过报文发送率时,接受新报文前的暂停时间。此功能默认开启(由于 SCO 的一个错误,在 SCO UNIX 上被禁用)。

在默认的 100 Postfix SMTP 服务器进程限制下,"in_flow_delay= 1s "将邮件流入量限制为每秒 100 封,高于每秒发送的邮件数量。

指定 0 则禁用该功能。有效延迟为 0...10。

inet_interfaces (默认:全部)

邮件系统接收邮件的本地网络接口地址。指定 "all "表示在所有网络接口上接收邮件(默认),指定 "loopback-only "表示只在环回网络接口上接收邮件(Postfix 2.2 及更高版本),或者指定零个或多个 IPv4 或 IPv6 地址(Postfix 2.2 及更高版本支持 IPv6)。该参数还控制 Postfix 是否接受用户@[ip.地址]的邮件,并防止 Postfix 将邮件发送到具有相同或更大 MX 优先级的主机。如果 Postfix 不通过网络接收邮件,或所有网络侦听器都在master.cf 中有明确的 IP 地址,则指定空值。

注 1:当该参数发生变化时,您需要停止并启动 Postfix。

注 2:地址信息可填写在[]内,但此处不需要填写此表。

如果未指定smtp_bind_address和/或smtp_bind_address6inet_interfaces设置可能会如下所述限制出站 SMTP 或 LMTP 连接的源 IP 地址。

以下内容专门针对 SMTP 和 IPv4。同样的道理也适用于 IPv6 协议和 Postfix LMTP 客户端。要禁用 Postfix SMTP 和 LMTP 客户端对 IPv4 或 IPv6 的支持,请使用inet_protocols

  • inet_interfaces指定了一个 IPv4 地址,且该地址不是环回地址时,Postfix SMTP 客户端就会使用该地址作为向外 IPv4 连接的源地址。
  • 否则,Postfix SMTP 客户端不会限制源 IPv4 地址,而是使用系统选择的源 IPv4 地址进行连接。这包括inet_interfaces为空、指定全部或不包含 IPv4 地址、一个 IPv4 地址为环回地址或多个 IPv4 地址的情况。

当客户端源 IP 地址被smtp_bind_addresssmtp_bind_address6 明确限制,或被inet_interfaces 隐式限制时,Postfix SMTP 客户端可能无法连接某些远程 SMTP 服务器。当 Postfix 运行在多主机系统(如防火墙)上,Postfix SMTP 源客户端 IP 地址被限制在一个特定的网络接口上,而远程 SMTP 服务器必须通过另一个接口访问时,就会出现这种情况。将smtp_bind_address设置为 0.0.0.0 可以避免 IPv4 的潜在问题,将smtp_bind_address6设置为 :: 可以解决 IPv6 的问题。

对于多主机系统,更好的解决办法是将inet_interfaces保留为默认值,而在master.cfSMTP 服务器定义中使用明确的 IP 地址。这样可以确保防火墙的每一侧都知道对方的 IP 地址仍然是同一台主机,从而保留 Postfix SMTP 客户端的循环检测功能。将$inet_interfaces设置为单个 IPv4 和/或 IPV6 地址,主要适用于在二级 IP 地址上虚拟托管域的情况,即每个 IP 地址服务不同的域(并具有不同的$myhostname设置)。

另请参阅proxy_interfaces参数,了解通过代理或地址转换器转发给 Postfix 的网络地址。

例如

inet_interfaces = all (默认)
inet_interfaces = loopback-only (Postfix 2.2 及更高版本)
inet_interfaces = 127.0.0.1
inet_interfaces = 127.0.0.1, [::1] (Postfix 2.2 及更高版本)
inet_interfaces = 192.168.1.2, 127.0.0.1

inet_protocols (默认值:参见 "postconf -d "输出)。

Postfix 在建立或接受连接时尝试使用的互联网协议。指定一个或多个 "ipv4 "或 "ipv6",用空格或逗号分隔。all "相当于 "ipv4, ipv6 "或 "ipv4",取决于操作系统是否实现了 IPv6。

Postfix 2.8 及更早版本的默认设置为 "ipv4"。为了向后兼容这些版本,Postfix 2.9 及更高版本的升级程序会在没有显式设置的情况下,在main.cf中添加"inet_protocols= ipv4 "显式设置。随着 IPv6 的部署越来越普遍,这种兼容性变通方法将被逐步淘汰。

该功能在 Postfix 2.2 及更高版本中可用。

注意:更改该参数后,必须停止并启动 Postfix。

在支持 IPV6_V6ONLY协议(RFC 3493)之前的系统上,即使使用inet_protocols参数关闭了 IPv4协议,IPv6 服务器也会接受 IPv4 连接。在支持 IPV6_V6ONLY 的系统上,Postfix 将为 IPv6 和 IPv4 分别使用不同的服务器套接字,每个套接字只接受相应协议的连接。

当通过inet_protocols参数启用 IPv4 支持时,Postfix 将查找 DNS 类型 A 记录,并将 IPv4-in-IPv6 客户端 IP 地址(::fffff:1.2.3.4)转换为原始 IPv4 格式(1.2.3.4)。在支持 IPV6_V6ONLY 之前(RFC 3493)的主机上需要使用后者。

通过inet_protocols参数启用 IPv6 支持后,Postfix 将进行 DNS 类型的 AAAA 记录查询。

当同时启用 IPv4 和 IPv6 支持时,Postfix SMTP 客户端将选择smtp_address_preference参数指定的协议。2.8 之前的 Postfix 版本在尝试使用 IPv4 之前,会先尝试通过 IPv6 进行连接。

例如

inet_protocols = ipv4
inet_protocols = all(默认)
inet_protocols = ipv6
inet_protocols = ipv4, ipv6

info_log_address_format (默认:外部)

在非调试日志(信息、警告等)中使用的电子邮件地址格式。从 Postfix 3.5 开始,当地址的本地部分包含空格或其他特殊字符时,本地部分将被加引号,例如

    from=<"name with spaces"@example.com>

旧版本的 Postfix 会记录内部(无引号)形式:

    from=<name with [email protected]>

对于本地部分不含空格或其他特殊字符的绝大多数电子邮件地址而言,外部和内部表格是相同的。

外部形式的日志记录与 Postfix 3.2 及更高版本在大多数表格查询中首选的地址形式一致。因此,对于非调试日志,这种形式更有用。

为了向后兼容,请指定"info_log_address_format = internal"。

Postfix 在内部使用未加引号的形式,因为攻击者可以通过与引号和反斜线玩游戏,以不同形式指定电子邮件地址。攻击者应该无法利用这种游戏规避 Postfix 访问策略。

该功能在 Postfix 3.5 及更高版本中可用。

initial_destination_concurrency (默认:5)

并行发送到同一目的地的每个目的地初始并发级别。当每个目的地的收件人限制 > 1 时,目的地就是一个域,否则就是一个收件人。

使用transport_initial_destination_concurrency指定特定于传输的覆盖,其中transport是邮件发送传输的master.cf名称(Postfix 2.5 及更高版本)。

警告:并发量为 1 时,一个坏消息就足以阻止发送到某个站点的所有邮件。

internal_mail_filter_classes (默认值:空)

哪些类别的 Postfix 生成的邮件会在队列前接受non_smtpd_miltersheader_checksbody_checks 的内容检查。指定以下零个或多个类别,用空格或逗号分隔。

反弹

检查交付状态通知的内容。

通知

检查smtp(8)smtpd(8)进程发出的 postmaster 通知的内容。

注意:对 Postfix 生成的电子邮件启用内容检查通常是不安全的。警告用户。

该功能在 Postfix 2.3 及更高版本中可用。

无效主机名拒绝代码 (默认值:501)

当客户端 HELO 或 EHLO 命令参数被reject_invalid_helo_hostname限制拒绝时,Postfix SMTP 服务器的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

ipc_idle (默认值:取决于版本)

客户端关闭空闲内部通信通道的时间。目的是允许 Postfix 守护进程在闲置后主动终止。例如,Postfix 地址解析和改写客户端就使用了这一功能。

在 Postfix 2.4 中,默认值从 100 秒降至 5 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

ipc_timeout (默认值:3600 秒)

通过内部通信渠道发送或接收信息的时限。目的是打破僵局。如果超过时限,软件就会出现致命错误而终止。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

ipc_ttl (默认值:1000s)

客户端关闭活动内部通信通道的时间。其目的是允许 Postfix 守护进程在达到客户端上限后主动终止。例如,Postfix 地址解析和改写客户端就使用了这一功能。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

known_tcp_ports (默认值:lmtp=24、smtp=25、smtps=submissions=465、submission=587)。

避免在 services(5) 数据库中查找的可选设置。使用该功能是为了解决端口 "465 "服务名称不一致的问题。ABNF 为

known_tcp_ports= empty | name-to-port *("," name-to-port)
名称到端口 = 1*(服务名称"=')端口号

逗号是必填项。空格是可选项,但不能出现在服务名称或端口号中。

该功能在 Postfix 3.6 及更高版本中可用。

行长限制 (默认值:2048)

输入时,长线条会被切成最长为这一长度的片段;输出时,长线条会被重构。

lmdb_map_size (默认值:16777216)

以字节为单位的 OpenLDAP LMDB 数据库初始大小限制。数据库每满一次,其大小限制就增加一倍。

该功能在 Postfix 2.11 及更高版本中可用。

lmtp_address_preference (默认: ipv6)

smtp_address_preference配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.8 及更高版本中可用。

lmtp_address_verify_target (默认值:rcpt)

smtp_address_verify_target配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.0 及更高版本中可用。

lmtp_assume_final (默认值:否)

当远程 LMTP 服务器宣布不支持 DSN 时,假定服务器执行最终传送,并发送 "已传送 "而不是 "已中继 "的传送状态通知。默认设置向后兼容,以避免破坏现有基于 LMTP 的内容过滤器的微小可能性。

lmtp_balance_inet_protocols (默认值:是)

smtp_balance_inet_protocols配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.3 及更高版本中可用。

lmtp_bind_address (默认值:空)

smtp_bind_address配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_bind_address6 (默认值:空)

smtp_bind_address6配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_bind_address_enforce (默认值:空)

smtp_bind_address_enforce配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.7 及更高版本中可用。

lmtp_body_checks (默认值:空)

smtp_body_checks配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_cache_connection (默认值:是)

使 Postfix LMTP 客户端连接保持开放,最长可达 $max_idle。当 LMTP 客户端收到对同一连接的请求时,该连接将被重复使用。

该参数在 Postfix 2.2 及更早版本中可用。在 Postfix 2.3 及更高版本中,请参阅lmtp_connection_cache_on_demandlmtp_connection_cache_destinationslmtp_connection_reuse_time_limit

缓存连接的有效性取决于正在使用的远程 LMTP 服务器的数量,以及为 Postfix LMTP 客户端指定的并发限制。缓存连接在以下任何一种情况下都会关闭:

  • 达到 Postfix LMTP 客户端空闲时间限制。该限制由 Postfixmax_idle配置参数指定。
  • 交付请求指定的目的地与当前缓存的目的地不同。
  • 达到每个进程的发送请求数量限制。该限制由 Postfixmax_use配置参数指定。
  • 当出现另一个传送请求时,与当前会话相关的远程 LMTP 服务器不会响应 RSET 命令。

这些限制大多与 Postfix 连接缓存有关,该缓存由多个 LMTP 客户程序共享。

lmtp_cname_overrides_servername (默认值:是)

smtp_cname_overrides_servername配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_connect_timeout (默认值:0秒)

Postfix LMTP 客户端完成 TCP 连接的时限,或 0(使用操作系统内置时限)。如果在期限内无法建立连接,LMTP 客户端会尝试邮件交换列表中的下一个地址。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

例如

lmtp_connect_timeout = 30s

lmtp_connection_cache_destinations (默认值:空)

smtp_connection_cache_destinations配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_connection_cache_on_demand (默认值:是)

smtp_connection_cache_on_demand配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_connection_cache_time_limit (默认值:2 秒)

smtp_connection_cache_time_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_connection_reuse_count_limit (默认值:0)

smtp_connection_reuse_count_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.11 及更高版本中可用。

lmtp_connection_reuse_time_limit (默认值:300 秒)

smtp_connection_reuse_time_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_data_done_timeout (默认:600 秒)

Postfix LMTP 客户端发送 LMTP". "和接收远程 LMTP 服务器响应的时限。如果在截止时间内未收到任何回复,系统将发出警告,说明邮件可能会被多次发送。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_data_init_timeout (默认:120 秒)

Postfix LMTP 客户端发送 LMTP DATA 命令和接收远程 LMTP 服务器响应的时限。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_data_xfer_timeout (默认:180 秒)

Postfix LMTP 客户端发送 LMTP 消息内容的时间限制。当连接延迟时间超过 $lmtp_data_xfer_timeout,LMTP 客户端将终止传输。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_defer_if_no_mx_address_found (默认:否)

smtp_defer_if_no_mx_address_found配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_delivery_status_filter (默认值:空)

smtp_delivery_status_filter配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.0 及更高版本中可用。

lmtp_destination_concurrency_limit (默认值:$ default_destination_concurrency_limit)。

通过 lmtp 消息传送传输向同一目的地并行传送的最大次数。该限制由队列管理器执行。消息传送传输名称是master.cf文件条目中的第一个字段。

lmtp_destination_recipient_limit (默认值:$ default_destination_recipient_limit)

lmtp 报文传送传输中每条报文的最大收件人数。该限制由队列管理器执行。信息传送传输名称是master.cf文件条目中的第一个字段。

将该参数设置为 1 后,lmtp_destination_concurrency_limit的含义将从每个域的并发量变为每个收件人的并发量。

lmtp_discard_lhlo_keyword_address_maps (默认值:空)

以远程 LMTP 服务器地址为索引的查找表,包含不区分大小写的 LHLO 关键字(pipelining、starttls、auth 等)列表,Postfix LMTP 客户端将忽略来自远程 LMTP 服务器的 LHLO 响应。详情请参阅lmtp_discard_lhlo_keywords。为与smtpd_discard_ehlo_keyword_address_maps 保持一致,该表未按主机名编制索引。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_discard_lhlo_keywords (默认值:空)

不区分大小写的 LHLO 关键字(pipelining、starttls、auth 等)列表,Postfix LMTP 客户端将忽略来自远程 LMTP 服务器的 LHLO 响应。

该功能在 Postfix 2.3 及更高版本中可用。

备注

lmtp_dns_reply_filter (默认值:空)

Postfix LMTP 客户端 DNS 查询结果的可选过滤器。请参阅smtp_dns_reply_filter,了解包括示例在内的详细信息。

该功能在 Postfix 3.0 及更高版本中可用。

lmtp_dns_resolver_options (默认值:空)

smtp_dns_resolver_options配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.8 及更高版本中可用。

lmtp_dns_support_level (默认值:空)

smtp_dns_support_level配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.11 及更高版本中可用。

lmtp_enforce_tls (默认值:否)

smtp_enforce_tls配置参数的 LMTP 专用版本。详见此处。

自 Postfix 3.9 起,该功能已被弃用。请改用lmtp_tls_security_level

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_fallback_relay (默认值:空)

找不到或无法访问的 LMTP 目的地的可选中继主机列表。在main.cf中,元素之间用空格或逗号隔开。

默认情况下,如果找不到目的地,邮件会被退回给发件人;如果目的地无法到达,邮件会被推迟投递。

后备中继必须是 TCP 目的地,指定时不带前缀 "inet:"。指定主机或主机:端口。由于 MX 查询不适用于 LMTP,因此无需使用"[host]"或"[host]:port "形式。如果指定多个 LMTP 目的地,Postfix 将按照指定的顺序进行尝试。

该功能在 Postfix 3.1 及更高版本中可用。

lmtp_generic_maps (默认值:空)

smtp_generic_maps配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_header_checks (默认值:空)

smtp_header_checks配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_host_lookup (默认值:dns)

smtp_host_lookup配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_lhlo_name (默认值:$myhostname)

在 LMTP LHLO 命令中要发送的主机名。

默认值为机器主机名。指定主机名或 [ip.add.re.ss] 或 [ip:v6:add:re::ss]。

这些信息可以在main.cf文件中为所有 LMTP 客户端指定,也可以在master.cf文件中为特定客户端指定:

/etc/postfix/master.cf:
    mylmtp ... lmtp -olmtp_lhlo_name=foo.bar.com

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_lhlo_timeout (默认值:300 秒)

Postfix LMTP 客户端发送 LHLO 命令和接收远程 LMTP 服务器初始响应的时限。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_line_length_limit (默认:998)

smtp_line_length_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_mail_timeout (默认值:300 秒)

Postfix LMTP 客户端发送 MAIL FROM 命令和接收远程 LMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_mime_header_checks (默认值:空)

smtp_mime_header_checks配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_min_data_rate (默认:500)

smtp_min_data_rate配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.7 及更高版本中可用。

lmtp_mx_address_limit (默认值:5)

smtp_mx_address_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_mx_session_limit (默认值:2)

smtp_mx_session_limit配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_nested_header_checks (默认值:空)

smtp_nested_header_checks配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_per_record_deadline (默认值:否)

smtp_per_record_deadline配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.9 及更高版本中可用。

lmtp_per_request_deadline (默认值:否)

smtp_per_request_deadline配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.7 及更高版本中可用。

lmtp_pix_workaround_delay_time (默认:10秒)

smtp_pix_workaround_delay_time配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_pix_workaround_maps (默认值:空)

smtp_pix_workaround_maps配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.4 及更高版本中可用。

lmtp_pix_workaround_threshold_time (默认:500秒)

smtp_pix_workaround_threshold_time配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_pix_workarounds (默认值:空)

smtp_pix_workaround 配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.4 及更高版本中可用。

lmtp_quit_timeout (默认值:300 秒)

Postfix LMTP 客户端发送 QUIT 命令和接收远程 LMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_quote_rfc821_envelope (默认值:是)

smtp_quote_rfc821_envelope配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_randomize_addresses (默认值:是)

smtp_randomize_addresses配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_rcpt_timeout (默认:300 秒)

Postfix LMTP 客户端发送 RCPT TO 命令和接收远程 LMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_reply_filter (默认值:空)

smtp_reply_filter配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.7 及更高版本中可用。

lmtp_rset_超时 (默认值:20 秒)

Postfix LMTP 客户端发送 RSET 命令和接收远程 LMTP 服务器响应的时限。LMTP 客户端发送 RSET 是为了完成收件人地址探测,或验证缓存连接是否仍然有效。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

lmtp_sasl_auth_cache_name (默认值:空)

smtp_sasl_auth_cache_name配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_sasl_auth_cache_time (默认:90d)

smtp_sasl_auth_cache_time配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_sasl_auth_enable (默认值:否)

在 Postfix LMTP 客户端中启用 SASL 身份验证。

lmtp_sasl_auth_soft_bounce (默认值:是)

smtp_sasl_auth_soft_bounce配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_sasl_mechanism_filter (默认值:空)

smtp_sasl_mechanism_filter配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_sasl_password_maps (默认值:空)

可选的 Postfix LMTP 客户端查找表,每台主机或域有一个用户名:密码条目。如果远程主机或域没有用户名:密码条目,Postfix LMTP 客户端将不会尝试验证远程主机。

lmtp_sasl_password_result_delimiter (默认值::)

smtp_sasl_password_result_delimiter配置参数的 LMTP 专用版本。详见此处。

lmtp_sasl_path (默认值:空)

通过lmtp_sasl_type 选择的 SASL 插件实现的特定实现信息。通常,这将指定配置文件或会合点的名称。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_sasl_security_options (默认:noplaintext,noanonymous)

SASL 安全选项;从 Postfix 2.3 开始,可用功能列表取决于使用lmtp_sasl_type 选择的 SASL 客户端实现。

cyrus客户端 SASL 实现定义了以下安全功能:

不解释

禁止使用明文密码的身份验证方法。

禁止使用容易受到非字典主动攻击的身份验证方法。

词典

禁止使用易受被动字典攻击的身份验证方法。

匿名

禁止匿名登录。

例如

lmtp_sasl_security_options = noplaintext

lmtp_sasl_tls_security_options (默认值:$ lmtp_sasl_security_options)

smtp_sasl_tls_security_options配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_sasl_tls_verified_security_options (默认值:$lmtp_sasl_tls_security_options)

smtp_sasl_tls_verified_security_options配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_sasl_type (默认值:cyrus)

Postfix LMTP 客户端用于身份验证的 SASL 插件类型。postconf -A"命令列出了可用的类型。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_send_dummy_mail_auth (默认值:否)

smtp_send_dummy_mail_auth配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.9 及更高版本中可用。

lmtp_send_xforward_command (默认值:否)

当 LMTP LHLO 服务器响应宣布支持 XFORWARD 时,向远程 LMTP 服务器发送 XFORWARD 命令。这允许用于内容过滤信息注入的lmtp(8)发送代理将原始客户端的名称、地址、协议和 HELO 名称转发给内容过滤和下游 LMTP 服务器。在将该值改为是之前,最好确保您的内容过滤器支持该命令。

该功能在 Postfix 2.1 及更高版本中可用。

lmtp_sender_dependent_authentication (默认值:否)

smtp_sender_dependent_authentication配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_skip_5xx_greeting (默认值:是)

smtp_skip_5xx_greeting配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_skip_quit_response (默认值:否)

等待 LMTP QUIT 命令的响应。

lmtp_starttls_timeout (默认值:300 秒)

smtp_starttls_timeout配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tcp_port (默认值:24)

Postfix LMTP 客户端连接的默认 TCP 端口。请指定一个符号名称(参见 services(5))或一个数字端口。

lmtp_tls_CAfile (默认值:空)

smtp_tls_CAfile配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_CApath (默认值:空)

smtp_tls_CApath配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_block_early_mail_reply (默认值:空)

smtp_tls_block_early_mail_reply配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.7 及更高版本中可用。

lmtp_tls_cert_file (默认值:空)

smtp_tls_cert_file配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_chain_files (默认值:空)

smtp_tls_chain_files配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.4 及更高版本中可用。

lmtp_tls_ciphers (默认值:中)

smtp_tls_ciphers配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.6 及更高版本中可用。

lmtp_tls_connection_reuse (默认值:否)

smtp_tls_connection_reuse配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.4 及更高版本中可用。

lmtp_tls_dcert_file (默认值:空)

smtp_tls_dcert_file配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_dkey_file (默认值:$ lmtp_tls_dcert_file)。

smtp_tls_dkey_file配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_eccert_file (默认值:空)

smtp_tls_eccert_file配置参数的 LMTP 专用版本。详见此处。

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

lmtp_tls_eckey_file (默认值:空)

smtp_tls_eckey_file配置参数的 LMTP 专用版本。详见此处。

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

lmtp_tls_enable_rpk (默认值:是)

smtp_tls_enable_rpk配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.9 及更高版本中可用。

lmtp_tls_enforce_peername (默认值:是)

smtp_tls_enforce_peername配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_exclude_ciphers (默认值:空)

smtp_tls_exclude_ciphers配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_fingerprint_cert_match (默认值:空)

smtp_tls_fingerprint_cert_match配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_tls_fingerprint_digest (默认值:参见 "postconf - d "输出)。

smtp_tls_fingerprint_digest配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.5 及更高版本中可用。

lmtp_tls_force_insecure_host_tlsa_lookup (默认值:否)

smtp_tls_force_insecure_host_tlsa_lookup配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.11 及更高版本中可用。

lmtp_tls_key_file (默认值:$ lmtp_tls_cert_file)。

smtp_tls_key_file配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_logle级别 (默认值:0)

smtp_tls_loglelevel配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_mandatory_ciphers (默认值:中)

smtp_tls_mandatory_ciphers配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_mandatory_exclude_ciphers (默认值:空)

smtp_tls_mandatory_exclude_ciphers配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_mandatory_protocols (默认值:参见 "postconf -d "输出)。

smtp_tls_mandatory_protocols配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_note_starttls_offer (默认值:否)

smtp_tls_note_starttls_offer配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_per_site (默认值:空)

smtp_tls_per_site配置参数的 LMTP 专用版本。详见此处。

从 Postfix 3.9 起,该功能已被弃用。请改用lmtp_tls_policy_maps

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_policy_maps (默认值:空)

smtp_tls_policy_maps配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_protocols (默认值:参见 "postconf -d "输出)。

smtp_tls_protocols配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.6 及更高版本中可用。

lmtp_tls_scert_verifydepth (默认值:9)

smtp_tls_scert_verifydepth配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_secure_cert_match (默认值:nexthop)

smtp_tls_secure_cert_match配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_security_level (默认值:空)

smtp_tls_security_level配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_servername (默认值:空)

smtp_tls_servername配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.4 及更高版本中可用。

lmtp_tls_session_cache_database (默认值:空)

smtp_tls_session_cache_database配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_session_cache_timeout (默认:3600s)

smtp_tls_session_cache_timeout配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_trust_anchor_file (默认为空)。

smtp_tls_trust_anchor_file配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.11 及更高版本中可用。

lmtp_tls_verify_cert_match (默认值:主机名)

smtp_tls_verify_cert_match配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_tls_wrappermode (默认值:否)

smtp_tls_wrappermode配置参数的 LMTP 专用版本。详见此处。

该功能在 Postfix 3.0 及更高版本中可用。

lmtp_use_tls (默认值:否)

smtp_use_tls配置参数的 LMTP 专用版本。详见此处。

自 Postfix 3.9 起,该功能已被弃用。请改用lmtp_tls_security_level

该功能在 Postfix 2.3 及更高版本中可用。

lmtp_xforward_timeout (默认:300 秒)

Postfix LMTP 客户端发送 XFORWARD 命令和接收远程 LMTP 服务器响应的时限。

如果出现问题,客户端不会尝试邮件交换列表中的下一个地址。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

local_command_shell (默认值:空)

用于local(8)发送非 Postfix 命令的可选 shell 程序。默认情况下,非 Postfix 命令直接执行;只有当命令包含 shell 元字符或 shell 内置命令时,才会交给默认 shell(通常是 /bin/sh)执行。

大多数人都会使用 "sendmail 的限制 shell"(smrsh)来限制哪些程序可以从 .forward 等文件中运行(smrsh 是 Sendmail 发行版的一部分)。

注意:当指定 shell 程序时,即使命令中不包含 shell 内置命令或元字符,也会调用该程序。

例如

local_command_shell = /some/where/smrsh -c
local_command_shell = /bin/bash -c

local_delivery_status_filter (默认值:$ default_delivery_status_filter)

local(8)发送代理的可选过滤器,用于更改成功或失败发送的状态代码或说明文字。详情请参阅default_delivery_status_filter

该功能在 Postfix 3.0 及更高版本中可用。

local_destination_concurrency_limit (默认值:2)

通过本地邮件发送传输向同一收件人并行发送邮件的最大次数(当"local_destination_recipient_limit= 1 "时),或向同一本地域并行发送邮件的最大次数(当"local_destination_recipient_limit> 1 "时)。该限制由队列管理器执行。消息传送传输名称是master.cf文件条目中的第一个字段。

建议将运行次数限制在 2 次以内,以防有人在 .forward 文件或别名(如邮件列表管理器)中使用昂贵的 shell 命令。你不会希望同时运行很多这样的命令。

本地目的地收件人限制 (默认:1)

通过本地邮件传送传输发送的每封邮件的最大收件人数量。该限制由队列管理器执行。邮件发送传输名称是master.cf文件条目中的第一个字段。

将该参数设置为 > 1 后,local_destination_concurrency_limit的含义将从每个收件人的并发量变为每个域的并发量。

local_header_rewrite_clients (默认值: permit_inet_interfaces)

重写或添加来自这些客户端的邮件的信息标题,用$myorigin或$mydomain 中的域名更新不完整的地址,并添加缺失的标题。

有关如何将域名附加到不完整地址的详情,请参阅append_at_myoriginappend_dot_mydomain参数。

请参阅remote_header_rewrite_domain,在来自其他客户端的邮件中重写或添加邮件头。

指定以下零个或多个列表:

permit_inet_interfaces

当客户端 IP 地址与$inet_interfaces 匹配时,追加$myorigin或$mydomain中的域名。默认情况下已启用。

许可网络

当客户端 IP 地址与$mynetworks 中列出的任何网络或网络地址匹配时,追加$myorigin或$mydomain中的域名。当来自远程客户端的邮件被邻近系统转发时,该设置不会阻止远程邮件头地址重写。

permit_sasl_authenticated

当客户端通过RFC 4954(AUTH) 协议成功验证时,在$myorigin或$mydomain中添加域名。

permit_tls_clientcerts

当远程 SMTP 客户端 TLS 证书指纹或公钥指纹(Postfix 2.9 及更高版本)列在$relay_clientcerts 中时,在$myorigin或$mydomain中追加域名。指纹摘要算法可通过smtpd_tls_fingerprint_digest参数进行配置(在 Postfix 2.5 版之前硬编码为 md5)。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5。现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要不存在针对旧算法的已知 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

permit_tls_all_clientcerts

当远程 SMTP 客户端 TLS 证书验证成功时,在$myorigin或$mydomain中附加域名,无论该域名是否列在服务器上,也无论认证机构如何。

check_address_map 类型:表

类型:表格

当客户端 IP 地址与指定的查找表匹配时,追加$myorigin或$mydomain中的域名。查找结果将被忽略,也不会进行子网查找。这适用于 pop-before-smtp 查询表等。

例如

Postfix < 2.2 向后兼容设置:始终重写邮件头,并始终在不完整的邮件头地址中附加我自己的域名。

local_header_rewrite_clients = static:all

纯粹(默认)设置:只在 Postfix sendmail 和本机 SMTP 邮件中重写邮件头。

local_header_rewrite_clients = permit_inet_interfaces

中间设置:仅对来自 Postfix sendmail、本地客户端或授权 SMTP 客户端的邮件重写头地址并附加$myorigin或$mydomain信息。

注意:当邻近系统转发来自远程客户端的邮件时,该设置不会阻止远程邮件头地址重写。

local_header_rewrite_clients = permit_mynetworks,
    permit_sasl_authenticated permit_tls_clientcerts
    check_address_map hash:/etc/postfix/pop-before-smtp

local_login_sender_maps (默认值: static:*)。

按 UNIX 登录名搜索的查找表列表,返回允许的信封发件人模式列表,以空格或逗号分隔。这些发件人模式由 Postfixpostdrop(1)命令执行。默认情况下是向后兼容的:每个用户都可以指定任何发件人信封地址。

当没有可用的 UNIX 登录名时,postdrop(1)命令将在数字 UID 前加上"uid:",并使用该数字 UID 代替。

此功能忽略用户指定的信封发件人地址中的地址扩展名。

注意:要确保 From: 头地址与信封发件人(MAIL FROM)地址一致,请使用non_smtpd_milters参数指定一个外部过滤器(如 Milter)。例如https://github.com/magcks/milterfrom.

下列发件人模式比较特殊,不能作为较长模式的一部分使用。

*

这种模式允许使用任何信封寄件人地址。

<> 

该模式允许使用空信封发件人地址。请参阅empty_address_local_login_sender_maps_lookup_key配置参数。

@

"@"和域部分匹配时,该模式允许使用信封发件人地址。

例如

/etc/postfix/main.cf:
    # 允许 root 和 postfix 完全控制,其他人只能
    # 以自己的身份发送邮件。当 UID 在 UNIX 密码文件中没有条目时,使用 "uid:",后跟数字
    # UID。
    local_login_sender_maps =
        inline:{ { root = * }, { postfix = * }},
        pcre:/etc/postfix/login_senders
                
/etc/postfix/login_senders:
    # 允许裸用户名和 user@domain 两种形式。
    /(.+)/ $1 [email protected]

该功能在 Postfix 3.6 及更高版本中可用。

local_recipient_maps (默认值: proxy: unix:passwd.byname$alias_maps)

包含所有有效本地收件人名称或地址的查找表。如果收件人地址的域名与 $mydestination、$inet_interfaces 或$proxy_interfaces 匹配,则该地址为本地地址。

如果local_recipient_maps参数值为非空(默认值),则 Postfix SMTP 服务器会按照"本地收件人表查询格式"中的规定查询local_recipient_maps,并拒收未知本地收件人的邮件。Postfix 的其他接口(如 Postfixsendmail(1)命令)仍可接受 "未知 "收件人。

默认的local_recipient_maps设置假定local_transport指定了与 UNIX 兼容的local(8)发送代理,它可以查询 UNIX 密码数据库(通常为 /etc.passwd)和本地别名数据库(通常为 /etc/aliases)。代理:代理允许 Postfix SMTP 服务器从 chroot jail 之外访问 UNIX 密码数据库。

有关其他本地邮件发送配置,请参阅"何时需要更改 main.cf 中的 local_recipient_maps 设置"。

从技术上讲,用$local_recipient_maps列出的表被用作列表:Postfix SMTP 服务器只需知道是否找到了查找字符串,而不会使用表格查找的结果。

指定零个或多个 "type:name "查找表,以空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

要在 Postfix SMTP 服务器中关闭本地收件人检查,请指定"local_recipient_maps="(即为空)。

例如

本地收件人地图 =

local_transport (默认值: local:$myhostname)

默认的邮件发送传输和下一跳目的地,用于最终发送到用mydestination 列出的域,以及匹配$inet_interfaces$proxy_interfaces 的 [ipaddress]。该信息可通过transport(5)表进行更改。

默认情况下,本地邮件会投递到名为 "local "的传输系统,这只是在master.cf文件中定义的服务名称。

指定一个形式为transport: nexthop的字符串,其中transportmaster.cf 中定义的邮件传输名称。

注意:如果覆盖了默认的本地投递代理,则需要查看LOCAL_RECIPIENT_README文档,否则 SMTP 服务器可能会拒绝本地收件人的邮件。

luser_relay (默认值:空)

用于未知local(8)收件人的可选接收站。默认情况下,对于域名匹配 $mydestination、$inet_interfaces 或$proxy_interfaces的未知收件人,邮件将以无法投递为由退回。

luser_relay值不受 Postfix 配置参数 $name 扩展的限制。取而代之的是以下 $name 扩展:

$domain

收件人域名。

扩展名

收件人地址扩展名。

主页

收件人的主目录。

本地

整个收件人地址的本地部分。

收件人

完整的收件人地址。

收件人分隔符

收件人地址中的地址扩展分隔符(Postfix 2.11 及更高版本),或系统范围内的收件人地址扩展分隔符(Postfix 2.10 及更早版本)。

$shell

收件人的登录外壳。

用户

收件人用户名。

${name?value}

${name?{value}}(后缀 ≥ 3.0)

$name非空时,扩展为值

${name:value}

${name:{value}}(Postfix ≥ 3.0)

$name为空时,扩展为值

${name?{value1}:{value2}}(后缀 ≥ 3.0)

$name非空时,扩展为value1,否则为value2

您也可以指定 ${name} 或 $(name)来代替 $name。

注意:luser_relay仅适用于 Postfixlocal(8)发送代理。

注意:如果对不在 UNIX 密码文件中的账户使用此功能,则必须在main.cf文件中指定"local_recipient_maps="(即为空),否则 Postfix SMTP 服务器将以 "本地收件人表中用户未知 "为由拒绝非 UNIX 账户的邮件。

例如

luser_relay = [email protected]
luser_relay = [email protected]
luser_relay = admin+$local

邮件名称 (默认:Postfix)

在 Received: 标头、SMTP 问候语横幅和退回邮件中显示的邮件系统名称。

mail_owner (默认值:postfix)

拥有 Postfix 队列和大多数 Postfix 守护进程的 UNIX 系统账户。指定一个非特权用户账户的名称,该账户不与其他账户共享用户或组 ID,也不拥有系统中的其他文件或进程。尤其不要指定 nobody 或 daemon。请使用专用的用户 ID 和组 ID。

当该参数值发生变化时,您需要重新运行"postfix set-permissions"(对于 Postfix 2.0 及更早版本:"/etc/postfix/post-install set-permissions)。

mail_release_date (默认值:参见 "postconf - d "输出)。

Postfix 发布日期,格式为 "YYYYMMDD"。

mail_spool_directory (默认值:参见 "postconf -d "输出)。

保存local(8)UNIX 风格邮箱的目录。默认设置取决于系统类型。指定一个以 / 结尾的名称,用于 maildir 式发送。

注意:maildir 发送是根据收件人的权限进行的。如果使用mail_spool_directory设置进行 maildir 式发送,则必须事先创建顶级 maildir 目录。Postfix 不会创建该目录。

例如

mail_spool_directory = /var/mail
mail_spool_directory = /var/spool/mail

mail_version (默认值:参见 "postconf -d "输出)。

邮件系统的版本。稳定版本以major.minor.patchlevel 命名。试验版本还包括发布日期。版本字符串可用于 SMTP 问候语横幅等。

邮箱命令 (默认值:空)

可选的外部命令,用于local(8)发送代理的邮箱发送。该命令以收件人的用户 ID 和主要组 ID 权限运行。例外:为 root 发送的命令以$default_privs权限执行。这不是问题,因为:1)给 root 的邮件应始终别名给真实用户;2)不要以 root 登录,而应使用 "su"。

以下环境变量将导出到命令中:

客户地址

远程客户端网络地址。适用于 Postfix 2.2 及更高版本。

CLIENT_HELO

远程客户端 EHLO 命令参数。适用于 Postfix 2.2 及更高版本。

客户主机名

远程客户端主机名。适用于 Postfix 2.2 及更高版本。

客户协议

远程客户端协议。适用于 Postfix 2.2 及更高版本。

领域

收件人地址的域名部分。

ENVID

可选的RFC 3461信封 ID。适用于 Postfix 3.9 及更高版本

扩展

可选的地址扩展名。

主页

收件人的主目录。

本地

收件人地址本地部分。

登录名

收件人的用户名。

原收件人

地址重写或别名之前的整个收件人地址。

收件人

完整的收件人地址。

SASL_METHOD

远程客户端 AUTH 命令中指定的 SASL 验证方法。适用于 Postfix 2.2 及更高版本。

SASL_SENDER

远程客户端 MAIL FROM 命令中指定的 SASL 发件人地址。适用于 Postfix 2.2 及更高版本。

SASL_USER

远程客户端 AUTH 命令中指定的 SASL 用户名。适用于 Postfix 2.2 及更高版本。

发件人

完整的发件人地址。

壳体

收件人的登录外壳。

用户

收件人用户名。

与其他 Postfix 配置参数不同,mailbox_command参数不使用 $name 替换。这样可以更方便地指定 shell 语法(见下面的示例)。

如果可以,请避免使用 shell 元字符,因为它们会迫使 Postfix 运行一个昂贵的 shell 进程。如果您通过 "procmail "发送邮件,那么运行 shell 不会对总成本造成明显影响。

注意:如果使用mailbox_command功能在全系统范围内发送邮件,则必须设置一个别名,将 root 的邮件转发给真实用户。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

例如

mailbox_command = /some/where/procmail
mailbox_command = /some/where/procmail -a "$EXTENSION"
mailbox_command = /some/where/maildrop -d "$USER"
        -f "$SENDER" "$EXTENSION"

mailbox_command_maps (默认值:空)

可选的查找表,包含用于本地(8)邮箱投递的每个收件人的外部命令。行为与mailbox_command 相同。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

mailbox_delivery_lock (默认值:参见 "postconf - d "输出)。

如何在尝试发送之前锁定 UNIX 风格的local(8)邮箱。有关可用文件锁定方法的列表,请使用"postconf -l"命令。

在使用maildir方式交付时,此设置将被忽略,因为这种交付方式没有显式锁,是安全的。

注意:dotlock方法要求收件人 UID 或 GID 具有邮箱文件父目录的写访问权限。

注意:该参数的默认设置取决于系统。

邮箱大小限制 (默认:51200000)

任何本地(8)单个邮箱或 maildir 文件的最大大小,或 0(无限制)。事实上,这也限制了本地发送时写入的任何文件的大小,包括由local(8)发送代理执行的外部命令写入的文件。该值不能超过 LONG_MAX(通常是 32 位或 64 位有符号整数)。

该限制不得小于报文大小限制。

邮箱传输 (默认:空)

可选的信息传递方式,local(8)发送代理应使用该方式向所有本地收件人发送邮箱,无论这些收件人是否在 UNIX passwd 数据库中找到。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

mailbox_transport_maps (默认值:空)

可选的查找表,包含用于本地(8)邮箱递送的每个收件人信息递送传输,无论收件人是否在 UNIX 密码数据库中找到。

local(8)发送功能的优先级从高到低依次是:别名、.forward 文件、mailbox_transport_mapsmailbox _ transportmailbox_command_mapsmailbox_commandhome_ mailboxmail_spool_directoryfallback _transport_mapsfallback_transportluser_relay

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

出于安全考虑,该功能不允许在正则表达式映射中使用 $number 替换。

该功能在 Postfix 2.3 及更高版本中可用。

maillog_file (默认:空)

Postfixpostlogd(8)服务写入的可选日志文件的名称。如果为空,则选择记录到 syslogd(8)。指定"/dev/stdout "可选择记录到标准输出。标准输出日志要求使用 "postfix start-fg "启动 Postfix。

注 1:maillog_file参数值必须包含用maillog_file_prefixes参数指定的前缀。

注 2:某些 Postfix 非守护进程程序在处理完配置参数和命令行选项之前,可能仍会向 syslogd(8) 记录信息。

该功能在 Postfix 3.4 及更高版本中可用。

maillog_file_compressor 压缩器 (默认:gzip)

使用 "postfix logrotate "旋转$maillog_file后运行的程序。该命令以旋转后的日志文件名为第一个参数运行。

该功能在 Postfix 3.4 及更高版本中可用。

maillog_file_permissions (默认值:0600)

首次创建文件$maillog_file时,或轮换现有文件后创建文件时,将设置的文件访问权限。请指定其中之一:0600(只有超级用户读/写权限)、0640(增加 "组 "读权限)或0644(还增加 "其他 "读权限)。前导 "0 "为可选项。

该功能在 Postfix 3.9 及更高版本中可用。

maillog_file_prefixes (默认:/var、/dev/stdout)

maillog_file值允许使用的前缀列表。这是一项安全功能,可避免因配置错误而造成的损失。指定一个或多个前缀字符串,用逗号或空白分隔。

该功能在 Postfix 3.4 及更高版本中可用。

maillog_file_rotate_suffix (默认值:%Y%m%d-%H%M%S)

使用 "postfix logrotate "旋转文件时追加到$maillog_file的后缀格式。语法参见 strftime(3)。默认后缀为 YYYYMMDD-HHMMSS,这样可以频繁轮转日志。

该功能在 Postfix 3.4 及更高版本中可用。

mailq_path (默认值:参见 "postconf -d "输出)。

Sendmail 兼容功能,用于指定 Postfixmailq(1)命令的安装位置。该命令可用于列出 Postfix 邮件队列。

manpage_directory (默认值:参见 "postconf -d" 输出)。

安装 Postfix 手册页面的位置。

maps_rbl_domains (默认值:空)

功能已过时:请使用reject_rbl_client功能。

maps_rbl_reject_code (默认值:554)

当远程 SMTP 客户端请求被reject_rbl_clientreject_rhsbl _clientreject_rhsbl_reverse_clientreject_rhsbl_senderreject_rhsbl_recipient限制阻止时,Postfix SMTP 服务器响应代码的数值。

除非您完全了解RFC 5321,否则请勿更改。

masquerade_classes (默认:envelope_sender、header_sender、header_recipient)。

哪些地址会被地址伪装。

默认情况下,地址伪装仅限于信封发件人地址以及标题发件人和标题收件人地址。这样就可以在邮件网关上使用地址伪装,同时还能将邮件转发给单个机器上的用户。

指定以下零个或多个选项:封套发送方、封套接收方、封头发送方、封头接收方

masquerade_domains (默认值:空)

可选的域名列表,其子域名结构将在电子邮件地址中去除。

列表从左到右处理,处理在第一个匹配处停止。因此

masquerade_domains = foo.example.com example.com

剥离 "[email protected] "到 "[email protected]",但剥离 "[email protected] "到 "[email protected]"。

域名前缀为 ! 表示不对该域名或其子域名进行伪装。因此

masquerade_domains = !foo.example.com example.com

不会更改 "[email protected] "或 "[email protected]",但会将 "[email protected] "删除为 "[email protected]"。

注意:在 Postfix 2.2 版中,只有在启用报文头地址重写时才会出现报文头地址伪装:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

例如

masquerade_domains = $mydomain

masquerade_exceptions (默认值:空)

即使地址与$masquerade_domains 匹配,也不进行地址伪装的用户名的可选列表。

默认情况下,地址伪装没有例外。

指定用户名列表、"/file/name "或"type:table"模式,以逗号和/或空白分隔。该列表从左到右匹配,搜索在第一个匹配时停止。文件/名称 "模式会被其内容替换;"type:table"查找表会在名称与查找键匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可从列表中排除某个名称。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

例如

masquerade_exceptions= root, mailer-daemon
masquerade_exceptions= root

主服务禁用 (默认值:空)

按服务类型或服务名称和类型有选择地禁用master(8)监听端口。指定服务类型列表("inet"、"unix"、"fifo "或 "pass")或 "name/type "元组,其中 "name "是master.cf条目的第一个字段,"type "是服务类型。与其他 Postfix 匹配列表一样,搜索在第一个匹配处停止。指定"!pattern "可将服务排除在列表之外。默认情况下,所有master(8)监听端口都已启用。

注意:此功能不支持"/file/name "或"type:table"模式,也不支持 "*"或 "all "等通配符。这是有意为之。

例如

# With Postfix 2.6..2.10 use '.' instead of '/'.
# Turn on all master(8) listener ports (the default).
master_service_disable =
# 仅关闭 SMTP master(8) 监听端口。
master_service_disable = smtp/inet
# 关闭所有 TCP/IP 监听端口。
master_service_disable = inet
# 关闭除 "foo" 以外的所有 TCP/IP 监听端口。
master_service_disable = !foo/inet, inet

该功能在 Postfix 2.6 及更高版本中可用。

max_idle (默认值:100秒)

空闲的 Postfix 守护进程在主动终止前等待传入连接的最长时间。Postfix 队列管理器和其他长期存在的 Postfix 守护进程将忽略此参数。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

max_use (默认值:100)

Postfix 守护进程在主动终止前所服务的最大传入连接数。Postfix 队列管理器和其他长期存在的 Postfix 守护进程将忽略此参数。

maximal_backoff_time (默认:4000s)

尝试发送延迟报文的最长间隔时间。

此参数应设置为大于或等于 $minimal_backoff_time。另请参阅 $queue_run_delay。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

maximal_queue_lifetime (默认:5d)

当发送失败并出现临时错误,且队列中的时间已达到maximal_queue_lifetime限值时,则将该信息视为无法发送。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

如果邮件投递只尝试一次,则指定为 0。

message_drop_headers (默认:密送、内容长度、重发密送、返回路径)

在应用header_checks(5)、调用 Milter 应用程序之前,cleanup(8)守护进程将删除的报文头的名称。默认设置与 Postfix < 3.0 兼容。

指定标题名称列表,以逗号或空格分隔。名称匹配不区分大小写。支持的标题名称列表仅受可用内存限制。

该功能在 Postfix 3.0 及更高版本中可用。

message_reject_characters (默认值:空)

Postfix 在邮件内容中拒绝使用的字符集。可识别通常的 C 类转义序列:\a\b \f \n \r \t \v\ddd(最多三个八进制数字)和\

注 1:此功能不能识别需要 MIME 解码的文本。它与header_checksbody_checks 一样,检查原始邮件内容。

注 2:使用"receive_override_options=no_header_body_checks"时,此功能将被禁用。

例如

message_reject_characters = \0

该功能在 Postfix 2.3 及更高版本中可用。

消息大小限制 (默认:10240000)

信息(包括信封信息)的最大字节数。该值不能超过 LONG_MAX(通常为 32 位或 64 位有符号整数)。

注意:更改时要小心。当跳转邮件的大小超过本地或远程 MTA 的邮件大小限制时,过小的值将导致未送达通知丢失。

message_strip_characters (默认值:空)

Postfix 将从邮件内容中删除的字符集。可识别通常的 C 型转义序列:\a\b \f \n \r \t \v\ddd(最多三个八进制数字)和\

注 1:此功能不能识别需要 MIME 解码的文本。它与header_checksbody_checks 一样,检查原始邮件内容。

注 2:使用"receive_override_options=no_header_body_checks"时,此功能将被禁用。

例如

message_strip_characters = \0

该功能在 Postfix 2.3 及更高版本中可用。

元目录 (默认:参见 "postconf -d "输出)。

多个 Postfix 实例共享的不可执行文件的位置,如 postfix-files、dynamicmaps.cf 以及多实例模板文件main.cf.proto 和master.cf.proto。该目录应只包含与 Postfix 相关的文件。通常,meta_directory参数的默认值与config_directory参数(/etc/postfix 或 /usr/local/etc/postfix)相同。

为了向后兼容 Postfix 2.6...2.11 版本,请在安装或升级 Postfix 前在main.cf中指定"meta_directory =$daemon_directory",或在 "make makefiles"、"make install "或 "make upgrade "命令行中指定 "meta_directory = /path/name"。

该功能在 Postfix 3.0 及更高版本中可用。

milter_command_timeout (默认值:30 秒)

向 Milter(邮件过滤)应用程序发送 SMTP 命令和接收响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.3 及更高版本中可用。

milter_connect_macros (默认值:参见 "postconf -d" 输出)。

在 SMTP 连接完成后发送给 Milter(邮件过滤)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_connect_timeout (默认值:30 秒)

连接 Milter(邮件过滤)应用程序和协商协议选项的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.3 及更高版本中可用。

milter_content_timeout (默认值:300 秒)

向 Milter(邮件过滤)应用程序发送邮件内容和接收回复的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.3 及更高版本中可用。

milter_data_macros (默认值:参见 "postconf -d "输出)。

在 SMTP DATA 命令之后发送到版本 4 或更高的 Milter(邮件过滤)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_default_action (默认:tempfail)

当 Milter(邮件过滤器)响应不可用(例如 Postfix 配置错误或 Milter 故障)时的默认操作。指定以下操作之一:

接受

就像没有邮件过滤器一样进行操作。

否决

以永久状态代码拒绝此会话中的所有其他命令。

临时故障

以临时状态代码拒绝此会话中的所有其他命令。

隔离

与 "接受 "类似,但将邮件冻结在"保留 "队列中。适用于 Postfix 2.6 及更高版本。

该功能在 Postfix 2.3 及更高版本中可用。

milter_end_of_data_macros (默认值:参见 "postconf - d "输出)。

在邮件数据结束后发送给 Milter(邮件过滤器)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_end_of_header_macros (默认值:参见 "postconf -d "输出)。

在邮件头结束后发送给 Milter(邮件过滤器)应用程序的宏。有关可用宏名及其含义的列表,请参见MILTER_README。

该功能在 Postfix 2.5 及更高版本中可用。

milter_header_checks (默认:空)

用于检查 Milter 应用程序生成的报文头内容的可选查找表。请参阅header_checks(5)手册中的可用操作。目前,PREPEND 尚未实现。

下面的示例将所有标记为 SPAM 的邮件发送到垃圾邮件处理机。请注意,默认情况下匹配是不区分大小写的。

/etc/postfix/main.cf:
    milter_header_checks = pcre:/etc/postfix/milter_header_checks
                
/etc/postfix/milter_header_checks:
    /^X-SPAM-FLAG:\s+YES/ FILTER mysmtp:sanitizer.example.com:25

milter_header_checks机制也可用于 allowlisting。例如,它可用于跳过对来自已知友好域名的 DKIM 签名邮件的重型内容检查。

Postfix 2.7 和 Postfix 2.6 的可选补丁中都有此功能。

milter_helo_macros (默认值:参见 "postconf -d "输出)。

在 SMTP HELO 或 EHLO 命令之后发送到 Milter(邮件过滤)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_macro_daemon_name (默认值:$myhostname)

用于 Milter(邮件过滤)应用程序的 {daemon_name} 宏值。有关可用宏名及其含义,请参见MILTER_README。

该功能在 Postfix 2.3 及更高版本中可用。

milter_macro_defaults (默认值:空)

可选的name=value对列表,用于指定 Postfix 发送给 Milter 应用程序的任意宏的默认值。这些默认值将在信息交付上下文中没有相应信息时使用。

指定用逗号或空白分隔的name=value{name=value}成对。当值包含逗号或空白时,用"{}"括起来(此表单忽略"{"后面、"="周围和"}"前面的空白)。

该功能在 Postfix 3.1 及更高版本中可用。

milter_macro_v (默认值:$mail_name$mail_version)

用于 Milter(邮件过滤器)应用程序的 {v} 宏值。有关可用宏名及其含义,请参见MILTER_README。

该功能在 Postfix 2.3 及更高版本中可用。

milter_mail_macros (默认值:参见 "postconf -d "输出)。

在 SMTP MAIL FROM 命令之后发送到 Milter(邮件过滤器)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_protocol (默认值:6)

用于与 Milter 应用程序通信的邮件过滤协议版本和可选协议扩展;在 Postfix 2.6 之前,默认协议为 2。 Postfix 在初始协议握手时会发送此版本号。该版本号应与邮件过滤程序(或其 Milter 库)预期的版本号一致。

协议版本:

2

使用 Sendmail 8 邮件过滤协议版本 2(Sendmail 版本 8.11 ... 8.13 和 Postfix 版本 2.3 ... 2.5 的默认设置)。

3

使用 Sendmail 8 邮件过滤协议版本 3。

4

使用 Sendmail 8 邮件过滤协议第 4 版。

6

使用 Sendmail 8 邮件过滤协议版本 6(Sendmail 版本 8.14 和 Postfix 版本 2.6 的默认设置)。

协议扩展:

无回复标题

当 Milter 应用程序不回复每个邮件头时,请指定此项。

该功能在 Postfix 2.3 及更高版本中可用。

milter_rcpt_macros (默认值:参见 "postconf -d "输出)。

在 SMTP RCPT TO 命令之后发送到 Milter(邮件过滤)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

milter_unknown_command_macros (默认值:参见 "postconf -d "输出)。

在收到未知 SMTP 命令后发送到版本 3 或更高版本 Milter(邮件过滤器)应用程序的宏。请参阅MILTER_README,了解可用的宏名称及其含义。

该功能在 Postfix 2.3 及更高版本中可用。

mime_boundary_length_limit (默认值:2048)

MIME 多部分边界字符串的最大长度。MIME 处理器无法区分第一个$mime_boundary_length_limit字符不相同的边界字符串。

该功能在 Postfix 2.0 及更高版本中可用。

mime_header_checks (默认值:$header_checks)

用于检查 MIME 相关报文头内容的可选查找表,详见header_checks(5)手册页面。

该功能在 Postfix 2.0 及更高版本中可用。

mime_nesting_limit (默认值:100)

MIME 处理器将处理的最大递归级别。Postfix 拒绝嵌套深度超过指定限制的邮件。

该功能在 Postfix 2.0 及更高版本中可用。

最小回退时间 (默认:300 秒)

尝试传送延迟邮件的最小间隔时间;在 Postfix 2.4 之前,默认值为 1000 秒。

该参数还限制了无法到达的目的地在内存中的短期目的地状态缓存中的保留时间。

该参数应大于或等于 $queue_run_delay。另请参阅 $maximal_backoff_time。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

multi_instance_directories (默认值:空)

非默认 Postfix 配置目录的可选列表;这些目录属于附加 Postfix 实例,与默认 Postfix 实例共享 Postfix 可执行文件和文档,并与默认 Postfix 实例一起启动、停止等。指定以逗号或空格分隔的路径名列表。

$multi_instance_directories为空时,postfix(1)命令将以单实例模式运行,并只在一个 Postfix 实例上运行。否则,postfix(1)命令将以多实例模式运行,并调用用multi_instance_wrapper参数指定的多实例管理器。多实例管理器依次为默认实例和$multi_instance_directories 中的所有 Postfix 实例执行postfix(1)命令。

目前,除默认的main.cf文件外,该参数设置均被忽略。

该功能在 Postfix 2.6 及更高版本中可用。

multi_instance_enable (默认值:否)

允许多实例管理器启动、停止 Postfix 实例。默认情况下,新实例会在安全状态下创建,以防止意外启动。该参数保留给多实例管理器使用。

该功能在 Postfix 2.6 及更高版本中可用。

multi_instance_group (默认值:空)

该 Postfix 实例的可选实例组名称。实例组用于标识密切相关的 Postfix 实例,多实例管理器可将其作为一个单元来启动、停止等。该参数保留给多实例管理器使用。

该功能在 Postfix 2.6 及更高版本中可用。

multi_instance_name (默认值:空)

Postfix 实例的可选实例名称。该名称也是syslog_name参数的默认值。

该功能在 Postfix 2.6 及更高版本中可用。

multi_instance_wrapper (默认值:空)

postfix(1)命令在multi_instance_directories参数值为非空时调用的多实例管理器命令的路径名。路径名后可以是用空白分隔的初始命令参数;此处不支持引号等 shell 元字符。

postfix(1)命令使用管理器命令行中的postfix(1)非选项命令参数调用管理器命令,并将所有安装配置参数导出到管理器命令进程环境中。管理器命令反过来以 "postfix -cconfig_directory command"的方式为单个 Postfix 实例调用 postfix(1) 命令

该功能在 Postfix 2.6 及更高版本中可用。

multi_recipient_bounce_reject_code (默认值:550)

当远程 SMTP 客户端请求被reject_multi_recipient_bounce限制阻止时,Postfix SMTP 服务器响应代码的数值。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.1 及更高版本中可用。

我的目标地址 (默认值:$myhostname、localhost.$mydomain、localhost)

通过$local_transport发送邮件的域名列表。默认情况下,这是 Postfixlocal(8)发送代理,它会在 /etc/passwd 和 /etc/aliases 中查找所有收件人。SMTP 服务器通过$local_recipient_maps验证收件人地址,并拒绝不存在的收件人。另请参阅ADDRESS_CLASS_README文件中的本地域类

默认的mydestination值只指定本地机器的名称。在邮件域网关上,还应包括$mydomain。

对于发往邮件系统 user@[the.net.work.address](使用inet_interfacesproxy_interfaces参数指定的 IP 地址)的邮件,也会选择$local_transport发送方法。

警告

指定主机名或域名、"/file/name "或"type:table"模式的列表,以逗号和/或空白分隔。文件/名称 "模式会被其内容替换;"type:table"查找表会在名称与查找键匹配时进行匹配(忽略查找结果)。下一行以空格开头,继续长行。

例如

mydestination = $myhostname, localhost.$mydomain $mydomain
mydestination = $myhostname, localhost.$mydomain www.$mydomain, ftp.$mydomain

mydomain (默认值:请参阅 "postconf -d "输出)。

该邮件系统的互联网域名。默认情况下使用减去第一个部分的 $myhostname,或 "localdomain"(Postfix 2.3 及更高版本)。$mydomain被用作许多其他配置参数的默认值。

例如

mydomain = domain.tld

myhostname (默认值:请参阅 "postconf -d "输出结果)

邮件系统的互联网主机名。默认情况下使用 gethostname() 得出的全称域名(FQDN),或使用 gethostname() 得出的非 FQDN 结果并附加".$mydomain"。$myhostname被用作许多其他配置参数的默认值。

例如

myhostname = host.example.com

mynnetworks (默认值:参见 "postconf -d "输出)。

权限大于 "陌生人 "的 "受信任 "远程 SMTP 客户端列表。

特别是,"受信任 "的 SMTP 客户端可以通过 Postfix 中转邮件。请参阅postconf(5)手册中的smtpd_relay_restrictions参数说明。

您可以手动指定 "可信 "网络地址列表,也可以让 Postfix 代劳(默认情况下是这样)。更多信息,请参阅mynetworks_style参数的说明。

如果手动指定mynetworks列表,Postfix 会忽略mynetworks_style设置。

指定网络地址或网络/网络掩码模式列表,以逗号和/或空格分隔。用空格分隔下一行,以延续长行。

netmask 指定主机地址网络部分的位数。您还可以指定"/文件/名称 "或"类型:表"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(忽略查找结果)。

列表从左到右依次匹配,搜索在第一次匹配时停止。指定"!pattern "可从列表中排除地址或网络块。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注 1:域名的模式匹配受父域名匹配子域名参数值中是否存在"mynetworks"的控制。

注 2:IP 版本 6 地址信息必须在mynetworks值中的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

注 3:不能在哈希表中指定 CIDR 范围。如果使用 CIDR 范围,请使用 cidr 表。

例如

mynetworks = 127.0.0.0/8 168.100.189.0/28
mynetworks = !192.168.0.1, 192.168.0.0/28
mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128 [2001:240:587::]/64
mynetworks = $config_directory/mynetworks
mynetworks = hash:/etc/postfix/network_table
mynetworks = cidr:/etc/postfix/network_table.cidr

mynetworks_style (默认:Postfix ≥ 3.0:主机,Postfix < 3.0:子网)

mynetworks参数生成默认值的方法。这是用于中继访问控制等的受信任网络列表。

  • 当 Postfix 只 "信任 "本地机器时,指定 "mynetworks_style= host"。
  • 当 Postfix 要 "信任 "与本地计算机位于同一 IP 子网的远程 SMTP 客户端时,请指定 "mynetworks_style= subnet"。在 Linux 系统中,只有使用 "ifconfig "或 "ip "命令指定的接口才能正常工作。
  • 指定"mynetworks_style= class "时,Postfix 应 "信任 "与本地计算机处于相同 IP 类别 A/B/C 网络中的远程 SMTP 客户端。注意:这可能导致 Postfix "信任 "整个供应商网络。相反,请使用mynetworks配置参数手动指定一个明确的mynetworks列表。

myorigin (默认值:$ myhostname)

本地张贴邮件的域名,以及本地张贴邮件的投递地址。默认值为 $myhostname,对于小型网站来说足够了。如果您运行的域名有多台机器,则应:(1) 将其更改为 $mydomain;(2) 设置一个全域别名数据库,将每个用户别名为 [email protected]

例如

myorigin = $mydomain

嵌套标题检查 (默认值:$ header_checks)

可选查找表,用于检查附件邮件中的非 MIME 邮件头内容,详见header_checks(5)手册页面。

该功能在 Postfix 2.0 及更高版本中可用。

newaliases_path (默认值:参见 "postconf -d "输出)。

Sendmail 兼容功能,用于指定newaliases(1)命令的位置。该命令可用于重建local(8) aliases(5)数据库。

non_fqdn_reject_code (默认值:504)

当客户端请求被reject_non_fqdn_helo_hostnamereject _non_fqdn_senderreject_non_fqdn_recipient限制拒绝时,Postfix SMTP 服务器的数字回复代码。

non_smtpd_milters (默认值:空)

Milter(邮件过滤)应用程序列表,用于处理未通过 Postfixsmtpd(8)服务器发送的新邮件。这包括通过sendmail(1)命令行提交的本地邮件、通过 Postfixqmqpd(8) 服务器发送的新邮件,以及使用 "postsuper -r "重新注入队列的旧邮件。指定空格或逗号作为分隔符。详情请参见MILTER_README文档。

该功能在 Postfix 2.3 及更高版本中可用。

notify_classes (默认:资源、软件)

向 Postmaster 报告的错误类别列表。这些 postmaster 通知不会取代用户通知。默认情况下只报告最严重的问题。偏执狂可能希望打开策略(UCE 和邮件中继)和协议错误(邮件软件损坏)报告。

注意:postmaster 通知可能包含 SASL 密码或信息内容等机密信息。系统管理员有责任谨慎处理此类信息。

错误类别有

反弹

向 postmaster 发送退回邮件的标题副本,并在 Postfix 拒收邮件时发送 SMTP 会话副本。通知会发送到bounce_notice_recipient配置参数指定的地址(默认值:postmaster)。

2bounce

将无法投递的退回邮件发送给 postmaster。通知会发送到用2bounce_notice_recipient配置参数指定的地址(默认值:postmaster)。

数据

向 postmaster 发送因关键数据文件不可用而出错的 SMTP 会话副本。通知会发送到使用error_notice_recipient配置参数(默认值:postmaster)指定的地址。
该功能在 Postfix 2.9 及更高版本中可用。

延迟

向 postmaster 发送延迟邮件的标题副本(参见delay_warning_time)。通知会发送到用delay_notice_recipient配置参数指定的地址(默认值:postmaster)。

政策

当客户端请求因 (UCE) 策略而被拒绝时,向 postmaster 发送 SMTP 会话副本。通知将发送到使用error_notice_recipient配置参数(默认值:postmaster)指定的地址。

规程

在客户端或服务器协议出错时,向 postmaster 发送 SMTP 会话副本。通知将发送到使用error_notice_recipient配置参数(默认值:postmaster)指定的地址。

资源

将因资源问题而未投递的邮件通知邮局管理员。通知会发送到使用error_notice_recipient配置参数(默认值:postmaster)指定的地址。

软件

将因软件问题而未投递的邮件通知邮局管理员。通知会发送到使用error_notice_recipient配置参数(默认值:postmaster)指定的地址。

例如

notify_classes = bounce, delay, policy, protocol, resource, software
notify_classes = 2bounce, resource, software

openssl_path (默认值: openssl)

OpenSSL 命令行程序 openssl(1) 的位置。postfix tls"命令使用该程序创建私钥、证书签名请求、自签名证书,并为 DANE TLSA 记录计算公钥摘要。在多实例环境中,该参数始终由默认 Postfix 实例的配置决定。

例如

/etc/postfix/main.cf:
    # NetBSD pkgsrc:
    openssl_path = /usr/pkg/bin/openssl
    # 本地构建:
    openssl_path = /usr/local/bin/openssl

该功能在 Postfix 3.1 及更高版本中可用。

owner_request_special (默认:是)

启用对aliases(5)文件中的所有者-列表名条目进行特殊处理,当recipient_delimiter设置为"-"时,不分割所有者-列表名列表名-请求地址本地部分。该功能对邮件列表非常有用。

parent_domain_matches_subdomain (默认值:请参阅 "postconf - d "输出)。

Postfix 功能列表,其中 "example.com "模式也可匹配 example.com 的子域,而不需要明确的".example.com "模式。这是计划中的向后兼容性:最终,所有 Postfix 功能都将要求在真正需要匹配子域时使用明确的".example.com "模式。

支持以下 Postfix 功能名称。

Postfix 1.0 及更高版本

debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,relay_domains,transport_maps

Postfix 1.1 及更高版本

qmqpd_authorized_clients,smtpd_access_maps

Postfix 2.8 及更高版本

postscreen_access_list

Postfix 3.0 及更高版本

smtpd_client_event_limit_exceptions

permit_mx_backup_networks (默认值:空)

permit_mx_backupSMTP 访问功能的使用范围限制在主 MX 主机与所列网络相匹配的域。参数值语法与mynetworks参数相同,但默认值为空。

域名的模式匹配由父域名匹配子域名参数值中是否存在"permit_mx_backup_networks"控制。

取件服务名称 (默认:取件)

pickup(8)服务的名称。该服务从 Postfix邮件发送队列中拾取本地提交的邮件。

该功能在 Postfix 2.0 及更高版本中可用。

pipe_delivery_status_filter (默认值:$ default_delivery_status_filter)

管道(8)递送代理的可选过滤器,用于更改成功或失败递送的递送状态代码或说明文字。详情请参阅default_delivery_status_filter

该功能在 Postfix 3.0 及更高版本中可用。

纯文本拒绝代码 (默认值:450)

当请求被reject_plaintext_session限制拒绝时,Postfix SMTP 服务器的数字响应代码。

该功能在 Postfix 2.3 及更高版本中可用。

postlog_service_name (默认值:postlog)

该服务会将日志文件记录追加到使用maillog_file参数指定的文件中。

该功能在 Postfix 3.4 及更高版本中可用。

postlogd_watchdog_timeout (默认值:10秒)

postlogd(8)进程处理一个请求可能需要多少时间,然后才会被内置的看门狗定时器终止。这是一种安全机制,可防止postlogd(8)因 Postfix 本身或系统软件中的错误而无法响应。该限制不能低于 10 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 3.4 及更高版本中可用。

postmulti_control_commands (默认:重载刷新)

postfix (1 )实例管理器将postfix (1)命令视为 "控制 "命令,对运行中的实例执行操作。对于这些命令,禁用的实例将被跳过。

该功能在 Postfix 2.6 及更高版本中可用。

postmulti_start_commands (默认:start)

postfix (1 )实例管理器视为 "启动 "命令的postfix (1)命令。对于这些命令,禁用的实例将被 "检查 "而不是 "启动",如果不能 "启动 "实例组中的某个成员实例,后面的实例将无法启动。

该功能在 Postfix 2.6 及更高版本中可用。

postmulti_stop_commands (默认值:请参阅 "postconf -d "输出)。

postfix (1 )实例管理器视为 "停止 "命令的postfix (1)命令。对于这些命令,禁用的实例将被跳过,而启用的实例将按相反的顺序处理。

该功能在 Postfix 2.6 及更高版本中可用。

postscreen_access_list (默认: permit_mynetworks)

postscreen(8)会在远程 SMTP 客户端连接后立即搜索该列表。指定以逗号或空格分隔的命令列表(大写或小写)或查找表。搜索会在客户端 IP 地址触发第一条命令后停止。

许可 网络

如果客户端 IP 地址与$mynetworks 匹配,则允许列出客户端并终止搜索。不对客户端进行任何前/后 220 问候语测试。立即将连接传递给 Postfix SMTP 服务器进程。
域名的模式匹配由父域名匹配子域名参数值中是否包含"postscreen_access _list"控制。

类型: 表格 

查询指定的查询表。每个表的查询结果都是一个访问列表,但表内的访问列表不能指定type:table条目。
为了不鼓励使用哈希、btree 等表,不支持smtpd(8) 那样的子串匹配。请使用 CIDR 表。

许可证 

允许客户列表并终止搜索。不对客户端进行任何前/后 220 问候语测试。立即将连接传递给 Postfix SMTP 服务器进程。

否决 

否决客户端并终止搜索。使客户端接受postscreen_denylist_action配置参数所配置的操作。

不知道 

所有postscreen(8)访问列表的末尾都隐含有这条命令。
在查找表内执行dunno 时,将从查找表返回并评估下一条命令。
在查找表外执行dunno 时,将终止搜索,并让客户端接受配置的 before/after 220 问候测试。

例如

/etc/postfix/main.cf:
    postscreen_access_list = permit_mynetworks,
        cidr:/etc/postfix/postscreen_access.cidr
    # Postfix < 3.6 使用postscreen_blacklist_action.
    postscreen_denylist_action = enforce
                
/etc/postfix/postscreen_access.cidr:
    # 规则按指定的顺序评估。
    # 拒绝列表 192.168.* 除 192.168.0.1。
    192.168.0.1         dunno
    192.168.0.0/16      reject

Postfix 2.8 中提供了这一功能。

postscreen_allowlist_interfaces (默认值: static:all)

postcreen(8 ) 服务器的本地 IP 地址列表,未列入允许列表的远程 SMTP 客户端可以从该列表中获取postscreen(8) 的临时允许列表状态。在客户端与 Postfix SMTP 服务器进程对话之前,必须先获得该状态。默认情况下, 客户端可以在任何本地postscreen(8)服务器 IP 地址上获取postscreen(8)的允许列表状态。

postscreen(8)同时监听主 MX 地址和备份 MX 地址时,可以配置postscreen_allowlist_interfaces参数,以便仅在客户端连接到主 MX 地址时才给予临时允许列表状态。一旦客户端被列入允许列表,它就可以与任何地址上的 Postfix SMTP 服务器通信。因此,只连接到备份 MX 地址的客户端永远不会被列入允许列表,也永远不会被允许与 Postfix SMTP 服务器进程对话。

指定网络地址或网络/网络掩码模式列表,以逗号和/或空格分隔。网络掩码指定主机地址网络部分的位数。用空格分隔下一行,以续长行。

您也可以指定"/文件/名称 "或"类型:表"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(忽略查找结果)。

列表从左到右依次匹配,搜索在第一次匹配时停止。指定"!pattern "可从列表中排除地址或网络块。

注意:IP 版本 6 地址信息必须在postscreen_allowlist_interfaces值的 [] 内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

例如

/etc/postfix/main.cf:
    # Don't allowlist connections to the backup IP address.
    # Postfix < 3.6 use postscreen_whitelist_interfaces.
    postscreen_allowlist_interfaces = !168.100.189.8, static:all

该功能在 Postfix 3.6 及更高版本中可用。

在 Postfix 2.9 - 3.5 中作为postscreen_whitelist_interfaces提供。

postscreen_bare_newline_action (默认:忽略)

postscreen(8)在远程 SMTP 客户端发送空换行符(即换行符前没有回车符)时采取的操作。请指定以下选项之一:

置之不理

忽略本次测试失败。允许其他测试完成。在其他测试结果到期之前,不要重复此测试。该选项可用于测试和收集统计数据,而不会永久阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

使用 521 SMTP 回复立即中断连接。下次客户端连接时重复此测试。

Postfix 2.8 中提供了这一功能。

postscreen_bare_newline_enable (默认值:否)

postscreen(8)服务器中启用 "裸换行 "SMTP 协议测试。这些测试耗资巨大:远程 SMTP 客户端必须在通过测试后断开连接,才能与真正的 Postfix SMTP 服务器通信。

Postfix 2.8 中提供了这一功能。

postscreen_bare_newline_ttl (默认值:30d)

postscreen(8)在要求客户端 IP 地址再次通过 "裸换行 "SMTP 协议测试之前记住该地址的时间。默认值为长,因为远程 SMTP 客户端必须在通过测试后断开连接,才能与真正的 Postfix SMTP 服务器通信。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

Postfix 2.8 中提供了这一功能。

postscreen_blacklist_action (默认:忽略)

在 Postfix 3.6 中更名为postscreen_denylist_action

Postfix 2.8 - 3.5 中提供了这一功能。

postscreen_cache_cleanup_interval (默认值:12 小时)

postscreen(8)缓存清理运行的间隔时间。缓存清理会增加缓存数据库的负载,因此不应频繁运行。此功能要求缓存数据库支持 "delete "和 "sequence "操作符。指定零间隔可禁用缓存清理。

每次缓存清理运行后,postscreen(8)守护进程都会记录保留和丢弃的条目的数量。当守护进程在"postfix reload"、"postfix stop"或$max_idle秒内无请求后提前终止时,清理运行会被记录为 "部分"。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

Postfix 2.8 中提供了这一功能。

postscreen_cache_map (默认值: btree:$data_directory/postscreen_cache)

postscreen(8)服务器决定的持久存储。

要在多个postscreen(8)实例之间共享postscreen(8)缓存,请使用"postscreen_cache_map=proxy:btree:/path/to/file"。这需要 Postfix 2.9 或更高版本;早期的proxymap(8)实现不支持缓存清理。有关其他方法,请参阅memcache_table(5)手册。

Postfix 2.8 中提供了这一功能。

postscreen_cache_retention_time (默认值:7d)

postscreen(8)在删除已过期的临时 allowlist 条目之前将其缓存的时间。这可以防止客户被记录为 "新",因为他们的缓存条目一小时前就已过期。它还能防止缓存中塞满那些通过了一次深度协议测试后就再也没回来的客户。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

Postfix 2.8 中提供了这一功能。

postscreen_client_connection_count_limit (默认值:$smtpd_client_connection_count_limit)

允许任何远程 SMTP 客户端与postscreen(8)守护进程同时连接的数量。默认情况下,该限制与 Postfix SMTP 服务器相同。请注意,由于postscreen_greet_wait的延迟时间,以及与postscreen(8)内置的假 SMTP 协议引擎对话的时间,分流过程可能需要几秒钟。

Postfix 2.8 中提供了这一功能。

postscreen_command_count_limit (默认值:20)

postscreen(8) 内置 SMTP 协议引擎的每个 SMTP 会话的命令总数限制。该 SMTP 引擎会推迟或拒绝所有发送邮件的尝试,因此无需单独限制垃圾命令和错误命令的数量。

Postfix 2.8 中提供了这一功能。

postscreen_command_filter (默认值:$smtpd _command_filter)

一种转换来自远程 SMTP 客户端命令的机制。详情请参阅smtpd_command_filter

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_command_time_limit (默认:正常:300 秒, 超载:10 秒)

postscreen(8) 内置 SMTP 协议引擎读取整行命令的时限。

Postfix 2.8 中提供了这一功能。

postscreen_denylist_action (默认:忽略)

postscreen(8)在使用postscreen_access_list参数将远程 SMTP 客户端永久拒之门外时采取的操作。请指定以下参数之一:

忽略(默认)

忽略此结果。允许其他测试完成。下次客户端连接时重复此测试。该选项可用于测试和收集统计数据,而不会阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

使用 521 SMTP 回复立即中断连接。下次客户端连接时重复此测试。

该功能在 Postfix 3.6 及更高版本中可用。

在 Postfix 2.8 - 3.5 中作为postscreen_blacklist_action提供。

postscreen_disable_vrfy_command (默认值:$disable_vrfy_command)

禁用postscreen(8)守护进程中的 SMTP VRFY 命令。详情请参阅disable_vrfy_command

Postfix 2.8 中提供了这一功能。

postscreen_discard_ehlo_keyword_address_maps (默认值:$smtpd_discard_ehlo_keyword_address_maps)

以远程 SMTP 客户端地址为索引的查找表,包含不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,postscreen(8)服务器不会在发送给远程 SMTP 客户端的 EHLO 响应中使用这些关键字。详情请参阅smtpd_discard_ehlo_keywords。出于稳健性考虑,不按主机名搜索该表。

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_discard_ehlo_keywords (默认值:$smtpd _discard_ehlo_keywords)

不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,postscreen(8)服务器不会在发送给远程 SMTP 客户端的 EHLO 响应中使用这些关键字。详情请参阅smtpd_discard_ehlo_keywords

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_dnsbl_action (默认:忽略)

当远程 SMTP 客户端的 DNSBL 综合得分等于或大于阈值(由postscreen_dnsbl_sitespostscreen_dnsbl_threshold参数定义)时,postscreen(8)采取的操作。指定以下参数之一:

忽略(默认)

忽略本次测试失败。允许其他测试完成。客户端下次连接时重复此测试。该选项可用于测试和收集统计数据,而不会阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

使用 521 SMTP 回复立即中断连接。下次客户端连接时重复此测试。

Postfix 2.8 中提供了这一功能。

postscreen_dnsbl_allowlist_threshold (默认值:0)

根据postcreen_dnsbl_sites参数定义的 DNSBL 综合得分,允许远程 SMTP 客户端跳过 "之前 "和 "之后 220 问候 "协议测试。

指定负值可启用此功能。当客户端通过postscreen_dnsbl_allowlist_threshold而其他测试未通过时,所有待定或已禁用的测试都会标记为已完成,过期时间基于 DNS 回复 TTL。如果测试已完成,其过期时间将被更新,前提是它小于基于 DNS 回复 TTL 的值。另请参阅postscreen_dnsbl_max_ttlpostscreen_dnsbl_min_ttl

该功能在 Postfix 3.6 及更高版本中可用。

在 Postfix 2.11 - 3.5 中作为postscreen_dnsbl_whitelist_threshold提供。

postscreen_dnsbl_max_ttl (默认值:$ {postscreen_dnsbl_ttl?{$postscreen_dnsbl_ttl}: {1}}h)

postscreen(8)在要求客户端 IP 地址再次通过基于 DNS 的信誉测试之前,记住该 IP 地址通过测试的最长时间。如果 DNS 回复指定了更短的 TTL 值,则将使用该值,除非它小于postscreen_dnsbl_min_ttl。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

该功能在 Postfix 3.1 中可用。默认设置与 Postfix 旧版本向后兼容。

postscreen_dnsbl_min_ttl (默认值:60s)

postscreen(8)在要求客户端 IP 地址再次通过基于 DNS 的信誉测试之前,记住该 IP 地址通过测试的最短时间。如果 DNS 回复指定了更大的 TTL 值,则将使用该值,除非它大于postscreen_dnsbl_max_ttl

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

Postfix 3.1 中提供了这一功能。

postscreen_dnsbl_reply_map (默认值:空)

包含密码的实际 DNSBL 域名与 DNSBL 域名的映射,postscreen 在拒收邮件时将使用 DNSBL 域名进行回复。找不到映射时,将使用实际 DNSBL 域名。

为获得最大稳定性,最好使用读入内存的文件,如pcre:、regexp: 或texthash(texthash:与hash:类似,但 a) 在使用文件前无需运行postmap(1),b)texthash: 不会检测读取文件后的变化)。

例如

/etc/postfix/main.cf:
    postscreen_dnsbl_reply_map = texthash:/etc/postfix/dnsbl_reply
                
/etc/postfix/dnsbl_reply:
    secret.zen.spamhaus.org      zen.spamhaus.org

注意:该功能与 Postfix SMTP 服务器的rbl_reply_maps功能不同,在后者中,1)表格搜索关键字包括可选的"=address-filter",2)查找结果包含带有$name变量的自由文本。

Postfix 2.8 中提供了这一功能。

postscreen_dnsbl_sites (默认值:空)

可选的 DNS 允许/禁用域、过滤器和权重系数模式列表。当列表为非空时,dnsblog(8)守护进程将使用远程 SMTP 客户端的反向 IP 地址查询这些域,postscreen(8)将根据每次非错误回复更新 SMTP 客户端的 DNSBL 分数,如下所述。

注意:请始终尊重信誉服务的使用政策。避免使用公共或 ISP 解析器,除非查询使用了您唯一的 API 密钥。

注意:postscreen 拒绝邮件时,其 SMTP 响应会包含 DNSBL 域名。使用postscreen_dnsbl_reply_map功能可隐藏 DNSBL 域名中的 "密码 "信息。

当客户端的得分等于或大于postscreen_dnsbl_threshold 指定的阈值时,postscreen(8)就会放弃与远程 SMTP 客户端的连接。

指定 domain=filter*weight 模式列表,以逗号或空格分隔。

  • 如果模式中没有指定"=filter",postscreen(8)将使用任何无错误的 DNSBL 查询结果。否则,postscreen(8)只使用与过滤器匹配的 DNSBL 查询结果。过滤器的形式为 d.d.d.d,其中每个 d 是一个数字,或者是 [] 中包含一个或多个"; "分隔数字或数字...数字范围的模式。
  • 当模式没有指定 "*权重 "时,模式的权重为 1。 否则,权重必须是一个整数。为 allowlisting 指定负数。
  • 当一个模式与一个或多个 DNSBL 查询结果相匹配时,postscreen(8)会将该模式的权重一次加到远程 SMTP 客户端的 DNSBL 分数上。

例如

使用 example.com 作为可信度较高的拦截列表,只有当 example.net 和 example.org 都同意时,才拦截通过 example.net 和 example.org 发送的邮件:

postscreen_dnsbl_threshold = 2
postscreen_dnsbl_sites = example.com*2, example.net, example.org

只过滤包含 127.0.0.4 的 DNSBL 回复:

postscreen_dnsbl_sites = example.com=127.0.0.4

Postfix 2.8 中提供了这一功能。

postscreen_dnsbl_threshold (默认值:1)

根据postcreen_dnsbl_sites参数定义的 DNSBL 综合得分,阻止远程 SMTP 客户端的包容性下限。

Postfix 2.8 中提供了这一功能。

postscreen_dnsbl_timeout (默认值:10秒)

DNSBL 或 DNSWL 查询的时限。这与dnsblog(8)守护进程中的超时不同,后者由系统 resolver(3) 例程定义。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

Postfix 3.0 提供了这一功能。

postscreen_dnsbl_ttl (默认值:1 小时)

postscreen(8)在要求客户 IP 地址再次通过基于 DNS 的信誉测试之前,记住该 IP 地址的时间长度。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 h(小时)。

该功能在 Postfix 2.8-3.0 中可用。在 Postfix 3.1 中被postscreen_dnsbl_max_ttl取代。

postscreen_dnsbl_whitelist_threshold (默认值:0)

在 Postfix 3.6 中更名为postscreen_dnsbl_allowlist_threshold

Postfix 2.11 - 3.5 中提供了这一功能。

postscreen_enforce_tls (默认值:$smtpd _enforce_tls)

强制 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,并要求客户端使用 TLS 加密。详情请参阅 smtpd_postscreen_enforce_tls。

该功能在 Postfix 2.8 及更高版本中可用。最好改用postscreen_tls_security_level

postscreen_expansion_filter (默认值:请参阅 "postconf -d "输出)。

postscreen_reject_footer属性扩展中允许使用的字符列表。详情请参见smtpd_expansion_filter

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_forbidden_commands (默认值:$smtpd_forbidden_commands)

postscreen(8)服务器认为违反 SMTP 协议的命令列表。语法参见smtpd_forbidden_commands,可能的操作参见postscreen_non_smtp_command_action

Postfix 2.8 中提供了这一功能。

postscreen_greet_action (默认:忽略)

postscreen_greet_wait参数指定的时间内,当远程 SMTP 客户端在轮到它之前发言时,postscreen (8)将采取的操作。请指定以下参数之一:

忽略(默认)

忽略本次测试失败。允许其他测试完成。客户端下次连接时重复此测试。该选项可用于测试和收集统计数据,而不会阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

通过 521 SMTP 回复立即中断连接。下次客户端连接时重复此测试。

在这两种情况下,postscreen(8)都不允许列出远程 SMTP 客户端的 IP 地址。

Postfix 2.8 中提供了这一功能。

postscreen_greet_ banner(默认值:$smtpd _banner)

postscreen(8)在真正的 Postfix SMTP 服务器的 "220 text... "响应之前发送的可选的 "220-text... "服务器响应中的文本,目的是混淆不良 SMTP 客户端,使其在轮到自己之前发言(预先打招呼)。如果指定的值为空,则禁用此功能。

Postfix 2.8 中提供了这一功能。

postscreen_greet_ttl (默认值:1d)

postscreen(8)在要求客户端 IP 地址再次通过 PREGREET 测试之前记住该 IP 地址的时间。默认值相对较短,因为好的客户端可以立即与真正的 Postfix SMTP 服务器通信。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

Postfix 2.8 中提供了这一功能。

postscreen_greet_wait (默认:正常:6 秒, 超载:2 秒)

postscreen(8)等待 SMTP 客户端发送命令和 DNS blocklist 查找结果的时间(默认值:压力下最长 2 秒,否则最长 6 秒)。

 

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

Postfix 2.8 中提供了这一功能。

postscreen_helo_required (默认值:$smtpd_helo_required)

要求远程 SMTP 客户端在开始 MAIL 事务之前发送 HELO 或 EHLO。

Postfix 2.8 中提供了这一功能。

postscreen_non_smtp_command_action (默认:删除)

当远程 SMTP 客户端发送postscreen_forbidden_commands参数指定的非 SMTP 命令时,postscreen (8)将采取的操作。请指定以下参数之一:

置之不理

忽略本次测试失败。允许其他测试完成。在其他测试结果到期之前,不要重复此测试。该选项可用于测试和收集统计数据,而不会永久阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

使用 521 SMTP 回复立即中断连接。下次客户端连接时,重复此测试。此操作与 Postfix SMTP 服务器的smtpd_forbidden_commands功能相同。

Postfix 2.8 中提供了这一功能。

postscreen_non_smtp_command_enable (默认值:否)

postscreen(8)服务器中启用 "非 SMTP 命令 "测试。这些测试耗资巨大:客户端必须在通过测试后断开连接,才能与真正的 Postfix SMTP 服务器通信。

Postfix 2.8 中提供了这一功能。

postscreen_non_smtp_command_ttl (默认值:30d)

postscreen(8)在要求客户端 IP 地址再次通过 "non_smtp_command "SMTP 协议测试之前,记住该 IP 地址的时间长度。默认值为长,因为客户端必须在通过测试后断开连接,才能与真正的 Postfix SMTP 服务器通信。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

Postfix 2.8 中提供了这一功能。

postscreen_pipelining_action (默认:执行)

当远程 SMTP 客户端发送多条命令而不是发送一条命令并等待服务器响应时,postscreen(8)将采取的操作。指定以下命令之一:

置之不理

忽略本次测试失败。允许其他测试完成。在其他测试结果到期之前,不要重复此测试。该选项可用于测试和收集统计数据,而不会永久阻止邮件。

强制执行

允许其他测试完成。以 550 SMTP 回复拒绝尝试发送邮件,并记录 helo/发件人/收件人信息。下次客户端连接时重复此测试。

滴剂

使用 521 SMTP 回复立即中断连接。下次客户端连接时重复此测试。

Postfix 2.8 中提供了这一功能。

postscreen_pipelining_enable (默认值:否)

postscreen(8)服务器中启用 "流水线 "SMTP 协议测试。这些测试耗资巨大:一个好的客户端必须在通过测试后断开连接,然后才能与真正的 Postfix SMTP 服务器通信。

Postfix 2.8 中提供了这一功能。

postscreen_pipelining_ttl (默认值:30d)

postscreen(8)在要求客户端 IP 地址再次通过 "管道化 "SMTP 协议测试之前,记住该 IP 地址的时间长度。默认值为长,因为好的客户端必须在通过测试后断开连接,才能与真正的 Postfix SMTP 服务器通信。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

Postfix 2.8 中提供了这一功能。

postscreen_post_queue_limit (默认值:$ default_process_limit)

等待 Postfix SMTP 服务器进程提供服务的客户端数量。当队列满时,所有客户端都将收到 421 响应。

Postfix 2.8 中提供了这一功能。

postscreen_pre_queue_limit (默认值:$ default_process_limit)

等待决定是否接收真正 Postfix SMTP 服务器进程服务的非允许列表客户的数量。当队列满时,所有非允许列表客户都将收到 421 响应。

Postfix 2.8 中提供了这一功能。

postscreen_reject_footer (默认值:$smtpd _reject_footer)

附加在 4XX 或 5XXpostcreen(8)服务器响应之后的可选信息。详情请参见smtpd_reject_footer

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_reject_footer_ maps(默认值:$ smtpd_reject_footer_maps)

用于在 4XX 或 5XXpostcreen(8)服务器响应后附加信息的可选查找表。详情请参阅smtpd_reject_footer_maps

该功能在 Postfix 3.4 及更高版本中可用。

postscreen_tls_security_level (默认值:$smtpd_tls_security_level)

postscreen(8)服务器的 SMTP TLS 安全级别;如果指定的是非空值,它将覆盖过时的参数postscreen_use_tlspostscreen_enforce_tls。详情请参见smtpd_tls_security_level

该功能在 Postfix 2.8 及更高版本中可用。

postscreen_upstream_proxy_protocol (默认值:空)

可选的屏前代理所使用的代理协议名称。使用代理服务器时,该协议将传递本地和远程地址及端口信息。指定"postscreen_upstream_proxy_protocol= haproxy "可启用 haproxy 协议;Postfix 3.5 及更高版本支持版本 2。

 

该功能在 Postfix 2.10 及更高版本中可用。

postscreen_upstream_proxy_timeout (默认值:5 秒)

使用postscreen_upstream_proxy_protocol参数指定的代理协议的时限。

该功能在 Postfix 2.10 及更高版本中可用。

postscreen_use_tls (默认值:$smtpd _use_tls)

机会性 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,但不要求客户端使用 TLS 加密。

该功能在 Postfix 2.8 及更高版本中可用。最好改用postscreen_tls_security_level

postscreen_watchdog_timeout (默认值:10秒)

postscreen(8)进程响应远程 SMTP 客户端命令或执行缓存操作需要多少时间,然后才会被内置的看门狗定时器终止。这是一种安全机制,可以防止postscreen(8)因 Postfix 本身或系统软件的错误而无法响应。为避免错误警报和不必要的缓存损坏,该限制不能低于 10 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

Postfix 2.8 中提供了这一功能。

postscreen_whitelist_interfaces (默认值: static:all)

在 Postfix 3.6 中更名为postscreen_allowlist_interfaces

Postfix 2.9 - 3.5 中提供了这一功能。

prepend_delivered_header (默认:命令、文件、转发)

Postfixlocal(8)投递代理在 Delivered-To: 报文头中预置邮件被投递到的地址的邮件投递上下文。该信息用于邮件递送循环检测。

默认情况下,Postfix 本地投递代理会在转发邮件以及投递到文件(邮箱)和命令时预置 Delivered-To: 标头。不建议在转发邮件时关闭 Delivered-To: 标头。

指定转发文件命令中的一个或多个。

例如

prepend_delivered_header = forward

process_id (只读)

Postfix 命令或守护进程的进程 ID。

process_id_directory (默认值:pid)

Postfix PID 文件相对于$queue_directory 的位置。这是一个只读参数。

进程名 (只读)

Postfix 命令或守护进程的进程名称。

propagate_unmatched_extensions (默认:规范,虚拟)

地址查询表会将地址扩展名从查询键复制到查询结果中。

例如,通过virtual(5)映射"[email protected] => [email protected]",地址"[email protected] "将重写为"[email protected]"

指定规范虚拟别名转发包含通用中的零个或多个。它们将分别导致使用canonical(5)virtual(5)alias(5)映射、local(8).forward 和 :include: 文件查找以及smtp( 8)通用映射传播地址扩展名。

注意:为规范虚拟类型以外的类型启用此功能可能会在邮件转发到其他网站时造成问题,尤其是发送到邮件列表爆炸器地址的邮件。

例如

propagate_unmatched_extensions = canonical, virtual, alias,
        forward, include
propagate_unmatched_extensions = canonical, virtual

代理接口 (默认:空)

邮件系统通过代理或网络地址转换装置接收邮件的远程网络接口地址。

该功能在 Postfix 2.0 及更高版本中可用。

当您的系统作为其他域的备份 MX 主机时,您必须指定 "外部 "代理/NAT 地址,否则当主 MX 主机宕机时,就会出现邮件发送循环。

例如

proxy_interfaces = 1.2.3.4

proxy_read_maps (默认值:参见 "postconf -d "输出)。

允许proxymap(8)服务器访问只读服务的查找表。

指定零个或多个 "type:name "查找表,以空格或逗号分隔。不以proxy: 开头的表引用将被忽略。

该功能在 Postfix 2.0 及更高版本中可用。

proxy_write_maps (默认值:参见 "postconf -d "输出)。

允许proxymap(8)服务器访问的读写服务查找表。Postfix 拥有的本地数据库文件应存放在 Postfix 拥有的data_directory 目录下。不以proxy: 开头的表引用将被忽略。

该功能在 Postfix 2.5 及更高版本中可用。

proxymap_service_name (默认值:proxymap)

proxymap 只读表查询服务的名称。该服务通常由proxymap(8)守护进程执行。

该功能在 Postfix 2.6 及更高版本中可用。

proxywrite_service_name (默认值:proxywrite)

proxywrite 读写表查询服务的名称。该服务通常由proxymap(8)守护进程执行。

该功能在 Postfix 2.6 及更高版本中可用。

qmgr_clog_warn_time (默认值:300 秒)

特定目标堵塞 Postfix活动队列时发出警告的最小延迟时间。指定 0 表示禁用。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

使用helpful_warnings参数可启用该功能。

该功能在 Postfix 2.0 及更高版本中可用。

qmgr_daemon_timeout (默认值:1000s)

Postfix 队列管理器进程处理一个请求可能需要多少时间,然后才会被内置看门狗定时器终止。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.8 及更高版本中可用。

qmgr_fudge_factor (默认值:100)

已过时的功能:繁忙的邮件系统在投递大型邮件列表信息时会占用的投递资源百分比。

这一功能只存在于oqmgr(8)旧队列管理器中。当前的队列管理器以更好的方式解决了这一问题。

qmgr_ipc_timeout (默认值:60s)

队列管理器通过内部通信通道发送或接收信息的时限。目的是打破僵局。如果超过时限,软件会重试或中止操作。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.8 及更高版本中可用。

qmgr_message_active_limit (默认值:20000)

活动队列中信息的最大数量。

qmgr_message_recipient_limit (默认值:20000)

Postfix 队列管理器内存中保存的最大收件人数量,以及内存中短期 "死亡 "目的地状态缓存的最大大小。

qmgr_message_recipient_minimum (默认值:10)

任何信息的最小内存收件人数量。如有必要,它将优先于任何其他内存收件人限制(即全局qmgr_message_recipient_limit和每个传输 _recipient_limit)。该参数允许的最小值为 1。

qmqpd_authorized_clients (默认值:空)

允许哪些远程 QMQP 客户端连接 Postfix QMQP 服务器端口。

默认情况下,不允许任何客户端使用该服务。这是因为 QMQP 服务器会将邮件转发到任何目的地。

指定客户端模式列表。列表模式指定主机名、域名、互联网地址或网络/掩码模式,其中掩码指定网络部分的位数。当模式指定文件名时,其内容将被替换为文件名;当模式为"type:table"表指定时,将使用表查询代替文件名。

模式之间用空格和/或逗号分隔。要反转结果,请在模式前加上感叹号(!)。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

域名的模式匹配由父域名匹配域名参数值中是否存在"qmqpd_authorized_clients"控制。

例如

qmqpd_authorized_clients = !192.168.0.1, 192.168.0.0/24

qmqpd_client_port_logging (默认值:否)

除主机名和 IP 地址外,启用远程 QMQP 客户端端口记录。记录格式为 "host[address]:port"。

该功能在 Postfix 2.5 及更高版本中可用。

qmqpd_error_delay (默认:1 秒)

Postfix QMQP 服务器在向远程 QMQP 客户端发送否定回复之前会停顿多长时间。其目的是减缓混乱或恶意客户端的速度。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

qmqpd_timeout (默认值:300 秒)

通过网络发送或接收信息的时间限制。如果读取或写入操作的阻塞时间超过 $qmqpd_timeout,Postfix QMQP 服务器就会放弃并断开连接。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

queue_directory (默认值:参见 "postconf -d" 输出)。

Postfix 顶级队列目录的位置。它是以根目录运行的 Postfix 守护进程的根目录。

queue_file_attribute_count_limit (默认值:100)

Postfix 队列文件中可存储的 (name=value) 属性的最大数量。该限制由cleanup(8)服务器执行。

该功能在 Postfix 2.0 及更高版本中可用。

queue_minfree (默认值:0)

队列文件系统中接收邮件所需的最小可用空间(以字节为单位)。目前,Postfix SMTP 服务器使用它来决定是否接收任何邮件。

默认情况下,当可用空间小于 1.5*$message_size_limit时,Postfix SMTP 服务器会拒绝 MAIL FROM 命令(Postfix 2.1 及更高版本)。要指定更高的最小可用空间限制,请指定一个至少为 1.5*$message_size_limitqueue_minfree值。

在 Postfix 2.0 及更早版本中,queue_minfree值为零表示没有最小可用空间要求。

queue_run_delay (默认值:300 秒)

队列管理器延迟队列扫描的间隔时间;在 Postfix 2.4 之前,默认值为 1000s。

该参数应小于或等于 $minimal_backoff_time。另请参阅 $maximal_backoff_time。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

队列服务名称 (默认值:qmgr)

qmgr(8)服务的名称。该服务负责管理 Postfix 队列并安排发送请求。

该功能在 Postfix 2.0 及更高版本中可用。

rbl_reply_maps (默认值:空)

带有 RBL 或 RHSBL 响应模板的可选查询表。表搜索关键字是 reject_rbl_* 或 reject_rhsbl_* 参数,包括任何可选的"=address-filter"。在 Postfix 3.10 及更高版本中,如果结果为 "未找到",且搜索关键字的形式为domain=address-filter,则rbl_reply_maps也将使用进行搜索。

默认情况下,Postfix 使用default_rbl_reply配置参数指定的模板。有关响应模板语法的讨论,请参阅此处。

例如

/etc/postfix/main.cf:
    rbl_reply_maps = hash:/etc/postfix/rbl_reply
    smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_rbl_client secret.zen.dq.spamhaus.net=127.0.0.[2..11],
        ...
/etc/postfix/rbl_reply: # 有关 $client_address 和 $rbl_class 等 # 变量的定义,请参阅#default_rbl_reply #。 # secret.zen.dq.spamhaus.net=127.0.0.[2..11] 554 $rbl_class $rbl_what 使用 ZEN 时被阻止 - 详见 https://www.spamhaus.org/query/ip/$client_address
    # Postfix ≥ 3.10:如果未找到搜索关键字domain=address-filter
    # ,则rbl_reply_maps也将使用
    # 进行搜索。
    secret.zen.dq.spamhaus.net
        554 $rbl_class $rbl_what 使用 ZEN 时被阻止 - 详见 https://www.spamhaus.org/query/ip/$client_address

注意:此功能不同于postscreen_dnsbl_reply_map,在postcreen_dnsbl_reply_map中,表格搜索关键字仅为域名(无"=address-filter",无"*weight"因子),且查询结果应仅为域名(无自由文本,无$name变量)。

该功能在 Postfix 2.0 及更高版本中可用。=address-filter" 功能在 Postfix 2.8 及更高版本中可用。

readme_directory (默认值:请参阅 "postconf -d "输出)。

描述如何构建、配置或操作特定 Postfix 子系统或功能的 Postfix README 文件的位置。

receive_override_options (默认值:空)

启用或禁用收件人验证、内置内容过滤或地址映射。通常,这些参数在master.cf中指定为smtpd(8)qmqpd(8)pickup(8)守护进程的命令行参数。

指定以下零个或多个选项。这些选项覆盖main.cf设置,或者由smtpd(8)qmqpd(8)pickup( 8) 本身执行,或者转发给清理服务器。

无未知收款人支票

不尝试拒绝未知收件人(仅限 SMTP 服务器)。这通常在外部内容过滤器之后指定。

无地址映射

禁用规范地址映射、虚拟别名映射扩展、地址伪装和自动 BCC(盲碳拷贝)收件人。这通常在外部内容过滤器之前指定。

无页眉正文检查

禁用标题/正文检查。这通常是在外部内容过滤器之后指定的。

无滤波器

禁用 Milter(邮件过滤器)应用程序。这通常是在外部内容过滤器之后指定的。

注意:如果在main.cf文件中指定了 "前内容过滤器 "的receive_override_options设置,则应在master.cf文件中指定 "后内容过滤器 "的 receive_override_options设置(反之亦然)。

例如

receive_override_options =
    no_unknown_recipient_checks, no_header_body_checks
receive_override_options = no_address_mappings

该功能在 Postfix 2.1 及更高版本中可用。

recipient_bcc_maps (默认值:空)

可选 BCC(盲抄)地址查询表,按信封收件人地址编制索引。当邮件从 Postfix 外部进入时,会添加 BCC 地址(不支持多个结果)。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

表格搜索顺序如下

注意:在 Postfix 2.3 及更高版本中,添加 BCC 地址就像指定 NOTIFY=NONE 一样。如果 BCC 地址无法投递,只要所有下游软件都执行RFC 3461,发件人就不会收到通知。

注意:在 Postfix 2.2 及更早版本中,当 BCC 地址无法投递时,发件人将无条件收到通知。

注意:自动 BCC 收件人只针对新邮件生成。为避免邮件服务器循环,在 Postfix 内部转发邮件或 Postfix 自行生成邮件后,不会生成自动 BCC 收件人。

注意:自动 BCC 收件人受地址规范化(添加缺失域)、canonical_mapsmasquerade_domainsvirtual_alias_maps 的限制。

例如

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

更改后,运行"postmap /etc/postfix/recipient_bcc"。

该功能在 Postfix 2.1 及更高版本中可用。

收件人规范类 (默认:信封收件人、标题收件人)

哪些地址受recipient_canonical_maps地址映射的影响。默认情况下,收件人_典型映射地址映射适用于信封收件人地址和报头收件人地址。

指定一个或多个:envelope_recipient、header_recipient

该功能在 Postfix 2.2 及更高版本中可用。

收件人标准地图 (默认:空)

信封和标题收件人地址的可选地址映射查找表。表格格式和查找方法见canonical(5)

注意:$recipient_canonical_maps 会在$canonical_maps 之前处理。

例如

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

收件人分隔符 (默认:空)

可将电子邮件地址本地部分、用户名或 .forward 文件名与其扩展名分隔开来的字符集。例如,如果使用"receiver_delimiter= +",软件在尝试 [email protected] 之前会尝试 [email protected],在尝试 user 之前会尝试 user+foo,在尝试 .forward 之前会尝试 .forward+foo。

更正式地说,电子邮件地址本地部分或用户名与其扩展名之间用第一个符合收件人分隔符集的字符分隔。然后,分隔符和扩展名可用于生成扩展的 .forward 文件名。该实现可为每个电子邮件地址本地部分或电子邮件地址识别一个分隔符和一个扩展名。在 Postfix 2.10 及更早版本中,收件人分隔符只指定一个字符。

请参阅canonical(5)local(8)relocated(5)virtual(5),了解recipient_delimiter对别名、canonical、virtual 和 relocated 映射中查找的影响,并请参阅propagate_unmatched_extensions参数,了解如何将扩展名从一个电子邮件地址传播到另一个电子邮件地址。

command_execution_directoryforward_pathluser_relay 中使用时,${recipient_delimiter} 将被替换为收件人电子邮件地址中的实际收件人分隔符(Postfix 2.11 及更高版本),或被替换为main.cf的收件人分隔符参数值(Postfix 2.10 及更早版本)。

收件人分隔符不适用于邮件发送者守护进程地址、邮件管理员地址或双击地址。在默认的"owner_request_special= yes "设置下,收件人分隔符也不会应用于带有特殊 "owner-"前缀或特殊"-request "后缀的地址。

例如

# 处理 Postfix 风格的扩展名。
recipient_delimiter = +
                
# 同时处理 Postfix 和 qmail 扩展(Postfix 2.11 及更高版本)。
recipient_delimiter = +-
                
# 使用 .forward 来处理没有地址扩展名的邮件,以及带有
# 无法识别的地址扩展名的邮件。
forward_path = $home/.forward${recipient_delimiter}${extension},
    $home/.forward

reject_code (默认:554)

当远程 SMTP 客户端请求被 "拒绝 "限制拒绝时,Postfix SMTP 服务器的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

reject_tempfail_action (默认: defer_if_permit)

Postfix SMTP 服务器在拒绝类型限制因临时错误条件而失败时的操作。指定 "defer"(推迟)可立即推迟远程 SMTP 客户端请求。如果使用默认的"defer_if_permit"操作,Postfix SMTP 服务器会继续寻找拒收邮件的机会,只有在客户端请求会被接受的情况下才会将其推迟。

如需更精细的控制,请参阅:unverified_recipient_tempfail_actionunverified_sender_tempfail_actionunknown_address _tempfail_actionunknown_helo_hostname_tempfail_action

该功能在 Postfix 2.6 及更高版本中可用。

relay_clientcerts (默认值:空)

Postfix SMTP 服务器允许使用permit_tls_clientcerts功能访问的远程 SMTP 客户证书指纹或公钥指纹表(Postfix 2.9 及以后版本)。指纹摘要算法可通过smtpd_tls_fingerprint_digest参数进行配置(在 Postfix 2.5 版之前硬编码为 md5)。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5。现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要没有已知的针对旧算法的 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

Postfix 查找表采用(键、值)对的形式。由于我们只需要键,因此值可以自由选择,例如用户名或主机名:D7:04:2F:A7:0B:8C:A5:21:FA:31:77:E1:41:8A:EE:80 lutzpc.at.home

例如

relay_clientcerts = hash:/etc/postfix/relay_clientcerts

要进行更精细的控制,可使用check_ccert_access为每个客户端选择适当的access(5)策略。请参阅RESTRICTION_CLASS_README

该功能在 Postfix 2.2 版本中提供。

relay_destination_concurrency_limit (默认值:$ default_destination_concurrency_limit)。

通过中继报文传送传输方式向同一目的地并行传送的最大次数。该限制由队列管理器执行。消息传送传输名称是master.cf文件条目中的第一个字段。

该功能在 Postfix 2.0 及更高版本中可用。

relay_destination_recipient_limit (默认值:$ default_destination_recipient_limit)。

中继信息传送传输中每条信息的最大收件人数量。该限制由队列管理器执行。报文传送传输名称是master.cf文件条目中的第一个字段。

将该参数设置为 1 后,relay_destination_concurrency_limit的含义将从每个域的并发量变为每个接收者的并发量。

该功能在 Postfix 2.0 及更高版本中可用。

relay_domains (默认值:Postfix ≥ 3.0:空,Postfix < 3.0:$mydestination)

本系统将向哪些目标域(及其子域)转发邮件。有关如何使用relay_domains值的详情,请参阅有关permit_auth_destinationreject_unauth_destinationSMTP 收件人限制的说明。

$relay_domains匹配的域将通过$relay_transport邮件传输方式发送。SMTP 服务器使用$relay_recipient_maps验证收件人地址,并拒绝不存在的收件人。另请参阅ADDRESS_CLASS_README文件中的中继域地址类。

注意:Postfix 不会自动为将本系统列为主要或备份 MX 主机的域转发邮件。请参阅postconf(5)手册页面中的permit_mx_backup限制。

指定主机名或域名、"/file/name "模式或"type:table"查找表的列表,以逗号和/或空格分隔。用空格分隔长行,以空格开始下一行。/文件/名称 "模式会被其内容替换;"类型:表"查找表会在(父)域作为查找键出现时进行匹配。指定"!pattern "可从列表中排除域。仅 Postfix 2.4 及更高版本支持"!/file/name "形式。

域名的模式匹配受父域名匹配子域名参数值中是否存在"relay_domains"的控制。

relay_domains_reject_code (默认值:554)

当客户端请求被reject_unauth_destination收件人限制拒绝时,Postfix SMTP 服务器的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

relay_recipient_maps (默认值:空)

可选的查找表,包含与$relay_domains 匹配的域中的所有有效地址。将 @domain 作为通配符指定给没有有效收件人列表的域,这些域会成为反向散射邮件的来源:Postfix 会接受不存在的收件人的垃圾邮件,然后向无辜的人发送无法投递的邮件。从技术上讲,用$relay_recipient_maps列出的表是作为列表使用的:Postfix 只需要知道是否找到了查找字符串,而不会使用表格查找的结果。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

如果此参数为非空,则 Postfix SMTP 服务器将拒绝向未知中继用户发送邮件。此功能默认为关闭。

另请参阅ADDRESS_CLASS_README文件中的中继域地址类。

例如

relay_recipient_maps = hash:/etc/postfix/relay_recipients

该功能在 Postfix 2.0 及更高版本中可用。

relay_transport (默认:relay)

中继域地址类的默认邮件发送传输和下一跳目的地:与$relay_domains 匹配的收件人域。

对于中继域地址类中的收件人域:

指定一个形式为transport: nexthop的字符串,其中transportmaster.cf 中定义的邮件传输名称。

另请参阅ADDRESS_CLASS_README文件中的中继域地址类。

该功能在 Postfix 2.0 及更高版本中可用。

relayhost (默认值:空)

非本地邮件的下一跳目的地;优先于收件人地址中的非本地域名。当发件人匹配$sender_dependent_relayhost_maps 时,将不会使用此信息。

按优先级递减的顺序排列:

在内部网上,指定组织域名。如果内部 DNS 不使用 MX 记录,请指定内网网关主机的名称。

如果是 SMTP 发送,请以域名、主机名、主机名:服务、[主机名]:服务、[主机地址] 或 [主机地址]:服务的形式指定一个或多个目的地,中间用逗号或空格隔开。主机名]形式会关闭 MX 或 SRV 查找。Postfix 3.5 及更高版本支持多个目标地址。每个目标地址都会按指定顺序进行尝试。

如果 SMTP 目的地是负载平衡器,且没有替代目的地,请多次指定负载平衡器。如果没有重复信息,Postfix SMTP 客户端就不会在远程 SMTP 服务器发生故障后立即重新连接到同一个负载平衡器。

如果通过 UUCP 连接,请参阅UUCP_README文件获取有用信息。

例如

relayhost = $mydomain
relayhost = [gateway.example.com]
relayhost = mail1.example:587,mail2.example:587
relayhost = [an.ip.add.ress]

relocated_maps (默认值:空)

可选查找表,其中包含已不存在的用户或域的新联系信息。relocated(5) 中记录了表格格式和查找方法。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

如果使用此功能,请在更改后运行"postmap /etc/postfix/relocated"来构建必要的 DBM 或 DB 文件,然后再运行"postfix reload"来使更改可见。

例如

relocated_maps = dbm:/etc/postfix/relocated
relocated_maps = hash:/etc/postfix/relocated

remote_header_rewrite_domain (默认值:空)

如果remote_header_rewrite_domain参数值为非空,则重写或添加来自远程客户端邮件的邮件头,用remote_header_rewrite_domain参数中指定的域更新不完整的地址,并添加缺失的邮件头。

local_header_rewrite_clients参数控制 Postfix 将哪些客户端视为本地客户端。

例如

安全设置:将 "domain.invalid "添加到来自远程 SMTP 客户端的不完整头地址中,这样这些地址就不会与本地地址相混淆。

remote_header_rewrite_domain = domain.invalid

默认的纯粹设置:完全不重写来自远程客户端的报头。

remote_header_rewrite_domain =

require_home_directory (默认值:否)

在尝试发送邮件前,要求本地(8)收件人的主目录存在。默认情况下禁用此测试。对于向邮件服务器导入主目录的环境来说,该测试非常有用(不建议导入主目录)。

reset_owner_alias (默认值:否)

当向没有自己的所有者别名的子别名投递邮件时,重置local(8)投递代理对所有者别名属性的理解。

该功能在 Postfix 2.8 及更高版本中可用。对于较早版本的 Postfix,其行为与将此参数设置为 "是 "相同。

aliases(5) 所述,当一个别名有一个名为owner-name 的伴生别名时,该别名将取代信封的发件人地址,因此投递错误将报告给所有者别名,而不是发件人。建议邮件列表使用此配置。

 

所有者别名的一个鲜为人知的特性是,它还会强制local(8)发送代理将别名扩展中的本地和远程地址写入一个新的队列文件,而不是在别名扩展中的地址一出来就尝试向本地地址发送邮件。

将别名扩展中的本地地址写入新的队列文件,可以稳健地处理临时发送错误:一个本地成员的错误不会影响向列表中其他成员的发送。另一方面,本地地址从别名扩展出来后立即向其发送邮件则很脆弱:别名扩展中一个本地地址的临时错误会导致整个别名重复扩展,直到错误消失,或直到邮件在队列中过期。在这种情况下,一个列表成员的问题会导致向其他列表成员发送多条信息。

Postfix 2.8 及以后版本的默认行为是,当向没有自己的所有者别名的子别名发送邮件时,保留父别名的所有者别名属性。这样,该子别名的本地地址将被写入一个新的队列文件,而一个本地地址的临时错误将不会影响向其他邮件列表成员发送邮件。

遗憾的是,旧版本的 Postfix 在向没有自己所有者别名的子别名发送邮件时,会重置所有者别名属性。准确地说,这只会重置创建新队列文件的决定,而不会重置覆盖信封发件人地址的决定。一旦本地地址脱离子别名扩展,local(8)发送代理就会尝试发送这些地址。如果向子别名扩展中的任何地址投递失败并出现临时错误,整个邮件列表可能会重复扩展,直到邮件在队列中过期,从而导致向邮件列表成员多次投递同一邮件。

resolve_dequoted_address (默认值:是)

通过查找引号内的收件人地址,安全而非正确地解析收件人地址。

默认情况下,Postfix 地址解析器不会按照RFC 822 的规定引用地址的本地部分,因此额外的 @ 或 % 或 ! 操作符仍然可见。这种行为是安全的,但在技术上也是不正确的。

如果指定"resolve_dequoted_address= no",那么 Postfix 解析器就不会知道地址本地部分中的附加 @ 等操作符。这样,当 Postfix 为 Sendmail 系统提供备份 MX 服务时,就有可能利用用户@域@域地址进行隐蔽的邮件中继攻击。

resolve_null_domain (默认值:否)

解析以"@"空域结尾的地址,就像指定本地主机名一样,而不是将地址作为无效地址拒绝。

该功能在 Postfix 2.1 及更高版本中可用。早期版本总是将空域解析为本地主机名。

Postfix SMTP 服务器使用此功能来拒绝来自或发往以"@"空域结尾的地址的邮件,以及来自以"@"空域结尾的形式重写的地址的邮件。

resolve_numeric_domain (默认值:否)

将 "user@ipaddress "解析为 "user@[ipaddress]",而不是以地址无效为由拒绝。

该功能在 Postfix 2.3 及更高版本中可用。

respectful_logging (默认:参见 "postconf -d "输出)。

避免使用暗示 "白比黑好 "的日志。而应使用 "allowlist"(允许列表)、"denylist"(拒绝列表)及其变体。

该功能在 Postfix 3.6 及更高版本中可用。

rewrite_service_name (默认:rewrite)

地址重写服务的名称。该服务将地址改写为标准格式,并将其解析为(投递方式、下一跳主机、收件人)三重。

该功能在 Postfix 2.0 及更高版本中可用。

sample_directory (默认值:/etc/postfix)

包含 Postfix 配置文件示例的目录名称。从 Postfix 2.1 开始,这些文件已被postconf(5)手册页取代。

send_cyrus_sasl_authzid (默认值:否)

在使用默认设置 "否 "对远程 SMTP 或 LMTP 服务器进行身份验证时,不发送 SASL 授权标识 (authzid);只发送 SASL 授权标识 (authcid) 和 authcid 的密码。

非默认设置 "yes "可启用旧版本 Postfix 的行为。这些版本总是发送与 SASL authcid 相同的 SASL authzid,但这会导致与某些 SMTP 服务器的互操作性问题。

该功能在 Postfix 2.4.4 及更高版本中可用。

基于发件人的路由选择 (默认值:否)

不应使用该参数。在 Postfix 2.3 版中,它已被sender_dependent_relayhost_maps 所取代。

发件人密送映射 (默认值:空)

可选 BCC(盲抄)地址查询表,按信封发件人地址编制索引。当邮件从 Postfix 外部进入时,会添加 BCC 地址(不支持多个结果)。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

表格搜索顺序如下

注意:在 Postfix 2.3 及更高版本中,添加 BCC 地址就像指定 NOTIFY=NONE 一样。如果 BCC 地址无法投递,只要所有下游软件都执行RFC 3461,发件人就不会收到通知。

注意:在 Postfix 2.2 及更早版本中,当 BCC 地址无法投递时,发件人将收到通知。

注意:自动 BCC 收件人只针对新邮件生成。为避免邮件服务器循环,在 Postfix 内部转发邮件或 Postfix 自行生成邮件后,不会生成自动 BCC 收件人。

注意:自动 BCC 收件人受地址规范化(添加缺失域)、canonical_mapsmasquerade_domainsvirtual_alias_maps 的限制。

例如

Sender_bcc_maps = hash:/etc/postfix/sender_bcc

更改后,运行"postmap /etc/postfix/sender_bcc"。

该功能在 Postfix 2.1 及更高版本中可用。

发件人规范类 (默认:信封发件人、报头发件人)

哪些地址受发件人_典型映射(sender_canonical_maps)地址映射的影响。默认情况下,发件人地址映射适用于信封发件人地址和报头发件人地址。

指定一个或多个:信封发件人、标头发件人

该功能在 Postfix 2.2 及更高版本中可用。

发送端标准映射 (默认:空)

信封和标题发件人地址的可选地址映射查找表。表格格式和查找方法参见canonical(5)

例如:您想将发件人地址 "[email protected] "重写为 "[email protected]",但仍能向收件人地址 "[email protected] "发送邮件。

注意:$sender_canonical_maps 会在$canonical_maps 之前处理。

例如

sender_canonical_maps = hash:/etc/postfix/sender_canonical

发送端依赖的默认传输映射 (默认为空)。

全局default_transport参数设置的发件人覆盖。表格按信封发件人地址和 @ 域进行搜索。如果查询结果为 DUNNO,则搜索结束,不会覆盖全局default_transport参数设置。该信息会被transport(5)表覆盖。

此设置只影响默认域地址类(不匹配 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains、$virtual_mailbox_domains 或$relay_domains 的收件人域):

注意:这将覆盖default_transport,而不是transport_maps,因此预期的语法是default_transport 的语法,而不是transport_maps 的语法。具体来说,它不支持用于空传输、空 nexthop 或空电子邮件地址的transport_maps语法。

指定零个或多个 "type:name "查找表,以空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

出于安全考虑,该功能不允许在正则表达式映射中使用 $number 替换。

该功能在 Postfix 2.7 及更高版本中可用。

发送方依赖中继主机映射 (默认值:空)

全局relayhost参数设置的发件人覆盖。表格按信封发件人地址和 @ 域进行搜索。如果查询结果为 DUNNO,则搜索终止,不会覆盖全局relayhost参数设置(Postfix 2.6 及更高版本)。

按优先级递减的顺序排列:

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

出于安全考虑,该功能不允许在正则表达式映射中使用 $number 替换。

该功能在 Postfix 2.3 及更高版本中可用。

sendmail_fix_line_endings (默认值:始终)

控制 Postfix sendmail 命令如何将电子邮件行尾从 <CR><LF> 转换为 UNIX 格式 (<LF>)。

始终

始终转换以 <CR><LF> 结尾的邮件行。该设置是 Postfix 2.9 及更高版本的默认设置。

仅当第一行输入内容以 <CR><LF> 结尾时,才转换以 <CR><LF> 结尾的邮件行。此设置与 Postfix 2.8 及更早版本向后兼容。

从不

从不转换以 <CR><LF> 结尾的报文行。此设置只是为了完整起见。

该功能在 Postfix 2.9 及更高版本中可用。

sendmail_path (默认值:参见 "postconf -d "输出)。

Sendmail 兼容功能,用于指定 Postfixsendmail(1)命令的位置。该命令可用于向 Postfix 队列提交邮件。

服务名称 (只读)

Postfix 守护进程的master.cf服务名称。这可用于区分使用相同程序名的不同服务的日志记录。

master.cf条目示例

# Distinguish inbound MTA logging from submission and submissions logging.
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
    -o syslog_name=postfix/$service_name
submissions inet n      -       n       -       -       smtpd
    -o syslog_name=postfix/$service_name
                
# 区分出站 MTA 日志和入站中继日志。
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
    -o syslog_name=postfix/$service_name

该功能在 Postfix 3.3 及更高版本中可用。

服务节流时间 (默认值:60秒)

Postfixmaster(8)在分叉出现故障的服务器之前会等待多长时间。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

setgid_group (默认:postdrop)

set-gid Postfix 命令和组可写入的 Postfix 目录的组所有权。当该参数值发生变化时,需要重新运行"postfix set-permissions"(Postfix 2.0 及更早版本:"/etc/postfix/post-install set-permissions)。

shlib_directory (默认:参见 "postconf -d "输出)。

Postfix 动态链接库(libpostfix-*.so)的位置,以及在 dynamicmaps.cf 文件中有相对路径的 Postfix 数据库插件(postfix-*.so)的默认位置。在编译时禁用 Postfix 动态链接库和数据库插件时,shlib_directory参数默认为 "no",否则通常默认为 /usr/lib/postfix 或 /usr/local/lib/postfix。

备注

  • 使用shlib_directory指定的目录应仅包含与 Postfix 相关的文件。Postfix 动态链接库和数据库插件不应安装在 /usr/lib 或 /usr/local/lib 等 "公共 "系统目录下。不支持将 Postfix 动态链接库文件或数据库插件链接到非 Postfix 程序中。Postfix 动态链接库和数据库插件实现了 Postfix 内部的 API,这些 API 会在不保持兼容性的情况下发生变化。
  • 您可以在 Postfix 生成后更改shlib_directory的值。不过,您可能需要运行 ldconfig 或类似命令,以防止 Postfix 程序因找不到 libpostfix-*.so 文件而失败。如果将 libpostfix-*.so 文件保存在编译后的默认$shlib_directory位置,则不需要 ldconfig 命令。

该功能在 Postfix 3.0 及更高版本中可用。

show_user_unknown_table_name (默认值:是)

在 "未知用户 "回复中显示收件人表的名称。额外的细节会使故障排除变得更容易,但也会泄露与他人无关的信息。

该功能在 Postfix 2.0 及更高版本中可用。

showq_service_name (默认值:showq)

showq(8)服务的名称。该服务可生成邮件队列状态报告。

该功能在 Postfix 2.0 及更高版本中可用。

smtp_address_preference (默认值:any)

当目的地的 IPv6 和 IPv4 地址具有相同的 MX 优先级时,Postfix SMTP 客户端将首先尝试的地址类型("ipv6"、"ipv4 "或 "any")。除非inet_protocols设置同时启用 IPv4 和 IPv6,否则此功能无效。

Postfix SMTP 客户端地址首选项已发生变化。Postfix 2.8 的默认设置是 "ipv6";早期的实现是硬编码,优先选择 IPv6 而不是 IPv4。

在同时连接 IPv4 和 IPv6 的站点之间发送邮件的注意事项:

  • smtp_address_preference= ipv6 "设置不安全。在 IPv6 中断期间,即使目的地仍可通过 IPv4 到达,所有发送也将受到延迟。如果 Postfix 版本小于 3.3,且未执行"smtp_balance_inet_protocols",则邮件可能会滞留在队列中。出于类似原因,"smtp_address_preference= ipv4 "设置也不安全。
  • 设置"smtp_address_preference= any "是安全的。有了这个设置,再加上"smtp_balance_inet_protocols= yes"(默认设置),如果出现影响 IPv6 或 IPv4 的故障,只要不同时影响 IPv6 和 IPv4,就只有一半的交付会出现延迟。
  • 设置"smtp_address_preference= ipv4 "并不能解决远程服务器将通过 IPv6 接收的邮件视为 "垃圾邮件 "的问题(客户端 IPv6 地址的 PTR 或 AAAA 记录不良或丢失、网络邻居不良等)。相反,配置 Postfix 时应同时通过 IPv4 和 IPv6 接收邮件,并仅通过 IPv4 发送邮件。

该功能在 Postfix 2.8 及更高版本中可用。

smtp_address_verify_target (默认值:rcpt)

在电子邮件地址验证中,用于确定电子邮件地址是否可送达的 SMTP 协议阶段。指定 "rcpt "或 "data "之一。如果远程 SMTP 服务器在 DATA 命令后拒绝收件人,则需要使用后者。使用transport_maps可以有选择地应用此功能:

/etc/postfix/main.cf:
    transport_maps = hash:/etc/postfix/transport
/etc/postfix/transport:
    smtp-domain-that-verifies-after-data    smtp-data-target:
    lmtp-domain-that-verifies-after-data    lmtp-data-target:
/etc/postfix/master.cf:
    smtp-data-target    unix    -    -    n    -    -    smtp
        -o smtp_address_verify_target=data
    lmtp-data-target    unix    -    -    n    -    -    lmtp
        -o lmtp_address_verify_target=data

不加选择地使用 "数据 "目标不会造成任何损害,但会导致远程 SMTP/LMTP 服务器出现不必要的 "数据后连接丢失 "事件。

该功能在 Postfix 3.0 及更高版本中可用。

smtp_always_send_ehlo (默认值:是)

总是在 SMTP 会话开始时发送 EHLO。

如果使用"smtp_always_send_ehlo= no",Postfix SMTP 客户端只有在服务器问候语横幅中出现 "ESMTP "字样时才会发送 EHLO(例如:220 spike.porcupine.org ESMTP Postfix)。

smtp_balance_inet_protocols (默认值:是)

当远程目的地解析为 IPv4 和 IPv6 地址的组合时,确保 Postfix SMTP 客户端在遇到smtp_mx_address_limit 之前,能同时尝试两种地址类型。

这样,当目标地址主要解析为 IPv6 地址,而 smtp_address_limit 功能排除了大部分或全部 IPv4 地址,且目标地址无法通过 IPv6 到达时,就不会出现互操作性问题。

该功能在 Postfix 3.3 及更高版本中可用。

smtp_bind_address (默认值:空)

Postfix SMTP 客户端在进行 IPv4 连接时应绑定的可选数字网络地址。

这可以在main.cf文件中为所有 SMTP 客户端指定,也可以在master.cf文件中为特定客户端等指定:

/etc/postfix/master.cf:
    smtp ... smtp -o smtp_bind_address=11.22.33.44

请参阅smtp_bind_address_enforce,了解 Postfix 应如何处理错误(Postfix 3.7 及更高版本)。

注 1:当inet_interfaces指定的 IPv4 地址不超过一个,且该地址为非环回地址时,它将被自动用作smtp_bind_address。这支持虚拟 IP 托管,但在多主机防火墙上可能会有问题。更多详情,请参阅inet_interfaces文档。

注 2:地址信息可填写在[]内,但此处不需要填写此表。

smtp_bind_address6 (默认值:空)

Postfix SMTP 客户端在进行 IPv6 连接时应绑定的可选数字网络地址。

该功能在 Postfix 2.2 及更高版本中可用。

这可以在main.cf文件中为所有 SMTP 客户端指定,也可以在master.cf文件中为特定客户端等指定:

/etc/postfix/master.cf:
    smtp ... smtp -o smtp_bind_address6=1:2:3:4:5:6:7:8

请参阅smtp_bind_address_enforce,了解 Postfix 应如何处理错误(Postfix 3.7 及更高版本)。

注 1:当inet_interfaces指定的 IPv6 地址不超过一个,且该地址为非环回地址时,它将自动用作smtp_bind_address6。这支持虚拟 IP 托管,但在多主机防火墙上可能会有问题。更多详情,请参阅inet_interfaces文档。

注 2:地址信息可包含在[]内,但此处不建议使用此表格。

smtp_bind_address_enforce (默认值:否)

当 Postfix SMTP 客户端无法应用smtp_bind_addresssmtp_bind_address6设置时,推迟发送。默认情况下,Postfix SMTP 客户端会在记录警告后继续发送。

该功能在 Postfix 3.7 及更高版本中可用。

smtp_body_checks (默认值:空)

Postfix SMTP 客户端的受限body_checks(5)表。这些表在邮件发送过程中进行搜索。无法执行更改投递时间或目的地的操作。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_cname_overrides_servername (默认值:取决于版本)。

当远程 SMTP 服务器名称是 DNS CNAME 时,在日志记录、SASL 密码查询、TLS 策略决策或 TLS 证书验证时,用 CNAME 扩展的结果替换服务器名称。值 "no "可加强 Postfixsmtp_tls_per_site基于主机名的策略,防止 DNS CNAME 记录中的虚假主机名信息,并使 SASL 密码文件查找更可预测。这是 Postfix 2.3 的默认设置。

当使用安全 DNS 查询(smtp_dns_support_level= dnssec)验证 DNS CNAME 记录时,始终允许它们覆盖上述服务器名称(Postfix 2.11 及更高版本)。

该功能在 Postfix 2.2.9 及更高版本中可用。

smtp_connect_timeout (默认值:30秒)

Postfix SMTP 客户端完成 TCP 连接的时限,或 0(使用操作系统内置时限)。

如果在截止时间内无法建立连接,Postfix SMTP 客户端会尝试邮件交换列表中的下一个地址。指定 0 表示禁用时间限制(即使用操作系统实现的任何超时)。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_connection_cache_destinations (默认值:空)

为指定目的地永久启用 SMTP 连接缓存。通过 SMTP 连接缓存,邮件事务完成后不会立即关闭连接。相反,连接会保持打开状态,最长不超过$smtp_connection_cache_time_limit秒。这允许在其他邮件发送中重复使用连接,并可提高邮件发送性能。

指定以逗号或空格分隔的目的地或伪目的地列表:

  • 如果邮件发送时没有中继主机:域名(电子邮件地址的右侧,没有数字 IP 地址周围的[])、
  • 如果邮件通过中继主机发送:中继主机名(不含 [] 或非默认 TCP 端口),在main.cf或传输映射中指定、
  • 如果邮件通过 UNIX 域套接字发送:路径名(不含 unix: 前缀)、
  • 一个 /file/name 文件,其中包含上述定义的域名和/或中继主机名
  • 类型:表",左侧为域名和/或中继主机名类型:表 "右侧的查询结果将被忽略。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_connection_cache_on_demand (默认值:是)

当目标地址的活动队列中有大量邮件时,暂时启用 SMTP 连接缓存。通过 SMTP 连接缓存,邮件事务完成后不会立即关闭连接。相反,连接会保持开放状态,最长可达$smtp_connection_cache_time_limit秒。这允许在其他邮件发送中重复使用连接,并可提高邮件发送性能。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_connection_cache_time_limit (默认值:2 秒)

启用 SMTP 连接缓存后,未使用的 SMTP 客户端套接字在关闭前保持打开的时间。未经远程站点许可,请勿指定更大的值。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_connection_reuse_count_limit (默认值:0)

启用 SMTP 连接缓存后,SMTP 会话在关闭前可重复使用的次数,或为零(无限制)。重复使用次数限制为 N 时,一个连接最多可使用 N+1 次。

注意:此功能不安全。当一个大流量目标地址有多个入站 MTA 时,速度最慢的入站 MTA 将吸引最多连接到该目标地址。而smtp_connection_reuse_time_limit功能则不存在这种限制。

Postfix 2.11 中提供了这一功能。

smtp_connection_reuse_time_limit (默认值:300 秒)

Postfix 重复使用 SMTP 连接的时间。计时器从连接启动时开始计时(即包括连接、问候和 helo 延迟,以及后续邮件发送事务的延迟)。

该功能可解决远程 SMTP 服务器的性能稳定性问题。这个问题并非 Postfix 独有:当任何 MTA 向拥有多个 MX 主机的站点发送大量 SMTP 电子邮件时,都可能出现这个问题。

当一组 MX 主机中的一台比其他主机慢时,问题就开始出现了。尽管 SMTP 客户连接到快速和慢速 MX 主机的概率相同,但慢速 MX 主机最终会比快速 MX 主机拥有更多的同时入站连接,因为慢速 MX 主机需要更多时间来处理每个客户请求。

慢速 MX 主机成为连接吸引器。如果一台 MX 主机的速度比其他 MX 主机慢 N 倍,除非有多于 N 台速度快的 MX 主机来抵消这种影响,否则它将主导邮件发送延迟。如果 MX 主机的数量少于 N,邮件发送延迟实际上就是最慢 MX 主机的速度除以 MX 主机总数。

该解决方案使用连接缓存的方式与 Postfix 2.2 版本不同。通过限制一个连接可重复使用的时间(而不是限制通过该连接发送的数量),Postfix 不仅恢复了同时连接在一组 MX 主机上分布的公平性,还有利于通过性能良好的连接进行发送,这正是我们想要的。

默认重用时限为 300 秒,与各种 smtp 交易超时相当,后者是对慢速传输最大超时延迟的合理估计。请注意,在默认连接重用时限内,主机可能会通过单个连接接受数千条信息。这个数字比 Postfix 2.2 版默认的每个缓存连接 10 封邮件的限制要大得多。事实可能证明有必要降低这一限制,以避免与 MTA 出现互操作性问题,因为 MTA 在通过单个连接传送大量信息时会出现错误。当平均连接和邮件发送延迟超过重用时间限制时,降低重用时间限制有可能失去连接重用的好处。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_data_done_timeout (默认值:600 秒)

Postfix SMTP 客户端发送 SMTP". "和接收远程 SMTP 服务器响应的时限。

如果在最后期限内没有收到回复,则会记录警告,说明邮件可能会被多次投递。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_data_init_timeout (默认:120 秒)

Postfix SMTP 客户端发送 SMTP DATA 命令和接收远程 SMTP 服务器响应的时限。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_data_xfer_timeout (默认值:180 秒)

Postfix SMTP 客户端发送 SMTP 邮件内容的时间限制。当连接无进展的时间超过$smtp_data_xfer_timeout秒数时,Postfix SMTP 客户端会终止传输。

时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_defer_if_no_mx_address_found (默认值:否)

当没有 MX 记录解析到 IP 地址时,推迟邮件发送。

默认情况(否)是将邮件退回为无法投递。在 Postfix 旧版本中,默认情况下会一直尝试投递邮件,直到有人修复了 MX 记录或邮件太旧。

注意:Postfix SMTP 客户端总是忽略与本地 MTA 本身具有相同或更差优先级的 MX 记录。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_delivery_status_filter (默认值:$ default_delivery_status_filter)

smtp(8)发送代理的可选过滤器,用于更改成功或失败发送的发送状态代码或说明文字。详见default_delivery_status_filter

注意:该功能可修改 Postfix SMTP 客户端错误或非错误消息,这些消息可能来自远程 SMTP 服务器响应,也可能不是。相比之下,smtp_reply_filter功能只修改远程 SMTP 服务器响应。

smtp_destination_concurrency_limit (默认值:$ default_destination_concurrency_limit)。

通过 smtp 消息传送传输向同一目的地并行传送的最大次数。该限制由队列管理器执行。消息传送传输名称是master.cf文件条目中的第一个字段。

smtp_destination_recipient_limit (默认值:$ default_destination_recipient_limit)。

smtp 信息传送传输中每条信息的最大收件人数量。该限制由队列管理器执行。信息传送传输名称是master.cf文件条目中的第一个字段。

将该参数设置为 1 后,smtp_destination_concurrency_limit的含义将从每个域的并发量变为每个收件人的并发量。

smtp_discard_ehlo_keyword_address_maps (默认值:空)

以远程 SMTP 服务器地址为索引的查找表,包含不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,Postfix SMTP 客户端将忽略来自远程 SMTP 服务器的 EHLO 响应。详情请参阅smtp_discard_ehlo_keywords。为与smtpd_discard_ehlo_keyword_address_maps 保持一致,该表未按主机名编制索引。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_discard_ehlo_keywords (默认值:空)

不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,Postfix SMTP 客户端将忽略来自远程 SMTP 服务器的 EHLO 响应。

该功能在 Postfix 2.2 及更高版本中可用。

备注

smtp_dns_reply_filter (默认值:空)

Postfix SMTP 客户端 DNS 查找结果的可选过滤器。指定零个或多个查找表。按照给定的顺序搜索查找表,以查找与 DNS 查找结果是否匹配的结果,并转换为以下形式:

    name ttl class type preference value

类别字段始终为 "IN",首选项字段只存在于 MX 记录中,主机、域等名称以". "结尾,这些名称为 ASCII 格式(如果是 UTF8 名称,则为 xn-mumble 格式)。

找到匹配后,表查询结果会指定一个操作。默认情况下,表查询和操作名称不区分大小写。目前只执行了IGNORE操作。

备注

例如:在 Postfix SMTP 客户端 DNS 查找中忽略 Google AAAA 记录,因为 Google 有时会硬性拒绝来自 IPv6 客户端、具有有效 PTR 等记录的邮件。

/etc/postfix/main.cf:
    smtp_dns_reply_filter = pcre:/etc/postfix/smtp_dns_reply_filter
                
/etc/postfix/smtp_dns_reply_filter:
    # /domain ttl IN AAAA address/ action, all case-insensitive.
    # 注意:域名以". "结尾。
    /^\S+\.google\.com\.\s+\S+\s+\S+\s+AAAA\s+/ IGNORE

该功能在 Postfix 3.0 及更高版本中可用。

smtp_dns_resolver_options (默认值:空)

Postfix SMTP 客户端的 DNS 解析器选项。指定以下零个或多个选项,用逗号或空白分隔。选项名称区分大小写。某些选项涉及在 /etc/resolv.conf 文件或类似文件中指定的域名。

res_defnames

将当前域名附加到单组件名称(不包含". "字符的名称)。这可能会产生不正确的结果,是 Postfix 2.8 之前的硬编码行为。

res_dnsrch

在当前域和父域中搜索主机名。这可能会产生不正确的结果,因此不建议使用。

该功能在 Postfix 2.8 及更高版本中可用。

smtp_dns_support_level (默认值:空)

Postfix SMTP 客户端支持 DNS 的级别。如果"smtp_dns_support_level"的默认值为空,传统的"disable_dns_lookups"参数将控制 Postfix SMTP 客户端是否启用 DNS,否则传统参数将被忽略。

请指定以下选项之一:

禁用 DNS 查询。不执行 MX 查询,主机名到地址的查询无条件为 "本地"。此设置不适合向公共互联网发送邮件的主机。一些过时的使用说明文档建议在某些配置中使用 content_filters(内容过滤器)禁用 DNS 查找。现在已不再需要这样做,也不建议这样做。

启用

启用 DNS 查询。未用"[]"括起来的 Nexthop 目的地域名将接受 MX 查询。如果"smtp_host_lookup"参数值中包含 "dns "和 "native",则将首先查询 DNS 以解析 MX-host A 记录,如果在 DNS 中找不到答案,则进行 "native "查询。

dnssec

启用DNSSEC查询。dnssec "设置与上述 "启用 "设置有以下不同:

  • 任何 MX 查询都将设置 RES_USE_DNSSEC 和 RES_USE_EDNS0,以请求 DNSSEC 验证的响应。如果 MX 响应已通过 DNSSEC 验证,则相应的主机名将被视为已通过验证。
  • 已验证的主机名的地址查询也会被验证(当然,前提是"smtp_host_lookup"包含 "dns",见下文)。
  • 启用 DNSSEC 的主机名到地址解析的临时故障会阻止任何 "本地 "查询。只有在 DNSSEC 查询严重失败(NODATA 或 NXDOMAIN)时,才会进行额外的 "本地 "查询。

Postfix SMTP 客户端认为非 MX 的"[nexthop]"和"[nexthop]:port "目的地等同于静态验证的 MX 记录,其形式为 "nexthop.IN MX 0 nexthop"。因此,开启 "dnssec "支持后,经过验证的主机名到地址查询适用于任何"[nexthop]"或"[nexthop]:port "目的地的 nexthop 域。对于 LMTP 的 "inet:host "和 "inet:host:port "目的地也是如此,因为 LMTP 主机名从不受 MX 查询的限制。

只有当您计划使用danedane-onlyTLS 安全级别时,才建议使用 "dnssec "设置,否则在 Postfix 中启用 DNSSEC 支持不会提供额外的安全性。Postfix DNSSEC 支持依赖于验证 DNSSEC 签名的上游递归名称服务器。这样的 DNS 服务器将始终过滤掉伪造的 DNS 响应,即使 Postfix 本身未配置使用 DNSSEC。

使用 Postfix DANE 支持时,"smtp_host_lookup"参数应包含 "dns",因为DANE不适用于通过 "本地 "查询解析的主机。

如上所述,Postfix 不是验证存根解析器;它依赖系统配置的 DNSSEC 验证递归名称服务器来执行所有 DNSSEC 验证。由于该名称服务器的 DNSSEC 验证响应是完全可信的,因此强烈建议 MTA 主机在环回地址上监听本地 DNSSEC 验证递归缓存名称服务器,并将其配置为仅使用该名称服务器进行所有查询。否则,Postfix 仍有可能受到中间人攻击,被伪造来自递归名称服务器的响应。

要支持 DNSSEC,Postfix 版本必须针对合理现代的 DNS 解析器(3) 库进行编译,并实现 RES_USE_DNSSEC 和 RES_USE_EDNS0 解析器选项。

该功能在 Postfix 2.11 及更高版本中可用。

smtp_enforce_tls (默认值:否)

执行模式:要求远程 SMTP 服务器使用 TLS 加密,且绝不以明文方式发送邮件。这还要求远程 SMTP 服务器主机名与远程服务器证书中的信息相匹配,并且远程 SMTP 服务器证书由 Postfix SMTP 客户端信任的 CA 签发。如果证书未通过验证或主机名不匹配,发送将被推迟,邮件将留在队列中。

服务器主机名将与 SubjectAlternativeName 中作为 dNSNames 提供的所有名称相匹配。如果没有指定 dNSNames,则检查 CommonName。该行为可通过smtp_tls_enforce_peername选项进行更改。

该选项只有在确定只连接到支持RFC 2487_ 并提供有效服务器证书的服务器时才有用。典型用途是将所有电子邮件发送到专用邮件集线器的客户端。

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtp_tls_security_level

smtp_fallback_relay (默认值:$fallback_relay)

可选的中继目的地列表,在找不到 SMTP 目的地或由于非永久性错误导致发送失败时使用。在 Postfix 2.2 及更早版本中,该参数被称为fallback_relay

默认情况下,smtp_fallback_relay为空,邮件会在找不到目的地时返回发件人,并在由于非永久性错误导致发送失败后推迟发送。

在批量发送电子邮件时,在同一台主机上运行后备中继 MTA 是有好处的,这样它就可以重复使用发件人 IP 地址。这可以加快因基于 IP 的信誉系统(灰名单等)而延迟的发送速度。

后备中继必须是 SMTP 目的地。请指定域、主机、主机:端口、[主机]:端口、[地址]或[地址]:端口;[主机]形式将关闭 MX 查询。如果指定多个 SMTP 目的地,Postfix 将按指定顺序尝试它们。

为防止邮件在 MX 主机和后备主机之间循环,Postfix 2.2 及更高版本将不对其作为 MX 主机的目的地使用后备中继(假设已打开 DNS 查询)。

smtp_generic_maps (默认值:空)

在 Postfix SMTP 客户端中执行地址重写的可选查找表,通常用于在互联网上发送邮件时将本地有效地址转换为全球有效地址。当本地机器没有自己的互联网域名,而是使用localdomain.local这样的域名时,就需要这样做。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

表格式和查找方法在generic(5) 中有所说明;示例见ADDRESS_REWRITING_READMESTANDARD_CONFIGURATION_README文档。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_header_checks (默认值:空)

Postfix SMTP 客户端的限制header_checks(5)表。这些表在邮件发送过程中进行搜索。无法执行更改投递时间或目的地的操作。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_helo_name (默认值:$myhostname)

要在 SMTP HELO 或 EHLO 命令中发送的主机名。

默认值为机器主机名。指定主机名或 [ip.add.re.ss]。

这些信息可以在main.cf文件中为所有 SMTP 客户端指定,也可以在master.cf文件中为特定客户端指定:

/etc/postfix/master.cf:
    mysmtp ... smtp -o smtp_helo_name=foo.bar.com

该功能在 Postfix 2.0 及更高版本中可用。

smtp_helo_timeout (默认值:300 秒)

Postfix SMTP 客户端发送 HELO 或 EHLO 命令以及接收远程 SMTP 服务器初始响应的时限。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_host_lookup (默认值:dns)

Postfix SMTP 客户端用于查找主机 IP 地址的机制。禁用 DNS 查询时,此参数将被忽略(参见:disable_ dns _lookupssmtp_dns_support_level)。如果同时列出 "dns "和 "native "机制,则总是先尝试 "dns "机制,再尝试 "native "机制。

请指定以下选项之一:

dns

主机可在 DNS(首选)中找到。

本地人

仅使用本地命名服务(nsswitch.conf 或同等机制)。

dns、本地

对于 DNS 中找不到的主机,使用本地服务。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_line_length_limit (默认值:998)

Postfix 通过 SMTP 发送的邮件标题和正文行的最大长度。此限制不包括每行末尾的 <CR><LF>。较长行将通过插入"<CR><LF><SPACE>"来断开,以尽量减少对 MIME 格式邮件的损害。指定 0 则禁用此限制。

Postfix 的限制是 998 个字符(不包括 <CR><LF>),这与 SMTP 的限制 1000 个字符(包括 <CR><LF>)一致。Postfix 2.8 及更早版本的 Postfix 限制为 990 个字符。

smtp_mail_timeout (默认值:300 秒)

Postfix SMTP 客户端发送 MAIL FROM 命令和接收远程 SMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_mime_header_checks (默认值:空)

Postfix SMTP 客户端的受限 mime_header_checks(5)表。这些表在邮件发送过程中进行搜索。无法执行更改投递时间或目的地的操作。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_min_data_rate (默认值:500)

使用smtp_per_request_deadline 启用最后期限时,DATA 请求的最小明文数据传输速率(字节/秒)。在写操作传输了 N 个明文信息字节(可能经过 TLS 加密),并且 DATA 请求的截止时间被该写操作的已用时间递减后,DATA 请求的截止时间会以 N/smtp_min_data_rate 秒递增。但是,截止时间的递增绝对不会超过用smtp_data_xfer_timeout 指定的时限。

该功能在 Postfix 3.7 及更高版本中可用。

smtp_mx_address_limit (默认值:5)

Postfix SMTP 客户端邮件交换器查询可产生的最大 MX(邮件交换器)IP 地址数,或 0(无限制)。在 Postfix 2.3 版之前,该限制默认为禁用。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_mx_session_limit (默认值:2)

Postfix SMTP 客户端放弃或发送到后备中继主机前,每次发送请求的最大 SMTP 会话数,或 0(无限制)。此限制忽略了未能完成 SMTP 初始握手(Postfix 2.2 及以前版本)或未能完成 EHLO 和 TLS 握手(Postfix 2.3 及以后版本)的会话。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_nested_header_checks (默认值:空)

Postfix SMTP 客户端的受限嵌套标题检查(5)表。这些表在邮件发送过程中进行搜索。更改投递时间或目的地的操作不可用。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_never_send_ehlo (默认值:否)

绝不在 SMTP 会话开始时发送 EHLO。另请参阅smtp_always_send_ehlo参数。

smtp_per_record_deadline (默认值:否)

更改 smtp_*_timeout 时限的行为,从每次读取或写入系统调用的时限,改为发送或接收完整记录(SMTP 命令行、SMTP 响应行、SMTP 消息内容行或 TLS 协议消息)的时限。这就限制了敌对对等程序每次一个字节地传输数据所造成的影响。

注意:启用每条记录截止时间后,超时时间过短可能会导致 TLS 在速度很慢的网络连接上出现问题。原因是 TLS 协议报文最长可达 16 kbytes(TLSv1),而且必须在每条记录截止时间内发送或接收整个 TLS 协议报文。

该功能在 Postfix 2.9-3.6 中可用。在较早的 Postfix 版本中,该行为与将此参数设置为 "否 "相同。Postfix 3.7 及更高版本使用smtp_per_request_deadline

smtp_per_request_deadline (默认值:否)

更改 smtp_*_timeout 时限的行为,从每次纯文本或 TLS 读写调用的时限,改为发送完整 SMTP 请求和接收完整 SMTP 响应的合并时限。截止时间只限制等待明文或 TLS 读写调用的时间,不限制其他时间。每个请求的截止时间限制了敌对对等程序每次一个字节地传输数据所造成的影响。

请参阅smtp_min_data_rate,了解在数据阶段如何管理每个请求的截止时间。

注意:启用按请求截止时间后,较短的时间限制可能会导致 TLS 在速度很慢的网络连接上出现问题。原因是 TLS 协议报文最长可达 16 kbytes(使用 TLSv1),而整个 TLS 协议报文必须在按请求截止时间内传输。

该功能在 Postfix 3.7 及更高版本中可用。Postfix 2.9-3.6 中有一个较弱的功能,称为smtp_per_record_deadline

该功能在 Postfix 3.7 及更高版本中可用。

smtp_pix_workaround_delay_time (默认值:10秒)

Postfix SMTP 客户端在发送".<CR><LF>"之前会停顿多长时间,以便绕过 PIX 防火墙的"<CR><LF>.<CR><LF>"错误。

如果选择的时间太短,在通过慢速网络连接发送大容量信息时,这种变通方法就会失效。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_pix_workaround_maps (默认值:空)

以远程 SMTP 服务器地址为索引的查找表,针对 CISCO PIX 防火墙漏洞提供按目的地的变通方法。为了与smtp_discard_ehlo_keyword_address_maps 保持一致,该表未按主机名编制索引。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

该功能在 Postfix 2.4 及更高版本中可用。

smtp_pix_workaround_threshold_time (默认值:500秒)

在 Postfix SMTP 客户端打开 PIX 防火墙的"<CR><LF>.<CR><LF>"错误变通方法之前,邮件必须排队等候多长时间,才能通过防火墙以 "smtp fixup "模式发送。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

默认情况下,对于排队时间少于 500 秒的邮件,变通方法是关闭的。换句话说,变通方法通常会在第一次尝试投递时关闭。

指定 0 以在第一次尝试传送时启用 PIX 防火墙"<CR><LF>.<CR><LF>"错误解决办法。

smtp_pix_workarounds (默认值:disable_esmtp、delay_dotcrlf)。

指定零个或多个 CISCO PIX 防火墙漏洞变通方法的列表。这些变通方法由 Postfix SMTP 客户端实现。变通方法名称以逗号或空格分隔,不区分大小写。该参数设置可被每个目的地的smtp_pix_workaround_maps设置所推翻。

延迟_dotcrlf

在信息内容结束后发送".<CR><LF>"之前插入延迟。延迟时间取决于 smtp_pix_workaround_delay_timesmtp_pix_workaround_threshold_time参数设置。

禁用 ESMTP

禁用所有扩展 SMTP 命令:发送 HELO 而不是 EHLO。

该功能在 Postfix 2.4 及更高版本中可用。默认设置向后兼容 Postfix 早期版本。

smtp_quit_timeout (默认值:300 秒)

Postfix SMTP 客户端发送 QUIT 命令和接收远程 SMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_quote_rfc821_envelope (默认值:是)

按照RFC 5321 的要求,在 Postfix SMTP 客户端 MAIL FROM 和 RCPT TO 命令中引用地址。这包括在以". "结尾的地址本地部分加上引号。

默认情况下遵循RFC 5321。如果必须向损坏的 SMTP 服务器发送邮件,请在master.cf 中配置一个特殊的 SMTP 客户端:

/etc/postfix/master.cf:
    broken-smtp . . smtp -o smtp_quote_rfc821_envelope=no

并使用transport(5)表将有关目的地的邮件路由到 "broken-smtp "信息交付。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_randomize_addresses (默认值:是)

随机调整等优先 MX 主机地址的顺序。这是 Postfix SMTP 客户端的一项性能功能。

smtp_rcpt_timeout (默认值:300 秒)

Postfix SMTP 客户端发送 SMTP RCPT TO 命令和接收远程 SMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtp_reply_filter (默认值:空)

一种逐行转换远程 SMTP 服务器回复的机制。这是一种最后的工具,用于解决服务器回复破坏与 Postfix SMTP 客户端互操作性的问题。其他用途还包括故障注入,以测试 Postfix 对无效回复的处理。

备注

  • 如果是多行回复,Postfix SMTP 客户端会使用最后一行回复的 SMTP 回复代码和增强状态代码。
  • 数字 SMTP 回复代码 (XYZ) 优先于增强状态代码 (X.Y.Z)。当增强状态代码的初始数字与 SMTP 回复代码的初始数字不同,或没有增强状态代码时,Postfix SMTP 客户端会使用通用增强状态代码 (X.0.0) 代替。

指定"type:table"查找表的名称。搜索字符串是从远程 SMTP 服务器接收到的单个 SMTP 回复行,但尾部的 <CR><LF> 会被删除。查找成功后,结果将取代单个 SMTP 回复行。

例如

/etc/postfix/main.cf:
    smtp_reply_filter = pcre:/etc/postfix/reply_filter
                
/etc/postfix/reply_filter:
    # 将垃圾内容转换为 "250-filler...",使其看起来像
    # 多行回复中的一行。只要语法正确,用什么替换并不重要。  Postfix
    # SMTP 客户端将使用最后一行的数字 SMTP 回复代码 # 和增强状态代码。
    # 
    # 
    !/^([2-5][0-9][0-9]($|[- ]))/ 250-filler for garbage

Postfix 2.7 中提供了这一功能。

smtp_rset_超时 (默认值:20 秒)

Postfix SMTP 客户端发送 RSET 命令和接收远程 SMTP 服务器响应的时限。SMTP 客户端发送 RSET 是为了完成收件人地址探测,或验证缓存会话是否仍然可用。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_sasl_auth_cache_name (默认值:空)

可选表,用于防止同一远程 SMTP 服务器主机名、用户名和密码重复出现 SASL 验证失败。每个表(键、值)对都包含服务器名称、用户名和密码以及完整的服务器响应。当远程 SMTP 服务器以 535 回复代码拒绝验证尝试时,就会存储这些信息。只要smtp_sasl_password_maps信息不改变,只要smtp_sasl_auth_cache_name信息不过期(请参阅smtp_sasl_auth_cache_time),Postfix SMTP 客户端就会避免使用相同的服务器、用户名和密码进行 SASL 验证尝试,而是使用smtp_sasl_auth_soft_bounce配置参数控制邮件的退回或延迟。

每个目的地的交付并发量应为 1(例如,"smtp_destination_concurrency_limit= 1"、"relay_destination_concurrency_limit= 1 "等),否则多个交付代理可能会同时出现登录失败。

表格必须通过 proxywrite 服务访问,即地图名称必须以"proxy: "开头。表格应存储在用data_directory参数指定的目录下。

该功能使用加密哈希算法保护明文密码,并要求 Postfix 在编译时支持 TLS。

例如

smtp_sasl_auth_cache_name = proxy:btree:/var/lib/postfix/sasl_auth_cache

该功能在 Postfix 2.5 及更高版本中可用。

smtp_sasl_auth_cache_time (默认:90d)

smtp_sasl_auth_cache_name条目被删除前的最大使用年限。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 d(天)。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_sasl_auth_enable (默认值:否)

在 Postfix SMTP 客户端中启用 SASL 身份验证。默认情况下,Postfix SMTP 客户端不使用任何身份验证。

例如

smtp_sasl_auth_enable = yes

smtp_sasl_auth_soft_bounce (默认值:是)

当远程 SMTP 服务器以 535 回复代码拒绝 SASL 身份验证请求时,应推迟邮件的发送,而不是以无法投递为由退回邮件。后一种行为在 Postfix 2.5 版之前是硬编码。

注意:设置 "yes "会覆盖全局soft_bounce参数,而设置 "no "则不会。

例如

# Postfix 2.5 的默认值
smtp_sasl_auth_soft_bounce = yes
# 旧的硬编码默认值
smtp_sasl_auth_soft_bounce = no

该功能在 Postfix 2.5 及更高版本中可用。

smtp_sasl_mechanism_filter (默认值:空)

如果非空,则表示 Postfix SMTP 客户端对远程 SMTP 服务器提供的 SASL 机制列表的过滤。不同的客户端和服务器实现可能支持不同的机制列表;默认情况下,Postfix SMTP 客户端将使用两者的交集。smtp_sasl_mechanism_filter指定了可选的第三个交集机制列表。

指定机制名称、"/file/name "模式或"type:table"查找表。类型:表"查找的右侧结果将被忽略。指定"!pattern "可从列表中排除机制名称。仅 Postfix 2.4 及更高版本支持"!/file/name "格式。

该功能在 Postfix 2.2 及更高版本中可用。

例如

smtp_sasl_mechanism_filter = plain, login
smtp_sasl_mechanism_filter = /etc/postfix/smtp_mechs
smtp_sasl_mechanism_filter = !gssapi, !login, static:rest

smtp_sasl_password_maps (默认值:空)

可选的 Postfix SMTP 客户端查询表,每个发件人、远程主机名或下一跳域都有一个用户名:密码条目。只有启用了发件人身份验证时,才会按发件人查找。如果找不到用户名:密码条目,Postfix SMTP 客户端将不会尝试对远程主机进行身份验证。

使用smtp_sasl_password_result_delimiter指定用户名和密码之间的分隔符。

Postfix SMTP 客户端会在进入 chroot jail 之前打开查找表,因此可以将密码文件保留在 /etc/postfix 中。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

smtp_sasl_password_result_delimiter (默认值: :)

sasl_passwd_maps 查找结果中用户名和密码之间的分隔符。指定一个不在用户名中出现的非空格字符。

该功能在 Postfix ≥ 3.9 中可用。

smtp_sasl_path (默认值:空)

Postfix SMTP 客户端传递给通过smtp_sasl_type 选择的 SASL 插件实现的特定实现信息。通常,这将指定配置文件或会合点的名称。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_sasl_security_options (默认:noplaintext,noanonymous)

Postfix SMTP 客户端 SASL 安全选项;从 Postfix 2.3 开始,可用功能列表取决于使用smtp_sasl_type 选择的 SASL 客户端实现。

cyrus客户端 SASL 实现定义了以下安全功能:

指定以下零项或多项:

不解释

禁止使用明文密码的方法。

禁止方法受到主动(非字典)攻击。

词典

禁止受被动(字典)攻击的方法。

匿名

禁止使用允许匿名身份验证的方法。

相互验证

只允许提供相互验证的方法(SASL 版本 1 不提供)。

例如

smtp_sasl_security_options = noplaintext

smtp_sasl_tls_security_options (默认值:$smtp_sasl_security_options)

Postfix SMTP 客户端用于 TLS 加密 SMTP 会话的 SASL 验证安全选项。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_sasl_tls_verified_security_options (默认值:$smtp_sasl_tls_security_options)

Postfix SMTP 客户端在使用经过验证的服务器证书的 TLS 加密 SMTP 会话中使用的 SASL 身份验证安全选项。

当邮件发送到收件人网域的公共 MX 主机时,服务器证书默认为可选项,即使证书验证失败也会继续发送。对于通过需要 SASL 身份验证的提交服务发送的邮件,只有在与服务器的连接经过强加密验证了服务器身份后才发送明文密码可能是合适的。

通过smtp_sasl_tls_verified_security_options参数,只有当与服务器的安全连接可用时,才能启用明文机制。受此策略约束的提交服务器必须拥有可验证的证书或提供合适的非明文 SASL 机制。

该功能在 Postfix 2.6 及更高版本中可用。

smtp_sasl_type (默认值:cyrus)

Postfix SMTP 客户端用于身份验证的 SASL 插件类型。postconf -A"命令列出了可用的类型。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_send_dummy_mail_auth (默认值:否)

在 SASL 验证的 SMTP 会话中,是否在 MAIL FROM 命令中附加 "AUTH=<>"选项。默认情况下不发送此选项,以避免远程 SMTP 服务器出现故障。在 Postfix 2.9 之前,行为与"smtp_send_dummy_mail_auth= yes "相同。

该功能在 Postfix 2.9 及更高版本中可用。

smtp_send_xforward_command (默认值:否)

当 Postfix SMTP 服务器 EHLO 响应宣布支持 XFORWARD 时,发送非标准 XFORWARD 命令。

这允许 Postfix SMTP 发送代理(用于将邮件注入内容过滤器)将原始客户端的名称、地址、协议和 HELO 名称转发给内容过滤器和下游队列 SMTP 服务器。这可以产生比 localhost[127.0.0.1] 等更有用的日志。

该功能在 Postfix 2.1 及更高版本中可用。

smtp_sender_dependent_authentication (默认值:否)

在 Postfix SMTP 客户端中启用发件人身份验证;该功能仅适用于 SASL 身份验证,并禁用 SMTP 连接缓存,以确保来自不同发件人的邮件将使用适当的凭证。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_skip_4xx_greeting (默认值:是)

跳过发送 4XX 状态代码(走开,稍后再试)的 SMTP 服务器。

默认情况下,Postfix SMTP 客户端在下一个邮件交换器上移动。如果 Postfix 应立即推迟发送,请指定"smtp_skip_4xx_greeting= no"。

该功能在 Postfix 2.0 及更早版本中可用。以后的 Postfix 版本总是跳过显示 4XX 状态代码的远程 SMTP 服务器。

smtp_skip_5xx_greeting (默认值:是)

跳过显示 5XX 状态代码的远程 SMTP 服务器。

默认情况下,Postfix SMTP 客户端会移动到下一个邮件交换器。如果 Postfix 要立即退回邮件,请指定"smtp_skip_5xx_greeting= no"。注意:后一种行为似乎与RFC 2821 相矛盾。

smtp_skip_quit_response (默认值:是)

不要等待 SMTP QUIT 命令的响应。

smtp_starttls_timeout (默认值:300 秒)

在 TLS 启动和关闭握手过程中,Postfix SMTP 客户端写入和读取操作的时间限制。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tcp_port (默认值:smtp)

Postfix SMTP 客户端连接的默认 TCP 端口。请指定一个符号名称(参见 services(5))或一个数字端口。

smtp_tls_CAfile (默认值:空)

一个包含根 CA 的 CA 证书的文件,这些根 CA 可签署远程 SMTP 服务器证书或中间 CA 证书。这些证书会在smtp(8)客户端进入 chroot jail 之前加载到内存中。如果受信任根的数量较多,可以考虑使用smtp_tls_CApath代替,但要注意的是,如果smtp(8)客户端进行了 chroot 操作,则 chroot jail 中必须有后一个目录。该文件也可用于增加客户端证书信任链,但最好直接在$smtp_tls_cert_file文件(或 Postfix ≥ 3.4$smtp_tls_chain_files 文件)中包含所有需要的证书。

指定"smtp_tls_CAfile= /path/to/system_CA_file",只使用系统提供的默认认证机构证书。

指定"tls_append_default_CA= no "可防止 Postfix 附加系统提供的默认 CA 并信任第三方证书。

例如

smtp_tls_CAfile = /etc/postfix/CAcert.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_CApath (默认值:空)

目录,其中包含 Postfix SMTP 客户端用来验证远程 SMTP 服务器证书的 PEM 格式认证机构证书。不要忘记创建必要的 "散列 "链接,例如"$OPENSSL_HOME/bin/c_rehash /etc/postfix/certs"。

要在 chroot 模式下使用该选项,该目录(或其副本)必须位于 chroot jail 内。

指定"smtp_tls_CApath= /path/to/system_CA_directory",只使用系统提供的默认认证机构证书。

指定"tls_append_default_CA= no "可防止 Postfix 附加系统提供的默认 CA 并信任第三方证书。

例如

smtp_tls_CApath = /etc/postfix/certs

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_block_early_mail_reply (默认值:否)

尝试检测基于 TLS 协议漏洞 (CVE-2009-3555) 的邮件劫持攻击,攻击者会在 Postfix SMTP 客户端 TLS 会话中预置恶意 HELO、MAIL、RCPT、DATA 命令。如果非 Postfix SMTP 服务器在协商 Postfix SMTP 客户端 TLS 会话后回复恶意 HELO、MAIL、RCPT、DATA 命令,攻击就会得逞。

Postfix 2.7 中提供了这一功能。

smtp_tls_cert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 客户端 RSA 证书的文件。该文件还可能包含 Postfix SMTP 客户端的私人 RSA 密钥,它们可能与 Postfix SMTP 服务器的 RSA 证书和密钥文件相同。在 Postfix ≥ 3.4 版本中,配置客户端密钥和证书的首选方法是使用"smtp_tls_chain_files"参数。

除非必须向一台或多台服务器提供 TLS 客户端证书,否则不要配置客户端证书。通常不需要客户端证书,而且在没有客户端证书的情况下也会造成问题。建议使用默认设置:

smtp_tls_cert_file =
smtp_tls_key_file =
smtp_tls_eccert_file =
smtp_tls_eckey_file =
# 过时的 DSA 参数
smtp_tls_dcert_file =
smtp_tls_dkey_file =
# Postfix ≥ 3.4 接口
smtp_tls_chain_files =

使用默认设置的最佳方法是注释掉main.cf中的上述参数(如果有的话)。

要使远程 SMTP 服务器能够验证 Postfix SMTP 客户端证书,必须向服务器提供签发 CA 证书。您应在客户端证书文件中包含所需的证书,首先是客户端证书,然后是签发 CA(一个或多个)(自下而上的顺序)。

例如:"client.example.com "的证书由 "中间 CA "签发,而 "中间 CA "本身也有一个由 "根 CA "签发的证书。作为 "根 "超级用户,用以下命令创建 client.pem 文件:

# umask 077
# cat client_key.pem client_cert.pem intermediate_CA.pem > chain.pem 

如果还想验证由这些 CA 签发的远程 SMTP 服务器证书,可以将 CA 证书添加到smtp_tls_CAfile,在这种情况下,就没有必要将它们放在smtp_tls_cert_filesmtp_tls_dcert _file(已过时)或smtp_tls_eccert_file 中。

此处提供的证书必须可用作 SSL 客户端证书,并因此通过 "openssl verify -purpose sslclient ... "测试。

例如

smtp_tls_cert_file = /etc/postfix/chain.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_chain_files (默认值:空)

一个或多个 PEM 文件的列表,每个文件直接包含一个或多个私钥,后面跟一个相应的证书链。文件名用逗号和/或空白分隔。该参数会删除传统算法特定的密钥和证书文件设置。当该参数为非空时,传统参数将被忽略,如果有任何参数也为非空,系统将发出警告。

随着多种私钥算法的增加--从 OpenSSL 1.1.1 开始,这些算法包括 DSA(已过时)、RSA、ECDSA、Ed25519 和 Ed448--使用单独的参数为每种算法配置密钥和证书链越来越不切实际。因此,Postfix 现在支持在一个文件或一组文件中存储多个密钥和相应的证书链。

每个密钥必须紧接着相应的证书出现,其后可选择附加签发人证书,以完成该密钥的证书链。当指定多个文件时,它们等同于按指定顺序由这些文件串联起来的一个文件。因此,虽然密钥必须始终位于其证书和签发人链之前,但它也可以位于一个单独的文件中,只要该文件紧接在保存相应证书链的文件之前即可。所有文件串联后,PEM 对象的序列必须是:key1、cert1、[chain1]、key2、cert2、[chain2]、...、keyN、certN、[chainN]。

将私钥与相应证书存储在同一文件中更为可靠。如果密钥和证书分别存放在不同的文件中,Postfix 进程就有可能在密钥转移过程中从不同的文件中加载不匹配的私钥和证书。各种操作错误甚至可能导致证书与私钥不匹配的配置持续损坏。

文件中最多只能包含一种类型的密钥。例如,如果列出了两个或多个 RSA 密钥和相应的链,根据 OpenSSL 的版本,要么只使用最后一个,要么会检测到配置错误。请注意,虽然 "Ed25519 "和 "Ed448 "被视为不同的算法,但各种 ECDSA 曲线(通常是 prime256v1、secp384r1 或 secp521r1 中的一种)被视为单一 "ECDSA "算法的不同参数,因此目前无法为多条 ECDSA 曲线配置密钥。

示例(每个密钥和相应的证书链都有单独的文件):

/etc/postfix/main.cf:
    smtp_tls_chain_files =
        ${config_directory}/ed25519.pem,
        ${config_directory}/ed448.pem,
        ${config_directory}/rsa.pem
/etc/postfix/ed25519.pem:
    -----BEGIN PRIVATE KEY-----
    MC4CAQAwBQYDK2VwBCIEIEJfbbO4BgBQGBg9NAbIJaDBqZb4bC4cOkjtAH+Efbz3
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBKzCB3qADAgECAhQaw+rflRreYuUZBp0HuNn/e5rMZDAFBgMrZXAwFDESMBAG
    ...
    nC0egv51YPDWxEHom4QA
    -----END CERTIFICATE-----
/etc/postfix/ed448.pem:
    -----BEGIN PRIVATE KEY-----
    MEcCAQAwBQYDK2VxBDsEOQf+m0P+G0qi+NZ0RolyeiE5zdlPQR8h8y4jByBifpIe
    LNler7nzHQJ1SLcOiXFHXlxp/84VZuh32A==
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBdjCB96ADAgECAhQSv4oP972KypOZPNPF4fmsiQoRHzAFBgMrZXEwFDESMBAG
    ...
    pQcWsx+4J29e6YWH3Cy/CdUaexKP4RPCZDrPX7bk5C2BQ+eeYOxyThMA
    -----END CERTIFICATE-----
/etc/postfix/rsa.pem:
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDc4QusgkahH9rL
    ...
    ahQkZ3+krcaJvDSMgvu0tDc=
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIC+DCCAeCgAwIBAgIUIUkrbk1GAemPCT8i9wKsTGDH7HswDQYJKoZIhvcNAQEL
    ...
    Rirz15HGVNTK8wzFd+nulPzwUo6dH2IU8KazmyRi7OGvpyrMlm15TRE2oyE=
    -----END CERTIFICATE-----

示例(所有密钥和证书都在一个文件中):

/etc/postfix/main.cf:
    smtp_tls_chain_files = ${config_directory}/chains.pem
/etc/postfix/chains.pem:
    -----BEGIN PRIVATE KEY-----
    MC4CAQAwBQYDK2VwBCIEIEJfbbO4BgBQGBg9NAbIJaDBqZb4bC4cOkjtAH+Efbz3
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBKzCB3qADAgECAhQaw+rflRreYuUZBp0HuNn/e5rMZDAFBgMrZXAwFDESMBAG
    ...
    nC0egv51YPDWxEHom4QA
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    MEcCAQAwBQYDK2VxBDsEOQf+m0P+G0qi+NZ0RolyeiE5zdlPQR8h8y4jByBifpIe
    LNler7nzHQJ1SLcOiXFHXlxp/84VZuh32A==
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBdjCB96ADAgECAhQSv4oP972KypOZPNPF4fmsiQoRHzAFBgMrZXEwFDESMBAG
    ...
    pQcWsx+4J29e6YWH3Cy/CdUaexKP4RPCZDrPX7bk5C2BQ+eeYOxyThMA
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDc4QusgkahH9rL
    ...
    ahQkZ3+krcaJvDSMgvu0tDc=
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIC+DCCAeCgAwIBAgIUIUkrbk1GAemPCT8i9wKsTGDH7HswDQYJKoZIhvcNAQEL
    ...
    Rirz15HGVNTK8wzFd+nulPzwUo6dH2IU8KazmyRi7OGvpyrMlm15TRE2oyE=
    -----END CERTIFICATE-----

该功能在 Postfix 3.4 及更高版本中可用。

smtp_tls_cipherlist (默认值:空)

过时的 Postfix < 2.3 对 Postfix SMTP 客户端 TLS 密码列表的控制。由于该功能适用于所有 TLS 安全级别,因此选择非默认密码列表很容易造成互操作性问题。请勿在向公共互联网发送电子邮件的主机上使用非默认 TLS 密码列表:这样您就无法向只支持您排除的密码的服务器发送电子邮件。使用受限密码列表可能更适合内部 MTA,因为内部 MTA 可以对 TLS 软件和对等服务器的设置进行一定的控制。

注意:不要在参数值周围使用""引号。

该功能在 Postfix 2.2 版本中可用。Postfix 2.3 及更高版本不使用该功能,而使用smtp_tls_mandatory_ciphers

smtp_tls_ciphers (默认值:medium)

Postfix SMTP 客户端将在机会 TLS 加密中使用的最低 TLS 密码级别。smtp_tls_exclude_ciphers中列出的密码类型不包括在所选密码等级的基本定义中。对于 2015 年年中之后发布的 Postfix 版本,默认值为 "medium";对于较早的版本,默认值为 "export"。

强制使用 TLS 时,密码级别通过smtp_tls_mandatory_ciphers配置参数来选择,语法详情请参见此处。有关如何按目的地配置密码的信息,请参阅smtp_tls_policy_maps

该功能在 Postfix 2.6 及更高版本中可用。在 Postfix 早期版本中,只使用了smtp_tls_mandatory_ciphers参数,机会式 TLS 始终使用 "导出 "或更好的(即所有)密码。

smtp_tls_connection_reuse (默认值:否)

尝试在每个 TLS 加密连接上进行多次发送。它使用tlsproxy(8)服务加密 SMTP 连接,使用scache(8)服务保存该连接,并依赖qmgr (8)守护进程的提示。

有关背景详情,请参阅"客户端 TLS 连接重用"。

该功能在 Postfix 3.4 及更高版本中可用。

smtp_tls_dane_insecure_mx_policy (默认值:dane)

当 nexthop 目的地安全级别为dane,但 MX 记录是通过 "不安全 "MX 查询找到时,针对具有 "安全 "TLSA 记录的 MX 主机的 TLS 策略。选项如下

可以

TLSA 记录将被忽略,TLS 将是可选的。如果 MX 主机似乎不支持 STARTTLS,或 STARTTLS 握手失败,邮件可能会以明文发送。

加密

TLSA 记录将发出要求使用 TLS 的信号。虽然要求使用 TLS 加密,但不会进行身份验证。

丹麦人

TLSA 记录的使用方法与 "安全 "MX 记录相同。需要使用 TLS 加密,如果 TLSA 记录中至少有一条是 "可用的",则需要进行身份验证。如果验证成功,将只记录为 "受信任",而不是 "已验证",因为 MX 主机名可能是伪造的。

从 Postfix 版本 3.6.17、3.7.13、3.8.8、3.9.2 和 3.10.0 开始,默认设置为 "dane"。在早期版本中,默认值错误地取决于smtp_tls_security_level设置。

虽然对于 "不安全 "的 MX 记录,主动攻击者可以通过返回伪造的 MX 记录来破坏 SMTP 传输安全,但这种攻击是 "可篡改的",因为任何伪造的 MX 主机名都会被记录在邮件日志中。那些非常重视隐蔽性的攻击者可能会对伪造 MX 记录望而却步。

该功能在 Postfix 3.1 及更高版本中可用。may策略与 Postfix 早期版本向后兼容。

smtp_tls_dcert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 客户端 DSA 证书的文件。该文件还可能包含 Postfix SMTP 客户端私有 DSA 密钥。DSA 算法已过时,不应使用。

有关详情,请参阅smtp_tls_cert_file下的讨论。

例如

smtp_tls_dcert_file = /etc/postfix/client-dsa.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_dkey_file (默认值:$smtp_tls_dcert_file)

包含 PEM 格式 Postfix SMTP 客户端 DSA 私钥的文件。该文件可与用$smtp_tls_dcert_file 指定的 Postfix SMTP 客户端 DSA 证书文件结合使用。DSA 算法已过时,不应使用。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_eccert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 客户端 ECDSA 证书的文件。该文件还可能包含 Postfix SMTP 客户端 ECDSA 私钥。在 Postfix ≥ 3.4 版本中,配置客户端密钥和证书的首选方法是使用"smtp_tls_chain_files"参数。

有关详情,请参阅smtp_tls_cert_file下的讨论。

例如

smtp_tls_eccert_file = /etc/postfix/ecdsa-ccert.pem

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

smtp_tls_eckey_file (默认值:$smtp_tls_eccert_file)

包含 PEM 格式 Postfix SMTP 客户端 ECDSA 私钥的文件。该文件可与用$smtp_tls_eccert_file 指定的 Postfix SMTP 客户端 ECDSA 证书文件结合使用。在 Postfix ≥ 3.4 版本中,配置客户端密钥和证书的首选方法是使用"smtp_tls_chain_files"参数。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

smtp_tls_enable_rpk (默认值:否)

要求远程 SMTP 服务器发送RFC7250原始公钥,而不是 X.509 证书。当本地 TLS 实现不支持原始公钥时,此功能和 enable_rpk 策略属性将被忽略。

  • 在 "may"、"encrypt "和 "fingerprint "安全级别下,参数设置为 "smtp_tls_enable_rpk= yes "或策略条目中设置为 "enable_rpk = yes "时,Postfix SMTP 客户端将在 TLS 握手过程中表明它更喜欢接收原始服务器公钥,但仍会接受服务器公钥证书。
  • 在 "指纹 "安全级别下,参数设置为 "smtp_tls_enable_rpk= yes "或策略项中的 "enable_rpk = yes "时,基于证书指纹的服务器验证会变得更加脆弱。即使服务器私钥和证书保持不变,当远程 SMTP 服务器的 TLS 实现更新为支持原始公钥后,它开始发送原始公钥而不是证书时,指纹验证也会失败(与配置的指纹列表不匹配)。因此,切勿向通过服务器证书指纹验证的远程目的地启用原始公钥。只有通过公钥指纹匹配的服务器才可启用原始公钥。
  • 在 "验证 "和 "安全 "安全级别下,Postfix SMTP 客户端总是忽略参数设置smtp_tls_enable_rpk或 enable_rpk 策略属性。
  • 在机会主义的 "dane "安全级别下,Postfix SMTP 客户端会忽略smtp_tls_enable_rpk参数设置或 enable_rpk 策略属性(但在退回到 "may "或 "encrypt "级别时会尊重它们)。当所有有效的 TLSA 记录都只指定了服务器公钥(没有证书),且本地 TLS 实现支持原始公钥时,客户端会在 TLS 握手中表示它更喜欢接收原始公钥,但仍会接受公钥证书。
  • 在强制的 "dane-only "安全级别下,Postfix SMTP 客户端总是忽略参数设置smtp_tls_enable_rpk或 enable_rpk 策略属性。当所有有效的 TLSA 记录都只指定了服务器公钥(没有证书),且本地 TLS 实现支持原始公钥时,客户端将在 TLS 握手中表明它更愿意接收原始公钥,但仍会接受公钥证书。

如果配置了客户端证书,且本地 TLS 实施支持原始公钥,Postfix SMTP 客户端总是愿意向请求原始公钥的服务器发送原始公钥。

计算证书和公开密钥 SHA256 摘要的示例命令:

# "cert.pem "中第一个证书的 SHA256 摘要
$ openssl x509 -in cert.pem -outform DER | openssl dgst -sha256 -c
                
# "cert.pem "中第一个证书的 SPKI 的 SHA256 摘要$ openssl x509 -in cert.pem -pubkey -noout |
    openssl pkey -pubin -outform DER | openssl dgst -sha256 -c
                
# "pkey.pem "中第一个私人密钥的 SPKI 的 SHA256 摘要
$ openssl pkey -in pkey.pem -pubout -outform DER |
    openssl dgst -sha256 -c

该功能在 Postfix 3.9 及更高版本中可用。

smtp_tls_enforce_peername (默认值:是)

使用强制 TLS 加密时,要求远程 SMTP 服务器主机名与远程 SMTP 服务器证书中的信息相匹配。RFC 2487没有规定 MTA 客户端的主机名检查要求。

该选项可设置为 "否",以禁用严格的对等名称检查。此设置对通过smtp_tls_per_site表控制的会话没有影响。

在创建特殊 CA 的封闭环境中,禁用主机名验证是有意义的。如果使用不慎,该选项会带来 "中间人 "攻击的危险(攻击者的通用名将被记录)。

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtp_tls_security_level

smtp_tls_exclude_ciphers (默认值:空)

在所有 TLS 安全级别下,从 Postfix SMTP 客户端密码列表中排除的密码或密码类型列表。这不是 OpenSSL 密码列表,而是一个用空格和/或逗号分隔的简单列表。元素包括单个密码,或一个或多个以 "+"分隔的密码属性,在这种情况下,只有符合所有属性的密码才会被排除。

示例(其中一些会引起问题):

smtp_tls_exclude_ciphers = aNULL
smtp_tls_exclude_ciphers = MD5, DES
smtp_tls_exclude_ciphers = DES+MD5
smtp_tls_exclude_ciphers = AES256-SHA, DES-CBC3-MD5
smtp_tls_exclude_ciphers = kEDH+aRSA

第一个设置禁用匿名密码。下一个设置会禁用使用 MD5 摘要算法或(单一)DES 加密算法的密码。下一个设置会禁用同时使用 MD5 和 DES 的加密算法。下一个设置将禁用 "AES256-SHA "和 "DES-CBC3-MD5 "两种加密算法。最后一项设置禁用使用 RSA 身份验证的 "EDH "密钥交换的密码。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_fingerprint_cert_match (默认值:空)

指纹 "TLS 安全级别(smtp_tls_security_level= fingerprint)可接受的远程 SMTP 服务器证书指纹列表。在此安全级别下,不使用认证机构,证书过期时间也被忽略。取而代之的是,直接通过证书指纹或公钥指纹(Postfix 2.9 及更高版本)验证服务器证书。指纹是服务器证书(或公钥)的信息摘要。摘要算法通过smtp_tls_fingerprint_digest参数选择。

指纹值中每对字节之间的冒号是可选的(Postfix ≥ 3.6)。在 Postfix 早期版本中,这些是必需的。

smtp_tls_policy_maps表项指定了 "指纹 "安全级别时,该表项中的任何 "匹配 "属性都会指定相应目的地的有效指纹列表。多个指纹可以在单个匹配属性中与分隔符"|"组合,也可以使用多个匹配属性。

示例:使用内部邮件集线器验证证书指纹。列出了两个匹配的指纹。中继主机可能是负载平衡器后面的多个物理主机,每个主机都有自己的私钥/公钥和自签名证书。另外,单个中继主机可能正在从一套私钥/公钥切换到另一套私钥/公钥,而在切换之前,两套私钥/公钥都是可信的。

relayhost = [mailhub.example.com]
smtp_tls_security_level = fingerprint
smtp_tls_fingerprint_digest = sha256
smtp_tls_fingerprint_cert_match =
    cd:fc:d8:db:f8:c4:82:96:6c:...:28:71:e8:f5:8d:a5:0d:9b:d4:a6
    dd:5c:ef:f5:c3:bc:64:25:36:...:99:36:06:ce:40:ef:de:2e:ad:a4

示例:选定目的地的证书指纹验证如上例,我们显示了两个匹配的指纹:

/etc/postfix/main.cf:
    smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
    smtp_tls_fingerprint_digest = sha256
/etc/postfix/tls_policy:
    example.com fingerprint
        match=51:e9:af:2e:1e:40:1f:...:64:0a:30:35:2d:09:16:31:5a:eb:82:76
        match=b6:b4:72:34:e2:59:cd:...:c2:ca:63:0d:4d:cc:2c:7d:84:de:e6:2f

该功能在 Postfix 2.5 及更高版本中可用。

smtp_tls_fingerprint_digest (默认值:见 "postconf - d "输出)。

用于构建远程 SMTP 服务器证书指纹的消息摘要算法。在 "指纹 "TLS 安全级别(smtp_tls_security_level= fingerprint)下,服务器证书通过直接匹配其证书指纹或公钥指纹(Postfix 2.9 及更高版本)来验证。指纹是服务器证书(或其公钥)使用选定算法的信息摘要。由于摘要算法可抵御 "二次预映像 "攻击,因此创建具有相同指纹的新公开密钥和匹配证书(或公开密钥/私人密钥对)是不可行的。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5

现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要没有已知的针对旧算法的 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

虽然 OpenSSL 的 libcrypto 通常提供额外的摘要算法,但 Postfix 只能使用 libssl 在 SSL 密码套件中使用的摘要算法。你可能会发现它支持 md5、sha1、sha256 和 sha512。

要使用特定摘要算法查找特定证书文件的指纹,请运行

$ openssl x509 -noout -fingerprint-digest-incertfile.pem

“=”符号右边的文字就是所需的指纹。例如

$ openssl x509 -noout -fingerprint -sha256 -in cert.pem
SHA256 Fingerprint=D4:6A:AB:19:24:...:BB:A6:CB:66:82:C0:8E:9B:EE:29:A8:1A

要从 X.509 证书中提取公钥指纹,需要从证书中提取公钥,并计算其 DER(ASN.1)编码的适当摘要。在 OpenSSL 中,"x509 "命令的"-pubkey "选项总是以 "PEM "格式提取公钥。我们将结果导入另一个 OpenSSL 命令,将密钥转换为 DER,然后导入 "dgst "命令计算指纹。

将密钥转换为 DER 格式的实际命令取决于所使用的 OpenSSL 版本。从 OpenSSL 1.0.0 开始,"pkey "命令支持所有密钥类型。

# OpenSSL ≥ 1.0 with SHA-256 fingerprints.
$ openssl x509 -in cert.pem -noout -pubkey |
    openssl pkey -pubin -outform DER |
    openssl dgst -sha256 -c
(stdin)= 64:3f:1f:f6:e5:1e:d4:2a:56:...:fc:09:1a:61:98:b5:bc:7c:60:58

当 TLS 日志级别为 2 或更高时,Postfix SMTP 服务器和客户端会记录对等(叶子)证书指纹和公钥指纹。

该功能在 Postfix 2.5 及更高版本中可用。

smtp_tls_force_insecure_host_tlsa_lookup (默认值:否)

查找相关的 DANE TLSA RRset,即使主机名不是别名且其地址记录位于未签名区中。这不太可能产生 DNSSEC 验证结果,因为在没有 DLV 或本地配置的非根信任锚点的情况下,未签名区的子区也是未签名的。我们预计这种机制不会仅用于主机的"_tcp "子域。抑制 TLSA RRset 查找可减少延迟,并避免与尚未准备好处理新 TLSA RRset 的未签名区命名服务器发生潜在的互操作性问题。

Postfix 2.11 中提供了这一功能。

smtp_tls_key_file (默认值:$smtp_tls_cert_file)

包含 PEM 格式 Postfix SMTP 客户端 RSA 私钥的文件。该文件可与用$smtp_tls_cert_file 指定的 Postfix SMTP 客户端 RSA 证书文件结合使用。在 Postfix ≥ 3.4 版本中,配置客户端密钥和证书的首选方法是使用"smtp_tls_chain_files"参数。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

例如

smtp_tls_key_file = $smtp_tls_cert_file

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_logvel (默认值:0)

启用额外的 Postfix SMTP 客户端 TLS 活动日志。每个日志级别还包括在较低日志级别记录的信息。

 

0 禁用 TLS 活动记录。

 

1 只记录 TLS 握手完成时的摘要信息 - 如果不需要服务器证书验证,则不记录远程 SMTP 服务器证书信任链验证错误。使用 Postfix 2.8 及更早版本时,记录摘要信息并无条件记录信任链验证错误。

 

2 同时在 Postfix TLS 库中启用详细日志记录,记录会话缓存操作,并启用 OpenSSL 记录 SSL 握手过程。

 

3 同时记录 TLS 协商过程的十六进制和 ASCII 转储。

 

4 同时记录 STARTTLS 后完整传输的十六进制和 ASCII 转储。

除非出现问题,否则不要使用"smtp_tls_loglevel= 2 "或更高的日志级别。强烈建议使用日志级别 4。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_mandatory_ciphers (默认值:中)

Postfix SMTP 客户端在强制 TLS 加密时使用的最低 TLS 密码级别。默认值 "medium "适用于大多数需要强制使用 TLS 的目的地,但目前的密码分析方法还无法做到这一点。有关如何按目的地配置密码的信息,请参阅smtp_tls_policy_maps

支持以下密码等级

仅启用 "HIGH "级 OpenSSL 密码。当所有强制 TLS 目的地(例如,当所有邮件都被路由到具有适当能力的中继主机时)都支持至少一种 "HIGH "级密码时,这种设置可能比较合适。底层密码列表通过tls_high_cipherlist配置参数指定,强烈建议不要更改。

中等

启用 "MEDIUM "级或更高级别的 OpenSSL 密码。底层密码列表通过tls_medium_cipherlist配置参数指定,强烈建议不要更改。

无效

仅启用 "NULL "OpenSSL 密码,这些密码只提供身份验证而不提供加密。只有在所有服务器都准备使用 NULL 密码(TLS 服务器通常不启用)的罕见情况下,才适合使用此设置。一个合理的使用情况是,在 UNIX 域套接字上监听的 LMTP 服务器被配置为支持 "NULL "密码。底层密码列表通过tls_null_cipherlist配置参数指定,强烈建议不要更改。

启用 "LOW "级或更强的 OpenSSL 密码。在 Postfix ≥ 3.8 中,该密码级别始终与 "中 "相同。最新版本的 OpenSSL 不支持任何 "低 "级密码。在 Postfix 早期版本中,底层密码列表是通过tls_low_cipherlist配置参数指定的,我们强烈建议您不要更改该参数。不应使用这种过时的密码级别。

出口

启用 "EXPORT "级或更强的 OpenSSL 密码。在 Postfix ≥ 3.8 中,该密码级别始终与 "中等 "相同。最新版本的 OpenSSL 不支持任何 "EXPORT "级密码。在 Postfix 早期版本中,底层密码列表是通过tls_export_cipherlist配置参数指定的,我们强烈建议您不要更改该参数。不应使用这种过时的密码级别。

除 "null "外,其他等级的基本密码列表包括匿名密码,但如果 Postfix SMTP 客户端配置为验证服务器证书,这些密码会被自动过滤掉。您不太可能需要采取任何措施来排除匿名密码,它们会根据需要自动排除。如果在 Postfix SMTP 客户端不需要或不使用对等证书时,必须在 "可能 "或 "加密 "安全级别下排除匿名密码,请设置"smtp_tls_exclude_ciphers= aNULL"。若要仅在执行 TLS 时排除匿名密码,请设置"smtp_tls_mandatory_exclude_ciphers= aNULL"。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_mandatory_exclude_ciphers (默认值:空)

在强制 TLS 安全级别下,从 Postfix SMTP 客户端密码列表中排除的密码或密码类型的附加列表。该列表是smtp_tls_exclude_ciphers列出的排除项的补充(语法详见此处)。

从 Postfix 2.6 开始,可以通过 TLS 策略 "exclude "属性按目的地指定强制密码排除。有关说明和示例,请参阅smtp_tls_policy_maps

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_mandatory_protocols (默认值:请参阅 "postconf -d "输出)。

Postfix SMTP 客户端将使用的强制 TLS 加密的 TLS 协议。在main.cf中,这些值用空格、逗号或冒号分隔。在策略表 "protocols"属性(参见smtp_tls_policy_maps)中,唯一有效的分隔符是冒号。空值表示允许所有协议。

有效的协议名称(参见 SSL_get_version(3))有 "SSLv2"、"SSLv3"、"TLSv1"、"TLSv1.1"、"TLSv1.2 "和 "TLSv1.3"。从 Postfix 3.6 开始,默认值为">=TLSv1",将 TLS 1.0 设置为支持的最低 TLS 协议版本(见下文)。旧版本使用"!"排除语法,详情如下。

从 Postfix 3.6 开始,限制可接受协议范围的首选方法是设置可接受的最低 TLS 协议版本和/或可接受的最高 TLS 协议版本。要设置下限,请包含以下形式的元素:">=版本",其中版本可以是上面列出的 TLS 协议名称之一,也可以是与所需 TLS 协议版本相对应的十六进制数字(0301 表示 TLS 1.0,0302 表示 TLS 1.1 等)。对于上限,请使用"<=version"。在">="或"<="符号与协议名称或编号之间不能有空白。

使用十六进制协议编号,可以为 OpenSSL 已知但 Postfix 未知的 TLS 版本指定协议边界。它们不能与传统的排除语法一起使用。支持前缀 "0 "或 "0x",但不是必需的。因此,"301"、"0301"、"0x301 "和 "0x0301 "都等同于 "TLSv1"。OpenSSL 未知的十六进制版本将无法设置上限或下限,并记录警告。只有当 Postfix 与未来支持 TLS 1.4 或更高版本的 OpenSSL 相连,但 Postfix 尚不支持该协议版本的符号名称时,才应使用十六进制版本。

十六进制示例(Postfix ≥ 3.6):

# Allow only TLS 1.2 through (hypothetical) TLS 1.4, once supported
# in some future version of OpenSSL (presently a warning is logged).
smtp_tls_mandatory_protocols = >=TLSv1.2, <=0305
# 只允许 TLS 1.2 及以上版本:
smtp_tls_mandatory_protocols = >=0x0303

Postfix < 3.6 不支持最小或最大版本,协议范围通过协议排除进行配置。要要求至少使用 TLS 1.0,请设置"smtp_tls_mandatory_protocols= !SSLv2, !SSLv3"。支持列出要包含的协议,而不是要排除的协议,但不建议这样做。排除协议的语法与底层 OpenSSL 接口更为匹配。

使用排除语法时,请注意确保 Postfix SMTP 客户端支持的协议范围是连续的。启用某个协议版本后,禁用任何较高版本都会隐式禁用该较高版本之上的所有版本。例如

smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1.1

也会禁用任何高于 TLSv1.1 的协议版本,只启用 "TLSv1"。

OpenSSL 1.1.1 引入了对 "TLSv1.3 "的支持。Postfix 3.4(或补丁版本≥ 3.0.14、3.1.10、3.2.7 和 3.3.2)开始支持通过"!TLSv1.3 "禁用该协议。

虽然绝大多数带有 DANE TLSA 记录的 SMTP 服务器现在至少支持 TLS 1.2,但仍有少数服务器只支持 TLS 1.0。如果您使用 "dane "或 "dane-only",最好不要禁用 TLSv1,除非您通过策略表确定目的地支持 "TLSv1.2"。

有关安全级别的更多信息,请参阅smtp_tls_policy_maps参数的文档和TLS _ README

例如

# Postfix ≥ 3.6 的首选语法:
smtp_tls_mandatory_protocols = >=TLSv1.2, <=TLSv1.3
# 传统语法:
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_note_starttls_offer (默认值:否)

如果提供 STARTTLS 的远程 SMTP 服务器尚未启用 TLS,则记录该服务器的主机名。

日志文件记录如下

postfix/smtp[pid]:  Host offered STARTTLS: [name.of.host]

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_per_site (默认值:空)

Postfix SMTP 客户端 TLS 使用策略的可选查找表(按下一跳目的地和远程 SMTP 服务器主机名)。当这两种查找都成功时,较具体的每站点策略(NONE、MUST 等)优先于较不具体的策略(MAY),较安全的每站点策略(MUST 等)优先于较不安全的策略(NONE)。在 Postfix 2.3 及更高版本中,强烈不推荐使用smtp _tls_per_site:而应使用smtp_tls_policy_maps

不鼓励使用裸主机名作为每个站点表的查找键。应始终使用完整的目的地下一跳地址(用[]括起来,并可能带有":端口 "后缀)。没有端口后缀的收件人域名或启用 MX 的传输下一跳可能看起来像一个空主机名,但仍然是一个合适的目标地址

在左侧指定下一跳目的地或服务器主机名;不允许使用通配符。下一跳目的地要么是收件人域,要么是使用transport(5)表、relayhost参数或relay_transport参数指定的目的地。在右侧指定以下关键字之一:

完全不使用 TLS。这将覆盖来自备用主机或下一跳查找密钥的不太具体的MAY查找结果,并覆盖全局smtp_use_tlssmtp_enforce_tlssmtp_tls_enforce_peername设置。

五月

如果服务器宣布支持 TLS,则尝试使用 TLS,否则使用未加密连接;在 TLS 握手或 TLS 会话失败后,如果邮件已在邮件队列中度过最小回退时间(minimal_backoff_time),则退回到明文。该级别的优先级低于备用主机或下一跳查找密钥的更具体结果(包括 "无"),也低于更具体的全局"smtp_enforce_tls= yes "或"smtp_tls_enforce_peername= yes"。

必须不匹配

要求使用 TLS 加密,但不要求远程 SMTP 服务器主机名与远程 SMTP 服务器证书中的信息相匹配,也不要求服务器证书由可信 CA 签发。这将覆盖安全性较低的NONE或来自备用主机或下一跳查找密钥的太具体的MAY查找结果,并覆盖全局smtp_use_tlssmtp_enforce_tlssmtp_tls_enforce_peername设置。

必须

要求 TLS 加密,要求远程 SMTP 服务器主机名与远程 SMTP 服务器证书中的信息相匹配,并要求远程 SMTP 服务器证书由可信 CA 签发。这将覆盖安全性较低的NONEMUST_NOPEERMATCH或来自备用主机或下一跳查找密钥的较不具体的MAY查找结果,并覆盖全局smtp_use_tlssmtp_enforce_tlssmtp_tls_enforce_peername设置。

上述关键字与 Postfix 2.3 中引入的新smtp_tls_security_level参数的 "none"、"may"、"encrypt "和 "verify "安全级别相对应。从 Postfix 2.3 开始,与如何指定策略无关,smtp_tls_mandatory_cipherssmtp_tls_mandatory_protocols参数适用于必须进行 TLS 加密的情况。加密为可选项的连接通常会启用所有 "出口 "级和更好的密码(请参阅smtp_tls_cipherssmtp _tls_ protocols)。

只要没有安全的 DNS 查询机制,MX 或 CNAME 响应中的虚假主机名就会改变 Postfix 用于 TLS 策略查询和服务器证书验证的服务器主机名。即使服务器主机名和服务器证书完全匹配,也不能保证 Postfix 连接到正确的服务器。请参阅TLS_README(通过过时的每站点 TLS 策略弥补 DNS 漏洞),了解可能的解决方法。

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtp_tls_policy_maps

smtp_tls_policy_maps (默认值:空)

Postfix SMTP 客户端 TLS 安全策略的可选查找表(按下一跳目的地);指定非空值时,该值将覆盖过时的smtp_tls_per_site参数。有关 TLS 安全级别的详细讨论,请参阅 TLS_README;有关 MTA-STS 插件可能需要的其他配置,请参阅TLSRPT_README

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

TLS 策略表以完整的下一跳目的地为索引,即收件人域或传输表中指定的逐字下一跳、$local_transport、$virtual_transport、$relay_transport 或 $default_transport。这包括任何方括号和任何非默认目标服务器端口后缀。LMTP 套接字类型前缀(inet:或 unix:)不包含在查找关键字中。

只有下一跳域名或通过 UNIX 域套接字进行 LMTP 的$myhostname才会被用作证书验证的下一跳名称。端口和任何内含的方括号都将用于查表键,但不会用于服务器名称验证。

如果查找键是一个不带方括号或任何:port后缀的域名(通常是收件人域名),且在表中找不到完整的域名,则会像使用transport(5)表一样,递归匹配以". "开头的父域名。这样就可以为收件人域及其所有子域指定安全策略。

查询结果是一个安全级别,后面是一个可选的空白和/或逗号分隔的 name=value 属性列表,这些属性会覆盖相关的main.cf设置。TLS 安全级别依次为

无 TLS。此级别不支持其他属性。

可以

机会性 TLS。由于可以接受明文发送,因此要求比默认 TLS 更强的安全性只会降低互操作性。可选的 "ciphers(密码)"、"exclude(排除)"和 "protocols(协议)"属性(适用于 Postfix ≥ 2.6 的机会式 TLS)和 "connection_reuse(连接重复使用)"属性(Postfix ≥ 3.4)覆盖了"smtp_tls_ciphers(密码)"、"smtp_tls_exclude_ciphers(密码)"、"smtp_tls_protocols(协议)"和"smtp_tls_connection_reuse(连接重复使用)"配置参数。在策略表中,多个密码、协议或排除密码必须用冒号分隔,因为属性值不能包含空白或逗号。在此级别及更高级别上,可选的 "servername"属性(Postfix 3.4 时可用)可覆盖全局"smtp_tls_servername"参数,从而可以按目的地配置发送到远程 SMTP 服务器的 SNI 扩展名。可选的 "enable_rpk "属性(Postfix3.9)会覆盖main.cf smtp_tls_enable_rpk参数。当机会性 TLS 握手失败时,Postfix 会禁用 TLS 重试连接。这样,邮件就可以送达采用非互操作 TLS 实现的站点。

加密

强制 TLS 加密。只有当远程 SMTP 服务器提供 STARTTLS 且 TLS 握手成功时,邮件才会被发送。在此级别及更高级别,可选的 "protocols"属性覆盖main.cf smtp_tls_mandatory_protocols参数,可选的 "ciphers "属性覆盖main.cf smtp_tls_mandatory_ciphers参数,可选的 "exclude "属性(Postfix ≥ 2.6)覆盖main.cf smtp_tls_mandatory_exclude_ciphers参数,可选的 "connection_reuse "属性(Postfix ≥ 3.4)覆盖main.cf smtp_tls_connection_reuse参数。在策略表中,多个密码、协议或排除密码必须用冒号分隔,因为属性值不能包含空白或逗号。可选的 "enable_rpk "属性(Postfix3.9)会覆盖main.cf smtp_tls_enable_rpk参数。

丹麦人

机会性 DANE TLS。目的地的 TLS 策略通过 DNSSEC 中的 TLSA 记录获取。如果找不到 TLSA 记录,则使用的有效安全级别为可能。如果找到了 TLSA 记录,但没有可用的,则有效安全级别为加密。当获得远程 SMTP 服务器的可用 TLSA 记录时,服务器证书必须与 TLSA 记录相匹配。Postfix 2.11 及更高版本支持RFC 7672(DANE) TLS 验证和 DNSSEC。可选的 "connection_reuse "属性(Postfix3.4)会覆盖main.cf smtp_tls_connection_reuse参数。当使用的有效安全级别为may 时,可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix 2.6)会覆盖"smtp_tls_ciphers"、"smtp_tls_exclude_ciphers"和"smtp_tls_protocols"配置参数。当使用的有效安全级别为加密时,可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix 2.6)将覆盖"smtp_tls_mandatory_ciphers"、"smtp_tls_mandatory_exclude_ciphers"和"smtp_tls_mandatory_protocols"配置参数。

只限丹麦人

强制 DANE TLS。目的地的 TLS 策略通过 DNSSEC 中的 TLSA 记录获取。如果找不到 TLSA 记录或没有可用记录,则不会与服务器建立连接。当获得远程 SMTP 服务器的可用 TLSA 记录时,服务器证书必须与 TLSA 记录相匹配。Postfix 2.11 及更高版本支持RFC 7672(DANE) TLS 验证和 DNSSEC。可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix ≥ 2.6)覆盖 "smtp_tls_mandatory_ciphers"、"smtp_tls_mandatory_exclude_ciphers"和"smtp_tls_mandatory_protocols"配置参数。可选的 "connection_reuse "属性(Postfix3.4)会覆盖main.cf smtp_tls_connection_reuse参数。

指纹

证书指纹验证。适用于 Postfix 2.5 及更高版本。在此安全级别下,没有受信任的证书颁发机构。证书信任链、过期日期......都不会被检查。相反,可选的策略表 "match "属性或main.cf smtp_tls_fingerprint_cert_match参数会列出可接受的服务器证书的证书指纹或公钥指纹(Postfix 2.9 及更高版本)。用于计算指纹的摘要算法由smtp_tls_fingerprint_digest参数选择。多个指纹可以用分隔符"|"组合在一个匹配属性中,也可以使用多个匹配属性。: "字符不用作分隔符,因为它出现在每对指纹(十六进制)数字之间。可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix ≥ 2.6)覆盖 "smtp_tls_mandatory_ciphers"、"smtp_tls_mandatory_exclude_ciphers"和"smtp_tls_mandatory_protocols"配置参数。可选的 "connection_reuse "属性(Postfix3.4)会覆盖main.cf smtp_tls_connection_reuse参数。可选的 "enable_rpk "属性(Postfix3.9)覆盖main.cf smtp_tls_enable_rpk参数。

核对

强制 TLS 验证。只有当 TLS 握手成功、远程 SMTP 服务器证书链可以验证、证书中的 DNS 名称符合指定的匹配条件时,邮件才会被发送。在此安全级别下,DNS MX 查询被假定为足够安全,服务器证书中验证的名称有可能通过未经验证的 DNS MX 查询获得。可选的 "匹配 "属性会覆盖main.cf smtp_tls_verify_cert_match参数。在策略表中,多个匹配模式和策略必须用冒号分隔。在实践中,通过 "安全 "策略对匹配进行显式控制更为常见,详情见下文。可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix 2.6)覆盖 "smtp_tls_mandatory_ciphers"、"smtp_tls_mandatory_exclude_ciphers"和"smtp_tls_mandatory_protocols"配置参数。在 Postfix ≥ 2.11 版本中,可选的 "tafile "策略表属性会以与"smtp_tls_trust_anchor_file"参数相同的方式修改信任链验证。tafile "属性可指定多次,以加载多个信任锚文件。可选的 "connection_reuse "属性(Postfix3.4)会覆盖main.cf smtp_tls_connection_reuse参数。

安全证书验证。只有当 TLS 握手成功、远程 SMTP 服务器证书链可以验证、证书中的 DNS 名称符合指定的匹配条件时,邮件才会被发送。在此安全级别下,DNS MX 查询虽然可能用于确定候选下一跳网关 IP 地址,但其安全性不足以进行 TLS 用户名验证。取而代之的是,直接从下一跳获取服务器证书中验证的默认名称,或通过可选的 "匹配 "属性明确指定,该属性会覆盖main.cf smtp_tls_secure_cert_match参数。在策略表中,多个匹配模式和策略必须用冒号分隔。当公用服务器支持多个域时,匹配属性最有用:附加域的策略条目指定了主域证书的匹配规则。虽然将二级域名路由到主节点的传输表重写也能实现安全验证,但当域名易手或被重新分配到新网关时,它们有可能将信息传送到错误的目的地。使用 "匹配 "属性方法,路由选择不会受到干扰,如果新 MX 主机验证失败,邮件将被延迟发送。可选的 "ciphers"、"exclude "和 "protocols "属性(Postfix 2.6)覆盖 "smtp_tls_mandatory_ciphers"、"smtp_tls_mandatory_exclude_ciphers"和"smtp_tls_mandatory_protocols"配置参数。在 Postfix ≥ 2.11 版本中,"tafile "属性可选择修改信任链验证,修改方式与"smtp_tls_trust_anchor_file"参数相同。tafile "属性可指定多次,以加载多个信任锚文件。可选的 "connection_reuse "属性(Postfix3.4)会覆盖main.cf smtp_tls_connection_reuse参数。

例如

/etc/postfix/main.cf:
    smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
    # Postfix 2.5 及更高版本。
    #
    # Postfix ≥ 3.6 且 # 兼容性级别 ≥ 3 时,默认摘要为 sha256。
    #
    smtp_tls_fingerprint_digest = sha256
                
/etc/postfix/tls_policy:
    example.edu                 none
    example.mil                 may
    example.gov                 encrypt protocols=TLSv1
    example.com                 verify ciphers=high
    example.net                 secure
    .example.net                secure match=.example.net:example.net
    [mail.example.org]:587      secure match=nexthop
    # Postfix 2.5 and later
    [thumb.example.org]          fingerprint
        match=b6:b4:72:34:e2:59:cd:...:c2:ca:63:0d:4d:cc:2c:7d:84:de:e6:2f
        match=51:e9:af:2e:1e:40:1f:...:64:0a:30:35:2d:09:16:31:5a:eb:82:76

注意:如果在smtp_tls_secure_cert_match的非默认设置中或策略表中的 "匹配 "属性中列出 "主机名 "策略,则会导致 "安全 "级别容易受到 DNS 伪造的影响。在无法确保 DNS 安全性的环境中,请勿将 "主机名 "策略用于安全通道配置。

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_protocols (默认值:参见 "postconf -d "输出)。

Postfix SMTP 客户端将使用的机会性 TLS 加密的 TLS 协议。在main.cf中,这些值用空格、逗号或冒号分隔。在策略表 "protocols"属性(参见smtp_tls_policy_maps)中,唯一有效的分隔符是冒号。空值表示允许所有协议。

有效的协议名称(参见 SSL_get_version(3))有 "SSLv2"、"SSLv3"、"TLSv1"、"TLSv1.1"、"TLSv1.2 "和 "TLSv1.3"。从 Postfix 3.6 开始,默认值为">=TLSv1",将 TLS 1.0 设置为支持的最低 TLS 协议版本(见下文)。旧版本使用"!"排除语法,详情如下。

从 Postfix 3.6 开始,限制可接受协议范围的首选方法是设置可接受的最低 TLS 协议版本和/或可接受的最高 TLS 协议版本。要设置下限,请包含以下形式的元素:">=版本",其中版本可以是上面列出的 TLS 协议名称之一,也可以是与所需 TLS 协议版本相对应的十六进制数字(0301 表示 TLS 1.0,0302 表示 TLS 1.1 等)。对于上限,请使用"<=version"。在">="或"<="符号与协议名称或编号之间不能有空白。

使用十六进制协议编号,可以为 OpenSSL 已知但 Postfix 未知的 TLS 版本指定协议边界。它们不能与传统的排除语法一起使用。支持前缀 "0 "或 "0x",但不是必需的。因此,"301"、"0301"、"0x301 "和 "0x0301 "都等同于 "TLSv1"。OpenSSL 未知的十六进制版本将无法设置上限或下限,并记录警告。只有当 Postfix 与未来支持 TLS 1.4 或更高版本的 OpenSSL 相连,但 Postfix 尚不支持该协议版本的符号名称时,才应使用十六进制版本。

十六进制示例(Postfix ≥ 3.6):

# Allow only TLS 1.0 through (hypothetical) TLS 1.4, once supported
# in some future version of OpenSSL (presently a warning is logged).
smtp_tls_protocols = >=TLSv1, <=0305
# 只允许 TLS 1.0 及以上版本:
smtp_tls_protocols = >=0x0301

Postfix < 3.6 不支持最小或最大版本,协议范围通过协议排除进行配置。要要求至少使用 TLS 1.0,可设置"smtp_tls_protocols= !SSLv2, !SSLv3"。支持列出要包含的协议,而不是要排除的协议,但不建议这样做。排除形式与底层 OpenSSL 接口更为匹配。

使用排除语法时,应注意确保 SSL/TLS 客户端公布的协议范围是连续的。启用某个协议版本后,禁用任何更高版本都会隐式禁用该高版本之上的所有版本。例如

smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1.1

也会禁用任何高于 TLSv1.1 的协议版本,只启用 "TLSv1"。

OpenSSL 1.1.1 引入了对 "TLSv1.3 "的支持。Postfix 3.4(或补丁版本≥ 3.0.14、3.1.10、3.2.7 和 3.3.2)开始支持通过"!TLSv1.3 "禁用该协议。

例如

# Postfix ≥ 3.6 的首选语法:
smtp_tls_protocols = >=TLSv1, <=TLSv1.3
# 传统语法:
smtp_tls_protocols = !SSLv2, !SSLv3

该功能在 Postfix 2.6 及更高版本中可用。

smtp_tls_scert_verifydepth (默认值:9)

远程 SMTP 服务器证书的验证深度。如果本地 CA 文件中列出了签发 CA,深度为 1 就足够了。

默认验证深度为 9(OpenSSL 默认值),以便与早期的 Postfix 行为兼容。在 Postfix 2.5 之前,默认值为 5,但实际上并不执行该限制。如果将其设置为较低的非默认值,信任链较长的证书现在可能无法验证。有 1 或 2 个 CA 的证书链很常见,更深的证书链则比较少见,在实践中 5 到 9 之间的任何数字都足够了。举例来说,如果你信任直接由签发 CA 签发的证书,但不信任其委托的任何 CA,你可以选择一个较小的数字。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_secure_cert_match (默认值:nexthop,点-nexthop)

Postfix SMTP 客户端如何验证 "安全 "TLS 安全级别的服务器证书 peername。在 "安全 "TLS 策略表($smtp_tls_policy_maps)条目中,可选的 "匹配 "属性会覆盖main.cf设置。

该参数指定一个或多个模式或策略,以逗号、空格或冒号分隔。在策略表中,唯一有效的分隔符是冒号。

有关模式和策略语法的说明,请参阅smtp_tls_verify_cert_match参数。在这种情况下应避免使用 "主机名 "策略,因为在没有安全的全局 DNS 的情况下,在证书验证中使用 MX 查询结果无法避免对 DNS 的主动(中间人)攻击。

main.cf设置示例:

smtp_tls_secure_cert_match = nexthop

政策表覆盖示例

example.net     secure match=example.com:.example.com
.example.net    secure match=example.com:.example.com

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_security_level (默认值:空)

Postfix SMTP 客户端默认的 SMTP TLS 安全级别。如果指定的值不是空值,则会覆盖已过时的参数smtp_use_tlssmtp_enforce_tlssmtp_tls_enforce_peername;如果没有为smtp_tls_enforce_peername或已过时的参数指定值,则默认 SMTP TLS 安全级别为

指定以下安全级别之一:

无 TLS。除非通过smtp_tls_policy_maps 为特定目的地启用 TLS,否则不会使用 TLS。

可以

机会性 TLS。如果远程 SMTP 服务器支持 TLS,则使用 TLS,否则使用明文;在 TLS 握手或 TLS 会话失败后,如果邮件在邮件队列中的回退时间已达到最小值,则恢复使用明文。由于可以接受明文发送,因此要求比默认 TLS 安全性更强只会降低互操作性。smtp_tls_ciphers"和"smtp_tls_protocols"(Postfix ≥ 2.6)配置参数可控制机会型 TLS 使用的协议和密码级别。在早期版本中,机会型 TLS 的密码级别始终为 "导出",没有禁用任何协议。当 TLS 握手失败时,会在禁用 TLS 的情况下重试连接。这样,邮件就可以发送到采用非互操作 TLS 实现的站点。

加密

强制 TLS 加密。由于需要的是最低安全级别,因此对足够安全的协议版本和密码进行具体规定是合理的。在此安全级别及更高级别上,main.cf参数smtp_tls_mandatory_protocolssmtp_tls_mandatory_ciphers指定了 TLS 协议和最低密码等级,管理员认为这些协议和密码等级对强制加密会话足够安全。对于向互联网传送邮件的系统来说,这一安全级别并不是合适的默认设置。

丹麦人

机会性 DANE TLS。在此安全级别下,目的地的 TLS 策略通过 DNSSEC 获取。为使 TLSA 策略生效,目的地域的 DNS 区域必须签名,Postfix SMTP 客户端的操作系统必须配置为将其 DNS 查询发送到能验证签名记录的递归 DNS 名称服务器。每个 MX 主机的 DNS 区域也应签名,并应发布 DANE TLSA(RFC 7672) 记录,指定如何验证该 MX 主机的 TLS 证书。TLSA 记录并不取代正常的 SMTP MX 主机选择算法,如果一些 MX 主机支持 TLSA,而另一些不支持,那么 TLS 安全性就会因发送的不同而不同。域名所有者应合理配置其 MX 主机和 DNS。要配置 Postfix SMTP 客户端进行 DNSSEC 查询,请参阅smtp_dns_support_level main.cf参数的文档。未找到 DNSSEC 验证的 TLSA 记录时,有效的 tls 安全级别为 "可能"。当找到 TLSA 记录但全部无法使用时,有效安全级别为 "加密"。在选择协议和密码时,"dane "安全级别被视为 "强制 "TLS 安全级别,弱密码和协议被禁用。由于 DANE 会验证服务器证书,因此 "aNULL "密码套件会被自动排除在该级别之外,无需手动配置。Postfix 2.11 及更高版本提供RFC 7672(DANE) TLS 验证。

只限丹麦人

强制 DANE TLS。这与上面的 "dane "相同,但需要 DANE TLSA 验证。当 TLSA 记录丢失或无法使用时,不能使用 "may "或 "encrypt"。Postfix 2.11 及更高版本提供RFC 7672(DANE) TLS 验证。

指纹

证书指纹验证。在此安全级别下,没有受信任的证书颁发机构。证书信任链、过期日期等都不会被检查。相反,smtp_tls_fingerprint_cert_match参数会列出有效服务器证书的证书指纹或公钥指纹(Postfix 2.9 及更高版本)。用于计算指纹的摘要算法由smtp_tls_fingerprint_digest参数选择。适用于 Postfix 2.5 及更高版本。

核对

强制 TLS 验证。在此安全级别下,DNS MX 查询被认为足够安全,服务器证书中验证的名称通常是通过未验证的 DNS MX 查询间接获得的。smtp_tls_verify_cert_match参数控制服务器名称的验证方式。在实践中,对匹配的显式控制在 "安全 "级别更为常见,详情如下。对于向互联网传送邮件的系统来说,这种安全级别并不是合适的默认设置。

安全通道 TLS。在此安全级别下,DNS MX 查询虽然有可能用于确定候选下一跳网关 IP 地址,但其安全性不足以用于 TLS 用户名验证。相反,在服务器证书中验证的默认名称是从smtp_tls_secure_cert_match配置参数中指定的下一跳域中获取的。默认匹配规则是,当服务器证书的名称等于下一跳域或下一跳域的子域时,该证书就会匹配。对于向互联网传送邮件的系统来说,这种安全级别并不是合适的默认设置。

例如

# 无 TLS。原为:smtp_use_tls=no 和 smtp_enforce_tls=no。
smtp_tls_security_level = none
                
# Opportunistic TLS.
smtp_tls_security_level = may
# 不要调整机会型密码或协议,除非有必要
# 这样做(如果在 SSL 库中发现安全漏洞,可以通过禁用特定协议或提高
# 密码等级来缓解)。
# 
smtp_tls_ciphers = medium
smtp_tls_protocols = >=TLSv1
# 传统(Postfix < 3.6)语法:
smtp_tls_protocols= !SSLv2, !SSLv3
                
# Mandatory (high-grade) TLS encryption.
smtp_tls_security_level = encrypt
smtp_tls_mandatory_ciphers = high
                
# Authenticated TLS 1.2 or better matching the nexthop domain or a
# subdomain.
smtp_tls_security_level = secure
smtp_tls_mandatory_ciphers = high
smtp_tls_mandatory_protocols = >=TLSv1.2
smtp_tls_secure_cert_match = nexthop, dot-nexthop
                
# 无 CA 的 "指纹 "安全级别只适用于有限数量的
# 目的地。作为一个全局默认设置,而不是每个站点的
# 设置,只有当所有收件人的邮件都被发送到
# 中央邮件中心时,这个设置才实用。
# 
relayhost = [mailhub.example.com]
smtp_tls_security_level = fingerprint
smtp_tls_mandatory_protocols = >=TLSv1.2
smtp_tls_mandatory_ciphers = high
smtp_tls_fingerprint_cert_match =
    3D:95:34:51:...:40:99:C0:C1
    EC:3B:2D:B0:...:A3:9D:72:F6

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_servername (默认值:空)

在 TLS 服务器名称指示(SNI)扩展中发送给远程 SMTP 服务器的可选名称。当使用 DANE 对服务器进行身份验证时,SNI 扩展始终处于打开状态,此时发送的 SNI 名称是RFC7672所要求的名称,本参数将被忽略。

有些 SMTP 服务器会使用接收到的 SNI 名称来选择适当的证书链以提交给客户端。虽然这可以提高与此类服务器的互操作性,但可能会降低与其他服务器的互操作性,因为这些服务器在没有为请求的名称配置证书链时,会选择中止连接。此类服务器应选择默认证书链并继续握手,但有些服务器可能不会这样做。因此,如果没有 DANE,默认情况下不会发送 SNI 名称。

SNI 名称必须是有效的 DNS 主机名,或者是特殊值hostnamenexthop 之一,它们分别选择远程主机名或 nexthop 域。SNI 的 DNS 名称必须是 A 标签(双关代码)形式。无效的 DNS 名称会记录配置错误警告,邮件发送将被推迟。

除了使用中继主机转发所有电子邮件时,main.cf 中唯一合理的非空参数设置是主机名。其他非空值只能通过 Postfix TLS策略表servername属性按目的地进行设置。如有疑问,请将此参数留空,并根据需要配置每个目的地的 SNI。

该功能在 Postfix 3.4 及更高版本中可用。

smtp_tls_session_cache_database (默认值:空)

包含可选 Postfix SMTP 客户端 TLS 会话缓存的文件名。指定一种支持枚举的数据库类型,如btreesdbm;无需支持并发访问。如果文件不存在,则将创建该文件。smtp(8)守护进程不直接使用此参数,而是在tlsmgr(8)守护进程中间接实现缓存。这意味着每个 smtp 实例master.cf对该参数的重写是无效的。请注意,tlsmgr(8)守护进程支持的每个缓存数据库:$smtpd_tls_session_cache_database、$smtp_tls_session_cache_database(以及 Postfix 2.3 及更高版本的 $lmtp_tls_session_cache_database)都需要单独存储。目前还无法在一个数据库中存储多个缓存。

注意:不适合使用dbm数据库。TLS 会话对象太大。

从 2.5 版开始,Postfix 在打开该文件时不再使用 root 权限。现在,该文件应存储在 Postfix 拥有的data_directory 下。作为迁移辅助工具,在非 Postfix 目录下打开该文件的尝试将被重定向到 Postfix 所有的data_directory,并记录警告。

例如

smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_session_cache_timeout (默认值:3600 秒)

Postfix SMTP 客户端 TLS 会话缓存信息的过期时间。缓存每隔$smtp_tls_session_cache_timeout秒定期清理一次。与$smtp_tls_session_cache_database 一样,该参数也是在tlsmgr(8)守护进程中执行的,因此无法在每个 smtp 实例的master.cf中进行覆盖。

从 Postfix 2.11 开始,该设置不能超过 100 天。如果设置为 ≤ 0,会话缓存将被禁用。如果设置为小于 2 分钟的正值,则使用最小值 2 分钟。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

smtp_tls_trust_anchor_file (默认值:空)

零个或多个带有信任锚证书和/或公共密钥的 PEM 格式文件。如果参数不为空,CAfile 和 CApath 中的根 CA 将不再受信任。Postfix SMTP 客户端将只信任所选文件中包含的信任锚点之一签署的证书链。指定的信任锚证书和公开密钥不会过期,也不必是(自签名)根 CA。如果需要,它们可以是中间证书。因此,这些证书也可以在远程 SMTP 服务器提供的信任链的 "中间 "找到,任何不受信任的签发父证书都将被忽略。指定用逗号或空白分隔的路径名列表。

无论是在main.cf 中指定,还是按目的地指定,信任锚 PEM 文件都必须能被 chroot jail 中的 Postfix SMTP 客户端访问(如果适用)。信任锚文件应只包含证书和公钥,不包含私钥材料,而且必须能被非特权$mail_owner用户读取。这样,目的地就可以绑定到一组特定的 CA 或公开密钥,而无需对所有目的地都信任相同的 CA。

main.cf参数支持单一用途的 Postfix 安装,即向一组固定的 SMTP 对等方发送邮件。在大多数站点,如果要使用信任锚点文件,则要通过smtp_tls_policy_maps 中 "verify "和 "secure "级别的 "tafile "属性按目的地指定。

该机制定义了 SMTP 客户端 MTA 通过 DNS 安全确定服务器 TLS证书的机制。

如果希望信任锚是公开密钥,可以使用 OpenSSL 从包含单个证书的 PEM X.509 文件中提取单个 PEM 公开密钥,如下所示:

$ openssl x509 -in cert.pem -out ta-key.pem -noout -pubkey

该功能在 Postfix 2.11 及更高版本中可用。

smtp_tls_verify_cert_match (默认值:主机名)

Postfix SMTP 客户端如何验证 "verify" TLS 安全级别的服务器证书用户名。在 "验证 "TLS 策略表($smtp_tls_policy_maps)条目中,可选的 "匹配 "属性会覆盖main.cf设置。

该参数指定一个或多个模式或策略,以逗号、空格或冒号分隔。在策略表中,唯一有效的分隔符是冒号。

模式指定域名或域名后缀:

示例网

匹配example.com域名,即服务器证书中必须有一个名称是example.com。大小写字母的区别将被忽略。

.example.com

匹配example.com域的子域,即匹配服务器证书中由非零标签数和.example.com后缀组成的名称。大小写区别将被忽略。

策略指定从下一跳域到服务器证书中预期名称的转换:

nexthop

与下一跳域名匹配,下一跳域名可以是收件人域名,也可以是为该域名配置的传输下一跳域名(去掉任何可选的套接字类型前缀、方括号和尾部端口)。当 MX 查询未被抑制时,这是 MX 查询前的原始下一跳域,而不是 MX 查询的结果。对于通过 UNIX 域套接字进行的 LMTP 传输,经过验证的下一跳名称是 $myhostname。此策略适用于 "安全 "策略。忽略大小写。

dot-nexthop

同上,但匹配属于下一跳域名子域的服务器证书名称。大小写忽略不计。

主机名

与服务器主机名匹配,通常通过未经验证的 DNS MX 查询获得。对于通过 UNIX 域套接字进行的 LMTP 传输,验证名称为$myhostname。这与已过时的smtp_tls_per_site表中 "MUST "关键字的验证策略一致,适合与 "verify "安全级别一起使用。当下一跳名称用方括号括起来以抑制 MX 查询时,"hostname "策略与 "nexthop "策略相同。大小写将被忽略。

main.cf设置示例:

smtp_tls_verify_cert_match = hostname, nexthop, dot-nexthop

政策表覆盖示例

example.com     verify  match=hostname:nexthop
.example.com    verify  match=example.com:.example.com:hostname

该功能在 Postfix 2.3 及更高版本中可用。

smtp_tls_wrappermode (默认值:否)

要求 Postfix SMTP 客户端使用 SUBMISSIONS(以前称为 SMTPS)协议连接,而不是使用 STARTTLS 命令。

该模式要求使用"smtp_tls_security_level= encrypt "或更高版本。

例如:通过提供商在 "mail.example.com "的提交服务传送所有远程邮件。

/etc/postfix/main.cf:
    # 客户端 SUBMISSIONS 要求“encrypt”或更高。
    smtp_tls_security_level = encrypt
    smtp_tls_wrappermode = yes
    # []抑制 MX 查询。
    relayhost = [mail.example.com]:submissions

更多示例请参见TLS_README,包括 Postfix 旧版本的示例。

该功能在 Postfix 3.0 及更高版本中可用。

smtp_tlsrpt_enable (默认值:否)

启用对RFC 8460TLSRPT 通知的支持。邮件接收域可在 DNS 中发布 TLSRPT 策略,要求定期汇总通过 TLS 连接到其 MX 服务器的 SMTP 成功和失败情况。该功能要求 Postfix 内置支持 TLSRPT 的库。

有关 MTA-STSsmtp_tls_policy_maps插件的配置示例和其他要求,请参阅TLSRPT _ README

该功能在 Postfix ≥ 3.10 中可用。

smtp_tlsrpt_skip_reused_handshakes (默认值:是)

对于重复使用之前协商好的 TLS 会话的 TLS 协议握手,不要报告 TLSRPT 状态(没有新信息需要报告)。只报告 "新 "TLS 会话的 TLSRPT 状态。将此项设为 "否",可记录所有 TLS 握手的 TLSRPT 状态,例如,对 Postfix TLSRPT 支持进行故障诊断。

注意:如果重复使用 SMTP over TLS 连接,则不会再有第二次等。TLS 握手报告。

该功能在 Postfix ≥ 3.10 中可用。

smtp_tlsrpt_socket_name (默认值:空)

由本地 TLSRPT 报告服务管理的 UNIX 域数据报套接字的路径名。当"smtp_tlsrpt_enable= yes "时,该参数必须指定一个路径名(绝对路径或相对于 $queue_directory)。

有关 MTA-STSsmtp_tls_policy_maps插件的配置示例和其他要求,请参阅TLSRPT _ README

该功能在 Postfix ≥ 3.10 中可用。

smtp_use_tls (默认值:否)

机会模式:当远程 SMTP 服务器宣布支持 STARTTLS 时使用 TLS,否则以明文发送邮件。注意:有些 SMTP 服务器即使没有配置 STARTTLS,也会提供。在 Postfix < 2.3 版本中,如果 TLS 握手失败,且没有其他可用的服务器,邮件将被延迟发送并留在队列中。如果您担心这个问题,请使用smtp_tls_per_site功能。

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtp_tls_security_level

smtp_xforward_timeout (默认值:300 秒)

Postfix SMTP 客户端发送 XFORWARD 命令和接收远程 SMTP 服务器响应的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_authorized_verp_clients (默认值:$authorized_verp_clients)

允许哪些远程 SMTP 客户端指定 XVERP 命令。该命令要求每次只向一个收件人发送邮件,并按收件人设置返回地址。

默认情况下,不允许客户指定 XVERP。

该参数随 Postfix 2.1 版本更名。默认值向后兼容 Postfix 2.0 版本。

指定网络/网络掩码模式列表,以逗号和/或空白分隔。掩码指定主机地址网络部分的位数。您还可以指定主机名或 .域名(首部的点会导致域名匹配其下面的任何名称)、"/文件/名称 "或"type:table"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将地址或网络块排除在列表之外。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注意:IP 版本 6 地址信息必须在smtpd_authorized_verp_clients值的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

smtpd_authorized_xclient_hosts (默认值:空)

允许哪些远程 SMTP 客户端使用 XCLIENT 功能。该命令可覆盖用于访问控制的远程 SMTP 客户端信息。通常用于基于 SMTP 的内容过滤器、类似 fetchmail 的程序或 SMTP 服务器访问规则测试。详情请参见XCLIENT_README文档。

该功能在 Postfix 2.1 及更高版本中可用。

默认情况下,不允许客户指定 XCLIENT。

指定网络/网络掩码模式列表,以逗号和/或空白分隔。掩码指定主机地址网络部分的位数。您还可以指定主机名或 .域名(首部的点会导致域名匹配其下面的任何名称)、"/文件/名称 "或"type:table"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将地址或网络块排除在列表之外。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注意:IP 版本 6 地址信息必须在smtpd_authorized_xclient_hosts值的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

smtpd_authorized_xforward_hosts (默认值:空)

允许哪些远程 SMTP 客户端使用 XFORWARD 功能。该命令转发的信息用于改进基于 SMTP 的内容过滤器后的日志记录。详情请参阅XFORWARD_README文档。

该功能在 Postfix 2.1 及更高版本中可用。

默认情况下,不允许客户指定 XFORWARD。

指定网络/网络掩码模式列表,以逗号和/或空白分隔。掩码指定主机地址网络部分的位数。您还可以指定主机名或 .域名(首部的点会导致域名匹配其下面的任何名称)、"/文件/名称 "或"type:table"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可将地址或网络块排除在列表之外。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注意:IP 版本 6 地址信息必须在smtpd_authorized_xforward_hosts值的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

smtpd_banner (默认值:$myhostname ESMTP$mail_name)

SMTP 问候语横幅中 220 状态代码后面的文字。有些人喜欢看到邮件版本广告。Postfix 默认不显示版本。

必须在文本开头指定 $myhostname。这是 SMTP 协议的要求。

例如

smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

smtpd_client_auth_rate_limit (默认值:0)

允许任何客户端在每个时间单位内向该服务发送的最大 AUTH 命令数量,无论 Postfix 是否实际接受这些命令。时间单位由anvil_rate_time_unit配置参数指定。

默认情况下,客户端发送的 AUTH 命令数量不受限制。

要禁用此功能,请指定限值为 0。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 3.1 及更高版本中可用。

smtpd_client_connection_count_limit (默认值:50)

允许客户端同时连接此服务的数量。默认情况下,该限制值为默认进程限制值的一半。

要禁用此功能,请指定限值为 0。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_client_connection_rate_limit (默认值:0)

允许任何客户端在每个时间单位内尝试连接此服务的最大次数。时间单位由anvil_rate_time_unit配置参数指定。

默认情况下,客户端在每个时间单位内可进行的连接数与 Postfix 可接受的连接数相同。

要禁用此功能,请指定限值为 0。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 2.2 及更高版本中可用。

例如

smtpd_client_connection_rate_limit = 1000

smtpd_client_event_limit_exceptions (默认值:$mynetworks)

不受 smtpd_client_*_count/rate_limit 限制的客户端。有关参数值语法,请参阅mynetworks参数说明。

默认情况下,受信任网络中的客户端被排除在外。指定一个网络区块、主机名或 .域名列表(首部的点会使域名匹配其下面的任何名称)。

注意:IP 版本 6 地址信息必须在smtpd_client_event_limit_exceptions值中的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

域名的模式匹配受父域名匹配子域参数值中是否存在"smtpd_client_event_limit_exceptions"的控制(Postfix 3.0 及更高版本)。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_client_ipv4_prefix_length (默认值:32)

按指定网络前缀的 IPv4 网络块聚合 smtpd_client_*_count 和 smtpd_client_*_rate 统计数据。聚合使用较少的anvil(8)资源来维护计数器。默认情况下,IPv4 禁用聚合。

该功能在 Postfix 3.8 及更高版本中可用。

smtpd_client_ipv6_prefix_length (默认值:84)

按指定网络前缀的 IPv6 网络块聚合 smtpd_client_*_count 和 smtpd_client_*_rate 统计数据。聚合使用较少的anvil(8)资源来维护计数器。默认情况下,IPv6 会启用聚合。

该功能在 Postfix 3.8 及更高版本中可用。

smtpd_client_message_rate_limit (默认值:0)

允许任何客户端在每个时间单位内向该服务发出的最大报文传送请求数,与 Postfix 是否实际接受这些报文无关。时间单位由anvil_rate_time_unit配置参数指定。

默认情况下,在 Postfix 可以接受的范围内,客户端可以在每个时间单位内发送尽可能多的信息传送请求。

要禁用此功能,请指定限值为 0。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 2.2 及更高版本中可用。

例如

smtpd_client_message_rate_limit = 1000

smtpd_client_new_tls_session_rate_limit (默认值:0)

允许远程 SMTP 客户端在每个时间单位内与该服务协商的新 TLS 会话(即未缓存)的最大数量。时间单位由anvil_rate_time_unit配置参数指定。

默认情况下,远程 SMTP 客户端在每个时间单位内可协商的新 TLS 会话数量与 Postfix 可接受的数量相同。

要禁用此功能,请将限制值指定为 0。 否则,请指定一个至少为每个客户端并发会话限制的限制值,否则合法的客户端会话可能会被拒绝。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 2.3 及更高版本中可用。

例如

smtpd_client_new_tls_session_rate_limit = 100

smtpd_client_port_logging (默认值:否)

除主机名和 IP 地址外,启用远程 SMTP 客户端端口记录。记录格式为 "host[address]:port"。

该功能在 Postfix 2.5 及更高版本中可用。

smtpd_client_recipient_rate_limit (默认值:0)

允许任何客户端在每个时间单位内向此服务发送的最大收件人地址数,无论 Postfix 是否实际接受这些收件人。时间单位由anvil_rate_time_unit配置参数指定。

默认情况下,在 Postfix 可以接受的范围内,客户端可以在每个时间单位内发送尽可能多的收件人地址。

要禁用此功能,请指定限值为 0。

警告:此功能的目的是限制滥用。它不得用于管制合法的邮件流量。

该功能在 Postfix 2.2 及更高版本中可用。

例如

smtpd_client_recipient_rate_limit = 1000

smtpd_client_restrictions (默认值:空)

Postfix SMTP 服务器在客户端连接请求时应用的可选限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"延迟评估 SMTP 访问限制列表 "一节。

默认值是允许所有连接请求。

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

以下限制针对客户端主机名或客户端网络地址信息。

check_ccert_access 类型:表

默认情况下,使用远程 SMTP 客户端证书指纹或公钥指纹(Postfix 2.9 及更高版本)作为指定access(5)数据库的查找密钥;在 Postfix 2.2 版本中,还要求远程 SMTP 客户端证书已成功验证。指纹摘要算法可通过smtpd_tls_fingerprint_digest参数进行配置(在 Postfix 2.5 版之前硬编码为 md5)。该功能需要"smtpd_tls_ask_ccert= yes",并在 Postfix 2.2 及更高版本中可用。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5。现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要没有已知的针对旧算法的 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

另外,check_ccert_access也接受明确的搜索顺序(Postfix 3.5 及更高版本)。上述默认搜索顺序对应于

check_ccert_access{type:table, { search_order = cert_fingerprint, pubkey_fingerprint }}

逗号可有可无。

check_client_access 类型:表

在指定的访问数据库中搜索客户端主机名或 IP 地址。详情请参阅access(5)手册页面。

check_client_a_access 类型:表

在指定的access(5)数据库中搜索客户端主机名的 IP 地址,并执行相应的操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 3.0 及更高版本中可用。

check_client_mx_access type:table

在指定的access(5)数据库中搜索客户端主机名的 MX 主机,并执行相应的操作。如果找不到 MX 记录,则查找 A 或 AAAA 记录,就像 Postfix SMTP 客户端所做的那样。注意:出于安全考虑,不允许出现 "OK "的结果。相反,请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.7 及更高版本中可用。

check_client_ns_access 类型:表

在指定的access(5)数据库中搜索客户端主机名的 DNS 服务器,并执行相应操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.7 及更高版本中可用。

check_reverse_client_hostname_access type:table

在指定的访问数据库中搜索未验证的反向客户端主机名或 IP 地址。详情请参阅access(5)手册页面。注意:出于安全考虑,不允许使用 "OK "结果。请使用 DUNNO 从 denylists 中排除特定主机。该功能在 Postfix 2.6 及更高版本中可用。

check_reverse_client_hostname_a_access type:table

在指定的access(5)数据库中搜索未验证的反向客户端主机名的 IP 地址,并执行相应的操作。注意:出于安全考虑,不允许使用 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 3.0 及更高版本中可用。

check_reverse_client_hostname_mx_access type:table

在指定的access(5)数据库中搜索未验证的反向客户端主机名的 MX 主机,并执行相应的操作。如果找不到 MX 记录,则查找 A 或 AAAA 记录,就像 Postfix SMTP 客户端所做的那样。注意:出于安全考虑,不允许使用 "OK "结果。相反,请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.7 及更高版本中可用。

check_reverse_client_hostname_ns_access 类型:表

在指定的access(5)数据库中搜索未验证反向客户端主机名的 DNS 服务器,并执行相应操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.7 及更高版本中可用。

check_sasl_access type:table

使用远程 SMTP 客户端 SASL 用户名作为指定access(5)数据库的查找密钥。当smtpd_sasl_local_domain参数值为非空时,查找键的形式为 "username@domainname"。与check_client_access功能不同,check_sasl_access不匹配父域或 IP 子网范围。该功能适用于 Postfix 2.11 及更高版本。

permit_inet_interfaces

当客户端 IP 地址与$inet_interfaces 匹配时,允许请求。

许可网络

当客户端 IP 地址与$mynetworks 中列出的任何网络或网络地址匹配时,允许请求。

permit_sasl_authenticated

当客户端通过RFC 4954(AUTH) 协议成功验证时,允许请求。

permit_tls_all_clientcerts

当远程 SMTP 客户端证书验证成功时,允许请求。只有在特殊 CA 签发证书且只有该 CA 被列为受信任 CA 的情况下,才必须使用该选项。否则,使用第三方证书的客户端也会被允许中继。当使用smtpd_tls_CAfilesmtpd_tls_CApath 指定受信任 CA 时,指定"tls_append_default_CA= no",以防止 Postfix 附加系统提供的默认 CA。该功能需要使用"smtpd_tls_ask_ccert= yes",适用于 Postfix 2.2 及更高版本。

permit_tls_clientcerts

当远程 SMTP 客户端证书指纹或公钥指纹(Postfix 2.9 及更高版本)列在$relay_clientcerts 中时,允许请求。指纹摘要算法可通过smtpd_tls_fingerprint_digest参数进行配置(在 Postfix 2.5 版之前硬编码为 md5)。该功能需要"smtpd_tls_ask_ccert= yes",在 Postfix 2.2 及更高版本中可用。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5。现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要没有已知的针对旧算法的 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

reject_rbl_client rbl_domain=d.d.d.d

当反向客户端网络地址与rbl_domain下的 A 记录"d.d.d.d"一起列出时,拒绝请求(仅限 Postfix 2.1 及以后版本)。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字...数字范围的模式(Postfix 2.8 及更高版本)。如果没有指定"=d.d.d.d",则在rbl_domain 下的任何 A 记录中列出反向客户端网络地址时拒绝请求。
maps_rbl_reject_code参数指定了拒绝请求的响应代码(默认值:554),default_rbl_reply参数指定了默认的服务器回复,rbl_reply_maps参数指定了按rbl_domain 索引的服务器回复表。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.0 及更高版本中可用。

permit_dnswl_client dnswl_domain=d.d.d.d

当反向客户端网络地址与dnswl_domain 下的 A 记录"d.d.d.d"一起列出时,接受请求。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字......数字范围的模式。如果没有指定"=d.d.d.d.d",则在反向客户端网络地址与dnswl_domain 下的任何 A 记录一起列出时接受请求。
为安全起见,当permit_dnswl_client优先于reject_unauth_destination 时,将被静默忽略。当 allowlist 查找失败时,结果是 DEFER_IF_REJECT。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.8 及更高版本中可用。

reject_rhsbl_client rbl_domain=d.d.d.d

当客户主机名与rbl_domain下的 A 记录"d.d.d.d"一起列出时,拒绝请求(仅限 Postfix 2.1 及以后版本)。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字...数字范围的模式(Postfix 2.8 及更高版本)。如果没有指定"=d.d.d.d",则在客户主机名与rbl_domain 下的任何 A 记录一起列出时拒绝请求。有关其他 RBL 相关配置参数,请参阅上文reject_rbl_client说明。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.0 及更高版本中可用;在 Postfix 2.8 及更高版本中,reject_rsbl_reverse_client通常会产生更好的结果。

permit_rhswl_client rhswl_domain=d.d.d.d

当客户主机名与rhswl_domain 下的 A 记录"d.d.d.d"一起列出时,接受请求。每个"d"都是一个数字,或包含一个或多个"; "分隔数字或数字...数字范围的"[]"内模式。如果未指定"=d.d.d.d.d",则在客户主机名与rhswl_domain 下的任何 A 记录一起列出时接受请求。
注意:客户端名称允许列表很脆弱,因为客户端名称查找可能会因暂时中断而失败。客户端名称允许列表只能用于减少基于 DNS 的拦截列表中的误报,而不能用于访问规则例外。
为安全起见,当permit_rhswl_client优先于reject_unauth_destination 时,将被静默忽略。当允许列表查找失败时,结果是 DEFER_IF_REJECT。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.8 及更高版本中可用。

reject_rhsbl_reverse_client rbl_domain=d.d.d.d

当未经验证的反向客户端主机名与rbl_domain 下的 A 记录"d.d.d.d"一起列出时,拒绝请求。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字......数字范围的模式。如果未指定"=d.d.d.d.d",则在未经验证的反向客户端主机名与rbl_domain 下的任何 A 记录一起列出时拒绝请求。有关其他 RBL 相关配置参数,请参阅上文reject_rbl_client的描述。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.8 及更高版本中可用。

reject_unknown_client_hostname(使用 Postfix < 2.3 时:reject_unknown_client)

当 1) 客户端 IP 地址->名称映射失败,或 2) 名称->地址映射失败,或 3) 名称->地址映射与客户端 IP 地址不匹配时,拒绝请求。
这种限制比拒绝未知客户机反向主机名功能更强,后者仅在上述 1) 条件下触发。
unknown_client_reject_code参数指定了被拒绝请求的响应代码(默认值:450)。如果由于临时问题导致地址->名称或名称->地址查找失败,则响应代码始终为 450。

拒绝未知反向客户主机名

当客户端 IP 地址没有地址->名称映射时,拒绝请求。
这一限制比reject_unknown_client_hostname功能弱,后者不仅要求存在地址->名称和名称->地址映射,还要求这两个映射再现客户端 IP 地址。
unknown_client_reject_code参数用于指定拒绝请求的响应代码(默认值:450)。如果由于临时问题导致地址->名称查找失败,则响应代码始终为 450。
该功能在 Postfix 2.3 及更高版本中可用。

此外,您还可以使用以下任何通用限制。这些限制适用于任何 SMTP 命令上下文。

check_policy_service 服务器名称

查询指定的策略服务器。详情请参阅SMTPD_POLICY_README文档。此功能在 Postfix 2.1 及更高版本中可用。

延迟

推迟请求。客户端会被告知稍后再试。该限制在限制列表的末尾非常有用,可以明确默认策略。
defer_code参数指定 SMTP 服务器的回复代码(默认值:450)。

推迟许可

如果稍后的限制会导致显式或隐式 PERMIT 操作,则推迟请求。当拒绝列表功能因临时问题而失效时,这项功能就很有用。该功能在 Postfix 2.1 及更高版本中可用。

如果拒绝,则推迟

如果稍后的限制会导致 REJECT 操作,则推迟请求。当允许列表功能因临时问题而失效时,该功能就很有用。该功能在 Postfix 2.1 及更高版本中可用。

许可证

允许请求。该限制在限制列表的末尾非常有用,可以明确默认策略。

拒绝多收件人反弹

当信封发件人为空地址,且邮件有多个信封收件人时,拒绝请求。这种用法虽然罕见,但却有合理的应用:在某些情况下,使用 DSN 选项 NOTIFY=NEVER 发布的多收件人邮件可能会以空发信者地址转发。
注意:这种限制只有在smtpd_data_restrictionssmtpd_end_of_data_restrictions 中使用时才能可靠地发挥作用,因为在 SMTP 对话的早期阶段收件人总数是未知的。在 RCPT 阶段使用时,只会拒绝第二个等收件人。
multi_recipient_bounce_reject_code参数用于指定拒绝请求的响应代码(默认值:550)。该功能在 Postfix 2.1 及更高版本中可用。

reject_plaintext_session

当连接未加密时拒绝请求。在客户端使用 AUTH 或 STARTTLS 命令协商加密之前,不应使用此限制。
参数plaintext_reject_code用于指定拒绝请求的响应代码(默认值:450)。该功能在 Postfix 2.3 及更高版本中可用。

reject_unauth_pipelining

当客户端在不允许的情况下提前发送 SMTP 命令,或客户端在不知道 Postfix 实际支持 ESMTP 命令管道化的情况下提前发送 SMTP 命令时,拒绝该请求。这样就能阻止大宗邮件软件为加快邮件发送速度而不适当地使用 ESMTP 命令管道化。
在 Postfix 2.6 及更高版本中,SMTP 服务器会在检测到非法管道连接(包括管道连接的 HELO 或 EHLO 命令)时按会话设置一个标记。reject_unauth_pipelining功能只需检测会话期间的任何时间点是否设置了该标记。
在 Postfix 旧版本中,reject_unauth_pipelining会检查输入读取队列的当前状态,因此不建议在smtpd_data_restrictions 以外的情况下使用该功能。

否决

拒绝请求。该限制在限制列表的末尾非常有用,可以明确说明默认策略。reject_code配置参数指定了被拒绝请求的响应代码(默认值:554)。

睡眠 秒数

暂停指定秒数,然后继续执行列表中的下一个限制(如果有的话)。当用作以下用途时,可能会阻止僵尸邮件:

/etc/postfix/main.cf:
    smtpd_client_restrictions =
        sleep 1, reject_unauth_pipelining
    smtpd_delay_reject = no

Postfix 2.3 中提供了这一功能。

如果拒绝,则发出警告

测试安全网当"warn_if_reject"放在拒绝类型限制、访问表查询或check_policy_service查询之前时,会记录一条 "reject_warning "信息,而不是拒绝请求(当拒绝类型限制因临时错误而失败时,会为任何隐含的"defer_if_permit"操作记录一条 "reject_warning "信息,这些操作通常会阻止邮件被后面的访问限制所接受)。此功能对defer_if_reject限制没有影响。

在此情况下有效的其他限制:

例如

smtpd_client_restrictions = permit_mynetworksreject_unknown_client_hostname

smtpd_command_filter (默认值:空)

一种转换远程 SMTP 客户端命令的机制。这是一种最后的工具,用于解决客户端命令破坏与 Postfix SMTP 服务器互操作性的问题。其他用途还包括故障注入,以测试 Postfix 对无效命令的处理。

指定"type:table"查找表的名称。搜索字符串是从远程 SMTP 客户端接收到的 SMTP 命令,但会去掉首部空白和尾部 <CR><LF>。结果值由 Postfix SMTP 服务器执行。

以下情况无需使用smtpd_command_filter

使用smtpd_command_filter功能解决问题的示例:

/etc/postfix/main.cf:
    smtpd_command_filter = pcre:/etc/postfix/command_filter
                
/etc/postfix/command_filter:
    # 解决客户端发送畸形 HELO 命令的问题。
    /^HELO\s*$/ HELO domain.invalid
                
    # Work around clients that send empty lines.
    /^\s*$/     NOOP
    # Work around clients that send RCPT TO:<'user@domain'>.
    # 警告:不要丢失地址后面的参数。
    /^(RCPT\s+TO:\s*<)'([^[:space:]]+)'(>.*)/     $1$2$3
                
    # 在 MAIL FROM 命令中附加 XVERP,以请求 VERP 式投递。
    # 有关如何使用 Postfix VERP 的更多信息,请参阅 VERP_README。
    /^(MAIL\s+FROM:\s*.*)/   $1 XVERP
                
    # 被退回的邮件汇。使用notify_classes=bounce,resource,software
    # 将被退回的邮件发送给邮局管理员(删除邮件正文)。
    /^(RCPT\s+TO:\s*<.*>.*)\s+NOTIFY=\S+(.*)/     $1 NOTIFY=NEVER$2
    /^(RCPT\s+TO:.*)/                             $1 NOTIFY=NEVER

Postfix 2.7 中提供了这一功能。

smtpd_data_restrictions (默认值:空)

Postfix SMTP 服务器在 SMTP DATA 命令上下文中应用的可选访问限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"延迟评估 SMTP 访问限制列表 "一节。

该功能在 Postfix 2.0 及更高版本中可用。

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

在这种情况下,以下限制是有效的:

例如

smtpd_data_restrictions = reject_unauth_pipelining
smtpd_data_restrictions = reject_multi_recipient_bounce

smtpd_delay_open_until_valid_rcpt (默认值:是)

推迟 SMTP 邮件事务的启动,直到收到有效的 RCPT TO 命令。如果指定 "否",则 Postfix SMTP 服务器一收到有效的 MAIL FROM 命令,就会立即创建邮件事务。

对于拒收大量邮件的网站,默认设置可减少磁盘、CPU 和内存资源的使用。缺点是被拒收的收件人会被记录为 NOQUEUE,而不是邮件事务 ID(也称为队列 ID)。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_delay_reject (默认值:是)

等待 RCPT TO 命令后再评估 $smtpd_client_restrictions、$smtpd_helo_restrictions 和 $smtpd_sender_restrictions,或等待 ETRN 命令后再评估$smtpd_client_restrictions和 $smtpd_helo_restrictions。

该功能默认开启,因为当 Postfix SMTP 服务器在 RCPT TO 之前拒绝接受命令时,一些客户端会出现明显的错误行为。

默认设置有一个很大的好处:它允许 Postfix 在拒收客户名称/地址或发件人地址时记录收件人地址信息,这样就有可能找出拒收的是谁的邮件。

smtpd_discard_ehlo_keyword_address_maps (默认值:空)

以远程 SMTP 客户端地址为索引的查找表,包含不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,Postfix SMTP 服务器不会在给远程 SMTP 客户端的 EHLO 响应中发送这些关键字。详情请参阅smtpd_discard_ehlo_keywords。出于稳健性考虑,不按主机名搜索表。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_discard_ehlo_keywords (默认值:空)

不区分大小写的 EHLO 关键字(pipelining、starttls、auth 等)列表,Postfix SMTP 服务器不会在给远程 SMTP 客户端的 EHLO 响应中发送这些关键字。

该功能在 Postfix 2.2 及更高版本中可用。

备注

smtpd_dns_reply_filter (默认值:空)

Postfix SMTP 服务器 DNS 查询结果的可选过滤器。请参阅smtp_dns_reply_filter,了解包括示例在内的详细信息。

该功能在 Postfix 3.0 及更高版本中可用。

smtpd_end_of_data_restrictions (默认值:空)

Postfix SMTP 服务器在 SMTP END-OF-DATA 命令上下文中应用的可选访问限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"延迟评估 SMTP 访问限制列表 "一节。

该功能在 Postfix 2.2 及更高版本中可用。

有关详情和限制,请参阅smtpd_data_restrictions

smtpd_enforce_tls (默认值:否)

强制 TLS:向远程 SMTP 客户端宣布支持 STARTTLS,并拒绝除 HELO、EHLO、XCLIENT、STARTTLS、NOOP、QUIT 和(Postfix ≥ 3.9)HELP 以外的所有明文命令。根据RFC 2487,在公开引用 SMTP 服务器的情况下,不得使用此功能。相反,应在专用服务器上使用,例如提交(端口 587)。因此,该选项默认为关闭。

注 1:"smtpd_enforce_tls= yes "意味着"smtpd_tls_auth_only= yes"。

注 2:通过"sendmail -bs"调用时,由于没有足够权限访问服务器私钥,Postfix 将永远不会提供 STARTTLS。这是预期行为。

自 Postfix 3.9 起,该功能已被弃用。请改用smtpd_tls_security_level

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtpd_tls_security_level代替。

smtpd_error_sleep_time (默认:1秒)

使用 Postfix 2.1 及更高版本时:在客户端出错次数超过 $smtpd_soft_error_limit,但少于$smtpd_hard_error_limit时,SMTP 服务器会延迟响应,但不会发送邮件。

在 Postfix 2.0 及更早版本中:当客户端出错次数少于$smtpd_soft_error_limit时,SMTP 服务器会延迟发送拒收(4xx 或 5xx)响应,但不会发送邮件。当客户端出错次数达到或超过$smtpd_soft_error_limit时,将延迟发送所有响应,延迟时间以(出错次数)秒或$smtpd_error_sleep_time 中较大者为准。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtpd_etrn_restrictions (默认值:空)

Postfix SMTP 服务器在客户端 ETRN 命令上下文中应用的可选限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"SMTP 访问限制列表的延迟评估 "一节。

Postfix ETRN 实现只接受符合 Postfix "快速刷新 "服务条件的目的地。详情请参见ETRN_README文件。

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

以下限制针对通过 ETRN 命令接收到的域名信息。

check_etrn_access 类型:表格

在指定的访问数据库中搜索 ETRN 域名。详情请参阅access(5)手册页面。

在此情况下有效的其他限制:

例如

smtpd_etrn_restrictions = permit_mynetworks,reject

smtpd_expansion_filter (默认值:参见 "postconf -d "输出)。

RBL 回复模板的 $name 扩展名中允许使用哪些字符。不在允许字符集中的字符将用"_"代替。使用类似 C 语言的转义来指定特殊字符,如空白。

smtpd_expansion_filter值不受 Postfix 配置参数 $name 扩展的限制。

该功能在 Postfix 2.0 及更高版本中可用。

smtpd_forbid_bare_newline (默认值:Postfix ≥ 3.9:正常化)

拒绝或限制 SMTP 客户端以 <LF> 结尾而非标准 <CR><LF> 结尾的输入行。基于 UNIX 的 SMTP 服务器通常允许使用这种行结束符,但它们违反了RFC 5321,而且允许使用这种行结束符会使服务器容易受到SMTP 走私的攻击

指定以下值之一(大小写无关):

正常化(Postfix ≥ 3.9 时的默认值)

要求使用标准的数据结束序列 <CR><LF>.<CR><LF>。否则,允许以非标准 <LF> 结尾的命令行或邮件内容行,并像客户端发送标准 <CR><LF> 一样处理它们。

这样就能与许多混合发送标准和非标准行结束语的合法 SMTP 客户端应用程序保持兼容,但将无法接收来自不以标准数据结束序列 <CR><LF>.<CR><LF> 结束 DATA 内容的客户端实现的电子邮件。

可以使用smtpd_forbid_bare_newline_exclusions 将此类客户端排除在外。

备注

与 "normalize "相同,但也会在日志中记录 Postfix SMTP 服务器是否收到任何带有 "bare <LF>"的行。信息格式为"disconnect from name[address] ... notes=bare_lf"。notes 值将成为一个以逗号分隔的名称列表。

该功能在 Postfix 3.9 及更高版本中可用。

normalize 的兼容性别名。

否决

要求使用标准的数据结束序列 <CR><LF>.<CR><LF>。当一行包含裸 <LF> 时,拒绝接收命令或邮件内容,记录 "收到裸 <LF>"错误,并回复 SMTP 状态代码 $smtpd_forbid_bare_newline_reject_code。

这将拒绝来自发送任何非标准行尾的 SMTP 客户端的电子邮件,如网络应用程序、netcat 或负载平衡器健康检查。

这也将拒绝来自使用 BDAT 发送包含空换行符的 MIME 文本的服务的电子邮件(RFC 3030第 3 节要求文本信息类型使用规范 MIME 格式,定义见RFC 2045第 2.7 和 2.8 节)。

可以使用smtpd_forbid_bare_newline_exclusions将此类客户端排除在外(或者,在违反 BDAT 的情况下,可以使用smtpd_discard_ehlo_keyword_address_maps 有选择地禁用 BDAT,或者使用smtpd_discard_ehlo_keywords 全局禁用 BDAT)。

(Postfix < 3.9 的默认值)

不要求使用标准的数据结束序列 <CR><LF>.<CR><LF>。始终以客户端发送 <CR><LF> 的方式处理裸 <LF>。该选项完全向后兼容,但不建议用于面向互联网的 SMTP 服务器,因为它容易受到SMTP 走私的影响。

建议设置:

# 要求使用标准的数据结束序列 <CR><LF>.<CR><LF>。
# 否则,允许使用裸 <LF>,并像客户端发送
# <CR><LF> 一样进行处理。
#
# 这样就能与许多合法的 SMTP 客户端应用程序保持兼容,这些应用程序会混合发送标准和
# 非标准行结束符,但会无法接收来自不使用标准数据结束符序列 <CR><LF> 
# 结束 DATA 内容的客户端实现的电子邮件。<CR><LF>.
#
# 可以使用 smtpd_forbid_bare_newline_exclusions 将此类客户端列入允许列表。
# 下面的示例允许列出受信任网络中的 SMTP 客户端。
#
smtpd_forbid_bare_newline = normalize
smtpd_forbid_bare_newline_exclusions = $mynetworks

替代方案

# 拒绝包含 <LF> 的输入行,并记录 "未收到 <LF>"
# 错误。要求输入行以 <CR><LF> 结束,并要求使用
# 标准的数据结束序列 <CR><LF>.<CR><LF>
#
# 这将拒绝从发送任何非标准
# 行尾的 SMTP 客户端(如网络应用程序、netcat 或负载平衡器
# 健康检查)发送的电子邮件。
#
# 这也将拒绝来自使用 BDAT 发送包含空 换行符 的 MIME 文本
# (RFC 3030 第 3 节要求文本信息类型使用 RFC 2045 第 2.7 和 2.8 节定义的规范 MIME 格式)的服务的电子邮件。
#
# Such clients can be allowlisted with smtpd_forbid_bare_newline_exclusions.
# The example below allowlists SMTP clients in trusted networks.
#
smtpd_forbid_bare_newline = reject
smtpd_forbid_bare_newline_exclusions = $mynetworks
#
# 另外,在违反 BDAT 的情况下,可以使用smtpd_discard_ehlo_keyword_address_maps 有选择性地
# 禁用 BDAT,或使用smtpd_discard_ehlo_keywords 全局
# 禁用 BDAT。
#
# smtpd_discard_ehlo_keyword_address_maps = cidr:/path/to/file
# /path/to/file:
#     10.0.0.0/24 chunking, silent-discard
# smtpd_discard_ehlo_keywords = chunking, silent-discard

在 Postfix 3.8.4、3.7.9、3.6.13 和 3.5.23 中,该功能可设置为 "是 "和 ""。此外,Postfix ≥ 3.9、3.8.5、3.7.10、3.6.14 和 3.5.24 中还提供拒绝正常化设置。

smtpd_forbid_bare_newline_exclusions (默认值:$ mynetworks)

将指定客户端排除在smtpd_forbid_bare_newline强制执行之外。此设置使用与mynetworks 相同的语法和父域匹配行为。

该功能在 Postfix ≥ 3.9、3.8.4、3.7.9、3.6.13 和 3.5.23 中可用。

smtpd_forbid_bare_newline_reject_code (默认值:550)

当使用"smtpd_forbid_bare_newline= reject "拒绝请求时,Postfix SMTP 服务器响应代码的数字。指定 5XX 状态代码(521 表示断开连接)。

该功能在 Postfix ≥ 3.9、3.8.5、3.7.10、3.6.14 和 3.5.24 中可用。

smtpd_forbid_unauth_pipelining (默认值:Postfix ≥ 3.9:是)

断开违反RFC 2920(或 5321)命令管道限制的远程 SMTP 客户端。服务器回复 "554 5.5.0 错误:SMTP 协议同步",并记录意外的远程 SMTP 客户端输入。Postfix ≥ 3.9 默认启用此功能。指定"smtpd_forbid_unauth_pipelining= no "可禁用该功能。

该功能在 Postfix ≥ 3.9、3.8.1、3.7.6、3.6.10 和 3.5.20 中可用。

smtpd_forbidden_commands (默认值:CONNECT GET POST regexp:{{/^[^A-Z]/ Bogus}})

会导致 Postfix SMTP 服务器立即以 221 代码终止会话的命令列表。这可用于断开明显试图滥用系统的客户端。除该参数中列出的命令外,遵循邮件头 "Label: "格式的命令也会导致断开连接。在 Postfix 3.6 及更早版本中,默认值为 "CONNECT GET POST"。

该功能在 Postfix 2.2 及更高版本中可用。

Postfix 3.7 版新增了对内联正则表达式的支持。有关语法和功能的说明,请参见regexp_table(5)

smtpd_hard_error_limit (默认:正常:20, 超载:1)

允许远程 SMTP 客户端在不发送邮件的情况下出错的最大次数。当达到该限制时,Postfix SMTP 服务器会断开连接。Postfix 2.5 及更早版本的 SMTP 服务器默认最多允许 20 个错误。有效值大于零。

smtpd_helo_required (默认值:否)

要求远程 SMTP 客户端在发送 MAIL 命令或其他需要 EHLO 协商的命令之前,先用 HELO 或 EHLO 命令自我介绍。

例如

smtpd_helo_required = yes

smtpd_helo_restrictions (默认值:空)

Postfix SMTP 服务器在客户端 HELO 命令上下文中应用的可选限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"SMTP 访问限制列表的延迟评估 "一节。

默认情况下,允许所有内容。

注意:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过smtpd_helo_restrictions)。

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

以下限制针对通过 HELO 或 EHLO 命令接收到的主机名信息。

check_helo_access 类型:表格

在指定的access(5)数据库中搜索 HELO 或 EHLO 主机名,并执行相应的操作。注意:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过check_helo_access)。

check_helo_a_access type:table

在指定的access(5)数据库中搜索 HELO 或 EHLO 主机名的 IP 地址,并执行相应的操作。注 1:出于安全考虑,不允许使用 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。注 2:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过 check_helo_a_access)。该功能在 Postfix 3.0 及更高版本中可用。

check_helo_mx_access type:table

在指定的access(5)数据库中搜索 HELO 或 EHLO 主机名的 MX 主机,并执行相应的操作。如果找不到 MX 记录,则查找 A 或 AAAA 记录,就像 Postfix SMTP 客户端所做的那样。注 1:出于安全考虑,不允许使用 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。注 2:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过check_helo_mx_access)。Postfix 2.1 及更高版本提供了这一功能。

check_helo_ns_access 类型:表格

在指定的access(5)数据库中搜索 HELO 或 EHLO 主机名的 DNS 服务器,并执行相应操作。注 1:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。注 2:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过check_helo_ns_access)。Postfix 2.1 及更高版本提供了这一功能。

reject_invalid_helo_hostname(使用 Postfix < 2.3 时:reject_invalid_hostname)

当 HELO 或 EHLO 主机名畸形时拒绝请求。注意:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_ helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过reject_invalid_helo_hostname)。
invalid_hostname_reject_code指定拒绝请求的响应代码(默认值:501)。

reject_non_fqdn_helo_hostname(使用 Postfix < 2.3 时:reject_non_fqdn_hostname)

当 HELO 或 EHLO 主机名不是 RFC 所要求的全限定域名或地址字面形式时,拒绝请求。注意:指定"smtpd_helo_required= yes "可完全执行这一限制(如果没有"smtpd_ helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过reject_non_fqdn_helo_hostname)。
non_fqdn_reject_code参数指定了被拒绝请求的响应代码(默认值:504)。

reject_rhsbl_helo rbl_domain=d.d.d.d

当 HELO 或 EHLO 主机名与rbl_domain下的 A 记录"d.d.d.d"一起列出时,拒绝请求(仅适用于 Postfix 2.1 及更高版本)。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字...数字范围的模式(Postfix 2.8 及更高版本)。如果未指定"=d.d.d.d",则在 HELO 或 EHLO 主机名与rbl_domain 下的任何 A 记录一起列出时拒绝请求。有关其他 RBL 相关配置参数,请参阅reject_rbl_client说明。注意:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过reject_rhsbl_helo)。
注意:始终尊重信誉服务的使用政策。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.0 及更高版本中可用。

reject_unknown_helo_hostname(使用 Postfix < 2.3 时:reject_unknown_hostname)

当 HELO 或 EHLO 主机名没有 DNS A 或 MX 记录时拒绝请求。
回复由unknown_hostname_reject_code参数(默认值:450)或unknown_helo_hostname_tempfail_action参数(默认值:defer_if_permit)指定。详情请参阅相关参数说明。
注意:指定"smtpd_helo_required= yes "可完全执行此限制(如果没有"smtpd_helo_required= yes",客户端可以通过不发送 HELO 或 EHLO 来跳过reject_unknown_helo_hostname)。

在此情况下有效的其他限制:

例如

smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname
smtpd_helo_restrictions = permit_mynetworks, reject_unknown_helo_hostname

smtpd_hide_client_session (默认值:否)

不要在 Postfix SMTP 服务器的 Received: 报文头中包含 SMTP 客户端会话信息。

  • 端口 25 MTA 服务必须使用默认设置"smtpd_hide_client_session= no"。它提供了RFC 5321 所要求的信息。
  • 端口 587 和 465 MUA 服务可使用"smtpd_hide_client_session= yes "设置。这将隐藏 SMTP 客户端主机名和 IP 地址、TLS 会话详情、SASL 登录详情和 SMTP 协议详情。

根据收件人的数量,经过编辑的 Received: 标头有以下几种形式:

Received: by mail.example.com (Postfix) id postfix-queue-id
        for ; Day, dd Mon yyyy hh:mm:ss tz-offset (zone)
Received: by mail.example.com (Postfix) id postfix-queue-id Day, dd Mon yyyy hh:mm:ss tz-offset (zone)

经编辑的表格隐藏了通过 SMTP 接收邮件的信息,因此无需提供RFC 5321 所要求的信息。该表格仍符合RFC 5322的要求。

该功能在 Postfix ≥ 3.10 中可用。

smtpd_history_flush_threshold (默认值:100)

Postfix SMTP 服务器命令历史记录在收到 EHLO、RSET 或 DATA 结束时被清除之前的最大行数。

smtpd_junk_command_limit (默认:正常:100, 超载:1)

在 Postfix SMTP 服务器开始增加每条垃圾命令的错误计数器之前,远程 SMTP 客户端可发送的垃圾命令(NOOP、VRFY、ETRN 或 RSET)数量。邮件发送完毕后,垃圾命令计数将被重置。另请参阅smtpd_error_sleep_timesmtpd_soft_error_limit配置参数。在 Postfix 2.5 及更早版本中,SMTP 服务器默认最多允许 100 个垃圾命令。

smtpd_log_access_permit_actions (默认值:空)

启用记录 SMTP 服务器访问列表中已命名的 "允许 "操作(默认情况下,SMTP 服务器记录 "拒绝 "操作,但不记录 "允许 "操作)。此功能不影响"defer_if_permit"等条件操作。

指定 "permit "操作名称、"/file/name "或"type:table"模式的列表,以逗号和/或空白分隔。该列表从左到右匹配,搜索在第一次匹配时停止。文件/名称 "模式会被其内容替换;"类型:表"查找表会在名称与查找键匹配时进行匹配(查找结果会被忽略)。下一行以空格开始,继续长行。指定"!pattern "可从列表中排除某个名称。

例如

/etc/postfix/main.cf:
    # 记录所有 "允许 "操作。
    smtpd_log_access_permit_actions = static:all
                
/etc/postfix/main.cf:
    # 只记录“permit_dnswl_client”。
    smtpd_log_access_permit_actions = permit_dnswl_client

该功能在 Postfix 2.10 及更高版本中可用。

smtpd_milter_maps (默认值:空)

按远程 SMTP 客户端 IP 地址查找 Milter 设置表。查询结果会覆盖smtpd_milters设置,语法也相同。

注意:查询表不能返回空响应。指定查询结果为 DISABLE(大小写无关),表示应禁用 Milter 支持。

禁用本地客户端筛选器的示例

/etc/postfix/main.cf:
    smtpd_milter_maps = cidr:/etc/postfix/smtpd_milter_map
    smtpd_milters = inet:host:port, { inet:host:port, ... }, ...
                
/etc/postfix/smtpd_milter_map:
    # Disable Milters for local clients.
    127.0.0.0/8    DISABLE
    192.168.0.0/16 DISABLE
    ::/64          DISABLE
    2001:db8::/32  DISABLE

该功能在 Postfix 3.2 及更高版本中可用。

smtpd_milters (默认值:空)

通过 Postfixsmtpd(8)服务器收到的新邮件的 Milter(邮件过滤)应用程序列表。指定空格或逗号作为分隔符。详情请参阅MILTER_README文档。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_min_data_rate (默认值:500)

使用smtpd_per_request_deadline 启用截止时间后,以字节/秒为单位的 DATA 和 BDAT请求的最小明文数据传输速率。在读取操作传输了 N 个明文消息字节(可能是在 TLS 解密之后),并且 DATA 或 BDAT 请求截止时间被该读取操作的已用时间递减之后,DATA 或 BDAT 请求截止时间会以 N/smtpd_min_data_rate 秒递增。不过,截止时间的递增永远不会超过用smtpd_timeout 指定的时限。

该功能在 Postfix 3.7 及更高版本中可用。

smtpd_noop_commands (默认值:空)

Postfix SMTP 服务器以 "250 OK "回复的命令列表,不进行任何语法检查,也不改变状态。该列表覆盖 Postfix SMTP 服务器内置的任何命令。

smtpd_null_access_lookup_key (默认值:<>)。

将在 SMTPaccess(5)表中使用的查找键,而不是空发件人地址。

smtpd_peername_lookup (默认值:是)

尝试查找远程 SMTP 客户端主机名,并验证该名称是否与客户端 IP 地址匹配。当无法查询或验证客户端名称时,或当名称查询被禁用时,客户端名称会被设置为 "未知"。关闭名称查询可减少 DNS 查询造成的延迟,并提高最大入站发送率。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_per_record_deadline (默认:正常:否, 超载:是)

更改smtpd_timeoutsmtpd_starttls_timeout时限的行为,从每次读取或写入系统调用的时限,改为发送或接收完整记录(SMTP 命令行、SMTP 响应行、SMTP 消息内容行或 TLS 协议消息)的时限。这就限制了敌对对等程序每次一个字节地传输数据所造成的影响。

注意:启用每条记录截止时间后,超时时间过短可能会导致 TLS 在速度很慢的网络连接上出现问题。原因是 TLS 协议报文最长可达 16 kbytes(TLSv1),而且必须在每条记录截止时间内发送或接收整个 TLS 协议报文。

该功能在 Postfix 2.9-3.6 中可用。在较早的 Postfix 版本中,该行为与将该参数设置为 "否 "相同。Postfix 3.7 及更高版本使用smtpd_per_request_deadline

smtpd_per_request_deadline (默认:正常:否, 超载:是)

更改smtpd_timeoutsmtpd_starttls_timeout时限的行为,从每次明文或 TLS 读写调用的时限,改为接收完整 SMTP 请求和发送完整 SMTP 响应的合并时限。截止时间只限制等待明文或 TLS 读写调用的时间,不限制其他时间。每个请求的截止时间限制了敌对对等程序每次一个字节地传输数据所造成的影响。

请参阅smtpd_min_data_rate,了解在 DATA 和 BDAT 阶段如何管理每个请求的截止时间。

注意:启用按请求截止时间后,较短的时间限制可能会导致 TLS 在速度很慢的网络连接上出现问题。原因是 TLS 协议报文最长可达 16 kbytes(使用 TLSv1),而整个 TLS 协议报文必须在按请求截止时间内传输。

该功能在 Postfix 3.7 及更高版本中可用。Postfix 2.9-3.6 中有一个较弱的功能,称为smtpd_per_record_deadline。在较早版本的 Postfix 中,该参数被设为 "无"。

该功能在 Postfix 3.7 及更高版本中可用。

smtpd_policy_service_default_action (默认值:451 4.3.5 服务器配置问题)

SMTPD 策略服务请求失败时的默认操作。指定 "DUNNO "后,将视同未发送失败的 SMTPD 策略服务请求,并继续处理其他访问限制(如有)。

局限性:

  • 该参数可指定任何有效 SMTPD 策略服务器响应(或access(5)映射查询结果)的值。该参数值中的access(5)映射或策略服务器可能需要事先用 restriction_class 设置声明。
  • 如果指定的操作调用了另一个check_policy_service请求,则该请求将使用内置的默认操作。

该功能在 Postfix 3.0 及更高版本中可用。

smtpd_policy_service_max_idle (默认:300 秒)

关闭空闲 SMTPD 策略服务连接的时间。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_policy_service_max_ttl (默认:1000s)

活动 SMTPD 策略服务连接关闭的时间。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_policy_service_policy_context (默认值:空)

Postfix SMTP 服务器在策略服务请求的 "policy_context "属性中指定的可选信息(最初是为了在多个check_policy_service客户端之间共享同一个服务端点)。

该功能在 Postfix 3.1 及更高版本中可用。

smtpd_policy_service_request_limit (默认值:0)

每个 SMTPD 策略服务连接的最大请求数,或 0(无限制)。连接达到此限制后,连接将关闭,下一个请求将通过新连接发送。这是一种变通方法,可避免无法维持持久连接的策略服务器出现错误恢复延迟。

该功能在 Postfix 3.0 及更高版本中可用。

smtpd_policy_service_retry_delay (默认:1 秒)

尝试重新发送失败的 SMTPD 策略服务请求之间的延迟。指定一个大于 0 的值。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 3.0 及更高版本中可用。

smtpd_policy_service_timeout (默认值:100秒)

连接到受权 SMTPD 策略服务器、向其写入内容或从其接收内容的时间限制。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_policy_service_try_limit (默认值:2)

在放弃之前发送 SMTPD 策略服务请求的最大尝试次数。指定一个大于 0 的值。

该功能在 Postfix 3.0 及更高版本中可用。

smtpd_proxy_ehlo (默认值:$myhostname)

Postfix SMTP 服务器向代理过滤器通告自己的方式。默认情况下,使用 Postfix 主机名。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_proxy_filter (默认值:空)

邮件过滤代理服务器的主机名和 TCP 端口。代理从 Postfix SMTP 服务器接收所有邮件,并将结果发送给另一个 Postfix SMTP 服务器进程。

为 TCP 端点指定 "host:port "或 "inet:host:port",为 UNIX 域端点指定 "unix:pathname"。主机可以指定为 IP 地址或符号名称;不进行 MX 查询。如果没有指定 "host "或 "host:",则假定为本地机器。路径名解释相对于 Postfix 队列目录。

该功能在 Postfix 2.1 及更高版本中可用。

inet:" 和 "unix:" 前缀在 Postfix 2.3 及更高版本中可用。

smtpd_proxy_options (默认值:空)

控制 Postfix SMTP 服务器与队列前内容过滤器通信方式的选项列表。请指定以下零个或多个选项,以逗号或空格分隔。

速度调整

在收到整个邮件之前,不要连接到队列前内容过滤器。这样可以减少同时进行的队列前内容过滤器进程的数量。

注 1:过滤器不得选择性地拒绝多收件人邮件的收件人。拒绝所有收件人和接受所有收件人都是可以的。

注 2:此功能将增加$message_size_limit 的最小队列可用空间。将信息保存到临时文件需要额外的空间。

该功能在 Postfix 2.7 及更高版本中可用。

smtpd_proxy_timeout (默认:100秒)

连接代理过滤器以及发送或接收信息的时间限制。连接失败时,客户端会收到一条通用的错误信息,而更详细的信息则会记录到 maillog 文件中。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_recipient_limit (默认值:1000)

Postfix SMTP 服务器接受的每个邮件发送请求的最大收件人数量。

smtpd_recipient_overshoot_limit (默认值:1000)

在 Postfix SMTP 服务器针对每个超额收件人递增每次会话错误计数之前,远程 SMTP 客户端可发送的超出$smtpd_recipient_limit 所指定限制的收件人数量。

smtpd_recipient_restrictions (默认值:参见 "postconf -d "输出)。

Postfix SMTP 服务器在客户端 RCPT TO 命令的上下文中,在smtpd_relay_restrictions 之后应用的可选限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"SMTP 访问限制列表的延迟评估 "一节。

在 Postfix 2.10 之前的版本中,中继许可规则和垃圾邮件拦截规则合并在smtpd_recipient_restrictions 下,导致配置容易出错。从 Postfix 2.10 起,中继许可规则最好与smtpd_relay_restrictions 一起执行,因此smtpd_recipient_restrictions下的允许垃圾邮件拦截策略将不再导致允许邮件中继策略。

为了向后兼容,从 2.10 之前的 Postfix 版本迁移过来的网站可以将smtpd_relay_restrictions设置为空,并像以前一样使用smtpd_recipient_restrictions

重要:smtpd_relay_restrictionssmtpd_recipient_restrictions参数必须至少指定下列限制之一。否则 Postfix 将拒绝接收邮件:

reject, reject_unauth_destination
defer, defer_if_permit, defer_unauth_destination

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

以下限制针对通过 RCPT TO 命令接收的收件人地址。

check_recipient_access 类型:表

在指定的access(5)数据库中搜索已解析的 RCPT TO 地址,并执行相应的操作。

check_recipient_a_access type:table

在指定的access(5)数据库中搜索 RCPT TO 域的 IP 地址,并执行相应操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 3.0 及更高版本中可用。

check_recipient_mx_access type:table

在指定的access(5)数据库中搜索 RCPT TO 域的 MX 主机,并执行相应的操作。如果找不到 MX 记录,则查找 A 或 AAAA 记录,就像 Postfix SMTP 客户端所做的那样。注意:出于安全考虑,不允许出现 "OK "结果。相反,请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.1 及更高版本中可用。

check_recipient_ns_access 类型:表

在指定的access(5)数据库中搜索 RCPT TO 域的 DNS 服务器,并执行相应操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.1 及更高版本中可用。

permit_auth_destination

当下列情况之一为真时,允许请求:

  • Postfix 是邮件转发器:解析的 RCPT TO 域与$relay_domains或其子域匹配,且地址不包含发件人指定的路由(user@elsewhere@domain)、
  • Postfix 是最终目的地:解析的 RCPT TO 域符合 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains 或 $virtual_mailbox_domains,且地址不包含发件人指定的路由(user@elsewhere@domain)。

permit_mx_backup

当本地邮件系统是 RCPT TO 网域的备份 MX,或该网域是授权目标时,允许请求(定义请参阅permit_auth_destination)。

  • 安全性:permit_mx_backup不接受包含发件人指定路由信息的地址(例如:user@elsewhere@domain)。
  • 安全性:如果不使用permit_mx_backup_networks 限制访问,permit_ mx_backup 可能会被误用。
  • 安全性:从 Postfix 2.3 版开始,当本地邮件系统是收件人域名的主 MX 时,permit_mx_backup不再接受地址。例外:permit_mx_backup接受指定授权目标地址的地址(参见permit_auth_destination的定义)。
  • 限制:在 Postfix 2.0 以前的版本中,如果出现临时 DNS 查询问题,邮件可能会被拒收。

拒绝非收件人

当 RCPT TO 地址指定的域不是 RFC 所要求的全称域形式时,拒绝请求。
non_fqdn_reject_code参数指定了拒绝请求的响应代码(默认值:504)。

reject_rhsbl_recipient rbl_domain=d.d.d.d

当 RCPT TO 域与rbl_domain下的 A 记录"d.d.d.d"一起列出时,拒绝请求(仅限 Postfix 2.1 及更高版本)。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字...数字范围的模式(Postfix 2.8 及更高版本)。如果没有指定"=d.d.d.d",则在 RCPT TO 域与rbl_domain 下的任何 A 记录一起列出时拒绝请求。
maps_rbl_reject_code参数指定了拒绝请求的响应代码(默认值:554);default_rbl_reply参数指定了默认服务器回复;rbl_reply_maps参数指定了按rbl_domain 索引的服务器回复表。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.0 及更高版本中可用。

拒绝 UNAUTH_Destination

除非以下情况之一为真,否则拒绝请求:

  • Postfix 是邮件转发器:解析的 RCPT TO 域与$relay_domains或其子域匹配,且不包含发件人指定的路由(user@elsewhere@domain)、
  • Postfix 是最终目的地:解析的 RCPT TO 域匹配 $mydestination、$inet_interfaces、$proxy_interfaces、$virtual_alias_domains 或 $virtual_mailbox_domains,且不包含发件人指定的路由(user@elsewhere@domain)。

relay_domains_reject_code参数指定拒绝请求的响应代码(默认值:554)。

推迟 UNAUTH_DESTINATION

拒绝与reject_unauth_destination 相同的请求,但错误代码不是永久性的。此功能在 Postfix 2.10 及更高版本中可用。

拒绝未知收件人域

当 Postfix 不是收件人域的最终目的地,且 RCPT TO 域 1) 没有 DNS MX 和 DNS A 记录,或 2) 有畸形 MX 记录,如带有零长度 MX 主机名的记录(Postfix 2.3 及更高版本)时,拒绝请求。
回复可通过unknown_address_reject_code参数(默认值:450)、unknown_address_tempfail_action(默认值:defer_if_permit)或 556(nullmx,Postfix 3.0 及更高版本)来指定。详情请参见相关参数说明。

reject_unlisted_recipient(使用 Postfix 2.0 版:check_recipient_maps)。

当 RCPT TO 地址未列在其域类的有效收件人列表中时,拒绝请求。详见smtpd_reject_unlisted_recipient参数说明。此功能在 Postfix 2.1 及更高版本中可用。

拒绝未核实的收件人

当已知发往 RCPT TO 地址的邮件被退回,或收件人地址无法到达时,拒绝该请求。地址验证信息由verify(8)服务器管理;详情请参见ADDRESS_VERIFICATION_README文件。
unverified_recipient_reject_code参数用于指定已知地址被退回时的数字响应代码(默认值:450,在确信安全的情况下可更改为 550)。
unverified_recipient_defer_code(未验证收件人拒绝代码)参数用于指定因临时问题导致地址探测失败时的数字响应代码(默认值:450)。
unverified_recipient_tempfail_action参数用于指定因临时问题导致地址探测失败后的操作(默认值:defer_if_permit)。
如果使用"enable_original_recipient= no"(Postfix ≤ 3.2),则别名地址无法使用此功能。
该功能在 Postfix 2.1 及更高版本中可用。

在此情况下有效的其他限制:

例如

# Postfix 2.10 之前的默认邮件中继策略。以后的 Postfix
# 版本最好使用smtpd_relay_restrictions 来实现。
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

smtpd_reject_footer (默认值:空)

附加在每个 Postfix SMTP 服务器 4XX 或 5XX 响应之后的可选信息。

下面的示例在模板开头使用了"\c"(Postfix 2.10 及更高版本支持),以抑制回复文本和页脚文本之间的换行。在 Postfix 早期版本中,页脚文本总是从新行开始,而"\c "是按字面输出的。

/etc/postfix/main.cf:
    smtpd_reject_footer = \c。如需帮助,请致电 800-555-0101。
     请在问题报告中提供以下信息:
     时间($localtime)、客户端($client_address)和服务器($server_name)。

服务器响应:

    550-5.5.1 <user@example> 收件人地址被拒:用户未知。如需帮助,
    请致电 800-555-0101。请在问题报告中提供以下信息:时间(1 月 4 日 15:42:00)、
    客户端(192.168.1.248)和服务器(mail1.example.com)。

注意:上述文本旨在方便查找 SMTP 会话失败的 Postfix 日志文件记录。文本本身不会记录到 Postfix SMTP 服务器的 maillog 文件中。

请确保文本尽可能简短。长文本在记录到远程 SMTP 客户端的 maillog 文件之前,或在发送状态通知中返回给发件人之前,可能会被截断。

模板文本不受 Postfix 配置参数 $name 扩展的限制。相反,该功能支持页脚文本中数量有限的 $name 属性。这些属性将被替换为 SMTP 会话的当前值。

注意:在从regexp: 或pcre:-basedsmtpd_reject_footer_maps 中查找的页脚文本中指定 $$name,否则 Postfix 服务器将不会使用页脚文本,而会记录警告。

客户地址

记录在 maillog 文件中的客户端 IP 地址。

客户端端口

记录在 maillog 文件中的客户端 TCP 端口。

当地时间

记录在 maillog 文件中的服务器本地时间(Mmm dd hh:mm:ss)。

服务器名称

服务器的myhostname值。该属性适用于有多个 MTA 的网站(可能在负载平衡器后面),服务器名称可以帮助服务器支持团队快速找到正确的日志文件。

备注

该功能支持两个字符的序列 \n 作为在页脚文本中换行的请求。Postfix 会自动在每个换行符后插入 Postfix 拒收邮件原文中的三位 SMTP 回复代码(以及可选的增强状态代码)。

要避免邮件软件错误处理多行回复,可在模板开头指定两个字符的序列 \c。这将抑制回复文本和页脚文本之间的换行(Postfix 2.10 及更高版本)。

该功能在 Postfix 2.8 及更高版本中可用。

smtpd_reject_footer_maps (默认值:空)

查询表,以完整的 Postfix SMTP 服务器 4xx 或 5xx 响应为索引,并附有拒收页脚模板。详情请参见smtpd_reject_footer

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

该功能在 Postfix 3.4 及更高版本中可用。

smtpd_reject_unlisted_recipient (默认值:是)

要求 Postfix SMTP 服务器拒绝未知收件人地址的邮件,即使未指定明确的reject_unlisted_recipient访问限制。这可防止 Postfix 队列中塞满无法投递的 MAILER-DAEMON 邮件。

当出现以下情况时,地址将被视为 "未知 "地址:1)不匹配virtual(5)别名或canonical(5) 映射;2)地址对其地址类别无效。有关基于类的地址验证定义,请参阅ADDRESS_CLASS_README

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_reject_unlisted_sender (默认:否)

要求 Postfix SMTP 服务器拒绝来自未知发件人地址的邮件,即使没有指定明确的reject_unlisted_sender访问限制。这可以减缓蠕虫或病毒伪造邮件的爆炸式增长。

当出现以下情况时,地址将被视为 "未知 "地址:1)不匹配virtual(5)别名或canonical(5) 映射;2)地址对其地址类别无效。有关基于类的地址验证定义,请参阅ADDRESS_CLASS_README

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_relay_before_recipient_restrictions (默认值:参见 "postconf -d "输出)。

smtpd_recipient_restrictions 之前评估smtpd_relay _restrictions。一直以来,smtpd_relay_restrictions都是在smtpd_recipient_restrictions 之后进行评估的,这与文件中的行为相矛盾。

背景:smtpd_relay_restrictions功能主要用于执行邮件中继策略,而smtpd_recipient_restrictions主要用于执行垃圾邮件拦截策略。两者都是在回复 RCPT TO 命令时进行评估的,并且都支持相同的功能。

该功能在 Postfix 3.6 及更高版本中可用。

smtpd_relay_restrictions (默认值: permit_mynetworkspermit_sasl_authenticateddefer_unauth_destination)

Postfix SMTP 服务器在 RCPT TO 命令上下文中,在smtpd_recipient_restrictions 之前应用的邮件中继控制访问限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"延迟评估 SMTP 访问限制列表 "一节。

在 Postfix 2.10 之前的版本中,中继许可规则和垃圾邮件拦截规则合并在smtpd_recipient_restrictions 下,导致配置容易出错。从 Postfix 2.10 起,中继许可规则最好与smtpd_relay_restrictions 一起执行,因此smtpd_recipient_restrictions下的允许垃圾邮件拦截策略将不再导致允许邮件中继策略。

为了向后兼容,从 2.10 之前的 Postfix 版本迁移过来的网站可以将smtpd_relay_restrictions设置为空,并像以前一样使用smtpd_recipient_restrictions

默认情况下,Postfix SMTP 服务器接受:

重要:smtpd_relay_restrictionssmtpd_recipient_restrictions参数必须至少指定下列限制之一。否则 Postfix 将拒绝接收邮件:

reject, reject_unauth_destination
defer, defer_if_permit, defer_unauth_destination

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。与smtpd_recipient_restrictions 文件中的限制相同。

该功能在 Postfix 2.10 及更高版本中可用。

smtpd_restriction_classes (默认值:空)

用户自定义的访问限制组别名。这些别名可以在smtpd_recipient_restrictions等文件中指定,也可以在 Postfixaccess(5)表的右侧指定。

其中一个主要应用是按收件人实施 UCE 控制。有关其他示例,请参阅RESTRICTION_CLASS_README文档。

smtpd_sasl_application_name (默认值: smtpd)

Postfix SMTP 服务器用于 SASL 服务器初始化的应用程序名称。这控制着 SASL 配置文件的名称。默认值为smtpd,对应名为smtpd.conf 的 SASL 配置文件。

该功能在 Postfix 2.1 和 2.2 中可用。Postfix 2.3 更名为smtpd_sasl_path

smtpd_sasl_auth_enable (默认值:否)

在 Postfix SMTP 服务器中启用 SASL 身份验证。默认情况下,Postfix SMTP 服务器不使用身份验证。

如果远程 SMTP 客户端已通过身份验证,则可以使用permit_sasl_authenticated访问限制来允许中继访问,如下所示:

# 在 Postfix 2.10 及更高版本中,邮件中继策略
# 最好在 smtpd_relay_restrictions 下指定。
smtpd_relay_restrictions =
    permit_mynetworks, permit_sasl_authenticated, ...
        
# 对于 2.10 之前的 Postfix,中继策略只能
# 在 smtpd_recipient_restrictions 下指定。
smtpd_recipient_restrictions =
    permit_mynetworks, permit_sasl_authenticated, ...

要拒绝来自未验证客户端的所有 SMTP 连接,请指定"smtpd_delay_reject= yes"(默认值)并使用:

smtpd_client_restrictions = permit_sasl_authenticated, reject

有关 SASL 配置和操作详情,请参阅SASL_README文件。

smtpd_sasl_authenticated_header (默认值:否)

smtpd(8)Received 报文头中报告经 SASL 验证的用户名。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_sasl_exceptions_networks (默认值:空)

Postfix SMTP 服务器不向哪些远程 SMTP 客户端提供 AUTH 支持。

某些客户端(至少是 Netscape 4)存在一个错误,只要提供 AUTH,无论是否必要,都会要求输入登录名和密码。要解决这个问题,可以指定$mynetworks来阻止 Postfix 向本地客户端提供 AUTH。

指定网络/网络掩码模式列表,以逗号和/或空白分隔。掩码指定主机地址网络部分的位数。您也可以指定"/文件/名称 "或"type:table"模式。文件/名称 "模式会被其内容替换;"类型:表"查找表会在表项与查找字符串匹配时进行匹配(忽略查找结果)。下一行以空格开始,继续长行。指定"!pattern "可将地址或网络块排除在列表之外。仅 Postfix 2.4 及更高版本支持"!/文件/名称 "形式。

注意:IP 版本 6 地址信息必须在smtpd_sasl_exceptions_networks值中的[]内指定,并在以"/file/name "指定的文件中指定。IP 版本 6 地址包含": "字符,否则会与"type:table"模式相混淆。

例如

smtpd_sasl_exceptions_networks = $mynetworks

该功能在 Postfix 2.1 及更高版本中可用。

smtpd_sasl_local_domain (默认值:空)

Postfix SMTP 服务器本地 SASL 身份验证域的名称。

默认情况下,本地身份验证域名称为空字符串。

例如

smtpd_sasl_local_domain = $mydomain
smtpd_sasl_local_domain = $myhostname

smtpd_sasl_mechanism_filter (默认: !external, static:rest)

如果非空,则是 Postfix SMTP 服务器将在 EHLO 响应中公布的 SASL 机制名称的过滤器。默认情况下,Postfix SMTP 服务器不会公布 EXTERNAL 机制,因为 Postfix 未实现对该机制的支持。

指定机制名称、"/file/name "模式或"type:table"查找表,以逗号或空白分隔。类型:表"查找的右侧结果将被忽略。指定"!pattern "可从列表中排除机制名称。

例如

smtpd_sasl_mechanism_filter = !external, !gssapi, static:rest
smtpd_sasl_mechanism_filter = login, plain
smtpd_sasl_mechanism_filter = /etc/postfix/smtpd_mechs

该功能在 Postfix 3.6 及更高版本中可用。

smtpd_sasl_path (默认值: smtpd)

Postfix SMTP 服务器传递给通过smtpd_sasl_type 选择的 SASL 插件实现的特定实现信息。通常,这将指定配置文件或会合点的名称。

该功能在 Postfix 2.3 及更高版本中可用。在早期版本中,它被称为smtpd_sasl_application_name

smtpd_sasl_response_limit (默认值:12288)

SASL 客户端响应服务器挑战的最大长度。当客户端的 "初始响应 "长度超过 SMTP 命令的正常限制时,客户端必须省略其初始响应,等待空的服务器挑战;然后,客户端可以发送本应是其 "初始响应 "的内容,作为对空的服务器挑战的响应。RFC4954要求服务器接受至少 12288 个字节的 base64 编码文本的客户端响应。因此,默认值也是该参数可接受的最小值。

Postfix 3.4 及更高版本可使用此功能。以前的版本使用"line_length_limit"(行长限制),可能需要提高行长限制,以适应较大的客户端响应,例如在对属于多个组的 Windows AD 用户进行 GSSAPI 验证时可能需要提高行长限制

smtpd_sasl_security_options (默认:noanonymous)

Postfix SMTP 服务器 SASL 安全选项;从 Postfix 2.3 开始,可用功能列表取决于使用smtpd_sasl_type 选择的 SASL 服务器实现。

cyrus服务器 SASL 实现定义了以下安全功能:

限制 Postfix SMTP 服务器向客户端提供的身份验证机制。可用的身份验证机制列表取决于系统。

指定以下零项或多项:

不解释

禁止使用明文密码的方法。

禁止方法受到主动(非字典)攻击。

词典

禁止受被动(字典)攻击的方法。

匿名

禁止使用允许匿名身份验证的方法。

转发保密

只允许支持前向保密的方法(仅限 Dovecot)。

相互验证

只允许提供相互验证的方法(Cyrus SASL 版本 1 不提供)。

默认情况下,Postfix SMTP 服务器接受明文密码,但不接受匿名登录。

警告:客户机似乎会按照服务器公布的顺序尝试验证方法(例如,PLAIN ANONYMOUS CRAM-MD5),这意味着如果禁用明文密码,客户机将匿名登录,即使他们本应可以使用 CRAM-MD5。因此,如果禁用明文登录,也要禁用匿名登录。Postfix 将匿名登录视为无身份验证。

例如

smtpd_sasl_security_options = noanonymous, noplaintext

smtpd_sasl_service (默认值: smtp)

传递给通过smtpd_sasl_typesmtpd_sasl_path 选择的 SASL 插件的服务名称。

Postfix 2.11 及更高版本具有此功能。之前的版本则与指定"smtp"时一样。

smtpd_sasl_tls_security_options (默认值:$smtpd_sasl_security_options)

Postfix SMTP 服务器用于 TLS 加密 SMTP 会话的 SASL 验证安全选项。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_sasl_type (默认:cyrus)

Postfix SMTP 服务器用于身份验证的 SASL 插件类型。postconf -a"命令列出了可用的类型。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_sender_login_maps (默认值:空)

可选查找表,其中包含拥有信封发件人(MAIL FROM)地址的 SASL 登录名。

注意:要确保发件人(From: header)地址与信封发件人(MAIL FROM)地址一致,可使用外部过滤器,如提交或提交(以前称为 smtps)服务的 Milter。例如https://github.com/magcks/milterfrom.

指定零个或多个 "type:name "查找表,用空格或逗号分隔。表将按指定顺序搜索,直到找到匹配为止。对于从 DB 或 DBM 等索引文件,或从 NIS、LDAP 或 SQL 等网络表进行的查找,以下查找操作的发件人地址为user@domain

1)user@domain

该表的查找始终进行,并具有最高优先级。

2)用户

只有当发件人地址的域名部分与 $myorigin、$mydestination、$inet_interfaces 或$proxy_interfaces 相匹配时,才会进行表格查询。

3)@ 域

该表查找最后进行,优先级最低。

在任何情况下,表格查询结果都必须是 "未找到 "或用逗号和/或空白分隔的 SASL 登录名列表。

smtpd_sender_restrictions (默认值:空)

Postfix SMTP 服务器在客户端 MAIL FROM 命令的上下文中应用的可选限制。有关评估上下文和时间的讨论,请参阅SMTPD_ACCESS_README,"延迟评估 SMTP 访问限制列表 "一节。

默认情况下,允许所有内容。

指定限制条件列表,以逗号和/或空格分隔。下一行以空格开头,继续长行。限制条件按指定的顺序应用;第一个匹配的限制条件获胜。

以下限制针对通过 MAIL FROM 命令收到的发件人地址。

check_sender_access 类型:表

在指定的access(5)数据库中搜索 MAIL FROM 地址,并执行相应的操作。

check_sender_a_access 类型:表格

在指定的access(5)数据库中搜索 MAIL FROM 域的 IP 地址,并执行相应的操作。注意:出于安全考虑,不允许出现 "OK "结果。请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 3.0 及更高版本中可用。

check_sender_mx_access 类型:表

在指定的access(5)数据库中搜索 MAIL FROM 域的 MX 主机,并执行相应的操作。如果找不到 MX 记录,则查找 A 或 AAAA 记录,就像 Postfix SMTP 客户端所做的那样。注意:出于安全考虑,不允许出现 "OK "结果。相反,请使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.1 及更高版本中可用。

check_sender_ns_access 类型:表格

在指定的access(5)数据库中搜索 MAIL FROM 域的 DNS 服务器,并执行相应操作。注意:出于安全考虑,不允许出现 "OK "结果。相反,可以使用 DUNNO 从拒绝列表中排除特定主机。该功能在 Postfix 2.1 及更高版本中可用。

拒绝已验证的发件人登录不匹配

当客户端已通过 SASL 验证,但 MAIL FROM 地址未列在$smtpd_sender_login_maps 中,或 SASL 登录名不是该地址的所有者时,拒绝该请求。
这样可以防止已通过身份验证的客户端使用他们未明确拥有的 MAIL FROM 地址。
注意:要确保 From: 头地址与信封发件人(MAIL FROM)地址相匹配,可在提交或提交(以前称为 smtps)服务中使用 Milter 等外部过滤器。例如:https://github.com/magcks/milterfrom。
此功能在 Postfix 2.1 及更高版本中可用。

拒绝已知发件人登录不匹配

当客户端通过 SASL 验证时,如果 MAIL FROM 地址列在$smtpd_sender_login_maps 中,但 SASL 登录名不是该地址的所有者,则拒绝该请求。
如果客户端未通过 SASL 验证,则在启用 SASL 且 MAIL FROM 地址列在$smtpd_sender_login_maps 中时拒绝请求。
这将保护$smtpd_sender_login_maps 中列出的任何 MAIL FROM 地址,同时仍允许客户端使用任何未列出的 MAIL FROM 地址。
注意:要确保 From: 头地址与信封发件人(MAIL FROM)地址相匹配,可使用外部过滤器(如 Milter)来过滤提交或提交(以前称为 smtps)服务。例如:https://github.com/magcks/milterfrom。
此功能在 Postfix 2.11 及更高版本中可用。

reject_non_fqdn_sender

当 MAIL FROM 地址指定的域不是 RFC 要求的全称域形式时,拒绝请求。
non_fqdn_reject_code参数指定了拒绝请求的响应代码(默认值:504)。

reject_rhsbl_sender rbl_domain=d.d.d.d

当 MAIL FROM 域与rbl_domain下的 A 记录"d.d.d.d"一起列出时,拒绝请求(仅限 Postfix 2.1 及以后版本)。每个"d"都是一个数字,或"[]"内包含一个或多个"; "分隔的数字或数字...数字范围的模式(Postfix 2.8 及更高版本)。如果没有指定"=d.d.d.d",则在 MAIL FROM 域与rbl_domain 下的任何 A 记录一起列出时拒绝请求。
maps_rbl_reject_code参数指定了拒绝请求的响应代码(默认值:554);default_rbl_reply参数指定了默认的服务器回复;rbl_reply_maps参数指定了按rbl_domain 索引的服务器回复表。
注意:始终尊重信誉服务的使用策略。避免使用公共或 ISP 解析器,除非查询使用了您的唯一 API 密钥。
此功能在 Postfix 2.0 及更高版本中可用。

拒绝发送者登录不匹配

从 Postfix 2.1 起,这是"reject_authenticated_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch"的别名。

拒绝未验证的发送者登录不匹配

当启用 SASL,MAIL FROM 地址列在$smtpd_sender_login_maps 中,但客户端未通过 SASL 验证时,拒绝请求。
启用 SASL 后,这将防止未经验证的客户端使用$smtpd_sender_login_maps 中列出的任何 MAIL FROM 地址。
注意:要确保 From: 头地址与信封发件人(MAIL FROM)地址相匹配,请在提交或提交(以前称为 smtps)服务中使用 Milter 等外部过滤器。例如:https://github.com/magcks/milterfrom。
此功能在 Postfix 2.1 及更高版本中可用。

拒绝未知发件人域名

当 Postfix 不是发件人地址的最终目的地,且 MAIL FROM 域 1) 没有 DNS MX 和 DNS A 记录,或 2) 有畸形的 MX 记录,如带有零长度 MX 主机名的记录(Postfix 2.3 及以后版本)时,拒绝该请求。
可使用unknown_address_reject_code参数(默认值:450)、unknown_address_tempfail_action(默认值:defer_if_permit)或 550(nullmx,Postfix 3.0 及更高版本)指定回复。详情请参阅相关参数说明。

拒绝未列入名单的发件人

当 MAIL FROM 地址未列在其域类的有效收件人列表中时,拒绝请求。详见smtpd_reject_unlisted_sender参数说明。此功能在 Postfix 2.1 及更高版本中可用。

拒绝未验证的发件人

当已知发往 MAIL FROM 地址的邮件被退回,或发件人地址无法到达时,拒绝该请求。地址验证信息由verify(8)服务器管理;详情请参阅ADDRESS_VERIFICATION_README文件。
unverified_sender_reject_code参数用于指定已知地址被退回时的数字响应代码(默认值:450,在确信安全的情况下可更改为 550)。
unverified_sender_defer_code(未验证的发件人拒绝代码)参数用于指定因临时问题导致地址探测失败时的数字响应代码(默认值:450)。
unverified_sender_tempfail_action(未验证的发件人临时失败行动)参数指定因临时问题导致地址探测失败后的行动(默认值:defer_if_permit)。
如果使用"enable_original_recipient= no"(启用原始收件人功能 = no),该功能将无法用于别名地址(Postfix ≤ 3.2)。
该功能在 Postfix 2.1 及更高版本中可用。

在此情况下有效的其他限制:

例如

smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_sender_restrictions = reject_unknown_sender_domain,
    check_sender_access hash:/etc/postfix/access

smtpd_service_name (默认值: smtpd)

postscreen(8)允许连接的内部服务。在未来的版本中,可能会有不同类别的 SMTP 服务。

Postfix 2.8 中提供了这一功能。

smtpd_soft_error_limit (默认值:10)

在 Postfix SMTP 服务器放慢所有响应速度之前,允许远程 SMTP 客户端在不发送邮件的情况下出错的次数。

smtpd_starttls_timeout (默认值:参见 "postconf -d "输出)。

在 TLS 启动和关闭握手过程中,Postfix SMTP 服务器写入和读取操作的时间限制。当前默认值取决于压力。在 Postfix 2.8 版本之前,该值固定为 300 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_timeout (默认:正常:300 秒, 超载:10 秒)

当 Postfix SMTP 服务器要发送 SMTP 服务器响应时,Postfix SMTP 服务器等待底层网络写操作完成的时间;以及当 Postfix SMTP 服务器 Postfix 要接收 SMTP 客户端请求时,Postfix SMTP 服务器等待底层网络读操作完成的时间。请参阅smtpd_per_request_deadline,了解如何执行该时间限制(在 Postfix 2.9-3.6 中,请参阅smtpd_per_record_deadline)。

通常情况下,默认限制为 300 秒,但在超负荷时会变为 10 秒。在 Postfix 2.5 及更早版本中,SMTP 服务器默认始终使用 300 秒的时间限制。

注意:如果将 SMTP 时间限制设置为很大的值,则可能需要更新全局ipc_timeout参数。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

smtpd_tls_CAfile (默认值:空)

文件,其中包含受信任的根 CA 的 CA 证书(PEM 格式),这些 CA 可签署远程 SMTP 客户端证书或中间 CA 证书。这些证书会在smtpd(8)服务器进入 chroot jail 之前加载到内存中。如果受信任根的数量较多,可以考虑使用smtpd_tls_CApath代替,但要注意的是,如果smtpd(8)服务器是 chroot 的,则 chroot jail 中必须有后一个目录。该文件也可用于增强服务器证书信任链,但最好直接在服务器证书文件中包含所有需要的证书。

指定"smtpd_tls_CAfile= /path/to/system_CA_file",只使用系统提供的默认认证机构证书。

指定"tls_append_default_CA= no "可防止 Postfix 附加系统提供的默认 CA 并信任第三方证书。

默认情况下(参见smtpd_tls_ask_ccert),客户端证书不会被请求,因此smtpd_tls_CAfile应保持为空。如果使用客户证书,则smtpd_tls_CAfile中列出的认证机构的区分名称(DN)会在客户证书请求消息中发送给远程 SMTP 客户。拥有多个客户端证书的 MUA 可使用首选认证机构列表来选择正确的客户端证书。你可能想把你 "首选 "的一个或多个 CA 放在这个文件中,并在$smtpd_tls_CApath 中安装其他可信的 CA。

例如

smtpd_tls_CAfile = /etc/postfix/CAcert.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_CApath (默认值:空)

目录,其中包含受信任的根 CA 的 CA 证书(PEM 格式),这些 CA 可签署远程 SMTP 客户端证书或中间 CA 证书。不要忘记创建必要的 "散列 "链接,例如"$OPENSSL_HOME/bin/c_rehash /etc/postfix/certs"。要在 chroot 模式下使用smtpd_tls_CApath,该目录(或其副本)必须位于 chroot jail 内。

指定"smtpd_tls_CApath= /path/to/system_CA_directory",只使用系统提供的默认认证机构证书。

指定"tls_append_default_CA= no "可防止 Postfix 附加系统提供的默认 CA 并信任第三方证书。

默认情况下(参见smtpd_tls_ask_ccert),客户端证书不会被请求,并且smtpd_tls_CApath应保持为空。与smtpd_tls_CAfile 不同的是,安装在$smtpd_tls_CApath中的认证机构 DN 不会包含在客户证书请求信息中。拥有多个客户证书的 MUA 可使用首选认证机构列表来选择正确的客户证书。你可能想把你 "首选 "的一个或多个 CA 放在$smtpd_tls_CAfile 中,而把其余受信任的 CA 安装在$smtpd_tls_CApath 中。

例如

smtpd_tls_CApath = /etc/postfix/certs

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_always_issue_session_ids (默认值:是)

强制 Postfix SMTP 服务器发送 TLS 会话 ID,即使 TLS 会话缓存已关闭(smtpd_tls_session_cache_database为空)。该行为与 Postfix < 2.3 兼容。

在 Postfix 2.3 及更高版本中,当关闭 TLS 会话缓存时,Postfix SMTP 服务器可以禁止生成会话 ID。这样,远程 SMTP 客户端就不会缓存几乎肯定无法重复使用的会话。

默认情况下,Postfix SMTP 服务器始终生成 TLS 会话 ID。这解决了 MS Outlook 等邮件客户端应用程序的一个已知缺陷,还可避免与其他 MTA 的互操作性问题。

例如

smtpd_tls_always_issue_session_ids = no

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_ask_ccert (默认值:否)

要求远程 SMTP 客户端提供客户端证书。例如,使用permit_tls_clientcerts功能进行基于证书的邮件中继时,就需要此信息。

如果没有可用证书(对于$smtpd_tls_CAfile 中的 CA 列表),某些客户端(如 Netscape)会发出抱怨,或者提供多个客户端证书供选择。这可能会令人讨厌,因此该选项默认为 "关闭"。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_auth_only (默认值:否)

如果 Postfix SMTP 服务器的 TLS 加密是可选的,则不要在未加密连接上宣布或接受 SASL 验证。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_ccert_verifydepth (默认值:9)

远程 SMTP 客户端证书的验证深度。如果本地 CA 文件中列出了签发 CA,深度为 1 就足够了。

默认验证深度为 9(OpenSSL 默认值),以便与早期的 Postfix 行为兼容。在 Postfix 2.5 之前,默认值为 5,但实际上并不执行该限制。如果将其设置为较低的非默认值,信任链较长的证书现在可能无法验证。有 1 或 2 个 CA 的证书链很常见,更深的证书链则比较少见,在实践中 5 到 9 之间的任何数字都足够了。举例来说,如果你信任直接由签发 CA 签发的证书,但不信任它委托的任何 CA,你可以选择一个较小的数字。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_cert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 服务器 RSA 证书的文件。该文件还可能包含 Postfix SMTP 服务器的私人 RSA 密钥。在 Postfix ≥ 3.4 版本中,配置服务器密钥和证书的首选方法是使用"smtpd_tls_chain_files"参数。

没有 "知名 "CA 签名证书的公共互联网 MX 主机必须生成并准备向大多数客户出示自签名或私人-CA 签名的证书。客户端将无法对服务器进行身份验证,但除非运行 Postfix 2.3 或类似软件,否则仍会坚持使用服务器证书。

对于公共 Internet MX 主机的服务器,Postfix 支持无证书配置。这就需要使用匿名 TLS 密码,而一般的 SMTP 客户端都不支持这种密码。由于某些客户端在 TLS 握手失败后可能不会退回到纯文本,因此无证书的 Postfix SMTP 服务器将无法从某些支持 TLS 的客户端接收电子邮件。为避免意外配置无证书,Postfix 只在管理员明确设置"smtpd_tls_cert_file= none "时才启用无证书操作。这可确保新的 Postfix SMTP 服务器配置不会意外启用无证书的 TLS。

请注意,服务器证书在 TLS 1.3 中并非可选项。要在没有证书的情况下运行,就必须在"smtpd_tls_protocols"(或"smtpd_tls_mandatory_protocols")中加入"!TLSv1.3 "来禁用 TLS 1.3 协议。配置证书链反而更简单。不推荐无证书操作。

 

支持 RSA 和 DSA 证书。当两种证书都存在时,使用的密码将决定向客户端提交哪种证书。对于没有特殊密码选择的 Netscape 和 OpenSSL 客户端,首选 RSA 证书。

为使远程 SMTP 客户端能验证 Postfix SMTP 服务器证书,必须向客户端提供签发 CA 证书。您应在服务器证书文件中包含所需的证书,首先是服务器证书,然后是签发 CA(一个或多个)证书(自下而上的顺序)。

例如:"server.example.com "的证书由 "中间 CA "签发,而 "中间 CA "本身也有 "根 CA "的证书。使用 "cat server_cert.pem intermediate_CA.pem root_CA.pem > server.pem "创建 server.pem 文件。

如果还想验证这些 CA 签发的客户端证书,可以将 CA 证书添加到smtpd_tls_CAfile,在这种情况下,就没有必要将它们放在smtpd_tls_cert_filesmtpd_tls_dcert_file(已过时)或smtpd_tls_eccert_file 中。

此处提供的证书必须可用作 SSL 服务器证书,并因此通过 "openssl verify -purpose sslserver ... "测试。

例如

smtpd_tls_cert_file = /etc/postfix/server.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_chain_files (默认值:空)

一个或多个 PEM 文件的列表,每个文件直接包含一个或多个私钥,后面跟一个相应的证书链。文件名用逗号和/或空白分隔。该参数会删除传统算法特定的密钥和证书文件设置。当该参数为非空时,传统参数将被忽略,如果有任何参数也为非空,系统将发出警告。

随着多种私钥算法的增加--从 OpenSSL 1.1.1 开始,这些算法包括 DSA(已过时)、RSA、ECDSA、Ed25519 和 Ed448--使用单独的参数为每种算法配置密钥和证书链越来越不切实际。因此,Postfix 现在支持在一个文件或一组文件中存储多个密钥和相应的证书链。

每个密钥必须紧接着相应的证书出现,其后可选择附加签发人证书,以完成该密钥的证书链。当指定多个文件时,它们等同于按指定顺序由这些文件串联起来的一个文件。因此,虽然密钥必须始终位于其证书和签发人链之前,但它也可以位于一个单独的文件中,只要该文件紧接在保存相应证书链的文件之前即可。所有文件串联后,PEM 对象的序列必须是:key1、cert1、[chain1]、key2、cert2、[chain2]、...、keyN、certN、[chainN]。

将私钥与相应证书存储在同一文件中更为可靠。如果密钥和证书分别存放在不同的文件中,Postfix 进程就有可能在密钥转移过程中从不同的文件中加载不匹配的私钥和证书。各种操作错误甚至可能导致证书与私钥不匹配的配置持续损坏。

文件中最多只能包含一种类型的密钥。例如,如果列出了两个或多个 RSA 密钥和相应的链,根据 OpenSSL 的版本,要么只使用最后一个,要么会检测到配置错误。请注意,虽然 "Ed25519 "和 "Ed448 "被视为不同的算法,但各种 ECDSA 曲线(通常是 prime256v1、secp384r1 或 secp521r1 中的一种)被视为单一 "ECDSA "算法的不同参数,因此目前无法为多条 ECDSA 曲线配置密钥。

RSA 仍是支持最广泛的算法。目前(2018 年末),ECDSA 支持很普遍,但尚未普及,Ed25519 和 Ed448 支持大多不存在。因此,一般应配置 RSA 密钥,以及其他算法所需的附加密钥。

示例(每个密钥和相应的证书链都有单独的文件):

/etc/postfix/main.cf:
    smtpd_tls_chain_files =
        ${config_directory}/ed25519.pem,
        ${config_directory}/ed448.pem,
        ${config_directory}/rsa.pem
/etc/postfix/ed25519.pem:
    -----BEGIN PRIVATE KEY-----
    MC4CAQAwBQYDK2VwBCIEIEJfbbO4BgBQGBg9NAbIJaDBqZb4bC4cOkjtAH+Efbz3
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBKzCB3qADAgECAhQaw+rflRreYuUZBp0HuNn/e5rMZDAFBgMrZXAwFDESMBAG
    ...
    nC0egv51YPDWxEHom4QA
    -----END CERTIFICATE-----
/etc/postfix/ed448.pem:
    -----BEGIN PRIVATE KEY-----
    MEcCAQAwBQYDK2VxBDsEOQf+m0P+G0qi+NZ0RolyeiE5zdlPQR8h8y4jByBifpIe
    LNler7nzHQJ1SLcOiXFHXlxp/84VZuh32A==
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBdjCB96ADAgECAhQSv4oP972KypOZPNPF4fmsiQoRHzAFBgMrZXEwFDESMBAG
    ...
    pQcWsx+4J29e6YWH3Cy/CdUaexKP4RPCZDrPX7bk5C2BQ+eeYOxyThMA
    -----END CERTIFICATE-----
/etc/postfix/rsa.pem:
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDc4QusgkahH9rL
    ...
    ahQkZ3+krcaJvDSMgvu0tDc=
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIC+DCCAeCgAwIBAgIUIUkrbk1GAemPCT8i9wKsTGDH7HswDQYJKoZIhvcNAQEL
    ...
    Rirz15HGVNTK8wzFd+nulPzwUo6dH2IU8KazmyRi7OGvpyrMlm15TRE2oyE=
    -----END CERTIFICATE-----

示例(所有密钥和证书都在一个文件中):

/etc/postfix/main.cf:
    smtpd_tls_chain_files = ${config_directory}/chains.pem
/etc/postfix/chains.pem:
    -----BEGIN PRIVATE KEY-----
    MC4CAQAwBQYDK2VwBCIEIEJfbbO4BgBQGBg9NAbIJaDBqZb4bC4cOkjtAH+Efbz3
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBKzCB3qADAgECAhQaw+rflRreYuUZBp0HuNn/e5rMZDAFBgMrZXAwFDESMBAG
    ...
    nC0egv51YPDWxEHom4QA
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    MEcCAQAwBQYDK2VxBDsEOQf+m0P+G0qi+NZ0RolyeiE5zdlPQR8h8y4jByBifpIe
    LNler7nzHQJ1SLcOiXFHXlxp/84VZuh32A==
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIBdjCB96ADAgECAhQSv4oP972KypOZPNPF4fmsiQoRHzAFBgMrZXEwFDESMBAG
    ...
    pQcWsx+4J29e6YWH3Cy/CdUaexKP4RPCZDrPX7bk5C2BQ+eeYOxyThMA
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDc4QusgkahH9rL
    ...
    ahQkZ3+krcaJvDSMgvu0tDc=
    -----END PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIC+DCCAeCgAwIBAgIUIUkrbk1GAemPCT8i9wKsTGDH7HswDQYJKoZIhvcNAQEL
    ...
    Rirz15HGVNTK8wzFd+nulPzwUo6dH2IU8KazmyRi7OGvpyrMlm15TRE2oyE=
    -----END CERTIFICATE-----

该功能在 Postfix 3.4 及更高版本中可用。

smtpd_tls_cipherlist (默认值:空)

过时的 Postfix < 2.3 控制 Postfix SMTP 服务器 TLS 密码列表。选择非默认密码列表很容易造成互操作性问题。请勿对公共互联网上的 MX 主机使用非默认 TLS 密码列表。开始 TLS 握手但无法就通用密码达成一致的客户端可能无法向 SMTP 服务器发送任何电子邮件。在专用 MSA 或内部邮件集线器中使用受限密码列表可能更合适,因为在这种情况下,可以对连接客户端的 TLS 软件和设置进行一定的控制。

注意:不要在参数值周围使用""引号。

该功能在 Postfix 2.2 版本中可用。Postfix 2.3 及更高版本不使用该功能,而应使用smtpd_tls_mandatory_ciphers

smtpd_tls_ciphers (默认值:medium)

Postfix SMTP 服务器在使用机会 TLS 加密时将使用的最低 TLS 密码级别。smtpd_tls_exclude_ciphers中列出的密码类型不包括在所选密码等级的基本定义中。对于 2015 年年中之后的 Postfix 版本,默认值为 "medium";对于较早的版本,默认值为 "export"。

强制使用 TLS 时,密码级别通过smtpd_tls_mandatory_ciphers配置参数选择,语法详情请参见此处。

该功能在 Postfix 2.6 及更高版本中可用。在 Postfix 早期版本中,只使用了smtpd_tls_mandatory_ciphers参数,机会式 TLS 始终使用 "导出 "或更好的(即所有)密码。

smtpd_tls_dcert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 服务器 DSA 证书的文件。该文件还可能包含 Postfix SMTP 服务器私有 DSA 密钥。DSA 算法已过时,不应使用。

有关详情,请参阅smtpd_tls_cert_file下的讨论。

例如

smtpd_tls_dcert_file = /etc/postfix/server-dsa.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_dh1024_param_file (默认值:空)

包含 DH 参数的文件,Postfix SMTP 服务器在使用非导出 EDH 密码时应使用这些参数。

在 Postfix ≥ 3.7(使用 3.0.0 或更高版本的 OpenSSL 构建)中,如果参数值为空或"auto",则 DH 参数选择将委托给 OpenSSL 库,后者将根据 TLS 握手选择适当的参数。在使用基于 OpenSSL 3.0.0 的 Postfix ≥ 3.7 时,不再推荐自定义本地参数。

参数的最佳选择是使用 2048 位素数。尽管参数名称中历史性地使用了 "1024",但这并没有问题。不要轻易使用更大的值,否则性能会迅速下降,而且还可能无法与某些主流 SMTP 客户端互操作。从 Postfix 3.1 开始,编译后的默认质数为 2048 位,因此严格来说,生成自定义的 DH 参数并无必要,尽管这样做可能有些好处。

与其使用与其他 TLS 软件包完全相同的参数集,不如使用类似以下命令生成自己的参数集,这样更安全:

openssl dhparam -out /etc/postfix/dh2048.pem 2048
openssl dhparam -out /etc/postfix/dh1024.pem 1024
# 从 Postfix 3.6 开始,不再支持或需要出口级 512 位 DH 参数。
openssl dhparam -out /etc/postfix/dh512.pem 512

在多个 Postfix 实例之间共享相同的 DH 参数是安全的。如果您愿意,可以为每个实例生成单独的参数。

如果您想最大限度地利用提供前向保密功能的密码,请参阅FORWARD_SECRECY_README入门部分。完整的文档方便地将有关 Postfix "完美 "前向保密支持的所有信息集中在一处:什么是前向保密、如何调整设置,以及当 Postfix 使用具有前向保密功能的密码时,你能看到什么。

例如

smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_dh512_param_file (默认值:空)

文件,其中包含 Postfix SMTP 服务器在使用出口级 EDH 密码时应使用的 DH 参数。2015 年年中之后发布的 Postfix 默认 SMTP 服务器密码级别为 "中",因此默认不使用出口级密码套件。

Postfix ≥ 3.6 不再支持导出级 Diffie-Hellman 密钥交换,该参数将被静默忽略。

另请参阅smtpd_tls_dh1024_param_file配置参数下的讨论。

例如

smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem

该功能在 Postfix 2.2 及更高版本中可用,但在 Postfix 3.6 及更高版本中被忽略。

smtpd_tls_dkey_file (默认值:$smtpd_tls_dcert_file)

包含 PEM 格式 Postfix SMTP 服务器 DSA 私钥的文件。该文件可与用$smtpd_tls_dcert_file 指定的 Postfix SMTP 服务器 DSA 证书文件结合使用。DSA 算法已过时,不应使用。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_eccert_file (默认值:空)

包含 PEM 格式 Postfix SMTP 服务器 ECDSA 证书的文件。该文件还可能包含 Postfix SMTP 服务器的私人 ECDSA 密钥。在 Postfix ≥ 3.4 版本中,配置服务器密钥和证书的首选方法是使用"smtpd_tls_chain_files"参数。

有关详情,请参阅smtpd_tls_cert_file下的讨论。

例如

smtpd_tls_eccert_file = /etc/postfix/ecdsa-scert.pem

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

smtpd_tls_eckey_file (默认值:$smtpd_tls_eccert_file)

包含 PEM 格式 Postfix SMTP 服务器 ECDSA 私钥的文件。该文件可与用$smtpd_tls_eccert_file 指定的 Postfix SMTP 服务器 ECDSA 证书文件结合使用。在 Postfix ≥ 3.4 版本中,配置服务器密钥和证书的首选方法是使用"smtpd_tls_chain_files"参数。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

当 Postfix 与 OpenSSL 1.0.0 或更高版本编译和链接时,该功能在 Postfix 2.6 及更高版本中可用。

smtpd_tls_eecdh_grade (默认值:参见 "postconf -d "输出)。

用于短暂椭圆曲线 Diffie-Hellman (EECDH) 密钥交换的 Postfix SMTP 服务器安全等级。从 Postfix 3.6 开始,该参数的值将被忽略,Postfix 将按照自动值(如下所述)进行操作。

Postfix 3.6 不再使用此功能。请勿指定。

可供选择的选项有

汽车

使用客户端和服务器都支持的最常用曲线。此设置要求 Postfix ≥ 3.2,编译和链接 OpenSSL ≥ 1.0.2。这是上述条件下的默认设置(也是 Postfix ≥ 3.6 时使用的唯一设置)。

不使用 EECDH。基于 EECDH 密钥交换的密码将被禁用。这是 Postfix 2.6 和 2.7 版本的默认设置。

坚强

使用 EECDH,以合理的计算成本提供约 128 位的安全性。这是 Postfix 2.8-3.5 版本的默认设置。

超时

使用 EECDH,安全系数约为 192 位,计算成本约为 128 位强度 ECC 的两倍。

如果您想最大限度地利用提供前向保密功能的密码,请参阅FORWARD_SECRECY_README入门部分。完整的文档方便地将有关 Postfix "完美 "前向保密支持的所有信息集中在一处:什么是前向保密、如何调整设置,以及当 Postfix 使用具有前向保密功能的密码时,你能看到什么。

当 Postfix 2.6 及更高版本在供应商未禁用 EC 算法的平台上使用 OpenSSL 1.0.0 或更高版本进行编译和链接时,可使用此功能。

smtpd_tls_enable_rpk (默认值:否)

在请求或要求客户端验证时,要求远程 SMTP 客户端发送RFC7250原始公钥,而不是 X.509 证书。当本地 TLS 实现不支持原始公钥时,此功能将被忽略。

"smtpd_tls_enable_rpk= yes",但远程 SMTP 客户端发送证书时,证书的公钥指纹与check_ccert_access表不匹配,而证书指纹与check_ccert_access表匹配,Postfix SMTP 服务器会记录警告。当远程 SMTP 客户端的 TLS 实现更新为支持原始公钥后,它开始发送原始公钥而不是证书时,就会失去访问权限。

如果远程 SMTP 客户端请求,且本地 TLS 实现支持原始公开密钥,Postfix SMTP 服务器将始终发送原始公开密钥,而不是证书。如果客户端发送带有 SNI TLS 扩展名的服务器名称指示,并且配置了tls_server_sni_maps,服务器将从指示的证书中提取原始公钥。

计算证书和公开密钥 SHA256 摘要的示例命令:

# "cert.pem "中第一个证书的 SHA256 摘要
$ openssl x509 -in cert.pem -outform DER | openssl dgst -sha256 -c
                
# "cert.pem "中第一个证书的 SPKI 的 SHA256 摘要
$ openssl x509 -in cert.pem -pubkey -noout |
    openssl pkey -pubin -outform DER | openssl dgst -sha256 -c
                
# "pkey.pem "中第一个私人密钥的 SPKI 的 SHA256 摘要
$ openssl pkey -in pkey.pem -pubout -outform DER |
    openssl dgst -sha256 -c

该功能在 Postfix 3.9 及更高版本中可用。

smtpd_tls_exclude_ciphers (默认值:空)

在所有 TLS 安全级别下,从 SMTP 服务器密码列表中排除的密码或密码类型列表。排除有效的密码会造成互操作性问题。除非有必要,否则切勿排除密码。这不是 OpenSSL 密码列表,而是一个用空格和/或逗号分隔的简单列表。其中的元素可以是单个密码,也可以是一个或多个用 "+"分隔的密码属性,在这种情况下,只有符合所有属性的密码才会被排除。

示例(其中一些会引起问题):

smtpd_tls_exclude_ciphers= aNULL
smtpd_tls_exclude_ciphers = MD5, DES
smtpd_tls_exclude_ciphers = DES+MD5
smtpd_tls_exclude_ciphers = AES256-SHA, DES-CBC3-MD5
smtpd_tls_exclude_ciphers = kEDH+aRSA

第一个设置禁用匿名密码。下一个设置会禁用使用 MD5 摘要算法或(单一)DES 加密算法的密码。下一个设置会禁用同时使用 MD5 和 DES 的加密算法。下一个设置将禁用 "AES256-SHA "和 "DES-CBC3-MD5 "两种加密算法。最后一项设置禁用使用 RSA 身份验证的 "EDH "密钥交换的密码。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_fingerprint_digest (默认值:参见 "postconf - d "输出)。

用于为check_ccert_accesspermit_tls_clientcerts 构建远程 SMTP 客户证书指纹或公钥指纹(Postfix 2.9 及更高版本)的消息摘要算法。

Postfix ≥ 3.6 且compatibility_level设置为 3.6 或更高版本时,默认算法为sha256。Postfix ≤ 3.5 时,默认算法为md5

现在的最佳算法是sha256。散列函数密码分析的最新进展已导致 md5 和 sha1 被弃用,转而使用 sha256。不过,只要没有已知的针对旧算法的 "第二预映像 "攻击,在这种情况下使用它们虽然不值得推荐,但仍然是安全的。

虽然 OpenSSL 的 libcrypto 通常提供额外的摘要算法,但 Postfix 只能使用 libssl 在 SSL 密码套件中使用的摘要算法。你可能会发现它支持 md5、sha1、sha256 和 sha512。

要使用特定摘要算法查找特定证书文件的指纹,请运行

$ openssl x509 -noout -fingerprint -digest -in certfile.pem

“=”符号右边的文字就是所需的指纹。例如

$ openssl x509 -noout -fingerprint -sha256 -in cert.pem
SHA256 Fingerprint=D4:6A:AB:19:24:...:A6:CB:66:82:C0:8E:9B:EE:29:A8:1A

要从 X.509 证书中提取公钥指纹,需要从证书中提取公钥,并计算其 DER(ASN.1)编码的适当摘要。在 OpenSSL 中,"x509 "命令的"-pubkey "选项总是以 "PEM "格式提取公钥。我们将结果导入另一个 OpenSSL 命令,将密钥转换为 DER,然后导入 "dgst "命令计算指纹。

例如

$ openssl x509 -in cert.pem -noout -pubkey |
    openssl pkey -pubin -outform DER |
    openssl dgst -sha256 -c
(stdin)= 64:3f:1f:f6:e5:1e:d4:2a:56:8b:fc:09:1a:61:98:b5:bc:7c:60:58

当 TLS 日志级别为 2 或更高时,Postfix SMTP 服务器和客户端会记录对等(叶子)证书指纹和公钥指纹。

示例:客户证书访问表,含 sha256 指纹:

/etc/postfix/main.cf:
    smtpd_tls_fingerprint_digest = sha256
    smtpd_client_restrictions =
        check_ccert_access hash:/etc/postfix/access,
        reject
        
/etc/postfix/access:
    # 操作折叠到下一行...
    AF:88:7C:AD:51:95:6F:36:96:...:01:FB:2E:48:CD:AB:49:25:A2:3B
        OK
    85:16:78:FD:73:6E:CE:70:E0:...:5F:0D:3C:C8:6D:C4:2C:24:59:E1
        permit_auth_destination

该功能在 Postfix 2.5 及更高版本中可用。

smtpd_tls_key_file (默认值:$smtpd_tls_cert_file)

包含 PEM 格式 Postfix SMTP 服务器 RSA 私钥的文件。该文件可与用$smtpd_tls_cert_file 指定的 Postfix SMTP 服务器 RSA 证书文件结合使用。在 Postfix ≥ 3.4 版本中,配置服务器密钥和证书的首选方法是使用"smtpd_tls_chain_files"参数。

私人密钥必须可以在没有口令的情况下访问,即必须不加密。文件权限应授予系统超级用户账户("root")只读访问权,其他任何人不得访问。

smtpd_tls_logle level (默认值:0)

启用额外的 Postfix SMTP 服务器 TLS 活动日志。每个日志级别还包括在较低日志级别记录的信息。

 

0 禁用 TLS 活动记录。

 

1 只记录 TLS 握手完成时的摘要信息 - 如果不需要客户端证书验证,则不记录客户端证书信任链验证错误。在 Postfix 2.8 及更早版本中,记录摘要信息、对等证书摘要信息,并无条件记录信任链验证错误。

 

2 同时在 Postfix TLS 库中启用详细日志记录,记录会话缓存操作,并启用 OpenSSL 记录 SSL 握手过程。

 

3 还记录 TLS 协商过程的十六进制和 ASCII 转储。

 

4 还记录 STARTTLS 后完整传输的十六进制和 ASCII 转储。

除非出现问题,否则不要使用"smtpd_tls_loglevel= 2 "或更高的日志级别。强烈建议使用日志级别 4。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_mandatory_ciphers (默认值:中)

Postfix SMTP 服务器在强制 TLS 加密时使用的最低 TLS 密码级别。默认级别("中等")已经足够强,因此在全球范围内限制 TLS 会话使用更严格级别的好处可能微乎其微,尤其是考虑到许多实施方案仍然没有提供更强("高 "级)的密码,而那些提供的实施方案会一直使用 "高 "级密码。因此,坚持使用 "高级 "密码通常会适得其反。允许使用 "出口 "或 "低 "级密码通常不是一个好主意,因为仅限于这些密码的系统只能使用过时的浏览器。没有已知的 SMTP 客户端不支持至少一种 "中 "或 "高 "级密码。

支持以下密码等级

只启用 "HIGH "级 OpenSSL 密码。底层密码列表通过tls_high_cipherlist配置参数指定,强烈建议不要更改。

中等

启用 "MEDIUM "级或更强的 OpenSSL 密码。这些密码使用 128 位或更长的对称批量加密密钥。这是强制 TLS 加密的默认最低强度。底层密码列表通过tls_medium_cipherlist配置参数指定,强烈建议不要更改。

无效

仅启用 "NULL "OpenSSL 密码,这些密码只提供身份验证而不提供加密。只有在所有客户端都准备使用 NULL 密码(TLS 客户端通常不启用)的罕见情况下,才适合使用此设置。底层密码列表通过tls_null_cipherlist配置参数指定,强烈建议不要更改。

启用 "LOW "级或更强的 OpenSSL 密码。在 Postfix ≥ 3.8 中,该密码级别始终与 "中 "相同。最新版本的 OpenSSL 不支持任何 "低 "级密码。在 Postfix 早期版本中,底层密码列表是通过tls_low_cipherlist配置参数指定的,我们强烈建议您不要更改该参数。不应使用这种过时的密码级别。

出口

启用 "EXPORT "级或更强的 OpenSSL 密码。在 Postfix ≥ 3.8 中,该密码级别始终与 "中等 "相同。最新版本的 OpenSSL 不支持任何 "EXPORT "级密码。在 Postfix 早期版本中,底层密码列表是通过tls_export_cipherlist配置参数指定的,我们强烈建议您不要更改该参数。不应使用这种过时的密码级别。

smtpd_tls_mandatory_exclude_cipherssmtpd_tls_exclude_ciphers中列出的密码类型将从所选密码等级的基本定义中排除。有关适用于机会型 TLS 的密码控制,请参见smtpd_tls_ciphers

除 "null "外,其他等级的底层密码列表包括匿名密码,但如果服务器配置为要求远程 SMTP 客户端证书,这些密码会被自动过滤掉。您不太可能需要采取任何措施来排除匿名密码,它们会根据需要自动排除。如果 Postfix 不需要或不使用对等证书时也必须排除匿名密码,请设置"smtpd_tls_exclude_ciphers= aNULL"。要只在强制使用 TLS 时排除匿名密码,请设置"smtpd_tls_mandatory_exclude_ciphers= aNULL"。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_mandatory_exclude_ciphers (默认值:空)

在强制 TLS 安全级别下,从 Postfix SMTP 服务器密码列表中排除的密码或密码类型的附加列表。该列表是smtpd_tls_exclude_ciphers列出的排除项(语法详情见此处)的补充。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_mandatory_protocols (默认值:参见 "postconf -d "输出)。

Postfix SMTP 服务器接受的强制 TLS 加密的 TLS 协议。如果列表为空,则服务器支持所有可用的 TLS 协议版本。非空值是要包含或排除的协议名称列表,以空格、逗号或冒号分隔。

有效的协议名称(参见 SSL_get_version(3))有 "SSLv2"、"SSLv3"、"TLSv1"、"TLSv1.1"、"TLSv1.2 "和 "TLSv1.3"。从 Postfix 3.6 开始,默认值为">=TLSv1",将 TLS 1.0 设置为支持的最低 TLS 协议版本(见下文)。旧版本使用"!"排除语法,详情如下。

从 Postfix 3.6 开始,限制可接受协议范围的首选方法是设置可接受的最低 TLS 协议版本和/或可接受的最高 TLS 协议版本。要设置下限,请包含以下形式的元素:">=版本",其中版本可以是上面列出的 TLS 协议名称之一,也可以是与所需 TLS 协议版本相对应的十六进制数字(0301 表示 TLS 1.0,0302 表示 TLS 1.1 等)。对于上限,请使用"<=version"。在">="或"<="符号与协议名称或编号之间不能有空白。

使用十六进制协议编号,可以为 OpenSSL 已知但 Postfix 未知的 TLS 版本指定协议边界。它们不能与传统的排除语法一起使用。支持前缀 "0 "或 "0x",但不是必需的。因此,"301"、"0301"、"0x301 "和 "0x0301 "都等同于 "TLSv1"。OpenSSL 未知的十六进制版本将无法设置上限或下限,并记录警告。只有当 Postfix 与未来支持 TLS 1.4 或更高版本的 OpenSSL 相连,但 Postfix 尚不支持该协议版本的符号名称时,才应使用十六进制版本。

十六进制示例(Postfix ≥ 3.6):

# Allow only TLS 1.2 through (hypothetical) TLS 1.4, once supported
# in some future version of OpenSSL (presently a warning is logged).
smtpd_tls_mandatory_protocols = >=TLSv1.2, <=0305
# 仅允许 TLS 1.2 及以上版本:
smtpd_tls_mandatory_protocols = >=0x0303

Postfix < 3.6 不支持最小或最大版本,协议范围通过协议排除进行配置。要要求至少使用 TLS 1.0,可设置"smtpd_tls_mandatory_protocols= !SSLv2, !SSLv3"。支持列出要包含的协议,而不是要排除的协议,但不建议这样做。排除形式与底层 OpenSSL 接口更为匹配。

OpenSSL 1.1.1 引入了对 "TLSv1.3 "的支持。Postfix 3.4(或补丁版本≥ 3.0.14、3.1.10、3.2.7 和 3.3.2)开始支持通过"!TLSv1.3 "禁用该协议。

例如

# Postfix ≥ 3.6 的首选语法:
smtpd_tls_mandatory_protocols = >=TLSv1.2, <=TLSv1.3
# 传统语法:
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_protocols (默认:参见 "postconf -d "输出)。

Postfix SMTP 服务器通过机会 TLS 加密接受的 TLS 协议。如果列表为空,则服务器支持所有可用的 TLS 协议版本。非空值是包含或排除的协议名称列表,以空格、逗号或冒号分隔。

有效的协议名称(参见 SSL_get_version(3))有 "SSLv2"、"SSLv3"、"TLSv1"、"TLSv1.1"、"TLSv1.2 "和 "TLSv1.3"。从 Postfix 3.6 开始,默认值为">=TLSv1",将 TLS 1.0 设置为支持的最低 TLS 协议版本(见下文)。旧版本使用"!"排除语法,详情如下。

从 Postfix 3.6 开始,限制可接受协议范围的首选方法是设置可接受的最低 TLS 协议版本和/或可接受的最高 TLS 协议版本。要设置下限,请包含以下形式的元素:">=版本",其中版本可以是上面列出的 TLS 协议名称之一,也可以是与所需 TLS 协议版本相对应的十六进制数字(0301 表示 TLS 1.0,0302 表示 TLS 1.1 等)。对于上限,请使用"<=version"。在">="或"<="符号与协议名称或编号之间不能有空白。

使用十六进制协议编号,可以为 OpenSSL 已知但 Postfix 未知的 TLS 版本指定协议边界。它们不能与传统的排除语法一起使用。支持前缀 "0 "或 "0x",但不是必需的。因此,"301"、"0301"、"0x301 "和 "0x0301 "都等同于 "TLSv1"。OpenSSL 未知的十六进制版本将无法设置上限或下限,并记录警告。只有当 Postfix 与未来支持 TLS 1.4 或更高版本的 OpenSSL 相连,但 Postfix 尚不支持该协议版本的符号名称时,才应使用十六进制版本。

十六进制示例(Postfix ≥ 3.6):

# Allow only TLS 1.0 through (hypothetical) TLS 1.4, once supported
# in some future version of OpenSSL (presently a warning is logged).
smtpd_tls_protocols = >=TLSv1, <=0305
# 只允许 TLS 1.0 及以上版本:
smtpd_tls_protocols = >=0x0301

Postfix < 3.6 不支持最小或最大版本,协议范围通过协议排除进行配置。要要求至少使用 TLS 1.0,可设置"smtpd_tls_protocols= !SSLv2, !SSLv3"。支持列出要包含的协议,而不是要排除的协议,但不建议这样做。排除形式与底层 OpenSSL 接口更为匹配。

OpenSSL 1.1.1 引入了对 "TLSv1.3 "的支持。Postfix 3.4(或补丁版本≥ 3.0.14、3.1.10、3.2.7 和 3.3.2)开始支持通过"!TLSv1.3 "禁用该协议。

例如

# Postfix ≥ 3.6 的首选语法:
smtpd_tls_protocols = >=TLSv1, <=TLSv1.3
# 传统语法:
smtpd_tls_protocols = !SSLv2, !SSLv3

该功能在 Postfix 2.6 及更高版本中可用。

smtpd_tls_received_header (默认值:否)

要求 Postfix SMTP 服务器生成 "收到:"报文头,其中包括所使用的协议和密码信息,以及远程 SMTP 客户端通用名和客户端证书颁发者通用名。默认情况下这是禁用的,因为这些信息在通过其他邮件服务器的过程中可能会被修改。只有最终目的地记录的信息才是可信的。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_req_ccert (默认值:否)

使用强制 TLS 加密时,需要可信的远程 SMTP 客户端证书才能允许 TLS 连接。该选项意味着"smtpd_tls_ask_ccert= yes"。

当 TLS 加密为可选项时,此设置将被忽略,并在邮件日志中写入警告。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_security_level (默认值:空)

Postfix SMTP 服务器的 SMTP TLS 安全级别;如果指定的是非空值,则该参数将取代已过时的参数smtpd_use_tlssmtpd _ enforce_tls。如果使用"smtpd_tls_wrappermode= yes",该参数将被忽略。

指定以下安全级别之一:

不使用 TLS。

可以

机会性 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,但不要求客户端使用 TLS 加密。

加密

强制 TLS 加密:向远程 SMTP 客户端宣布支持 STARTTLS,并拒绝除 HELO、EHLO、XCLIENT、STARTTLS、NOOP、QUIT 和(Postfix ≥ 3.9)HELP 以外的所有明文命令。根据RFC 2487,在公开引用 SMTP 服务器的情况下,不得使用此功能。相反,应在专用服务器上使用,例如提交(端口 587)。

注 1:此处不支持 "指纹"、"验证 "和 "安全 "级别。Postfix SMTP 服务器会发出警告,并使用 "加密 "来代替。要验证远程 SMTP 客户端证书,请参阅TLS_README,了解有关smtpd_tls_ask_ccertsmtpd_tls_req_ccertpermit_tls_clientcerts功能的讨论。

注 2:参数设置"smtpd_tls_security_level= encrypt "意味着"smtpd_tls_auth_only= yes"。

注 3:通过 "sendmail -bs "调用时,由于访问服务器私钥的权限不足,Postfix 将永远不会提供 STARTTLS。这是预期行为。

该功能在 Postfix 2.3 及更高版本中可用。

smtpd_tls_session_cache_database (默认值:空)

包含可选 Postfix SMTP 服务器 TLS 会话缓存的文件名。指定一种支持枚举的数据库类型,如btreesdbm;无需支持并发访问。如果文件不存在,则将创建该文件。smtpd(8)守护进程不直接使用此参数,而是在tlsmgr(8)守护进程中间接实现缓存。这意味着每个 smtpd 实例master.cf对该参数的覆盖无效。请注意,tlsmgr(8)守护进程支持的每个缓存数据库:$smtpd_tls_session_cache_database、$smtp_tls_session_cache_database(以及 Postfix 2.3 及更高版本的 $lmtp_tls_session_cache_database)都需要单独存储。目前还无法在一个数据库中存储多个缓存。

注意:不适合使用dbm数据库。TLS 会话对象太大。

从 2.5 版开始,Postfix 在打开该文件时不再使用 root 权限。现在,该文件应存储在 Postfix 拥有的data_directory 下。作为迁移辅助工具,在非 Postfix 目录下打开该文件的尝试将被重定向到 Postfix 所有的data_directory,并记录警告。

从 Postfix 2.11 开始,会话恢复的首选机制是RFC 5077TLS 会话票据,它不需要服务器端存储。因此,对于 Postfix ≥ 2.11,该参数一般应为空。TLS 会话票据要求 OpenSSL 库(至少 0.9.8h 版)完全支持此 TLS 扩展。另请参阅smtpd_tls_session_cache_timeout

例如

smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_tls_session_cache_timeout (默认值:3600 秒)

Postfix SMTP 服务器 TLS 会话缓存信息的过期时间。缓存每隔$smtpd_tls_session_cache_timeout秒定期清理一次。与$smtpd_tls_session_cache_database 一样,该参数也是在tlsmgr(8)守护进程中执行的,因此无法根据每个 smtpd 实例master.cf进行覆盖。

从 Postfix 2.11 开始,该设置不能超过 100 天。如果设置为 ≤ 0,会话缓存将被禁用,不仅是通过数据库,还包括不需要服务器端存储的RFC 5077TLS 会话票据。如果设置为小于 2 分钟的正值,则使用最小值 2 分钟。TLS 会话票据要求 OpenSSL 库(至少 0.9.8h 版)完全支持此 TLS 扩展。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用,并在 Postfix 2.11 中更新为 TLS 会话票据支持。

smtpd_tls_wrappermode (默认值:否)

以 TLS "封装 "模式运行 Postfix SMTP 服务器,而不是使用 STARTTLS 命令。

如果要支持这项服务,请在master.cf 中启用一个特殊端口,并在 SMTP 服务器的命令行中指定"-osmtpd_tls_wrappermode=yes"。端口 465(提交,以前称为 smtps)就是为此目的预留的。

该功能在 Postfix 2.2 及更高版本中可用。

smtpd_upstream_proxy_protocol (默认值:空)

before-smtpd 代理服务器使用的代理协议名称。使用代理服务器时,该协议将传递本地和远程地址及端口信息。指定"smtpd_upstream_proxy_protocol= haproxy "可启用 haproxy 协议;Postfix 3.5 及更高版本支持版本 2。

注意:要在smtpd(8) 中使用 nginx 代理,请使用smtpd_authorized_xclient_hosts 启用 XCLIENT 协议。这将支持代理服务器(Postfix 2.9 及更高版本)的 SASL 身份验证。

 

该功能在 Postfix 2.10 及更高版本中可用。

smtpd_upstream_proxy_timeout (默认值:5秒)

使用smtpd_upstream_proxy_protocol参数指定的代理协议的时限。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.10 及更高版本中可用。

smtpd_use_tls (默认值:否)

机会性 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,但不要求客户端使用 TLS 加密。

注意:通过"sendmail -bs"调用时,由于没有足够权限访问服务器私钥,Postfix 将永远不会提供 STARTTLS。这是预期行为。

自 Postfix 3.9 起,该功能已被弃用。请改用smtpd_tls_security_level

该功能在 Postfix 2.2 及更高版本中可用。在 Postfix 2.3 及更高版本中,请使用smtpd_tls_security_level代替。

smtputf8_autodetect_classes (默认:sendmail,验证)

检测邮件是否需要指定邮件源类别的 SMTPUTF8 支持。这是一种变通方法,可避免在最初推出 SMTPUTF8 时,在已有包含 UTF8 的邮件流的环境中出现鸡生蛋、蛋生鸡的问题。这些邮件流不应因 Postfix 突然拒绝向未宣布支持 SMTPUTF8 的下游 MTA 发送此类邮件而中断。

问题在于,Postfix 不能完全依赖发件人声明邮件需要 SMTPUTF8 支持,因为在本地处理过程中可能会引入 UTF8(例如,Postfix Received: 头信息中的客户端主机名、在不完整地址中添加@$myorigin或 .$mydomain、地址重写、别名扩展、自动 BCC 收件人、本地转发,以及头信息检查或 Milter 应用程序所做的更改)。

目前,默认情况下仅对 Postfix 发送邮件命令行提交和地址验证探测启用 "SMTPUTF8 required "自动检测。一旦 SMTPUTF8 支持在世界范围内占据主导地位,这种情况可能会发生变化。不过,通过本地处理(见上文)添加 UTF8 内容的网站应自动检测所有电子邮件是否需要 SMTPUTF8 支持。

指定以下一项或多项:

发送邮件 

使用 Postfixsendmail(1)命令提交。

smtpd 

使用smtpd(8)守护进程接收的邮件。

qmqpd 

通过qmqpd(8)守护进程接收的邮件。

转发 

本地转发或别名。当收到的邮件带有 "SMTPUTF8 required "时,转发(别名)的邮件总是带有 "SMTPUTF8 required"。

反弹 

bounce(8)守护进程提交。如果收到的邮件带有 "SMTPUTF8 required"(需要 SMTPUTF8),那么送达状态通知中就会始终带有 "SMTPUTF8 required"(需要 SMTPUTF8)。

通知 

来自smtp(8)smtpd(8)守护进程的 Postmaster 通知。

核对 

来自verify(8)守护进程的地址验证探针。

一应俱全 

对所有邮件启用 SMTPUTF8 自动检测。

该功能在 Postfix 3.0 及更高版本中可用。

smtputf8_enable (默认值:是)

RFC 6531RFC 6532RFC 6533 中描述的协议启用初步 SMTPUTF8 支持。这就要求 Postfix 必须支持这些协议。

该功能在 Postfix 3.0 及更高版本中可用。

socketmap_max_reply_size (默认值:100000)

socketmap 服务器允许的最大回复大小,不包括 netstring 封装。

该功能在 Postfix ≥ 3.10 中可用。

soft_bounce (默认值:否)

安全网,用于将原本会退回给发件人的邮件保留在队列中。该参数可禁用本地生成的退信,更改对远程服务器、内容过滤器或插件的负面响应的处理,并防止 Postfix SMTP 服务器通过将 5xx 回复代码改为 4xx 而永久拒收邮件。不过,soft_bounce并不能治愈地址重写错误或邮件路由错误。

注意:"soft_bounce= yes "在某些情况下是通过修改服务器响应来实现的。因此,Postfix 记录的响应可能与 Postfix 实际发送或接收的响应不同。

例如

soft_bounce = yes

stale_lock_time (默认值:500秒)

删除过期独占邮箱锁文件的时间。这用于向文件或邮箱发送。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

压力 (默认值:空)

该功能在STRESS_README文档中有详细说明。

该功能在 Postfix 2.5 及更高版本中可用。

strict_7bit_headers (默认值:否)

拒绝在邮件标题中包含 8 位文本的邮件。这将阻止来自编写不佳的应用程序的邮件。

通用邮件服务器不应启用此功能,因为它可能会拒绝合法电子邮件。

该功能在 Postfix 2.0 及更高版本中可用。

strict_8bitmime (默认值:否)

同时启用strict_7bit_headersstrict_8bitmime_body

通用邮件服务器不应启用此功能,因为它可能会拒绝合法电子邮件。

该功能在 Postfix 2.0 及更高版本中可用。

strict_8bitmime_body (默认值:否)

拒收没有 8 位 MIME 内容编码信息的 8 位邮件正文。这将阻止来自编写不佳应用程序的邮件。

不幸的是,当请求中包含有效的 8 位 MIME 邮件时,它也会拒绝 majordomo 批准请求,并拒绝来自不对 8 位内容进行 MIME 封装的邮件发送器的退回(例如,来自 qmail 或旧版 Postfix 的退回)。

通用邮件服务器不应启用此功能,因为它可能会拒绝合法电子邮件。

该功能在 Postfix 2.0 及更高版本中可用。

严格的邮箱所有权 (默认:是)

当收件人不拥有邮箱文件时,推迟发送。默认设置无法向后兼容。

该功能在 Postfix 2.5.3 及更高版本中可用。

strict_mime_encoding_domain (默认值:否)

拒绝包含无效的 Message/* 或 multipart/* MIME 内容类型的 Content-Transfer-Encoding: 信息的邮件。这将阻止来自编写不佳软件的邮件。

通用邮件服务器不应启用此功能,因为它在一次违规后就会拒收邮件。

该功能在 Postfix 2.0 及更高版本中可用。

strict_rfc821_envelopes (默认值:否)

要求在 SMTP MAIL FROM 和 RCPT TO 命令中收到的地址必须用 <> 括起来,并且这些地址不得包含RFC 822风格的注释或短语。这样就能阻止来自拙劣软件的邮件。

默认情况下,Postfix SMTP 服务器在 MAIL FROM 和 RCPT TO 地址中接受RFC 822语法。

strict_smtputf8 (默认值:否)

启用更严格的 SMTPUTF8 协议。Postfix SMTP 服务器仅在客户端请求 SMTPUTF8 邮件事务时才接受 UTF8 发件人或收件人地址。

该功能在 Postfix 3.0 及更高版本中可用。

sun_mailtool_compatibility (默认值:否)

已过时的 SUN mailtool 兼容性功能。取而代之的是使用"mailbox_delivery_lock=dotlock"。

swap_bangpath (默认值:是)

启用将 "site!user "重写为 "user@site"。如果您的机器连接到 UUCP 网络,则有必要这样做。默认情况下已启用。

注意:在 Postfix 2.2 版中,只有当以下条件之一为真时,才会发生报文头地址重写:

要获得 Postfix 2.2 版之前的行为,请指定"local_header_rewrite_clients=static:all"。

例如

swap_bangpath = no

syslog_facility (默认:邮件)

Postfix 日志的 syslog 设施。指定 syslog.conf(5) 中定义的设施。默认设备为 "mail"。

警告:非默认的syslog_facility设置只有在 Postfix 进程完成初始化后才会生效。进程初始化过程中的错误将使用默认设施记录。例如,解析命令行参数时出错,以及访问 Postfixmain.cf配置文件时出错。

syslog_name (默认值:请参阅 "postconf -d "输出)。

系统日志记录中进程名称的前缀,例如,"smtpd "就变成了 "prefix/smtpd"。

警告:非默认syslog_name设置只有在 Postfix 进程完成初始化后才会生效。进程初始化过程中的错误将以默认名称记录。例如,解析命令行参数时出错,以及访问 Postfixmain.cf配置文件时出错。

tcp_windowsize (默认值:0)

路由器破坏 TCP 窗口缩放的可选解决方法。指定一个大于 0 且小于 65536 的值以启用此功能。在 Postfix TCP 服务器(smtpd(8)qmqpd(8))中,此功能由 Postfixmaster(8) 守护进程实现。

要在不停止 Postfix 的情况下更改该参数,首先需要终止所有 Postfix TCP 服务器:

# postconf -e master_service_disable=inet
# postfix reload

这将立即终止所有接受网络连接的进程。接下来,使用更新的tcp_windowsize设置启用 Postfix TCP 服务器:

# postconf -e tcp_windowsize=65535 master_service_disable=
# postfix reload

如果在 Postfix 系统运行时跳过这些步骤,那么tcp_windowsize 的更改将仅适用于 Postfix TCP 客户端(smtp(8)lmtp(8))。

该功能在 Postfix 2.6 及更高版本中可用。

tls_append_default_CA (默认值:否)

将系统提供的默认认证机构证书附加到用 *_tls_CApath 或 *_tls_CAfile 指定的证书上。默认值为 "否";这将防止 Postfix 信任第三方证书,并通过permit_tls_all_clientcerts 赋予它们中继权限。

该功能在 Postfix 2.4.15、2.5.11、2.6.8、2.7.2 及更高版本中可用。指定"tls_append_default_CA= yes "以实现向后兼容,避免在不使用permit_tls_all_clientcerts 的网站上破坏证书验证。

tls_config_file (默认:默认)

包含 OpenSSL 基准设置的可选配置文件。OpenSSL 会加载所选应用程序名称(参见tls_config_name)配置文件中的任何 SSL 设置,如果未指定应用程序名称或没有相应的配置部分,则加载内置应用程序名称 "openssl_conf "中的任何 SSL 设置。

在 OpenSSL 1.1.1 和 1.1.1a 版本中,应用程序(包括 Postfix)既不能指定替代配置文件,也不能避免加载默认配置文件。

在 OpenSSL 1.1.1b 或更高版本中,该参数可设置为以下参数之一:

默认

加载全系统的 "openssl.cnf "配置文件。

(建议使用,仅限 OpenSSL 1.1.1b 或更高版本)

此设置禁止加载系统范围内的 "openssl.cnf "文件。

/absolute-path(仅限 OpenSSL 1.1.1b 或更高版本)

加载由/absolute-path 指定的配置文件。在此设置下,如果文件中不包含所选tls_config_name 的任何设置,则属于错误。不会回退到默认的 "openssl_conf "名称。

在处理内置默认配置文件时出现的故障将被默默忽略。Postfix 会检测到加载非默认配置文件时出现的任何错误,并禁用 TLS 支持。

这里除了给出两个示例外,没有记录 OpenSSL 配置文件格式。

 

示例:所有应用程序的默认设置。

# 名称 "openssl_conf "是默认的应用程序名称
# '='符号右边的部分名称是任意的,
# 只要指向所需的部分,任何名称都可以。
#
# 名称 "system_default "选择 SSL 库在创建 SSL 对象时内部应用的设置。
#
# 在本例中,默认禁用 1.2 之前的 TLS 版本。
#
openssl_conf = system_wide_settings
[system_wide_settings]
ssl_conf = ssl_library_settings
[ssl_library_settings]
system_default = initial_ssl_settings
[initial_ssl_settings]
MinProtocol = TLSv1.2

示例:对名为 "postfix "的应用程序进行自定义设置。

# 从应用程序名称到相应配置
# 部分的映射必须出现在文件顶部附近(有时称为
# "默认部分"),然后才是任何明确命名的
# [部分]"。
#
postfix = postfix_settings
[postfix_settings]
ssl_conf = postfix_ssl_settings
[postfix_ssl_settings]
system_default = baseline_postfix_settings
[baseline_postfix_settings]
MinProtocol = TLSv1

示例:自定义 OpenSSL 组设置

main.cf:
    tls_config_file = ${config_directory}/openssl.cnf
    tls_config_name = postfix
                
openssl.cnf:
    postfix = postfix_settings
                
    [postfix_settings]
    ssl_conf = postfix_ssl_settings
                
    [postfix_ssl_settings]
    system_default = baseline_postfix_settings
                
    [baseline_postfix_settings]
    # New OpenSSL 3.5 syntax, for older releases consider
    # the Postfix default:
    #
    # Groups = X25519:X448:prime256v1:secp384r1:secp521r1:ffdhe2048:ffdhe3072
    #
    Groups = *X25519MLKEM768 / *X25519:X448 / P-256:P-384

注意通常情况下,最好通过设置"tls_config_file= none "来使用默认的 OpenSSL 组设置。过于严格的全系统 TLS 设置会与 Postfix 的机会主义 TLS 相冲突,在这种情况下,减少限制比降级为明文 SMTP 更好。

该功能在 Postfix ≥ 3.9、3.8.1、3.7.6、3.6.10 和 3.5.20 中可用。

tls_config_name (默认值:空)

Postfix 传递给 OpenSSL 库初始化函数的应用程序名称。该名称用于在通过tls_config_file参数指定的 OpenSSL 配置文件中选择所需的配置 "部分"。如果为空,或所选名称不在配置文件中,则使用默认应用程序名称("openssl_conf")作为备用。

该功能在 Postfix ≥ 3.9 中可用。

tls_daemon_random_bytes (默认值:32)

smtp(8)smtpd(8)进程从tlsmgr(8)服务器请求的用于生成内部伪随机数生成器 (PRNG) 种子的伪随机字节数。默认值为 32 字节(相当于 256 位),足以生成 128 位(或 168 位)会话密钥。

该功能在 Postfix 2.2 及更高版本中可用。

tls_dane_digest_agility (默认值:开)

配置RFC7671DANE TLSA 摘要算法的敏捷性。请勿更改此设置的默认值。

有关正确的密钥旋转程序,请参见RFC7671第 8 节。

Postfix 2.11 至 Postfix 3.1 提供了这一功能。Postfix 3.2 及更高版本会忽略该配置参数,并将其设置为 "on"。

tls_dane_digests (默认:sha512 sha256)

DANE TLSA(RFC 6698RFC 7671RFC 7672)资源记录 "匹配类型 "摘要算法,按优先级降序排列。底层 OpenSSL 库必须支持所有指定的算法,否则 Postfix SMTP 客户端将不支持 DANE TLSA 安全性。

指定用逗号和/或空白分隔的摘要名称列表。每个摘要名称后都可以跟一个可选的"=<数字>"后缀。例如,"sha512 "可指定为 "sha512=2","sha256 "可指定为 "sha256=1"。可选编号必须与IANA分配的有关算法的 TLSA 匹配类型编号一致。Postfix 将针对它所知道的算法检查此约束。如果 OpenSSL 支持其他已在 IANA 注册的匹配类型算法,则可以使用明确的编号添加这些算法。

无效的列表元素将被记录并发出警告,同时禁用 DANE 支持。指定未包含在列表中的摘要的 TLSA RR 会被忽略并发出警告。

注意:从摘要列表中省略 sha256 是不明智的。该摘要算法是RFC 6698 中唯一强制执行的摘要算法,预计许多服务器将仅使用 sha256 摘要发布 TLSA 记录。除非某个标准摘要受到严重破坏,且服务器有足够时间更新其 TLSA 记录,否则不应省略任何标准摘要,只需按从强到弱的顺序排列即可。

该功能在 Postfix 2.11 及更高版本中可用。

tls_dane_trust_anchor_digest_enable (默认值:是)

启用对RFC 6698(DANE TLSA)DNS 记录的支持,这些记录包含证书用途为 "2 "的信任锚点摘要。请勿更改此设置的默认值。

该功能在 Postfix 2.11 至 3.1 中均有提供。Postfix 3.2 取消了这一功能,因为信任锚点 TLSA 记录已被广泛使用,并已被证明足够可靠。Postfix 3.2 及更高版本将忽略该配置参数,并将其视为 "是"。

tls_disable_workarounds (默认值:参见 "postconf -d "输出)。

要禁用的 OpenSSL 漏洞变通方法的列表或位掩码。

OpenSSL 工具包包括一套针对 SSL/TLS 实施错误的变通方法。Postfix 等应用程序希望最大限度地提高互操作性,因此要求 OpenSSL 库启用全套建议的变通方法。

有时会发现某种变通办法会产生安全问题,因此不应再使用。如果不能选择将 OpenSSL 升级到固定版本,或不能及时升级,或在封闭环境中不存在有漏洞的客户端或服务器,则禁用部分或全部 OpenSSL 互操作性变通方法可能是合适的。该参数用于指定禁用哪些漏洞变通方法。

如果参数值是以 "0x "开头的十六进制长整数,则会从SSL_OP_ALL work-around位掩码(参见 openssl/ssl.h 和 SSL_CTX_set_options(3))中删除与参数值中指定位相对应的错误解决方法。指定的位数可以多于 SSL_OP_ALL 中的位数,多余的位数将被忽略。在 32 位系统上,指定 0xFFFFFFFF 会禁用所有错误解决办法。在 OpenSSL 放弃对 32 位系统的支持并开始使用 64 位错误解决掩码的高 32 位之前,这在 64 位系统上也是足够的。

否则,该参数将是一个以空格或逗号分隔的列表,其中包含从以下列表中选择的特定错误解决方法。您的 OpenSSL 版本可能包含在 Postfix 源代码最后一次更新后添加的新漏洞变通方法,在这种情况下,您只能通过上述十六进制语法禁用其中一个。

cryptopro_tlsext_bug

OpenSSL 1.0.0 新增 GOST 支持。

不插入空碎片

参见 SSL_CTX_set_options(3)。

legacy_server_connect

参见 SSL_CTX_set_options(3)。

microsoft_big_sslv3_buffer

参见 SSL_CTX_set_options(3)。

microsoft_sess_id_bug

参见 SSL_CTX_set_options(3)。

msie_sslv2_rsa_padding

也别名为CVE-2005-2969。Postfix 2.8 默认在 OpenSSL 版本之前禁用此变通方法。已在 OpenSSL 0.9.7h 和 OpenSSL 0.9.8a 中修正。

网景挑战错误

参见 SSL_CTX_set_options(3)。

网景重用密码更改错误

也别名为CVE-2010-4180。Postfix 2.8 默认禁用此变通办法,其 OpenSSL 版本可能早于该修复。已在 OpenSSL 0.9.8q 和 OpenSSL 1.0.0c 中修复。

SSLEAY_080_CLIENT_DH_BUG

参见 SSL_CTX_set_options(3)。

sslref2_reuse_cert_type_bug

参见 SSL_CTX_set_options(3)。

tls_block_padding_bug

参见 SSL_CTX_set_options(3)。

TLS_D5_BUG

参见 SSL_CTX_set_options(3)。

tls_rollback_bug

请参见 SSL_CTX_set_options(3)。OpenSSL 0.9.7 及更高版本已禁用此选项。应该没有人会继续使用 0.9.6 版!

TLSEXT_PADDING

Postfix ≥ 3.4。参见 SSL_CTX_set_options(3)。

该功能在 Postfix 2.8 及更高版本中可用。

tls_eecdh_auto_curves (默认值:参见 "postconf -d "输出)。

应在 Postfix SMTP 客户端和服务器中启用的椭圆曲线优先级列表。所选曲线应由 OpenSSL 实现,并在 TLS "支持组 "扩展(RFC8422RFC8446RFC8447)中标准化使用。请确保至少包含 "x25519 "和 "prime256v1"("secp256r1 "的 OpenSSL 名称,又名 "P-256")。默认列表适合大多数用户。

在客户端,列出的第一条曲线将用于构建客户端的初始 TLS 1.3 "密钥共享"。如果服务器不支持,在服务器发出 HelloRetryRequest (HRR) 表示双方都支持的合适曲线后,TLS 握手可能需要额外的往返。

Postfix 跳过 OpenSSL 未知的曲线名称,或已知但尚未实现的曲线名称。这样就可以 "预测 "一旦曲线可用时应该使用的曲线支持,或者在并非所有服务器都支持相同曲线的服务器 "农场 "中部署相同的设置。

从 Postfix 3.10 开始,当使用 OpenSSL 3.0 或更高版本编译时,"曲线 "名称可以是更通用的密钥封装机制(KEM),和/或可以从外部 "提供者"(通过合适的tls_config_file)加载。

另请参阅"tls_ffdhe_auto_groups"参数,该参数支持自定义 TLS 1.3 启用的 FFDHE 组列表。Postfix 3.8 在基于 OpenSSL 3.0 或更高版本构建时引入了该设置。

支持后量子加密:OpenSSL 3.5 引入了新的配置语法,Postfix 不会尝试模仿。相反,在 Postfix 3.6.17、3.7.13、3.8.8、3.9.2 及更高版本中,将tls_eecdh_auto_curvestls_ffdhe_auto_groups(如果有)都设为空值,以便通过 OpenSSL 配置来选择算法。配置示例请参见tls_config_file

Postfix 3.2 及更高版本在供应商未禁用 EC 算法的平台上使用 OpenSSL 1.0.2 或更高版本进行编译和链接时,可使用此功能。

tls_eecdh_strong_curve (默认:prime256v1)

Postfix SMTP 服务器用于进行强短暂 ECDH 密钥交换的椭圆曲线。当"smtpd_tls_eecdh_grade= strong "时,Postfix SMTP 服务器使用该曲线。所谓 "合理的强",是指基于已知的最佳攻击,具有约 128 位的安全性。所选曲线必须由 OpenSSL 实现(如带有"-list_curves "选项的 ecparam(1) 所报告的那样),并且是RFC 8422 第 5.1.1 节中列出的曲线之一。一般情况下,不应更改这一设置。远程 SMTP 客户端实现必须支持该曲线才能进行 EECDH 密钥交换。只选择一小部分客户端支持的 "边缘曲线 "是不明智的。

Postfix 3.6 不再使用此功能。请勿指定。

默认的 "强 "曲线在国家安全局套件 B中被评为最高机密信息。

注意:椭圆曲线名称的标准化程度很低;不同的标准组为相同的底层曲线指定了不同的名称。X9.62 名称为 "prime256v1 "的曲线还有一个 SECG 名称 "secp256r1",但 OpenSSL 不承认后一个名称。

如果您想最大限度地利用提供前向保密功能的密码,请参阅FORWARD_SECRECY_README入门部分。完整的文档方便地将有关 Postfix "完美 "前向保密支持的所有信息集中在一处:什么是前向保密、如何调整设置,以及当 Postfix 使用具有前向保密功能的密码时,你能看到什么。

当 Postfix 2.6 及更高版本在供应商未禁用 EC 算法的平台上使用 OpenSSL 1.0.0 或更高版本进行编译和链接时,可使用此功能。

tls_eecdh_ultra_curve (默认值:secp384r1)

Postfix SMTP 服务器用于最大强度短暂 ECDH 密钥交换的椭圆曲线。当"smtpd_tls_eecdh_grade= ultra "时,Postfix SMTP 服务器使用该曲线。所谓 "最强",是指基于已知的最佳攻击,大约 192 位的安全性。这种额外的强度会带来巨大的计算成本,因此大多数用户应设置"smtpd_tls_eecdh_grade= strong"。所选曲线必须由 OpenSSL 实现(如带有"-list_curves "选项的 ecparam(1) 所报告的那样),并且是RFC 8422 第 5.1.1 节中列出的曲线之一。一般情况下,不应更改这一设置。远程 SMTP 客户端实现必须支持该曲线才能进行 EECDH 密钥交换。只选择一小部分客户端支持的 "边缘曲线 "是不明智的。

Postfix 3.6 不再使用此功能。请勿指定。

这条默认的 "超 "曲线在美国国家安全局套件 B中被评为最高机密信息。

如果您想最大限度地利用提供前向保密功能的密码,请参阅FORWARD_SECRECY_README入门部分。完整的文档方便地将有关 Postfix "完美 "前向保密支持的所有信息集中在一处:什么是前向保密、如何调整设置,以及当 Postfix 使用具有前向保密功能的密码时,你能看到什么。

当 Postfix 2.6 及更高版本在供应商未禁用 EC 算法的平台上使用 OpenSSL 1.0.0 或更高版本进行编译和链接时,可使用此功能。

tls_export_cipherlist (默认值:参见 "postconf -d "输出)。

用于 "出口 "或更高级别密码的 OpenSSL 密码列表。从 Postfix 3.8 开始忽略。在 Postfix 早期版本中,这定义了smtpd_tls_cipherssmtpd_tls_mandatory_cipherssmtp _ tls _ cipherssmtp_tls_mandatory_cipherslmtp_tls_cipherslmtp_tls_mandatory_ciphers 中 "导出 "设置的含义。强烈建议不要更改此设置。

该功能在 Postfix 2.3 及更高版本中可用。

tls_fast_shutdown_enable (默认值:是)

解决了 Postfix 在关闭 TLS 会话时挂起,直到 Postfix 超时的问题。启用此功能后,Postfix 将不会等待远程 TLS 对等方响应 TLS "关闭 "通知。建议在 TLSv1.0 及更高版本中使用此功能。

tls_ffdhe_auto_groups (默认值:请参阅 "postconf -d "输出)。

Postfix SMTP 客户端和服务器支持的有限域 Diffie-Hellman 短时(FFDHE)密钥交换组的优先级列表。OpenSSL 3.0 在 TLS 1.3 中增加了对 FFDHE 密钥协议的支持。在 OpenSSL 1.1.1 中,TLS 1.3 只支持基于椭圆曲线的密钥协议。通过"tls_ffdhe_auto_groups"参数,可以配置 Postfix 客户端或服务器在 OpenSSL 3.0 及以上版本中启用的 FFDHE 组列表。如果 Postfix 是根据较早的 OpenSSL 版本构建的,则该参数不起作用。

Postfix 在 OpenSSL 3.0 及以上版本中启用的 FFDHE 组默认列表仅包括 2048 位和 3072 位组。更强的 FFDHE 组性能较差,而 EC 组则是相同安全级别下更好的选择。Postfix 会忽略 OpenSSL 未知的组名,或已知但尚未实现的组名。FFDHE 组在很大程度上是一种备份,以防某些对等程序不支持 EC 密钥交换,或由于某些紧迫原因需要禁用 EC 密钥交换。

将此参数设置为空将禁用 TLS 1.3 中的 FFDHE 支持。在 TLS 1.2 及更早版本中,是否启用 FFDHE 密钥协议取决于密码列表中是否包含任何 "kDHE "密码。

相反,将"tls_eecdh_auto_curves"设置为空,则会禁用 OpenSSL 3.0 及更高版本中的 TLS 1.3 EC 密钥协议。如果都设置为空,Postfix 将返回 OpenSSL 首选项,如下所述。

支持后量子加密:OpenSSL 3.5 引入了新的配置语法,Postfix 不会尝试模仿。在 Postfix 3.6.17、3.7.13、3.8.8、3.9.2 及更高版本中,请将tls_eecdh_auto_curvestls_ffdhe_auto_groups设置为空值,以便通过 OpenSSL 配置选择算法。配置示例请参见tls_config_file

所有默认组和 EC 曲线都应足够强大,以至于 "修剪 "默认值是不明智的。至少,"x25519 "和 "prime256v1"("secp256r1 "的 OpenSSL 名称,又称 "P-256")应属于启用的 EC 曲线,而 "dhe2048 "和 "dhe3072 "应属于 FFDHE 组。

Postfix 3.8 及更高版本在使用 OpenSSL 3.0 或更高版本进行编译和链接时可使用此功能。

tls_high_cipherlist (默认值:参见 "postconf -d "输出)。

用于 "高级 "密码的 OpenSSL 密码列表。这定义了smtpd_tls_cipherssmtpd_tls_mandatory_cipherssmtp _ tls _ cipherssmtp_tls_mandatory_cipherslmtp_tls_cipherslmtp_tls_mandatory_ciphers 中 "高 "设置的含义。强烈建议不要更改此设置。

该功能在 Postfix 2.3 及更高版本中可用。

tls_legacy_public_key_fingerprints (默认值:否)

对于在 Postfix 2.9.0.2.9.5 中使用证书公钥指纹的站点,这是一种临时迁移辅助工具,因为这些站点使用的算法不正确。该参数对 Postfix 2.2 开始提供的证书指纹支持没有影响。

暂时指定"tls_legacy_public_key_fingerprints= yes",以待从带有错误 Postfix 2.9.0...2.9.5 证书公钥指纹的配置文件迁移到 Postfix 2.9.6 及更高版本所使用的正确指纹。要计算正确的证书公钥指纹,请参阅TLS_README

该功能在 Postfix 2.9.6 及更高版本中可用。

tls_low_cipherlist (默认值:参见 "postconf -d "输出)。

用于 "低 "或更高等级密码的 OpenSSL 密码列表。从 Postfix 3.8 开始忽略。在 Postfix 早期版本中,这定义了smtpd_tls_cipherssmtpd_tls_mandatory_cipherssmtp _ tls _ cipherssmtp_tls_mandatory_cipherslmtp_tls_cipherslmtp_tls_mandatory_ciphers 中 "低 "设置的含义。强烈建议不要更改此设置。

该功能在 Postfix 2.3 及更高版本中可用。

tls_medium_cipherlist (默认值:参见 "postconf -d "输出)。

用于 "中等 "或更高等级密码的 OpenSSL 密码列表。这定义了smtpd_tls_cipherssmtpd_tls_mandatory_cipherssmtp _ tls _ cipherssmtp_tls_mandatory_cipherslmtp_tls_cipherslmtp_tls_mandatory_ciphers 中 "中等 "设置的含义。这是 TLS 客户端中强制 TLS 加密的默认密码列表(验证服务器证书时禁用匿名密码)。这是 2015 年年中以后发布的 Postfix 中用于机会 TLS 的默认密码列表。强烈建议不要更改此设置。

该功能在 Postfix 2.3 及更高版本中可用。

tls_null_cipherlist (默认值:eNULL:!aNULL)

用于 "NULL "级密码的 OpenSSL 密码列表,可在不加密的情况下提供身份验证。这定义了smtpd_tls_mandatory_cipherssmtp_tls_mandatory_cipherslmtp_tls_mandatory_ciphers 中 "null "设置的含义。强烈建议不要更改此设置。

该功能在 Postfix 2.3 及更高版本中可用。

tls_preempt_cipherlist (默认值:否)

使用 SSLv3 及更高版本时,请使用 Postfix SMTP 服务器的密码优先顺序,而不是远程客户端的密码优先顺序。

默认情况下,OpenSSL 服务器会选择服务器支持的客户端最喜欢的密码。在 SSLv3 及更高版本中,服务器可以选择客户端支持(提供)的自己最喜欢的密码。设置"tls_preempt_cipherlist= yes "可启用服务器首选密码。

虽然服务器密码选择在某些情况下可能会带来更安全或性能更高的密码选择,但也存在一些互操作性问题的风险。过去,一些 SSL 客户端列出了优先级较低的密码,但却没有正确执行。如果服务器选择了客户端不太喜欢的密码,就可能选择了客户端实施有缺陷的密码。最值得注意的是,Windows 2003 Microsoft Exchange 服务器对 DES-CBC3-SHA 的实现存在缺陷,而 OpenSSL 认为 DES-CBC3-SHA 比 RC4-SHA 更强。启用服务器密码套件选择可能会与 Windows 2003 Microsoft Exchange 客户端产生互操作性问题。

该功能在 Postfix 2.8 及更高版本中与 OpenSSL 0.9.7 及更高版本结合使用时可用。

tls_random_bytes (默认:32)

tlsmgr(8)为内存伪随机数生成器 (PRNG) 池(重新)加载种子时从$tls_random_source读取的字节数。默认值 32 字节(256 位)对于 128 位对称密钥来说已经足够。如果使用 EGD 或设备文件,则最多读取 255 字节。

该功能在 Postfix 2.2 及更高版本中可用。

tls_random_exchange_name (默认值:请参阅 "postconf -d "输出)。

tlsmgr(8) 维护的伪随机数生成器 (PRNG) 状态文件的名称。该文件在不存在时创建,长度固定为 1024 字节。

从 2.5 版开始,Postfix 在打开该文件时不再使用 root 权限,默认文件位置也从${config_directory}/prng_exch 改为 ${data_directory}/prng_exch。作为迁移辅助工具,在非 Postfix 目录下打开该文件的尝试将被重定向到 Postfix 拥有的data_directory,并记录警告。

该功能在 Postfix 2.2 及更高版本中可用。

tls_random_prng_update_period (默认值:3600s)

tlsmgr(8)尝试将伪随机数生成器 (PRNG) 的状态保存到用$tls_random_exchange_name 指定的文件的间隔时间。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

tls_random_reseed_period (默认值:3600 秒)

tlsmgr(8)尝试从外部资源重新分配内存中伪随机数生成器 (PRNG) 池的最大间隔时间。尝试重新播种的实际间隔时间由 PRNG 计算得出,介于 0 和指定时间之间。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.2 及更高版本中可用。

tls_random_source (默认值:参见 "postconf -d "输出)。

用于内存中tlsmgr(8)伪随机数生成器 (PRNG) 池的外部熵源。请务必指定一个非阻塞源。如果熵源不是常规文件,则必须在熵源类型前加上:egd:/path/to/egd_socket(用于与 EGD 兼容的套接字接口的熵源)或 dev:/path/to/device(用于设备文件)。

注意:在 OpenBSD 系统上,当 dev:/dev/urandom 出现超时错误时,请指定 dev:/dev/arandom。

该功能在 Postfix 2.2 及更高版本中可用。

tls_required_enable (默认值:是)

启用对RFC 8689 中定义的 "TLS-Required: no "报文头的支持。通过在邮件中添加该报文头,发件人请求不执行 TLS 策略。这就将 Postfix SMTP 客户端的 TLS 安全级别限制为 "可能",即不验证远程 SMTP 服务器证书,并在 TLS 不可用时退回到纯文本。如果邮件包含 "TLS-Required: no(TLS 要求:否)"标头,Postfix 就会在邮件发送状态通知中添加该标头。

该功能在 Postfix ≥ 3.10 中可用。

tls_server_sni_maps (默认值:空)

可选的查找表,用于将通过 TLS 服务器名称指示(SNI)扩展从远程 SMTP 客户端接收到的名称映射到相应的密钥和证书链。该参数在 Postfix TLS 库中实现,适用于smtpd(8)tlsproxy(8) 的 SMTP 服务器模式。

此参数为非空时,Postfix SMTP 服务器会启用 SNI 扩展处理,并记录无效或与指定表中的条目不匹配的 SNI 值。当条目匹配时,SNI 名称将作为连接摘要的一部分记录在日志级别 1 及更高的日志中。

查找密钥可以是逐字 SNI 域名,也可以是以点为前缀的祖先域名。对于国际化域名,查询密钥必须是 IDNA 2008 A 标签形式(如 TLS SNI 扩展所要求)。

查找值的语法与smtp_tls_chain_files参数相同(更多详情请参见此处),但此处只适用于客户端发送匹配 SNI 域名的 TLS 连接。

例如

/etc/postfix/main.cf:
    #
    # 必须使用 "postmap -F "创建索引 SNI 表
    #
    indexed = ${default_database_type}:${config_directory}/
    tls_server_sni_maps = ${indexed}sni
/etc/postfix/sni:
    #
    # example.com 域名同时拥有 RSA 和 ECDSA 证书链。
    # 
    # 
    # 
    #
    example.com /etc/postfix/sni-chains/rsa2048.example.com.pem,
                /etc/postfix/sni-chains/ecdsa-p256.example.com.pem
    #
    # example.net 域名有一个通配符证书和两个
    # 额外的 DNS 名称。
    # 
    #
    example.net /etc/postfix/sni-chains/example.net.pem
    .example.net /etc/postfix/sni-chains/example.net.pem
    example.info /etc/postfix/sni-chains/example.net.pem
    example.org /etc/postfix/sni-chains/example.net.pem

请注意,SNI 查询表还应包含与 Postfix SMTP 服务器默认证书相对应的域条目。这将确保远程 SMTP 客户端的 TLS SNI 扩展在指定 Postfix SMTP 服务器的某个默认域时得到肯定的响应,并确保 Postfix SMTP 服务器不会记录此类域的 SNI 名称不匹配。这样,Postfix SMTP 服务器的默认证书就只在客户端不发送 SNI 或发送带有服务器不知道的证书的域的 SNI 时使用。

从 SNI 域名到证书链的映射是间接的。在通过postmap(1) 转换为磁盘索引文件的 "cdb"、"hash"、"btree "或其他表的输入源文件中,为每个键指定的值是文件名列表。当postmap(1)-F选项一起使用时,生成的表会为每个查找键存储相关文件的 base64 编码内容。通过postmap -Fq 查询表时,表值将从 base64 解码,生成原始文件内容,外加一行新内容。

对于 "regexp"、"pcre"、"inline"、"texthash"、"static "和类似的表格,它们在运行时解释,没有单独的源格式,表格值也是一个列表文件,在打开表格时加载到内存中。

对于内容由 Postfix 外部管理的表,如 LDAP、MySQL、PostgreSQL、socketmap 和 tcp,其值必须是所需 PEM 密钥和证书链的连接,然后进一步编码以生成单行 base64 字符串。创建此类表格和安全存储(值包括私钥材料)不属于 Postfix 的职责范围。

使用 "socketmap "和 "tcp "时,数据将以明文方式传输,而且没有查询访问控制,因此一般不适合存储 SNI 链。对于 LDAP 和 SQL,应限制读取权限,并使用 TLS 保护传输中的敏感数据。

通常只有一个私人密钥及其证书链,从与该密钥相对应的 "叶子 "证书开始,一直到相应的中间签发 CA 证书,每个证书后面最好都有其签发者。如果服务器拥有不止一种算法的密钥和证书(如 RSA 密钥和 ECDSA 密钥,甚至是 RSA、ECDSA 和 Ed25519),则可使用多条链连接在一起,密钥总是列在相应证书之前。

该功能在 Postfix 3.4 及更高版本中可用。

tls_session_ticket_cipher (默认值:Postfix ≥ 3.0:aes-256-cbc,Postfix < 3.0:aes-128-cbc)

用于加密RFC5077TLS 会话票据的算法。该算法必须使用 CBC 模式,块大小为 128 位,密钥长度必须在 128 和 256 位之间。默认值为 aes-256-cbc。不鼓励重写默认值以选择其他算法。

将该参数设置为空,将禁用 Postfix SMTP 服务器的会话票据支持。另一种禁用会话票据支持的方法是使用tls_ssl_options参数。

该功能在 Postfix 3.0 及更高版本中可用。

tls_ssl_options (默认值:空)

要启用的 OpenSSL 选项的列表或位掩码。

OpenSSL 工具包提供了一系列选项,应用程序可以启用这些选项来调整 OpenSSL 的行为。其中一些选项可以解决其他实现中的漏洞,默认情况下是开启的。你可以使用tls_disable_workarounds参数有选择性地禁用部分或全部漏洞解决方法,使 OpenSSL 更严格,但代价是无法与出现漏洞的 SSL 客户端或服务器互操作。

其他选项默认为关闭,通常是启用或禁用功能,而不是错误解决办法。这些选项可通过tls_ssl_options参数开启(需谨慎)。该参数的值是从以下列表中选择的以空格或逗号分隔的命名选项列表。这些名称不区分大小写,如果喜欢,可以使用小写。下面的大写值与去掉 SSL_OP_ 前缀的 ssl.h 头文件中的相应宏名一致。您的 OpenSSL 版本可能包含在 Postfix 源代码最后一次更新后添加的新选项,在这种情况下,您只能通过下面的十六进制语法启用其中一个选项。

只有在需要控制的功能非常重要时(处理新的漏洞或严重的互操作性问题),才可通过十六进制掩码启用功能。Postfix 不承诺向后兼容掩码位。在某一版本中通过掩码启用的功能,可能在以后的版本中通过其他方式启用,而掩码位将被忽略。因此,在新的 Postfix 或 OpenSSL 版本提供更好的解决方案之前,使用十六进制掩码只是一种临时措施。

如果参数值是以 "0x "开头的十六进制长整数,则会启用其值中指定位对应的选项(参见 openssl/ssl.h 和 SSL_CTX_set_options(3))。只能启用尚未被其他 Postfix 设置控制的选项。例如,不能禁用协议或启用服务器密码首选项。不要试图通过指定 0xFFFFFFFF 来启用所有功能,这可能不是一个好主意。一些错误变通方法在这里也是有效的,可以在默认情况下不再启用时重新启用。支持的值包括

启用中间件

Postfix ≥ 3.4。参见 SSL_CTX_set_options(3)。

legacy_server_connect

请参见 SSL_CTX_set_options(3)。

无票

在完全打补丁的 Postfix ≥ 2.7 中,需要时默认启用。Postfix ≥ 2.11 完全不需要,除非出于某种原因不想支持 TLS 会话恢复。最好不要明确设置。参见 SSL_CTX_set_options(3)。

无压缩

即使 OpenSSL 库支持,也要禁用 SSL 压缩。压缩会消耗 CPU 资源,而且在加密前进行压缩并不总能提高安全性。

无重新协商

Postfix ≥ 3.4。这可以减少潜在 CPU 耗尽攻击的机会。请参见 SSL_CTX_set_options(3)。

重新协商时不恢复会话

Postfix ≥ 3.4。参见 SSL_CTX_set_options(3)。

茶卡优先

Postfix ≥ 3.4。参见 SSL_CTX_set_options(3)。

该功能在 Postfix 2.11 及更高版本中可用。

tls_wildcard_matches_multiple_labels (默认值:是)

匹配通配符证书中带有 "*"的多个 DNS 标签。

有些邮件服务提供商会在拥有通配符 TLS 证书的基础域名前加上客户域名。例如,由 example.net 托管的 example.com 的 MX 记录可能是

example.com. IN MX 0 example.com.mx1.example.net.
example.com. IN MX 0 example.com.mx2.example.net.

而 TLS 证书可能是 "*.example.net"。这样,"*"就与邮件服务器域名中的多个标签相对应。虽然多标签通配符没有得到广泛支持,也没有得到任何标准的认可,但在这种情况下禁止使用多标签通配符并没有什么好处。

备注

 

  • 在证书名称中,"*"只有在用作第一个标签时才是特殊的。
  • 虽然 Postfix(2.11 或更高版本)可以将 "*"与多个域名标签匹配,但其他实现可能无法做到。
  • 早期的 Postfix 实现就像"tls_wildcard_match_multiple_labels= no "一样。

该功能在 Postfix 2.11 及更高版本中可用。

tlsmgr_service_name (默认值:tlsmgr)

该服务维护TLS会话缓存和支持 TLS 的其他信息。

该功能在 Postfix 2.11 及更高版本中可用。

tlsproxy_client_CAfile (默认值:$smtp_tls_CAfile)

包含根 CA 的 CA 证书的文件,这些根 CA 可签署远程 TLS 服务器证书或中间 CA 证书。详情请参见smtp_tls_CAfile

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_CApath (默认值:$smtp_tls_CApath)

包含 PEM 格式认证机构证书的目录,Postfixtlsproxy(8)客户端使用该目录验证远程 TLS 服务器证书。详情请参阅smtp_tls_CApath

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_cert_file (默认值:$smtp _tls_cert_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 RSA 证书的文件。详情请参阅smtp_tls_cert_file。配置 tlsproxy 客户端密钥和证书的首选方法是使用"tlsproxy_client_chain_files"参数。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_chain_files (默认值:$smtp_tls_chain_files)

包含 PEM 格式的 Postfixtlsproxy(8)客户端密钥和证书链的文件。详情请参见smtp_tls_chain_files

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_dcert_file (默认值:$smtp _tls_dcert_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 DSA 证书的文件。详情请参见smtp_tls_dcert_file。DSA 已过时,不应使用。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_dkey_file (默认值:$smtp _tls_dkey_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 DSA 私钥的文件。详情请参阅smtp_tls_dkey_file。DSA 已过时,不应使用。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_eccert_file (默认值:$smtp _tls_eccert_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 ECDSA 证书的文件。详情请参阅smtp_tls_eccert_file。配置 tlsproxy 客户端密钥和证书的首选方法是使用"tlsproxy_client_chain_files"参数。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_eckey_file (默认值:$smtp _tls_eckey_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 ECDSA 私钥的文件。详情请参阅smtp_tls_eckey_file。配置 tlsproxy 客户端密钥和证书的首选方法是使用"tlsproxy_client_chain_files"参数。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_enforce_tls (默认值:$smtp_enforce_tls)

执行模式:要求 SMTP 服务器使用 TLS 加密。详情请参阅smtp_enforce_tls。使用tlsproxy_client_security_level代替。

自 Postfix 3.9 起,该功能已被弃用。请改用tlsproxy_client_security_level

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_fingerprint_digest (默认值:$smtp _tls_fingerprint_digest)。

用于构建远程 TLS 服务器证书指纹的消息摘要算法。详情请参阅smtp_tls_fingerprint_digest

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_key_file (默认值:$smtp _tls_key_file)。

包含 PEM 格式 Postfixtlsproxy(8)客户端 RSA 私钥的文件。详情请参阅smtp_tls_key_file。配置 tlsproxy 客户端密钥和证书的首选方法是使用"tlsproxy_client_chain_files"参数。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_level (默认值:$smtp_tls_security_level)

Postfixtlsproxy(8)客户端默认的 TLS 安全级别。详情请参阅smtp_tls_security_level

该功能在 Postfix 3.4 - 3.6 中可用。Postfix 3.7 更名为tlsproxy_client_security_level

tlsproxy_client_loglevel (默认值:$smtp_tls_loglevel)

启用额外的 Postfixtlsproxy(8)客户端 TLS 活动日志。详情请参见smtp_tls_loglevel

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_loglevel_parameter 参数 (默认值: smtp_tls_loglevel)。

提供tlsproxy_client_loglelevel值的参数名称。

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_per_site (默认值:$smtp_tls_per_site)

Postfixtlsproxy(8)客户端 TLS 使用策略的可选查询表,按下一跳目的地和远程 TLS 服务器主机名分列。详情请参见smtp_tls_per_site

自 Postfix 3.9 起,该功能已被弃用。请改用tlsproxy_client_policy_maps

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_policy (默认值:$smtp_tls_policy_maps)

按下一跳目的地分列的 Postfixtlsproxy(8)客户端 TLS 安全策略可选查询表。详情请参阅smtp_tls_policy_maps

该功能在 Postfix 3.4 - 3.6 中可用。Postfix 3.7 更名为tlsproxy_client_policy_maps

tlsproxy_client_policy_maps (默认值:$ smtp_tls_policy_maps)。

按下一跳目的地分列的 Postfixtlsproxy(8)客户端 TLS 安全策略可选查询表。详情请参阅smtp_tls_policy_maps

该功能在 Postfix 3.7 及更高版本中可用。它的前身是tlsproxy_client_policy

tlsproxy_client_scert_verifydepth (默认值:$smtp_tls_scert_verifydepth)

远程 TLS 服务器证书的验证深度。详情请参阅smtp_tls_scert_verifydepth

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_client_security_level (默认值:$smtp_tls_security_level)

Postfixtlsproxy(8)客户端默认的 TLS 安全级别。详情请参阅smtp_tls_security_level

该功能在 Postfix 3.7 及更高版本中可用。它的前身是tlsproxy_client_level

tlsproxy_client_use_tls (默认值:$smtp_use_tls)

机会模式:当远程服务器宣布支持 TLS 时使用 TLS。详情请参阅smtp_use_tls。请使用tlsproxy_client_security_level

自 Postfix 3.9 起,该功能已被弃用。请改用tlsproxy_client_security_level

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_enforce_tls (默认值:$smtpd_enforce_tls)

强制 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,并要求客户端使用 TLS 加密。详情请参阅smtpd_enforce_tls。请使用tlsproxy_tls_security_level代替。

自 Postfix 3.9 起,该功能已被弃用。请改用tlsproxy_tls_security_level

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_service_name (默认值:tlsproxy)

该服务执行明文 <=> TLS密文转换。

 

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_CAfile (默认值:$smtpd_tls_CAfile)

包含(PEM 格式)根 CA 的 CA 证书的文件,这些 CA 证书可用于签署远程 SMTP 客户端证书或中间 CA 证书。详情请参阅smtpd_tls_CAfile

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_CApath (默认值:$smtpd_tls_CApath)

包含受信任可签署远程 SMTP 客户端证书或中间 CA 证书的根 CA 的 CA 证书(PEM 格式)的目录。详情请参见smtpd_tls_CApath

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_always_issue_session_ids (默认值:$smtpd _tls_always_issue_session_ids)。

强制 Postfixtlsproxy(8)服务器发送 TLS 会话 ID,即使关闭了 TLS 会话缓存。详情请参阅smtpd_tls_always_issue_session_ids

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_ask_ccert (默认值:$smtpd_tls_ask_ccert)

要求远程 SMTP 客户端提供客户端证书。详情请参阅smtpd_tls_ask_ccert

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_ccert_verifydepth (默认值:$smtpd_tls_ccert_verifydepth)

远程 SMTP 客户端证书的验证深度。如果本地 CA 文件中列出了签发 CA,则深度为 1 即可。详情请参阅smtpd_tls_ccert_verifydepth

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_cert_file (默认值:$smtpd _tls_cert_file)。

包含 PEM 格式 Postfixtlsproxy(8)服务器 RSA 证书的文件。该文件还可能包含 Postfixtlsproxy(8)服务器的私人 RSA 密钥。详情请参阅smtpd_tls_cert_file。在 Postfix ≥ 3.4 版本中,配置 tlsproxy 服务器密钥和证书的首选方法是使用"tlsproxy_tls_chain_files"参数。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_chain_files (默认值:$smtpd_tls_chain_files)

包含 PEM 格式的 Postfixtlsproxy(8)服务器密钥和证书链的文件。详情请参见smtpd_tls_chain_files

该功能在 Postfix 3.4 及更高版本中可用。

tlsproxy_tls_ciphers (默认值:$smtpd_tls_ciphers)

Postfixtlsproxy(8)服务器在进行机会 TLS 加密时使用的最低 TLS 密码级别。详情请参见smtpd_tls_ciphers

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_dcert_file (默认值:$smtpd _tls_dcert_file)。

包含 PEM 格式 Postfixtlsproxy(8)服务器 DSA 证书的文件。该文件还可能包含 Postfixtlsproxy(8)服务器的私有 DSA 密钥。DSA 已经过时,不应再使用。详情请参见smtpd_tls_dcert_file

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_dh1024_param_file (默认值:$smtpd _tls_dh1024_param_file)。

包含 DH 参数的文件,Postfixtlsproxy(8)服务器应将其用于非导出 EDH 密码。详情请参见smtpd_tls_dh1024_param_file

从 Postfix 3.9 起,该功能已被弃用。请勿指定。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_dh512_param_file (默认值:$smtpd _tls_dh512_param_file)。

包含 DH 参数的文件,Postfixtlsproxy(8)服务器应使用出口级 EDH 密码。详情请参阅smtpd_tls_dh512_param_file。2015 年年中之后发布的 Postfix 默认 SMTP 服务器密码级别为 "中",因此默认不使用出口级密码套件。

Postfix ≥ 3.6 不再支持导出级 Diffie-Hellman 密钥交换,该参数将被静默忽略。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_dkey_file (默认值:$smtpd _tls_dkey_file)。

包含 PEM 格式 Postfixtlsproxy(8)服务器 DSA 私钥的文件。该文件可与用$smtpd_tls_dcert_file 指定的 Postfixtlsproxy(8)服务器 DSA 证书文件结合使用。DSA 已过时,不应使用。详情请参见smtpd_tls_dkey_file

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_eccert_file (默认值:$smtpd _tls_eccert_file)。

包含 PEM 格式 Postfixtlsproxy(8)服务器 ECDSA 证书的文件。该文件还可能包含 Postfixtlsproxy(8)服务器的私人 ECDSA 密钥。详情请参见smtpd_tls_eccert_file。在 Postfix ≥ 3.4 版本中,配置 tlsproxy 服务器密钥和证书的首选方法是使用"tlsproxy_tls_chain_files"参数。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_eckey_file (默认值:$smtpd _tls_eckey_file)。

包含 PEM 格式的 Postfixtlsproxy(8)服务器 ECDSA 私钥的文件。该文件可以与用$smtpd_tls_eccert_file 指定的 Postfixtlsproxy(8)服务器 ECDSA 证书文件结合使用。详情请参阅smtpd_tls_eckey_file。在 Postfix ≥ 3.4 版本中,配置 tlsproxy 服务器密钥和证书的首选方法是使用"tlsproxy_tls_chain_files"参数。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_eecdh_grade (默认值:$smtpd_tls_eecdh_grade)

用于短暂椭圆曲线 Diffie-Hellman (EECDH) 密钥交换的 Postfixtlsproxy(8)服务器安全等级。详情请参见smtpd_tls_eecdh_grade

Postfix 3.6 不再使用此功能。请勿指定。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_enable_rpk (默认值:$smtpd_tls_enable_rpk)

在要求或需要客户端验证时,请求远程 SMTP 客户端发送RFC7250原始公钥,而不是 X.509 证书。详情请参阅 $smtpd_tls_enable_rpk。

该功能在 Postfix 3.9 及更高版本中可用。

tlsproxy_tls_exclude_ciphers (默认值:$smtpd_tls_exclude_ciphers)

在所有 TLS 安全级别下要从tlsproxy(8)服务器密码列表中排除的密码或密码类型。详情请参见smtpd_tls_exclude_ciphers

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_fingerprint_digest (默认值:$smtpd _tls_fingerprint_digest)。

用于构建远程 SMTP 客户证书指纹的消息摘要算法。详情请参阅smtpd_tls_fingerprint_digest

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_key_file (默认值:$smtpd _tls_key_file)。

PEM 格式的 Postfixtlsproxy(8)服务器 RSA 私钥文件。该文件可以与用$smtpd_tls_cert_file 指定的 Postfixtlsproxy(8)服务器 RSA 证书文件结合使用。详情请参阅smtpd_tls_key_file。在 Postfix ≥ 3.4 版本中,配置 tlsproxy 服务器密钥和证书的首选方法是使用"tlsproxy_tls_chain_files"参数。

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_logle级别 (默认值:$smtpd _tls_logle级别)

启用额外的 Postfixtlsproxy(8)服务器 TLS 活动日志。每个日志级别还包括较低日志级别记录的信息。详情请参见smtpd_tls_loglevel

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_mandatory_ciphers (默认值:$smtpd_tls_mandatory_ciphers)

Postfixtlsproxy(8)服务器在强制 TLS 加密时使用的最低 TLS 密码级别。详情请参见smtpd_tls_mandatory_ciphers

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_mandatory_exclude_ciphers (默认值:$smtpd _tls_mandatory_exclude_ciphers)。

在强制 TLS 安全级别下从tlsproxy(8)服务器密码列表中排除的密码或密码类型的附加列表。详情请参见smtpd_tls_mandatory_exclude_ciphers

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_mandatory_protocols (默认值:$smtpd_tls_mandatory_protocols)

Postfixtlsproxy(8)服务器接受的 SSL/TLS 协议,强制使用 TLS 加密。如果列表为空,则服务器支持所有可用的 SSL/TLS 协议版本。详情请参阅smtpd_tls_mandatory_protocols

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_protocols (默认值:$smtpd_tls_protocols)

Postfixtlsproxy(8)服务器将通过机会 TLS 加密排除或包含的 TLS 协议列表。详情请参见smtpd_tls_protocols

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_req_ccert (默认值:$smtpd _tls_req_ccert)。

使用强制 TLS 加密时,需要可信的远程 SMTP 客户端证书才能允许进行 TLS 连接。详情请参阅smtpd_tls_req_ccert

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_security_level (默认值:$smtpd_tls_security_level)

Postfixtlsproxy(8)服务器的 SMTP TLS 安全级别;如果指定的是非空值,它将覆盖已过时的参数smtpd_use_tlssmtpd _ enforce_tls。详情请参见smtpd_tls_security_level

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_tls_session_cache_timeout (默认值:$smtpd_tls_session_cache_timeout)

Postfixtlsproxy(8)服务器 TLS 会话缓存信息的过期时间。由于缓存与smtpd(8)共享,并由tlsmgr(8) 管理,因此所有三个服务共享的 SMTP 服务器缓存只有一个过期时间,即smtpd_tls_session_cache_timeout

Postfix 2.8-2.10 中提供了该功能。

tlsproxy_use_tls (默认值:$smtpd_use_tls)

机会性 TLS:向远程 SMTP 客户端宣布 STARTTLS 支持,但不要求客户端使用 TLS 加密。详情请参阅smtpd_use_tls。请使用tlsproxy_tls_security_level代替。

自 Postfix 3.9 起,该功能已被弃用。请改用tlsproxy_tls_security_level

该功能在 Postfix 2.8 及更高版本中可用。

tlsproxy_watchdog_timeout (默认值:10秒)

tlsproxy(8)进程处理本地或远程 I/O 所需的时间。这是一种安全机制,可防止tlsproxy(8)因 Postfix 本身或系统软件中的错误而无法响应。为避免误报和不必要的缓存损坏,此限制不能低于 10 秒。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

该功能在 Postfix 2.8 及更高版本中可用

跟踪服务名称 (默认:跟踪)

跟踪服务的名称。该服务由bounce(8)守护进程实现,负责维护邮件投递记录,并在使用"sendmail -v"请求详细投递时生成邮件投递报告。

该功能在 Postfix 2.1 及更高版本中可用。

transport_delivery_slot_cost (默认值:$default_delivery_slot_cost)

default_delivery_slot_cost参数值的特定传输覆盖,其中transport是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_delivery_slot_cost参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_delivery_slot_cost")组合而成的参数。

transport_delivery_slot_discount (默认:$ default_delivery_slot_discount)

default_delivery_slot_discount参数值的特定传输覆盖,其中transport是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_delivery_slot_discount参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_delivery_slot_discount")组合而成的参数。

transport_delivery_slot_loan (默认值:$ default_delivery_slot_loan)。

default_delivery_slot_loan参数值的特定传输覆盖,其中transport是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_delivery_slot_loan参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_delivery_slot_loan")组合而成的参数。

transport_destination_concurrency_failed_cohort_limit (默认值:$ default_destination_concurrency_failed_cohort_limit)。

default_destination_concurrency_failed_cohort_limit参数值的特定传输覆盖,其中transport是报文传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_concurrency_failed_cohort_limit参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_concurrency_failed_cohort_limit")组合而成的参数。

该功能在 Postfix 2.5 及更高版本中可用。

transport_destination_concurrency_limit (默认值:$ default_destination_concurrency_limit)。

default_destination_concurrency_limit参数值的特定传输覆盖,其中transport是报文传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_concurrency_limit参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_concurrency_limit")组合而成的参数。

transport_destination_concurrency_negative_feedback (默认值:$ default_destination_concurrency_negative_feedback)。

默认目的地并发负反馈参数值的特定传输覆盖,其中传输是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_concurrency_negative_feedback参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_concurrency_negative_feedback")组合而成的参数。

该功能在 Postfix 2.5 及更高版本中可用。

transport_destination_concurrency_positive_feedback (默认值:$default_destination_concurrency_positive_feedback)

默认目的地并发正反馈参数值的特定传输覆盖,其中传输是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_concurrency_positive_feedback参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_concurrency_positive_feedback")组合而成的参数。

该功能在 Postfix 2.5 及更高版本中可用。

transport_destination_rate_delay (默认值:$ default_destination_rate_delay)。

特定于传输的default_destination_rate_delay参数覆盖值,其中transport是报文传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_rate_delay参数不会显示在 "postconf "命令输出中。这种限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_rate_delay")组合而成的参数。

该功能在 Postfix 2.5 及更高版本中可用。

transport_destination_recipient_limit (默认值:$ default_destination_recipient_limit)

默认目的地接收者限制参数值的特定传输覆盖,其中传输是信息传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_destination_recipient_limit参数不会显示在 "postconf "命令输出中。这种限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_destination_recipient_limit")组合而成的参数。

transport_extra_recipient_limit (默认值:$ default_extra_recipient_limit)

default_extra_recipient_limit参数值的特定传输覆盖,其中transport是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_extra_recipient_limit参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_extra_recipient_limit")组合而成的参数。

transport_initial_destination_concurrency (默认值:$initial_destination_concurrency)

initial_destination_concurrency参数值的特定传输覆盖,其中transport是信息传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_initial_destination_concurrency参数不会显示在 "postconf "命令输出中。这种限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_initial_destination_concurrency")组合而成的参数。

该功能在 Postfix 2.5 及更高版本中可用。

transport_maps (默认值:空)

可选的查找表,包含从收件人地址到(信息传送传输、下一跳目的地)的映射。语法详情请参阅transport(5)

该信息可覆盖使用 $local_transport、$virtual_transport、$relay_transport、$default_transport、$sender_dependent_relayhost_maps、$relayhost、$sender_dependent_default_transport_maps 或收件人域指定的信息传送传输和/或下一跳目的地。

指定零个或多个"type:table"查找表,以空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。如果在本地文件中使用此功能,请在更改后运行"postmap /etc/postfix/transport"。

域名的模式匹配由父域名匹配域名参数值中是否存在"transport_maps"控制。

出于安全考虑,自 Postfix 2.3 起,该功能不允许在正则表达式映射中使用 $number 替换。

例如

transport_maps = dbm:/etc/postfix/transport
transport_maps = hash:/etc/postfix/transport

Transport_minimum_delivery_slots (默认值:$ default_minimum_delivery_slots)

默认最小交付位置(default_minimum_delivery_slots)参数值的特定传输覆盖,其中传输是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_minimum_delivery_slots参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_minimum_delivery_slots")组合而成的参数。

transport_recipient_limit (默认值:$ default_recipient_limit)

default_recipient_limit参数值的特定传输覆盖,其中transport是信息交付传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,某些transport_recipient_limit参数不会显示在 "postconf "命令输出中。这种限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_recipient_limit")组合而成的参数。

transport_recipient_refill_delay (默认值:$default_recipient_refill_delay)

默认重填延迟参数值的特定传输覆盖,其中传输是信息传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_recipient_refill_delay参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_recipient_refill_delay")组合而成的参数。

该功能在 Postfix 2.4 及更高版本中可用。

transport_recipient_refill_limit (默认值:$default_recipient_refill_limit)

default_recipient_refill_limit参数值的特定传输覆盖,其中transport是信息传送传输的master.cf名称。

注意:在 Postfix 版本 2.9 之前,transport_recipient_refill_limit参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_recipient_refill_limit")组合而成的参数。

该功能在 Postfix 2.4 及更高版本中可用。

传输重试时间 (默认值:60秒)

Postfix 队列管理器尝试联系出现故障的报文传送系统的间隔时间。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

传输时间限制 (默认值:$command _time_limit)

命令时间限制command _time_limit)参数值的特定传输覆盖,其中传输是信息传送传输的master.cf名称。

指定一个非零时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

注意:在 Postfix 版本 2.9 之前,transport_time_limit参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_time_limit")组合而成的参数。

transport_transport_rate_delay (默认值:$default_transport_rate_delay)

默认传输速率(default_transport_rate_delay)参数值的特定传输覆盖,参数名中的初始传输是信息交付传输的master.cf名称。

指定一个非负的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

注意:在 Postfix 版本 2.9 之前,transport_transport_rate_delay参数不会显示在 "postconf "命令输出中。这一限制适用于许多名称由master.cf服务名称和内置后缀(本例中为"_transport_rate_delay")组合而成的参数。

触发超时 (默认值:10 秒)

向 Postfix 守护进程(例如pickup(8)qmgr(8)守护进程)发送触发器的时限。该时限可防止程序在邮件系统负荷较重时被卡住。

指定一个不为零的时间值(一个整数值加上一个可选的单字母后缀,用于指定时间单位)。时间单位:s(秒)、m(分)、h(小时)、d(天)、w(周)。默认时间单位为 s(秒)。

undisclosed_recipients_header (默认值:参见 "postconf -d "输出)。

Postfixcleanup(8)服务器在邮件不包含 To: 或 Cc: 消息头时插入的消息头。在 Postfix 2.8 及更高版本中,默认值为空。在 Postfix 2.4-2.7 中,指定一个空值可禁用此功能。

例如

# Postfix 2.8 之前的默认值。
# 注意:": "和"; "都是必填项。
undisclosed_recipients_header = To: undisclosed-recipients:;

未知地址拒绝代码 (默认值:450)

Postfix SMTP 服务器因发件人或收件人地址的域名未知而拒绝接收时的数字响应代码。这是reject_unknown_sender_domainreject_unknown_recipient_domain 限制的可能响应之一。

除非您完全了解RFC 5321,否则请勿更改。

unknown_address_tempfail_action (默认值:$reject_tempfail_action)

Postfix SMTP 服务器在reject_unknown_sender_domainreject_unknown_recipient_domain因临时错误条件而失败时的操作。指定 "defer "可立即延迟远程 SMTP 客户端请求。如果使用默认的"defer_if_permit"操作,Postfix SMTP 服务器会继续寻找拒收邮件的机会,只有在客户端请求被接受的情况下才会将其推迟。

该功能在 Postfix 2.6 及更高版本中可用。

未知客户端拒绝代码 (默认值:450)

当没有有效地址 <=> 名称映射的客户端被reject_unknown_client_hostname限制拒绝时,Postfix SMTP 服务器的数字响应代码。当映射因临时错误条件而失败时,SMTP 服务器总是回复 450。

除非您完全了解RFC 5321,否则请勿更改。

unknown_helo_hostname_tempfail_action (默认值:$reject_tempfail_action)

Postfix SMTP 服务器在reject_unknown_helo_hostname因临时错误条件而失败时的操作。指定 "defer"(推迟)可立即推迟远程 SMTP 客户端请求。如果使用默认的"defer_if_permit"操作,Postfix SMTP 服务器会继续寻找拒收邮件的机会,只有在客户端请求被接受的情况下才会将其推迟。

该功能在 Postfix 2.6 及更高版本中可用。

未知主机名拒绝代码 (默认值:450)

当 HELO 或 EHLO 命令指定的主机名被reject_unknown_helo_hostname限制拒绝时,Postfix SMTP 服务器的数字响应代码。

除非您完全了解RFC 5321,否则请勿更改。

unknown_local_recipient_reject_code (默认值:550)

当收件人地址为本地地址,且$local_recipient_maps指定的查找表列表与收件人不匹配时,Postfix SMTP 服务器的数字响应代码。如果收件人地址的域名与 $mydestination、$proxy_interfaces 或$inet_interfaces 匹配,则该地址为本地地址。

默认设置为 550(拒收邮件),但最初使用 450(稍后再试)更为安全,这样您就有时间了解您的local_recipient_maps本地收件人映射)设置是否正常。

例如

unknown_local_recipient_reject_code = 450

该功能在 Postfix 2.0 及更高版本中可用。

unknown_relay_recipient_reject_code (默认值:550)

当收件人地址与$relay_domains 匹配时,Postfix SMTP 服务器回复代码的数字,而relay_recipient_maps指定了与收件人地址不匹配的查找表列表。

该功能在 Postfix 2.0 及更高版本中可用。

unknown_virtual_alias_reject_code (默认值:550)

当收件人地址与$virtual_alias_domains 匹配,且$virtual_alias_maps指定的查找表列表与收件人地址不匹配时,Postfix SMTP 服务器的回复代码。

该功能在 Postfix 2.0 及更高版本中可用。

unknown_virtual_mailbox_reject_code (默认值:550)

当收件人地址与$virtual_mailbox_domains 匹配时,Postfix SMTP 服务器的回复代码,而$virtual_mailbox_maps指定的查找表列表与收件人地址不匹配。

该功能在 Postfix 2.0 及更高版本中可用。

未经验证的收件人删除代码 (默认值:450)

当收件人地址探测因临时错误条件而失败时,Postfix SMTP 服务器的数字响应。

与 Postfix 的其他功能不同,您可以指定 250 以接受地址。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.6 及更高版本中可用。

未验证收件人拒绝代码 (默认值:450)

当收件人地址被reject_unverified_recipient限制拒绝时,Postfix SMTP 服务器的数字响应。

与 Postfix 的其他功能不同,您可以指定 250 以接受地址。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.1 及更高版本中可用。

未验证收件人拒绝原因 (默认:空)

Postfix SMTP 服务器在使用reject_unverified_recipient 拒绝邮件时的回复。请勿包含数字 SMTP 回复代码或增强状态代码。默认情况下,回复包括实际地址验证详细信息。

例如

unverified_recipient_reject_reason = 收件人地址查询失败

该功能在 Postfix 2.6 及更高版本中可用。

unverified_recipient_tempfail_action (默认值:$ reject_tempfail_action)。

Postfix SMTP 服务器在reject_unverified_recipient因临时错误条件而失败时的操作。指定 "defer"(推迟)可立即推迟远程 SMTP 客户端的请求。如果使用默认的"defer_if_permit"操作,Postfix SMTP 服务器会继续寻找拒收邮件的机会,只有在客户端请求被接受的情况下才会将其推迟。

该功能在 Postfix 2.6 及更高版本中可用。

unverified_sender_defer_code (默认值:450)

当发件人地址探测因临时错误条件而失败时,Postfix SMTP 服务器的数字响应代码。

与 Postfix 的其他功能不同,您可以指定 250 以接受地址。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.6 及更高版本中可用。

未验证的发送方拒绝代码 (默认值:450)

当收件人地址被reject_unverified_sender限制拒绝时,Postfix SMTP 服务器的数字响应代码。

与 Postfix 的其他功能不同,您可以指定 250 以接受地址。

除非您完全了解RFC 5321,否则请勿更改。

该功能在 Postfix 2.1 及更高版本中可用。

unverified_sender_reject_reason (默认值:空)

Postfix SMTP 服务器在使用reject_unverified_sender 拒绝邮件时的回复。请勿包含数字 SMTP 回复代码或增强状态代码。默认情况下,回复包括实际地址验证详细信息。

例如

unverified_sender_reject_reason = 发件人地址查询失败

该功能在 Postfix 2.6 及更高版本中可用。

unverified_sender_tempfail_action (默认值:$reject_tempfail_action)

Postfix SMTP 服务器在reject_unverified_sender因临时错误条件而失败时的操作。指定 "defer"(推迟)可立即推迟远程 SMTP 客户端的请求。如果使用默认的"defer_if_permit"操作,Postfix SMTP 服务器会继续寻找拒收邮件的机会,只有在客户端请求被接受的情况下才会将其推迟。

该功能在 Postfix 2.6 及更高版本中可用。

use_srv_lookup (默认值:空)

启用使用 DNS SRV 记录查找指定服务。例如,使用"use_srv_lookup= submission "和"relayhost= example.com:submission "后,Postfix SMTP 客户端将查找_submission._tcp.example.com 的 DNS SRV 记录,并通过这些记录指定的主机和端口转发电子邮件。有关主机选择过程的详细信息,请参见RFC 2782

指定零个或多个服务名称,以逗号和/或空白分隔。可以指定 services(5) 数据库中的任何名称,但实际上只有 submission 或 submissions(以前称为 smtp)才有意义。

使用use_srv_lookup 启用 SRV 记录查询时,可以用"[]"括起域名,以强制进行 IP 地址查询,而不是 SRV 记录查询。

例 1:使用 SRV 记录查询域名 "example.com "的 "submission "服务,进行 MUA 至 MTA 的提交。这将使用带有 STARTTLS 的默认 SMTP 发送代理,并查找"_submission._tcp.example.com "的 SRV 记录。

/etc/postfix/main.cf:
    use_srv_lookup = submission
    relayhost = example.com:submission
    smtp_tls_security_level = may
    ...see SASL_README for sasl configuration...

例 2:使用 SRV 记录查询域名 "example.org "的 "submissions "服务,进行 MUA 到 MTA 的提交。该示例使用专用的 SMTP 发送代理(smtp-wraptls),并打开 tls_wrappermode,然后查找"_submissions._tcp.example.org "的 SRV 记录。

注意:当提供商的 DNS SRV 记录为"_smtps._tcp.example.org "而非"_submissions._tcp.example.org "时,请指定旧名称 "smtps "而非 "submissions"。

/etc/postfix/main.cf:
    use_srv_lookup = submissions
    default_transport = smtp-wraptls:example.org:submissions
    ...see SASL_README for sasl configuration...
                
/etc/postfix/master.cf:
    smtp-wraptls   unix   ...   ...   ...   ...   ...   smtp
        -o { smtp_tls_wrappermode = yes }
        -o { smtp_tls_security_level = encrypt }

例 3:MUA 到 MTA 提交服务组合的发件人选择。这结合了示例 1 和 2,以及如何禁用 SRV 和查找 "smtp-relay.example.net "和 "smtp-relay.other.example "的 IP 地址记录的示例。同样,当提供商的 DNS SRV 记录为"_smtps._tcp.example.org "而非"_submissions._tcp.example.org "时,请指定旧名称 "smtps "而非 "submissions"。

/etc/postfix/main.cf:
    use_srv_lookup = submission, submissions
    sender_dependent_default_transport_maps = inline:{
        # 支持 SRV 记录查询的目的地。
        { [email protected] = smtp:example.com:submission }
        { [email protected] = smtp-wraptls:example.org:submissions }
        # 使用 [destination] 强制查找 IP 地址。
        { [email protected] =smtp:[smtp-relay.example.net]:submissions }
        { [email protected] =
              smtp-wraptls:[smtp-relay.other.example]:submissions } }
    ...有关 sasl 配置,请参阅SASL_README...

例 4:MTA 到 MTA 流量,使用 SMTP 服务的 SRV 记录查询。这对 Postfix 测试很有用,在端口被动态分配给服务器的环境中也很有用。

/etc/postfix/main.cf:
    use_srv_lookup = smtp
    # 当 SRV 记录不可用时,回退到 MX 记录查询。
    #allow_srv_lookup_fallback = yes
    #ignore_srv_lookup_error = yes

该功能在 Postfix 3.8 及更高版本中可用。

verp_delimiter_filter (默认: -=+)

Postfixsendmail(1)命令行和 SMTP 命令中作为 VERP 分隔符接受的字符。

该功能在 Postfix 1.1 及更高版本中可用。

virtual_alias_address_length_limit (默认值:1000)

虚拟别名扩展后电子邮件地址的最大长度。这样可以阻止虚拟别名循环,避免地址长度呈指数增长。

该功能在 Postfix 3.0 及更高版本中可用。

virtual_alias_domains (默认值:$virtual_alias_maps)

Postfix 是指定虚拟别名域(即所有地址都被别名为其他本地或远程域地址的域)列表的最终目的地。SMTP 服务器使用$virtual_alias_maps验证收件人地址,并拒绝不存在的收件人。另请参阅ADDRESS_CLASS_README文件中的虚拟别名域类

该功能在 Postfix 2.0 及更高版本中可用。默认值向后兼容 Postfix 1.1 版本。

默认值为 $virtual_alias_maps,这样就可以将虚拟别名域的所有信息集中在一处。如果用户较多,最好将变化频率较高的信息(虚拟地址 -> 本地或远程地址映射)与变化频率较低的信息(虚拟域名列表)分开。

指定主机名或域名、"/文件/名称 "或"type:表格"模式的列表,以逗号和/或空白分隔。/文件/名称 "模式会被其内容替换;"type:table"查找表会在表项与主机名或域名匹配时进行匹配(忽略查找结果)。下一行以空格开始,继续长行。指定"!pattern "可从列表中排除主机或域名。仅 Postfix 2.4 及更高版本支持"!/file/name "形式。

更多信息,请参阅VIRTUAL_READMEADDRESS_CLASS_README文档。

例如

virtual_alias_domains = virtual1.tld virtual2.tld

virtual_alias_expansion_limit (默认值:1000)

虚拟别名扩展从每个原始收件人生成的最大地址数。

该功能在 Postfix 2.1 及更高版本中可用。

virtual_alias_maps (默认值:$virtual_maps)

可选的查找表通常使用完整的电子邮件地址(包括域名)进行搜索,适用于所有收件人:本地(8)、虚拟和远程;这与仅使用电子邮件地址本地部分(不含域名)进行搜索的alias_maps不同,后者仅适用于本地(8)收件人。virtual_alias_maps表的格式和查找方法在virtual(5) 中有详细说明。有关 Postfix 地址操作的概述,请参阅ADDRESS_REWRITING_README文档。

该功能在 Postfix 2.0 及更高版本中可用。默认值向后兼容 Postfix 1.1 版本。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序查找表,直到找到匹配为止。注意:这些查找是递归的。

如果使用该功能来处理索引文件,请在更改文件后运行"postmap /etc/postfix/virtual"。

例如

virtual_alias_maps = dbm:/etc/postfix/virtual
virtual_alias_maps = hash:/etc/postfix/virtual

virtual_alias_recursion_limit (默认值:1000)

虚拟别名扩展的最大嵌套深度。目前,递归限制仅适用于扩展图的左分支,因此在最坏情况下,树的深度可以达到扩展限制和递归限制的总和。这种情况将来可能会改变。

该功能在 Postfix 2.1 及更高版本中可用。

virtual_delivery_status_filter (默认值:$default_delivery_status_filter)

virtual(8)发送代理的可选过滤器,用于更改成功或失败发送的发送状态代码或说明文字。详情请参阅default_delivery_status_filter

该功能在 Postfix 3.0 及更高版本中可用。

virtual_destination_concurrency_limit (默认值:$default_destination_concurrency_limit)

通过虚拟报文传送传输向同一目的地并行传送的最大次数。该限制由队列管理器执行。报文传送传输名称是master.cf文件条目中的第一个字段。

virtual_destination_recipient_limit (默认值:$ default_destination_recipient_limit)

虚拟信息传送传输中每条信息的最大收件人数量。该限制由队列管理器执行。报文传送传输名称是master.cf文件条目中的第一个字段。

将该参数设置为 1 后,virtual_destination_concurrency_limit的含义将从每个域的并发量变为每个接收者的并发量。

virtual_gid_maps (默认值:空)

包含虚拟(8)邮箱投递的每个收件人组 ID 的查找表。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

在查找表中,指定左侧为"@domain.tld",以匹配指定域中没有特定 "[email protected] "条目的任何用户。

当收件人地址具有可选的地址扩展名([email protected])时,virtual(8)发送代理会首先查找完整地址,当查找失败时,它会查找未扩展的地址 ([email protected])。

注 1:出于安全考虑,virtual(8)发送代理不允许在正则表达式查找表中使用 1 美元等正则表达式进行替换,因为这会打开一个安全漏洞。

注 2: 出于安全考虑,virtual(8)发送代理会默默地忽略使用proxymap(8)服务器的请求。相反,它会直接打开表。在 Postfix 2.2 版之前,virtual(8)发送代理会以致命错误终止。

virtual_mailbox_base (默认值:空)

virtual(8)发送代理在查找$virtual_mailbox_maps表时给所有路径名结果加上的前缀。这是一项安全措施,以确保失控的映射不会在文件系统中留下大量邮箱。虽然virtual_mailbox_base可以设置为"/",但并不推荐这样设置。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

例如

virtual_mailbox_base = /var/mail

virtual_mailbox_domains (默认值:$virtual_mailbox_maps)

Postfix 是指定域列表的最终目的地;邮件通过$virtual_transport发送。默认情况下,这是 Postfixvirtual(8)发送代理。SMTP 服务器通过$virtual_mailbox_maps验证收件人地址,并拒绝接收不存在的收件人的邮件。另请参阅ADDRESS_CLASS_README文件中的虚拟邮箱域类。

该参数的语法与mydestination配置参数相同。

该功能在 Postfix 2.0 及更高版本中可用。默认值向后兼容 Postfix 1.1 版本。

virtual_mailbox_limit (默认值:51200000)

单个virtual(8)邮箱或 maildir 文件的最大字节数,或 0(无限制)。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

virtual_mailbox_lock (默认值:参见 "postconf -d "输出)。

如何在尝试发送之前锁定 UNIX 风格的virtual(8)邮箱。有关可用文件锁定方法的列表,请使用"postconf -l"命令。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

在使用maildir方式交付时,该设置将被忽略,因为这种交付方式没有应用程序级锁,是安全的。

注 1:dotlock方法要求收件人 UID 或 GID 具有对收件人邮箱文件父目录的写访问权限。

注 2:该参数的默认设置取决于系统。

virtual_mailbox_maps (默认值:空)

可选的查找表,包含与$virtual_mailbox_domains 匹配的域中的所有有效地址。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

在查找表中,指定左侧为"@domain.tld",以匹配指定域中没有特定 "[email protected] "条目的任何用户。

使用默认的"virtual_mailbox_domains=$virtual_mailbox_maps",查询表也需要左侧为 "domain.tld "的条目,以满足虚拟邮箱域的查询(右侧为必填项,但不会被使用)。

本文其余部分专门针对virtual(8)派送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

virtual(8)发送代理使用此表查找每个收件人的邮箱或 maildir 路径名。如果查找结果以斜线("/")结尾,则会执行 maildir 风格的投递,否则路径会被假定为指定了一个 UNIX 风格的邮箱文件。请注意,$virtual_mailbox_base会无条件地预置到该路径中。

当收件人地址具有可选的地址扩展名([email protected])时,virtual(8)发送代理会首先查找完整地址,当查找失败时,它会查找未扩展的地址 ([email protected])。

注 1:出于安全考虑,virtual(8)发送代理不允许在正则表达式查找表中使用 1 美元等正则表达式进行替换,因为这会打开一个安全漏洞。

注 2: 出于安全考虑,virtual(8)发送代理会默默地忽略使用proxymap(8)服务器的请求。相反,它会直接打开表。在 Postfix 2.2 版之前,virtual(8)发送代理会以致命错误终止。

virtual_maps (默认值:空)

可选的查找表,其中包含 a) 所有地址都与其他本地或远程域中的地址别名的域名,以及 b) 与其他本地或远程域中的地址别名的地址。在 Postfix 版本 2.0 之前可用。在 Postfix 2.0 及更高版本中,该功能被虚拟别名域(virtual_alias_domains)和虚拟别名映射(virtual_alias_maps)控件所取代。

virtual_minimum_uid (默认值:100)

virtual(8)发送代理从$virtual_uid_maps表中获取的最小用户 ID 值。小于此值的返回值将被拒绝,报文将被延迟。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

virtual_transport (默认: 虚拟)

默认的邮件发送传输和下一跳目的地,用于最终发送到以$virtual_mailbox_domains 列出的域。该信息可通过transport(5)表进行更改。

指定一个形式为transport: nexthop的字符串,其中transportmaster.cf 中定义的邮件传输名称。

该功能在 Postfix 2.0 及更高版本中可用。

virtual_uid_maps (默认值:空)

包含virtual(8)发送代理在向收件人邮箱写邮件时使用的每个收件人用户 ID 的查找表。

该参数专门针对virtual(8)发送代理。它不适用于使用其他邮件递送程序递送邮件的情况。

指定零个或多个 "type:name "查找表,用空格或逗号分隔。将按指定顺序搜索表,直到找到匹配为止。

在查找表中,指定左侧为"@domain.tld",以匹配指定域中没有特定 "[email protected] "条目的任何用户。

当收件人地址具有可选的地址扩展名([email protected])时,virtual(8)发送代理会首先查找完整地址,当查找失败时,它会查找未扩展的地址 ([email protected])。

注 1:出于安全考虑,virtual(8)发送代理不允许在正则表达式查找表中使用 1 美元等正则表达式进行替换,因为这会打开一个安全漏洞。

注 2: 出于安全考虑,virtual(8)发送代理会默默地忽略使用proxymap(8)服务器的请求。相反,它会直接打开表。在 Postfix 2.2 版之前,virtual(8)发送代理会以致命错误终止。