ACCESS(5)                                                            ACCESS(5)

名称
       access - Postfix SMTP 服务器访问控制表

摘要
       postmap /etc/postfix/access

       postmap -q "字符串" /etc/postfix/access

       postmap -q - /etc/postfix/access <输入文件

描述
       本文档描述 Postfix 对远程 SMTP 客户端信息的访问控制机制,包括:
       • 主机名
       • 网络地址
       • 信封发件人或收件人地址

       该功能由 Postfix SMTP 服务器实现。如需控制邮件内容的访问权限,请参阅:
        header_checks(5)  body_checks(5) 。

       通常  access(5)  表以文本文件形式存在,作为  postmap(1)  命令的输入。
       生成的结果是 dbmdb 格式的索引文件,便于邮件系统快速检索。
       修改文本文件后,请执行 "postmap /etc/postfix/access" 命令重建索引文件。

       当通过 NIS、LDAP 或 SQL 等方式提供访问表时,其查找方式与普通索引文件相同。

       此外,访问表也可以:
       • 作为正则表达式映射提供(模式以正则表达式表示)
       • 指向基于 TCP 的服务器
       这两种情况下的查找方式略有不同,详见下文:
       • "正则表达式表"
       • "TCP 查询表"

大小写处理
       搜索字符串在数据库查询前会自动转换为小写。从 Postfix 2.3 开始:
       • 对于  regexp : 或  pcre : 等数据库类型
       • 其查找字段可同时匹配大小写时
       将保留原始大小写形式。

表格式
        postmap(1)  命令的输入格式如下:

       模式 操作
              • 当 模式 匹配邮件地址、域名或主机地址时
              • 执行对应的 操作

       空白行和注释:
              • 空行和仅含空白字符的行将被忽略
              • 以 `#` 开头的行视为注释

       多行文本:
              • 逻辑行以非空白字符开头
              • 以空白字符开头的行视为上一行的续行

索引表中的邮件地址模式
       使用 DB、DBM 等索引文件或 NIS、LDAP、SQL 等网络表时,
       按以下顺序尝试匹配模式:

       1. 用户名@域名
              • 精确匹配指定邮件地址

       2. 域名.顶级域
              • 匹配邮件地址中的域名部分
              • 当 Postfix 配置参数  parent_domain_matches_subdomains  
                包含 smtpd_access_maps 时
              • 该模式也会匹配子域名

       3. .domain.tld
              • 匹配 domain.tld 的子域
              • 仅当 smtpd_access_maps 不在
                 parent_domain_matches_subdomains  配置中时生效

       4. user@
              • 匹配所有包含指定用户名的邮件地址

       注意:某些查找表类型不支持空发件人地址查询。
       • 默认使用 <> 作为空地址的查找键
       • 可通过  smtpd_null_access_lookup_key  参数配置
       • 该参数位于  main.cf  文件

邮件地址扩展
       当邮件本地部分包含收件人分隔符时(如 user+foo@domain),
       查找顺序变为:
       1. user+foo@domain
       2. user@domain 
       3. domain
       4. user+foo@
       5. user@

主机名/地址模式(索引表)
       使用索引文件或网络表时,按以下顺序匹配:

       1. domain.tld
              • 精确匹配域名
              • 当 smtpd_access_maps parent_domain_matches_subdomains  中时
              • 也匹配子域名

       2. .domain.tld
              • 匹配子域名
              • 仅当 smtpd_access_maps 不在上述配置中时

       3. IPv4 地址格式:
              • net.work.addr.essnet.work.addrnet.worknet
              • 匹配远程 IPv4 主机或网络地址范围
              • 使用 1-4 个十进制八位组,用 "." 分隔
              • 不要使用 "[]"、"/"、前导零或十六进制形式

              网络范围匹配机制:
              • 通过逐步截断 IPv4 地址最后的 ".八位组"
              • 直到在访问表中找到匹配项
              • 或无法继续截断

              注意:如需使用网络/掩码模式,请改用 cidr 查找表类型
              详见: cidr_table(5) 

       4. IPv6 地址格式:
              • net:work:addr:essnet:work:addrnet:worknet
              • 匹配远程 IPv6 主机或网络地址范围
              • 使用 3-8 个十六进制八位组对,用 ":" 分隔
              • 可使用 "::" 表示连续的零值八位组对
              • 不要使用 "[]"、"/"、前导零或非压缩形式

              网络范围匹配机制:
              • 通过逐步截断压缩格式 IPv6 地址最后的 ":八位组对"
              • 直到在访问表中找到匹配项
              • 或无法继续截断

              注意:如需使用网络/掩码模式,请改用 cidr 查找表类型
              详见: cidr_table(5) 

              IPv6 支持需要 Postfix 2.2 或更高版本

允许操作
       OK
              • 接受匹配模式的地址等信息
              • 等同于隐式允许

       全数字响应
              • 将被视为 OK
              • 这种格式通常由基于地址的转发授权方案生成
              • 例如 pop-before-smtp

       其他允许操作详见下文"其他操作"部分。

拒绝操作
       Postfix 2.3+ 支持  RFC 3463  定义的增强状态码:
       • 未指定代码时,默认使用:
         - 拒绝操作:5.7.1
         - 延迟操作:4.7.1
       • 详见下文"增强状态码"说明

       4NN 文本 / 5NN 文本
              • 拒绝匹配模式的地址等信息
              • 响应指定的三位数字代码和文本
              • 4NN 表示"稍后重试"
              • 5NN 表示"永久拒绝"

              特殊响应代码:
              • 421 文本 (Postfix 2.3+)
              • 521 文本 (Postfix 2.6+)
                - 响应后立即断开 SMTP 连接
                - 释放服务器资源
                注意:521 应仅用于僵尸网络等场景

       REJECT [文本...]
              • 拒绝匹配项
              • 当指定文本时:
                - 响应 "$ access_map_reject_code  文本..."
              • 未指定时返回通用错误

       DEFER [文本...]
              • 延迟处理匹配项 (Postfix 2.6+)
              • 类似 REJECT 但使用延迟响应代码

       DEFER_IF_REJECT [文本...]
              • 当后续限制会导致 REJECT 时延迟处理 (Postfix 2.1+)
              • Postfix 2.6 前使用 450 代码

       DEFER_IF_PERMIT [文本...]
              • 当后续限制会导致允许时延迟处理 (Postfix 2.1+)
              • Postfix 2.6 前使用 450 代码

其他操作
       限制条件...
              • 应用指定的 UCE 限制
              • 如 permit, reject,  reject_unauth_destination BCC user@domain
              • 密件抄送给指定收件人 (Postfix 3.0+)
              • 同一事务中多个 BCC 仅最后一个有效

       DISCARD [文本...]
              • 静默丢弃邮件并记录日志 (Postfix 2.0+)
              • 注意:影响所有收件人

       DUNNO
              • 假装未找到匹配项 (Postfix 2.0+)
              • 防止尝试子字符串匹配

       FILTER transport:destination
              • 通过外部内容过滤器处理邮件 (Postfix 2.0+)
              • 详见  FILTER_README 

       HOLD [文本...]
              • 将邮件置于保留队列 (Postfix 2.0+)
              • 可通过  postsuper(1)  管理

       PREPEND 头字段名: 值
              • 在邮件头添加指定字段 (Postfix 2.1+)

       REDIRECT user@domain
              • 将邮件重定向到指定地址 (Postfix 2.1+)

       INFO [文本...]
              • 记录包含客户端信息的日志 (Postfix 3.0+)

       WARN [文本...]
              • 记录警告日志 (Postfix 2.1+)

增强状态码
       Postfix 2.3+ 支持  RFC 3463  增强状态码:
       • 发件人地址匹配 REJECT 时:
         - 收件人 DSN 状态(4.1.1-4.1.6) → 对应发件人状态
       • 非地址信息匹配 REJECT 时:
         - 转换为通用非地址状态(4.0.0)

正则表达式表
       使用正则表达式表时(如  regexp_table(5) ):
       • 对整个查找字符串进行匹配
       • 不进行父域/父网络搜索
       • 支持 $1, $2 等反向引用

TCP 查询表
       使用 TCP 查询表时( tcp_table(5) ):
       • Postfix 2.4 及更早版本不支持
       • 每次查询使用完整字符串
       • 匹配规则与索引表相同

示例
       允许 1.2.3.4 拒绝 1.2.3.0/24 其他地址:
       /etc/postfix/ main.cf :
            smtpd_client_restrictions  =
                check_client_access   hash :/etc/postfix/access

       /etc/postfix/access:
           1.2.3   REJECT
           1.2.3.4 OK

       编辑后执行:postmap /etc/postfix/access

已知问题
       • 表格式不支持引用约定

参见 postmap(1)  - Postfix 查找表管理器
       •  smtpd(8)  - SMTP 服务器
       •  postconf(5)  - 配置参数
       •  transport(5)  - 传输:下一跳语法

参考文档 SMTPD_ACCESS_README  - SMTP 服务器访问控制
       •  DATABASE_README  - Postfix 查找表概述

许可证
       必须随本软件分发 Secure Mailer 许可证。

作者
       Wietse Venema
       IBM T.J. Watson 研究院
       邮政信箱 704
       美国纽约州约克镇高地 10598

       Wietse Venema
       Google 公司
       纽约第八大道 111 号
       美国纽约州 10011

                                                                     ACCESS(5)