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) 命令的输入。
生成的结果是 dbm 或 db 格式的索引文件,便于邮件系统快速检索。
修改文本文件后,请执行 "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.ess
• net.work.addr
• net.work
• net
• 匹配远程 IPv4 主机或网络地址范围
• 使用 1-4 个十进制八位组,用 "." 分隔
• 不要使用 "[]"、"/"、前导零或十六进制形式
网络范围匹配机制:
• 通过逐步截断 IPv4 地址最后的 ".八位组"
• 直到在访问表中找到匹配项
• 或无法继续截断
注意:如需使用网络/掩码模式,请改用 cidr 查找表类型
详见: cidr_table(5)
4. IPv6 地址格式:
• net:work:addr:ess
• net:work:addr
• net:work
• net
• 匹配远程 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)