跳转到主要内容

于 2025年04月06日 摘录自 Postfix Basic Configuration

简介

Postfix 包含数百个可通过 main.cf 文件配置的参数。值得庆幸的是,所有参数都设有合理的默认值。在大多数情况下,您只需配置两三个参数即可开始使用邮件系统。以下是配置语法的快速入门:

本文假设您已通过自行编译源代码(如文件所述)或安装预编译版本的方式,在系统中安装了 Postfix。

本文档涵盖 Postfix 基础配置。如需了解邮件枢纽、防火墙或拨号客户端等特定应用场景的配置方法,请参阅 STANDARD_CONFIGURATION_README 文件。但建议先掌握本文内容后再查阅该文档。

以下关键参数用于定义主机在网络中的身份和角色:

其他众多配置参数的默认值均基于这些参数派生。

以下参数用于控制发送给本地邮件管理员的邮件量:

若您处于代理或网络地址转换器(NAT)后方,并为其他域运行备份 MX 主机,请务必正确设置:

Postfix 守护进程在后台运行,并通过系统日志记录异常和常规活动。需特别注意:

若主机有特殊安全需求,可考虑在 chroot 环境中运行 Postfix 守护进程:

若在虚拟网络接口运行 Postfix,或主机在虚拟接口运行其他邮件程序,还需关注以下参数:

Postfix 配置文件

默认情况下,Postfix 配置文件位于 /etc/postfix目录。其中最重要的两个文件是 main.cfmaster.cf,这些文件必须由 root 用户所有。若授予其他用户对 main.cfmaster.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.cfmaster.cf 文件后,请以 root 身份执行以下命令使运行中的邮件系统重新加载配置:

# postfix reload

外发邮件使用的域名

myorigin 参数指定外发邮件的域名。默认为本地主机名 $myhostname。除非是小规模站点,建议改为使用 $mydomain(默认为机器名的父域名)。

为保持发件人与收件人地址的一致性,myorigin 也用于为非限定收件人地址追加域名。

配置示例(任选其一):

/etc/postfix/main.cf:
    myorigin = $myhostname (默认格式:user@$myhostnamemyorigin = $mydomain   (推荐格式:user@$mydomain

接收邮件的域名配置

mydestination 参数定义本机直接接收(而非转发)邮件的域名。默认配置仅接收发送给本机的邮件。如需配置托管域支持,请参考 VIRTUAL_README 文档中的 托管域 章节。

该参数支持以下格式:

  • 零或多个域名
  • "/文件/路径" 模式
  • "类型:表" 查找表(如 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子网的所有客户端,现版本默认仅授权本地主机。

通过 SASL_READMETLS_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 (授权指定网络)

可通过以下方式定义信任网络:

  1. main.cf 中直接指定
  2. 通过 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 信号。注意:

  1. 多数 syslogd 实现不会自动创建日志文件,需手动创建。
  2. 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 运行:

  1. 本地邮件投递代理(local)

  2. 执行外部命令的守护进程

安全建议:对安全性要求较高的站点,应对所有网络服务进程启用 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 服务。

 
Deepseek 优化版

简介

Postfix 提供了数百个可通过 main.cf 文件控制的配置参数。值得庆幸的是,所有参数都设有合理的默认值。在大多数情况下,您只需配置两三个参数即可开始使用邮件系统。以下是配置语法简介:

本文假设您已通过编译源代码(详见 INSTALL 文件)或安装预编译版本的方式在系统上部署了 Postfix。

本文档涵盖 Postfix 的基础配置。如需了解针对特定应用场景(如邮件枢纽、防火墙或拨号客户端)的配置方法,请参阅 STANDARD_CONFIGURATION_README 文件。但在查阅该文档前,请确保已掌握本文所述内容。

首先需要配置的参数用于定义主机在网络中的身份和角色:

许多其他配置参数的默认值都基于这些基础参数派生而来。

下一个重要参数控制发送给本地邮件管理员的邮件数量:

如果您的主机位于代理或网络地址转换器(NAT)后方,且正在为其他域运行备份 MX 主机,请务必正确配置以下参数:

Postfix 守护进程在后台运行,并通过系统日志(syslog)记录运行状态和异常情况。以下是需要注意的日志相关事项:

对于有特殊安全要求的环境,可考虑在 chroot 环境中运行 Postfix 守护进程:

如果在虚拟网络接口上运行 Postfix,或主机通过虚拟接口运行其他邮件传输代理,还需关注以下参数:

Postfix 配置文件

默认情况下,Postfix 配置文件位于 /etc/postfix 目录。其中两个核心文件是 main.cfmaster.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.cfmaster.cf 文件后,请以 root 身份执行以下命令使配置生效:

# postfix reload

外发邮件使用的域名

myorigin 参数定义本机发送邮件时使用的域名。默认使用本机主机名($myhostname)。除非您运行的是非常小型的站点,否则建议改为使用 $mydomain(即本机主机名的父域)。

为确保发件人与收件人地址的一致性,myorigin 也用于为未指定域名的收件人地址添加默认域名。

配置示例(只需选择其中一种):

/etc/postfix/main.cf:
myorigin = $myhostname (默认格式:user@$myhostnamemyorigin = $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_READMETLS_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 列表(此时忽略 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)。该值作为许多其他参数的默认基准值。

典型应用场景

  1. 当默认主机名不是FQDN格式时(如仅host而非host.domain.tld)
  2. 在虚拟接口上运行Postfix时
  3. 若已设置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服务。

 

配置检查清单

  1. 确认所有关键参数(myorigin/mydestination等)已按业务需求配置
  2. 测试每个网络接口的邮件收发功能
  3. 检查日志文件确保无异常报错
  4. 验证postmaster和root别名是否指向有效邮箱
  5. 在chroot环境中测试关键功能(如配置)

故障排查提示

当遇到配置问题时,建议按以下步骤诊断:

  1. 检查基础服务状态

    # postfix status
    # systemctl status postfix  # systemd系统
  2. 验证配置语法

    # postfix check
    # postconf -n  # 显示非默认参数
  3. 分析日志信息

    # tail -f /var/log/maillog | grep postfix
    # journalctl -u postfix -f  # systemd日志
  4. 测试邮件流

    # 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文件