MEMCACHE_TABLE(5) MEMCACHE_TABLE(5)
名称
memcache_table - Postfix memcache 客户端配置
概述
postmap -q "字符串" memcache:/etc/postfix/文件名
postmap -q - memcache:/etc/postfix/文件名 <输入文件
描述
Postfix 邮件系统使用可选表进行地址重写或邮件路由。这些表通常采用 dbm 或 db 格式。
此外,查找表也可以配置为 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_maps 或 proxy_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_maps 和 virtual_mailbox_maps(涉及系统权限和文件路径)
典型部署中 memcache 数据库允许任何能访问服务器的进程写入,而这些安全敏感表必须禁止非特权 postfix 用户写入。
作为 postscreen(8) 或 verify(8) 缓存使用时,需特别注意 backup 和 ttl 参数的配置(参见前文说明)。
参见
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)