PROXYMAP(8)                                                        PROXYMAP(8)

名称
       proxymap - Postfix 查找表代理服务

概述
       proxymap [通用 Postfix 守护进程选项]

描述
       proxymap(8) 服务提供只读或读写表查询功能,通过两种独立服务实现:
       proxymap(只读)和 proxywrite(读写)。该服务的主要用途包括:

       o      突破 chroot 限制。例如,处于 chroot 环境的 SMTP 服务器需要访问系统密码文件来验证本地地址,
              但将密码文件复制到 chroot 环境并不现实。解决方案:

              local_recipient_maps =
                  proxy:unix:passwd.byname $alias_maps

       o      通过共享表连接减少总连接数。例如,每个 Postfix 守护进程都直接连接 MySQL 会导致
              "连接数过多"错误。解决方案:

              virtual_alias_maps =
                  proxy:mysql:/etc/postfix/virtual_alias.cf

              此时总连接数仅受 proxymap 服务进程数量限制。

       o      为不支持多写入器的表(如非 lmdb 的所有基于文件的表)提供单写入器功能。

       proxymap(8) 服务支持以下操作请求:

       open maptype:mapname flags
              打开指定类型和名称的表。响应包含表类型相关标志
              (用于区分固定字符串表和正则表达式表)。

       lookup maptype:mapname flags key
              查询指定键值。响应包含状态码和查询结果。
              参数与 open 请求相同。

       update maptype:mapname flags key value
              更新指定键值。响应为状态码。
              参数与 open 请求相同。

              注意:要实现单写入器模式,需在 master.cf 中将 proxywrite 服务的
              进程数限制设为 1。

              (Postfix 2.5 及以上版本支持)

       delete maptype:mapname flags key
              删除指定键值。响应为状态码。
              参数与 open 请求相同。

              (Postfix 2.5 及以上版本支持)

       sequence maptype:mapname flags function
              遍历数据库。function 可以是 DICT_SEQ_FUN_FIRST 或 DICT_SEQ_FUN_NEXT。
              响应包含状态码及找到的键值对。

              (Postfix 2.9 及以上版本支持)

       请求状态码包括:OK(成功)、RETRY(重试)、NOKEY(键不存在)、
       BAD(请求格式错误)和 DENY(无访问权限)。

       注:服务不提供 close 命令,连接断开时也不会自动关闭表,
       这是为了实现多进程间的表共享。

服务进程管理
       proxymap(8) 服务由 Postfix master(8) 主控进程管理。
       每个服务进程可处理多路连接。当所有进程都处于忙碌状态时,
       master(8) 会新建服务进程(不超过配置上限)。
       服务进程在处理完 $max_use 个请求或空闲超过 $max_idle 秒后自动终止。

安全
       proxymap(8) 服务仅访问通过 proxy_read_mapsproxy_write_maps 明确授权的表,且可以低权限运行(是否 chroot 均可)。
       但 chroot 模式会限制实用性,因为只能访问 chroot 环境内的表。

       注意:
       1. 该服务不是可信进程,禁止用于查询敏感信息(如系统账号、文件路径等)
       2. Postfix 2.2+ 会自动识别敏感表请求并直接访问
       3. 可写数据应存放在 Postfix 专属目录(如 data_directory)
       4. 禁止在系统目录存放可写文件,避免权限漏洞

诊断
       所有操作日志均记录至 syslogd(8) 或 postlogd(8)已知问题
       1. 不适用于高延迟查询(因需服务多客户端)
       2. 读写服务不会显式关闭表(可能导致 CDB 等非事务性表不一致)
       3. 建议使用支持事务的表(如 Berkeley DB)或专业数据库

配置参数
       在繁忙系统中,proxymap(8) 相关配置需执行
       "postfix reload" 才能及时生效。

       主要参数摘要(详见 postconf(5)):

       config_directory (参见 postconf -d 输出)
              Postfix 主配置文件的默认存储路径

       data_directory (参见 postconf -d 输出)
              可写数据文件(缓存、随机数等)目录

       daemon_timeout (18000 秒)
              进程处理单个请求的最长耗时(超时自动终止)

       ipc_timeout (3600 秒)
              进程间通信的超时阈值

       max_idle (100 秒)
              空闲进程自动终止的超时时间

       max_use (100)
              单个进程处理的最大请求数

       process_id (只读)
              进程 ID

       process_name (只读)
              进程名称

       proxy_read_maps (参见 postconf -d 输出)
              允许只读访问的表

       (Postfix 2.5+ 新增):
       proxy_write_maps (参见 postconf -d 输出)
              允许读写访问的表

       (Postfix 3.3+ 新增):
       service_name (只读)
              服务在 master.cf 中的名称

参见
       postconf(5) 配置参数
       master(5) 守护进程配置

参考文档
       DATABASE_README Postfix 表查询机制详解

许可
       本软件遵循 Secure Mailer 许可协议

历史
       该功能首次发布于 Postfix 2.0

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

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

                                                                   PROXYMAP(8)