MEMCACHE_TABLE(5)                                            MEMCACHE_TABLE(5)

名称
       memcache_table - Postfix memcache 客户端配置

概述
       postmap -q "字符串" memcache:/etc/postfix/文件名

       postmap -q - memcache:/etc/postfix/文件名 <输入文件

描述
       Postfix 邮件系统使用可选表进行地址重写或邮件路由。这些表通常采用 dbmdb 格式。

       此外,查找表也可以配置为 memcache 实例。要使用 memcache 查询,需在 main.cf 中将 memcache 源定义为查找表,例如:

           virtual_alias_maps = memcache:/etc/postfix/memcache-aliases.cf

       文件 /etc/postfix/memcache-aliases.cf 的格式与 Postfix main.cf 文件相同,其参数说明如下。

       Postfix memcache 客户端支持查询、更新、删除和序列(首项/下一项)操作。序列操作需要支持该操作的备份数据库。

MEMCACHE 主要参数
       memcache(默认:inet:localhost:11211)
              Postfix 连接的 memcache 服务器(注意:单数配置)。对于 TCP 服务器,需指定 "inet:" 后接主机名或 IP 地址、":" 及端口名称或编号。IPv6 地址需放在 "[]" 内。UNIX 域服务器则需指定 "unix:" 后接套接字路径。示例:

                  memcache = inet:memcache.example.com:11211
                  memcache = inet:127.0.0.1:11211
                  memcache = inet:[fc00:8d00:189::3]:11211
                  memcache = unix:/path/to/socket

              注意:要通过 proxymap(8) 服务访问 UNIX 域套接字,该套接字必须允许无特权的 postfix 用户访问。

       backup(默认:未定义)
              为 memcache 数据库提供持久化备份的可选 Postfix 数据库。当查询或修改持久化数据库中的信息时,Postfix memcache 客户端会同步更新 memcache 数据库。需指定 Postfix "类型:表" 格式的数据库。示例:

                  # 非共享的 postscreen 缓存
                  backup = btree:/var/lib/postfix/postscreen_cache_map

                  # 同一主机上进程共享的 postscreen 缓存
                  backup = proxy:btree:/var/lib/postfix/postscreen_cache_map

              远程 proxymap 服务器访问功能正在开发中。

              重要提示:
              1. 共享持久化的 postscreen(8)verify(8) 缓存时,除负责清理的实例外,其他所有 Postfix 实例都应禁用自动缓存清理(设置 *_cache_cleanup_interval = 0)。
              
              2. 多个表共享同一 memcache 数据库时,每个表都应使用 key_format 参数(见下文)在查询键前添加唯一标识字符串,否则 postscreen(8)verify(8) 的自动缓存清理可能失效。
              
              3. 通过 "proxy:" 访问备份数据库时,必须在 proxymap 服务器的 proxy_read_mapsproxy_write_maps 设置中指定完整的数据库名称(包含 "proxy:" 前缀)。

       flags(默认:0)
              随 memcache 更新一起存储的可选标记位。查询操作会忽略这些标记。

       ttl(默认:3600)
              memcache 更新的过期时间(秒)。

              注意事项:
              1. 将 memcache 表用作无持久化备份的 postscreen(8)verify(8) 缓存时,所有相关 Postfix 实例都应设置 *_cache_cleanup_interval = 0,并将 memcache 表的 ttl 值设为最大的 postscreen(8) *_ttl 或 verify(8) *_expire_time 值。
              
              2. 根据 memcache 协议规范,大于 30 天(2592000 秒)的值表示绝对 UNIX 时间戳,较小值表示相对于更新时间的存活期。

MEMCACHE 键参数
       key_format(默认:%s)
              Postfix memcache 客户端发送给 memcache 服务器的查询键和更新键的格式。默认情况下,这些键与 Postfix 应用程序传给 memcache 客户端的原始键相同。

              重要说明:
              1. key_format 不适用于 backup 数据库请求
              
              2. 多个表共享同一 memcache 数据库时,每个表都应在键前添加唯一前缀,否则 postscreen(8)verify(8) 的自动缓存清理可能失效。

              示例:
                  key_format = aliases:%s
                  key_format = verify:%s  
                  key_format = postscreen:%s

              key_format 参数支持以下 '%' 占位符:

              %%     替换为百分号字符 '%'
              
              %s     替换为 memcache 客户端的输入键
              
              %u     当输入键是 user@domain 格式时,替换为经过 SQL 转义的本地部分(用户名);否则替换为整个字符串。若用户名为空,则静默跳过查询(更新操作会跳过并警告)
              
              %d     当输入键是 user@domain 格式时,替换为域名部分;否则静默跳过查询(更新操作会跳过并警告)
              
              %[SUD] 大写形式与对应小写占位符功能相同
              
              %[1-9] 替换为域名中从右到左的第N部分。例如 [email protected] 中:
                         %1=com, %2=example, %3=mail。若域名不完整或层级不足,则静默跳过查询(更新操作会跳过并警告)

       domain(默认:无域名列表)
              该参数可显著降低数据库负载。需指定域名列表、文件路径或"类型:表"数据库。启用后,只有符合以下条件的查询才会执行:
              - 完全限定(含@符号)
              - 本地部分非空
              - 域名在指定列表中
              不符合条件的查询(如纯用户名、纯域名或@domain格式)会被静默跳过(更新操作会跳过并警告)。

              示例:
                  domain = example.com, hash:/etc/postfix/searchdomains

MEMCACHE 错误控制
       data_size_limit(默认:10240)
              memcache 回复数据的最大长度(字节)
              
       line_size_limit(默认:1024)
              memcache 回复单行的最大长度(字节)
              
       max_try(默认:2)
              命令失败后的最大重试次数(注意:当服务器无法连接时不重试)
              
       retry_pause(默认:1)
              重试间隔时间(秒)
              
       timeout(默认:2)
              命令发送和回复接收的超时时间(秒)

已知问题
       Postfix memcache 客户端不能用于以下安全敏感场景:
       - alias_maps(可能包含 |command 和 /file/name 等危险目标)
       - virtual_uid_maps, virtual_gid_mapsvirtual_mailbox_maps(涉及系统权限和文件路径)
       
       典型部署中 memcache 数据库允许任何能访问服务器的进程写入,而这些安全敏感表必须禁止非特权 postfix 用户写入。

       作为 postscreen(8)verify(8) 缓存使用时,需特别注意 backupttl 参数的配置(参见前文说明)。

参见
       postmap(1) Postfix 查询表管理器
       postconf(5) 配置参数

参考文档
       DATABASE_README Postfix 查询表概述
       MEMCACHE_README Postfix memcache 客户端指南

许可协议
       本软件需遵循 Secure Mailer 许可证条款分发。

历史版本
       memcache 支持功能随 Postfix 2.9 版本引入。

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

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

                                                             MEMCACHE_TABLE(5)