简介
Postfix 包含数百个可通过 main.cf 文件配置的参数。值得庆幸的是,所有参数都设有合理的默认值。在大多数情况下,您只需配置两三个参数即可开始使用邮件系统。以下是配置语法的快速入门:
本文假设您已通过自行编译源代码(如文件所述)或安装预编译版本的方式,在系统中安装了 Postfix。
本文档涵盖 Postfix 基础配置。如需了解邮件枢纽、防火墙或拨号客户端等特定应用场景的配置方法,请参阅 STANDARD_CONFIGURATION_README 文件。但建议先掌握本文内容后再查阅该文档。
以下关键参数用于定义主机在网络中的身份和角色:
其他众多配置参数的默认值均基于这些参数派生。
以下参数用于控制发送给本地邮件管理员的邮件量:
若您处于代理或网络地址转换器(NAT)后方,并为其他域运行备份 MX 主机,请务必正确设置:
Postfix 守护进程在后台运行,并通过系统日志记录异常和常规活动。需特别注意:
若主机有特殊安全需求,可考虑在 chroot 环境中运行 Postfix 守护进程:
若在虚拟网络接口运行 Postfix,或主机在虚拟接口运行其他邮件程序,还需关注以下参数:
Postfix 配置文件
默认情况下,Postfix 配置文件位于 /etc/postfix目录。其中最重要的两个文件是 main.cf 和 master.cf,这些文件必须由 root 用户所有。若授予其他用户对 main.cf 和 master.cf 文件(或其父目录)的写权限,等同于授予该用户 root 权限。
在 /etc/postfix/main.cf 中,您需要设置最基础的配置参数。Postfix 配置参数类似于 Shell 变量,但有两点重要区别:首先,Postfix 不支持 UNIX Shell 中的引号语法。
配置参数定义方式:
/etc/postfix/main.cf: 参数 = 值
引用参数时需在名称前加"$"符号:
/etc/postfix/main.cf: 其他参数 = $参数
与 UNIX Shell 变量不同,Postfix 允许在参数赋值前引用(这是第二个主要区别)。Postfix 配置语言采用惰性求值机制,仅在运行时需要时才计算参数值。
Postfix 使用数据库文件进行访问控制、地址重写等操作。DATABASE_README 文件详细说明了 Postfix 如何与 Berkeley DB、LDAP、SQL 等数据库协同工作。以下是典型的数据库调用示例:
/etc/postfix/main.cf: virtual_alias_maps = hash:/etc/postfix/virtual
修改 main.cf 或 master.cf 文件后,请以 root 身份执行以下命令使运行中的邮件系统重新加载配置:
# postfix reload
外发邮件使用的域名
myorigin 参数指定外发邮件的域名。默认为本地主机名 $myhostname。除非是小规模站点,建议改为使用 $mydomain(默认为机器名的父域名)。
为保持发件人与收件人地址的一致性,myorigin 也用于为非限定收件人地址追加域名。
配置示例(任选其一):
/etc/postfix/main.cf: myorigin = $myhostname (默认格式:user@$myhostname) myorigin = $mydomain (推荐格式:user@$mydomain)
接收邮件的域名配置
mydestination 参数定义本机直接接收(而非转发)邮件的域名。默认配置仅接收发送给本机的邮件。如需配置托管域支持,请参考 VIRTUAL_README 文档中的 托管域 章节。
该参数支持以下格式:
重要提示:若主机作为整个域的邮件服务器,必须包含 $mydomain。
配置示例:
示例 1:默认设置。
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost
示例 2:全域邮件服务器。
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost $mydomain
示例 3:具有多个 DNS A 记录的主机。
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost www.$mydomain ftp.$mydomain
注意事项:为避免邮件投递循环,必须列出主机的所有主机名,包括 $myhostname 和 localhost.$mydomain。
邮件转发客户端配置
默认情况下,Postfix 仅转发来自授权网络区块客户端的邮件。mynetworks 参数定义授权网络范围。Postfix 3.0 之前默认授权本地主机所在IP子网的所有客户端,现版本默认仅授权本地主机。
通过 SASL_README 和 TLS_README 文档说明的方法,可配置 Postfix 转发来自授权网络外“移动”客户端的邮件。
安全警告:在广域网环境中,“mynetworks_style = subnet”设置可能过于宽松。
配置示例(任选其一):
/etc/postfix/main.cf: mynetworks_style = subnet (广域网环境不安全) mynetworks_style = host (仅限本地主机) mynetworks = 127.0.0.0.0/8 (仅限本地主机) mynetworks = 127.0.0.0/8 168.100.189.2/32 (授权指定主机) mynetworks = 127.0.0.0/8 168.100.189.2/28 (授权指定网络)
可通过以下方式定义信任网络:
- 在 main.cf 中直接指定
- 通过 mynetworks_style 参数自动生成
mynetworks_style 参数说明:
- “mynetworks_style = host”(compatibility_level ≥ 2 时的默认值):仅转发本地主机邮件
- “mynetworks_style = subnet”(compatibility_level < 2 时的默认值):转发本地主机所在 IP 子网的客户端邮件(Linux 系统需通过 ifconfig/ip 命令配置接口)
- “mynetworks_style = class”:转发本地主机所在IP A/B/C类网络的客户端邮件。当 Postfix 要转发来自与本地机器处于同一 IP 等级 A/B/C 网络的 SMTP 客户端的邮件时使用。不推荐拨号站点使用,会导致 Postfix “信任”整个供应商的网络。
也可手动指定 CIDR(网络 / 掩码)格式的信任网络列表:
/etc/postfix/main.cf: mynetworks = 168.100.189.0/28, 127.0.0.0/8
支持使用绝对路径指定模式文件代替直接列出。
邮件转发目标配置
默认情况下,Postfix 仅将来自非授权网络客户端的邮件转发至授权远程目标。relay_domains 参数定义授权远程目标域,默认可转发 mydestination 参数所列域及其子域。
配置示例(任选其一):
/etc/postfix/main.cf: relay_domains = $mydestination(默认) relay_domains = (安全策略:拒绝转发非授权邮件) relay_domains = $mydomain (仅转发本域及子域邮件)
邮件投递方式:直接或间接
默认情况下,Postfix 尝试直接投递邮件至互联网。根据实际网络环境,可能需要通过 中继服务器 间接投递,适用于:
- 非全天候运行的服务器
- 防火墙后的服务器
- ISP 禁止直连互联网的情况
配置示例(任选其一):
/etc/postfix/main.cf: relayhost = (默认直连互联网) relayhost = $mydomain (通过本地邮件枢纽投递) relayhost = [mail.$mydomain] (通过本地邮件枢纽投递) relayhost = [mail.isp.tld] (通过 ISP 邮件枢纽投递)
用方括号 [] 包裹可避免 DNS MX 记录查询。请确保按照 ISP 提供的格式正确配置。
更多防火墙和拨号网络配置建议请参考 STANDARD_CONFIGURATION_README。
需向管理员报告的问题类型
您应在 aliases(5) 别名表中设置 postmaster 别名,将邮件转发至实际管理人员。postmaster 地址必须存在,以便用户报告邮件投递问题。同时建议将 root 用户的邮件也转发给实际管理人员:
/etc/aliases:
postmaster: you
root: you修改别名文件后,请执行“newaliases”命令。若别名文件不在默认位置(/etc/aliases),可通过“postconf alias_maps”命令查询实际路径。
Postfix 系统默认仅向管理员报告严重问题(资源、软件类):
/etc/postfix/main.cf: notify_classes = resource, software
可配置的问题类型说明:
bounce
向管理员发送无法投递邮件的通知。可选择发送退回邮件的副本(截取至原始邮件头)或 SMTP 会话记录。该设置隐含包含 "2bounce" 类型(见下文)。通知会发送到 bounce_notice_recipient 参数指定地址(默认:postmaster)。另请参阅 luser_relay 功能。
2bounce
当无法将退信返回发件人时,将完整邮件转发给管理员。通知发送至 2bounce_notice_recipient 参数指定地址(默认:postmaster)。
delay
邮件延迟通知(仅包含邮件头)。通知发送至 delay_notice_recipient 参数指定地址(默认:postmaster)。
policy
因反垃圾邮件(UCE)策略被拒的客户端请求通知(包含 SMTP 会话记录)。通知发送至 error_notice_recipient 参数指定地址(默认:postmaster)。
protocol
协议错误或未实现命令通知(包含 SMTP 会话记录)。通知发送至error_notice_recipient 参数指定地址(默认:postmaster)。
resource
因资源问题(如队列文件写入错误)导致的投递失败通知。通知发送至 error_notice_recipient 参数指定地址(默认:postmaster)。
software
因软件问题导致的投递失败通知。通知发送至 error_notice_recipient 参数指定地址(默认:postmaster)。
代理 / NAT 外部网络地址
有些邮件服务器是通过网络地址转换器(NAT)或代理与互联网连接的。 这意味着互联网上的系统连接到 NAT 或代理的地址,而不是连接到邮件服务器的网络地址。NAT 或代理会将连接转发到邮件服务器的网络地址,但 Postfix 并不知道这一点。
当邮件服务器通过 NAT 或代理连接互联网时,需配置 proxy_interfaces 参数指定所有外部代理或 NAT 地址(支持使用主机名)。
重要提示:作为备份 MX 主机时,必须正确配置该参数,否则当主 MX 主机不可用时会导致邮件循环。
例如:NAT 盒后面的主机运行备份 MX 主机。
/etc/postfix/main.cf: proxy_interfaces = 1.2.3.4 (代理 / NAT 外部网络地址)
Postfix 日志相关注意事项
Postfix 守护进程通过 syslog 记录运行日志。syslogd 进程按类别和严重程度对事件进行分类,并将它们添加到日志文件中。建议在 /etc/syslog.conf 中至少配置以下日志规则:
/etc/syslog.conf:
mail.err /dev/console
mail.debug /var/log/maillog修改配置后需向 syslogd 进程发送 HUP 信号。注意:
- 多数 syslogd 实现不会自动创建日志文件,需手动创建。
- Linux 系统建议在路径前添加 "-" 字符(如:-/var/log/maillog)以降低系统负载
建议每日执行以下日志检查:
# postfix check # grep -E '(reject|warning|error|fatal|panic):' /some/log/file /some/log/file
- 第一条命令检查文件权限问题
- 第二条命令筛选异常日志(可能产生大量输出,需进一步过滤)
各日志级别含义详见 DEBUG_README 文档。
chroot 环境运行 Postfix 守护进程
Postfix 守护进程可通过 master.cf 配置文件运行于 chroot 隔离环境中。
进程以固定低权限运行
文件系统访问仅限于 Postfix 队列目录(/var/spool/postfix)
虽不能提供完全隔离(仅限制文件系统访问),但能显著增强系统安全性
适用范围
除以下两类进程外,其余 Postfix 守护进程均可配置为 chroot 运行:
本地邮件投递代理(local)
执行外部命令的守护进程
安全建议:对安全性要求较高的站点,应对所有网络服务进程启用 chroot,包括:
配置方法
默认情况下,/etc/postfix/master.cf 文件指定 Postfix 没有守护进程以 chroot 方式运行。 要启用 chroot 操作,请编辑 /etc/postfix/master.cf 文件,并按照文件中的说明操作。 完成后,执行“postfix reload”使更改生效。
环境准备
请注意,chroot 守护进程解析的所有文件名都相对于 Postfix 队列目录(/var/spool/postfix)。 要成功使用 chroot jail,大多数 UNIX 系统都需要引入一些文件或设备节点。 源代码发行版中的 examples/chroot-setup 目录包含一系列脚本,可以帮助你在不同的操作系统上设置 Postfix chroot 环境。
系统日志集成
需配置 syslogd 监听 chroot 环境内的日志套接字。以下是在特定系统中实现这一目的的 syslogd 命令行选项示例:
FreeBSD: syslogd -l /var/spool/postfix/var/run/log
Linux 和 OpenBSD:syslogd -a /var/spool/postfix/dev/log
主机名配置
myhostname 参数定义邮件系统的全限定域名(FQDN),作为多个 Postfix 配置参数的默认值。
默认情况下,myhostname 使用本地主机名(非 FQDN 格式)。 如果本地主机名不是全称域名形式,或者在虚拟接口上运行 Postfix,则必须指定邮件系统应使用的全称域名。
若 main.cf 中配置了 mydomain参数,将自动为 myhostname 生成 FQDN。
配置示例(任选其一):
/etc/postfix/main.cf: myhostname = host.local.domain (主机名非 FQDN) myhostname = host.virtual.domain (虚拟接口) myhostname = virtual.domain (虚拟域名)
域名配置
mydomain 参数定义 $myhostname 的父域名。 默认从 $myhostname 自动推导,去除第一个点前内容(除非结果是顶级域)。
相反,如果在 main.cf 中指定了 mydomain,Postfix 将使用其值为 myhostname 参数生成全称默认值。
配置示例(任选其一):
/etc/postfix/main.cf: mydomain = local.domain (常规接口) mydomain = virtual.domain (虚拟接口)
网络接口配置
inet_interfaces 参数用于定义 Postfix 服务监听的网络接口地址。当邮件发往"user@[网络地址]"格式时,系统会将其视为发往 $mydestination 所列域的邮件进行本地投递。
可通过 master.cf 文件为特定服务单独配置(在服务名前添加IP地址)以覆盖 inet_interfaces 设置。
默认设置是监听所有活动接口。 如果在虚拟接口上运行邮件发送器,则必须指定监听哪些接口。
配置示例:默认监听所有活动接口("all")。如果在虚拟接口上运行 MTA,则必须为接收机器本身邮件的 MTA 指定明确的 inet_interfaces 值(该 MTA 绝不应在虚拟接口上监听,否则当虚拟 MTA 出现故障时,就会出现邮件循环)。
配置示例:默认设置。
/etc/postfix/main.cf: inet_interfaces = all # 默认配置(监听所有接口)
例如:运行一个或多个虚拟邮件程序的主机。 对于每个 Postfix 实例,只能指定以下一项。
/etc/postfix/main.cf: inet_interfaces = virtual.host.tld (虚拟 Postfix) inet_interfaces = $myhostname localhost... (非虚拟 Postfix)
注意:修改此参数后需重启 Postfix 服务。
简介
Postfix 提供了数百个可通过 main.cf 文件控制的配置参数。值得庆幸的是,所有参数都设有合理的默认值。在大多数情况下,您只需配置两三个参数即可开始使用邮件系统。以下是配置语法简介:
本文假设您已通过编译源代码(详见 INSTALL 文件)或安装预编译版本的方式在系统上部署了 Postfix。
本文档涵盖 Postfix 的基础配置。如需了解针对特定应用场景(如邮件枢纽、防火墙或拨号客户端)的配置方法,请参阅 STANDARD_CONFIGURATION_README 文件。但在查阅该文档前,请确保已掌握本文所述内容。
首先需要配置的参数用于定义主机在网络中的身份和角色:
许多其他配置参数的默认值都基于这些基础参数派生而来。
下一个重要参数控制发送给本地邮件管理员的邮件数量:
如果您的主机位于代理或网络地址转换器(NAT)后方,且正在为其他域运行备份 MX 主机,请务必正确配置以下参数:
Postfix 守护进程在后台运行,并通过系统日志(syslog)记录运行状态和异常情况。以下是需要注意的日志相关事项:
对于有特殊安全要求的环境,可考虑在 chroot 环境中运行 Postfix 守护进程:
如果在虚拟网络接口上运行 Postfix,或主机通过虚拟接口运行其他邮件传输代理,还需关注以下参数:
Postfix 配置文件
默认情况下,Postfix 配置文件位于 /etc/postfix 目录。其中两个核心文件是 main.cf 和 master.cf,这些文件必须由 root 用户所有。若授予其他用户对这些文件(或其父目录)的写权限,等同于授予其 root 权限。
在 /etc/postfix/main.cf 中,您需要设置最基本的配置参数。Postfix 配置参数的语法与 shell 变量类似,但有两点重要区别:首先,Postfix 不支持 UNIX shell 中的引号语法。
配置参数的格式如下:
/etc/postfix/main.cf: parameter = value
使用时在参数名前添加 $ 符号:
/etc/postfix/main.cf: other_parameter = $parameter
与 UNIX shell 变量不同,您可以在参数赋值前引用它(这是第二个主要区别)。Postfix 采用延迟求值机制,仅在运行时才解析参数值。
Postfix 使用数据库文件进行访问控制、地址重写等操作。DATABASE_READM 文件详细说明了 Postfix 如何与 Berkeley DB、LDAP 或 SQL 等数据库协同工作。以下是 Postfix 调用数据库的典型示例:
/etc/postfix/main.cf: virtual_alias_maps = hash:/etc/postfix/virtual
每次修改 main.cf 或 master.cf 文件后,请以 root 身份执行以下命令使配置生效:
# postfix reload
外发邮件使用的域名
myorigin 参数定义本机发送邮件时使用的域名。默认使用本机主机名($myhostname)。除非您运行的是非常小型的站点,否则建议改为使用 $mydomain(即本机主机名的父域)。
为确保发件人与收件人地址的一致性,myorigin 也用于为未指定域名的收件人地址添加默认域名。
配置示例(只需选择其中一种):
/etc/postfix/main.cf: myorigin = $myhostname (默认格式:user@$myhostname) myorigin = $mydomain (推荐格式:user@$mydomain)
接收邮件的目标域名
mydestination 参数指定本机直接接收(而非转发)邮件的域名。默认接收本机自身的邮件。如需配置虚拟域名托管,请参考 VIRTUAL_README 文件中的 托管域名 相关说明。
可指定以下任意组合(以空格或逗号分隔): - 零个或多个域名 - "/file/name" 文件模式(将被文件内容替换) - "type:table" 查找表(如 hash:、btree:、nis:、ldap: 或 mysql:)。查找表仅用于存在性检查,返回结果将被忽略。
重要提示:若本机作为整个域的邮件服务器,必须将 $mydomain 包含在列表中。
示例 1:默认配置
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost
示例 2:域级邮件服务器
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost $mydomain
示例 3:具有多个 DNS A 记录的主机
/etc/postfix/main.cf: mydestination = $myhostname localhost.$mydomain localhost www.$mydomain ftp.$mydomain
注意:为避免邮件投递循环,必须列出主机的所有主机名,包括 $myhostname 和 localhost.$mydomain。
允许中继邮件的客户端
默认情况下,Postfix 会将来自授权网络块的客户端邮件转发至任意目标。授权网络通过 mynetworks 参数定义。当前默认仅授权本机(Postfix 3.0 之前默认授权本机所在 IP 子网的所有客户端)。
Postfix 也可配置为转发来自授权网络外"移动客户端"的邮件,详见 SASL_README 和 TLS_README 文档。
重要提示:若主机连接广域网,采用 "mynetworks_style = subnet" 设置可能过于宽松。
配置示例(只需选择其中一种):
/etc/postfix/main.cf: mynetworks_style = subnet (广域网环境不安全) mynetworks_style = host (仅授权本机) mynetworks = 127.0.0.0/8 (仅授权本机) mynetworks = 127.0.0.0/8 168.100.189.2/32 (仅授权本机) mynetworks = 127.0.0.0/8 168.100.189.2/28 (授权本地网络)
您可以直接在 main.cf 中指定信任网络,或让 Postfix 自动处理(默认方式)。自动处理结果取决于 mynetworks_style 参数:
- "mynetworks_style = host"(当 compatibility_level ≥ 2 时默认):仅转发本机邮件
- "mynetworks_style = subnet"(compatibility_level < 2 时默认):转发与本机同子网客户端的邮件(Linux 系统需通过 ifconfig/ip 命令指定接口)
- "mynetworks_style = class":转发与本机同 A/B/C 类网络客户端的邮件(不适用于拨号站点)
也可手动指定 mynetworks 列表(此时忽略 mynetworks_style)。使用 CIDR(网络/掩码)格式定义网络块:
/etc/postfix/main.cf: mynetworks = 168.100.189.0/28, 127.0.0.0/8
也可指定模式文件的绝对路径替代直接在 main.cf 中列出的模式。
允许中继邮件的目标地址
默认情况下,Postfix 仅将来自未授权网络("陌生人")的邮件转发至授权的远程目标。授权目标通过 relay_domains 参数定义,默认可中继所有在 mydestination 中列出的域及其子域。
配置示例(只需选择其中一种):
/etc/postfix/main.cf: relay_domains = $mydestination (默认值) relay_domains = (安全模式:拒绝所有外部中继) relay_domains = $mydomain (仅中继本域及子域)
邮件投递方式:直接或间接
默认 Postfix 会尝试直连互联网投递邮件。但在以下场景需通过 中继主机 间接投递: - 非工作时间系统关闭 - 位于防火墙后方 - 通过禁止直连的ISP接入
配置示例(只需选择其中一种):
/etc/postfix/main.cf: relayhost = (默认直连互联网) relayhost = $mydomain (通过本地邮件枢纽) relayhost = [mail.$mydomain] (通过本地邮件枢纽,方括号避免DNS MX查询) relayhost = [mail.isp.tld] (通过ISP邮件枢纽)
注意:使用 [] 包裹主机名可跳过DNS MX查询。请务必按照ISP提供的格式配置,否则可能导致投递异常。
更多防火墙/拨号网络配置技巧详见 STANDARD_CONFIGURATION_README。
向管理员报告的问题类型
必须在 aliases(5) 表中设置 postmaster 别名指向实际管理员邮箱(root 账号也应同样设置):
/etc/aliases: postmaster: you root: you
修改后执行 newaliases 命令生效。可通过 postconf alias_maps 查询别名文件路径。
Postfix 默认仅向 postmaster 报告严重问题(资源/软件错误):
/etc/postfix/main.cf: notify_classes = resource, software
可配置的报告类型说明:
bounce
无法投递邮件通知(截断原始邮件头部后的副本或SMTP会话记录)。隐含启用 2bounce 类型。发送至 bounce_notice_recipient 指定地址(默认:postmaster)。
2bounce
无法退还邮件时转发给管理员(完整邮件内容)。发送至 2bounce_notice_recipient 指定地址。
delay
邮件延迟通知(仅包含邮件头)。发送至 delay_notice_recipient 指定地址。
policy
因策略限制被拒的请求(SMTP会话记录)。发送至 error_notice_recipient 指定地址。
protocol
协议错误或未实现命令尝试(SMTP会话记录)。发送至 error_notice_recipient 指定地址。
resource
资源问题导致的投递失败(如队列文件写入错误)。发送至 error_notice_recipient 指定地址。
software
软件问题导致的投递失败。发送至 error_notice_recipient 指定地址。
代理/NAT外部网络地址
当邮件服务器通过NAT或代理连接互联网时(外部连接实际到达的是NAT地址),需配置 proxy_interfaces 参数声明所有外部代理地址(支持主机名形式)。
关键提示:作为备用MX主机时必须配置此参数,否则主MX不可用时会导致投递循环。
配置示例(位于NAT后方的备用MX主机):
/etc/postfix/main.cf: proxy_interfaces = 1.2.3.4 (NAT外部地址)
Postfix日志记录要点
Postfix 通过 syslog 记录运行日志,需在 /etc/syslog.conf 中至少配置:
/etc/syslog.conf: mail.err /dev/console mail.debug /var/log/maillog
修改后需向 syslogd 发送 HUP 信号。
重要提示: 1. 多数 syslogd 实现不会自动创建日志文件,需手动创建 2. Linux 系统需在路径前加 "-" 字符(如 -/var/log/maillog)以降低资源占用
建议每日执行以下检查(在日志轮转前):
# postfix check # grep -E '(reject|warning|error|fatal|panic):' /var/log/maillog
- 第一条命令检查文件权限问题
- 第二条命令筛选异常日志(可能需进一步过滤)
日志级别说明详见 DEBUG_README。
chroot环境运行守护进程
通过 master.cf 可将Postfix守护进程限制在chroot环境(仅能访问/var/spool/postfix队列目录),显著提升安全性(虽非绝对安全)。
适用场景: - 所有网络通信类守护进程(smtp/smtpd/lmtp) - 作者本人的 porcupine.org 邮件服务器即全量启用
配置方法: 1. 编辑 /etc/postfix/master.cf 2. 按文件说明启用chroot列 3. 执行 postfix reload 生效
系统适配: - 需在chroot环境中提供必要的设备节点和库文件 - 源代码包的 examples/chroot-setup 目录包含各系统的配置脚本
Syslog 特殊配置: 需让syslogd监听队列目录内的套接字,例如:
FreeBSD系统:syslogd -l /var/spool/postfix/var/run/log
Linux/OpenBSD系统:syslogd -a /var/spool/postfix/dev/log
本机主机名配置
myhostname 参数定义运行Postfix系统的完整域名(FQDN)。该值作为许多其他参数的默认基准值。
典型应用场景:
- 当默认主机名不是FQDN格式时(如仅host而非host.domain.tld)
- 在虚拟接口上运行Postfix时
- 若已设置mydomain,Postfix会自动生成FQDN
配置示例(只需选择其中一种):
/etc/postfix/main.cf: myhostname = host.local.domain (非FQDN主机名升级) myhostname = host.virtual.domain (虚拟接口场景) myhostname = virtual.domain (纯虚拟主机)
本机域名配置
mydomain 参数指定 myhostname 的父域(自动去除主机名前缀,除非结果为顶级域)。
双向关联:若已设置本参数,Postfix会基于该值自动生成 myhostname 的FQDN。
配置示例(只需选择其中一种):
/etc/postfix/main.cf: mydomain = local.domain (标准域名) mydomain = virtual.domain (虚拟域名)
网络接口配置
inet_interfaces 参数控制Postfix监听的网络接口地址。发送至 user@[IP地址] 的邮件会被视为本地投递(等效于在 mydestination 中列出的域)。
默认行为:监听所有活动接口(inet_interfaces = all)
特殊注意事项:
- 可通过在master.cf的服务器名前添加IP地址来覆盖此设置
- 在虚拟接口场景中,必须为接收本机邮件的MTA显式指定接口列表
- 主MTA绝对不应监听虚拟接口,否则当虚拟MTA不可用时会导致邮件循环
配置示例1:默认配置
/etc/postfix/main.cf: inet_interfaces = all
配置示例2:虚拟邮件服务器环境(每个Postfix实例选择一种)
/etc/postfix/main.cf: inet_interfaces = virtual.host.tld (虚拟Postfix实例) inet_interfaces = $myhostname localhost... (主Postfix实例)
重要提示:修改此参数后需重启Postfix服务。
配置检查清单
- 确认所有关键参数(myorigin/mydestination等)已按业务需求配置
- 测试每个网络接口的邮件收发功能
- 检查日志文件确保无异常报错
- 验证postmaster和root别名是否指向有效邮箱
- 在chroot环境中测试关键功能(如配置)
故障排查提示
当遇到配置问题时,建议按以下步骤诊断:
检查基础服务状态:
# postfix status # systemctl status postfix # systemd系统
验证配置语法:
# postfix check # postconf -n # 显示非默认参数
分析日志信息:
# tail -f /var/log/maillog | grep postfix # journalctl -u postfix -f # systemd日志
测试邮件流:
# sendmail -bv postmaster # 测试投递路径 # telnet localhost 25 # 手动SMTP测试
更多故障排查方法参考 DEBUG_README 文档。
安全加固建议
| 措施 | 实施方法 | 影响评估 |
|---|---|---|
| 启用SMTP加密 | 配置TLS参数 | 增加CPU开销5-15% |
| 限制中继范围 | 严格设置mynetworks | 需维护IP列表 |
| 全量chroot | 配置master.cf所有服务 | 需额外维护环境 |
| 日志监控 | 配置logwatch或fail2ban | 需定期审查 |
性能调优参数
以下参数可根据系统负载调整(建议在测试环境验证):
/etc/postfix/main.cf: default_process_limit = 100 # 默认进程数 smtpd_client_connection_count_limit = 10 # 单客户端连接限制 queue_minfree = 20971520 # 队列分区最小剩余空间(20MB) message_size_limit = 10485760 # 单邮件大小限制(10MB)
建议通过 postconf -d 查看所有参数的默认值,并根据 TUNING_README 指南进行调整。
配置管理最佳实践
- 使用版本控制系统管理配置变更
- 每次修改后执行 postfix reload 而非完全重启
- 通过 postconf -n 生成当前配置文档
- 定期备份 /etc/postfix 目录
- 使用 alias_maps 而非直接编辑aliases文件