ANVIL(8) ANVIL(8)
名称
anvil - Postfix 会话计数与请求速率控制服务
摘要
anvil [通用 Postfix 守护进程选项]
描述
Postfix anvil(8) 服务用于维护客户端连接数和请求速率的统计信息,
可防御以下两类客户端攻击行为:
1. 建立过多并发会话
2. 在可配置时间间隔内发送过多连续请求
本服务需在 Postfix master(8) 服务管理下运行。
下文中的 ident 参数表示(服务,客户端)组合标识。
该标识的具体语法由调用方定义,anvil(8) 服务本身不做限制。
连接数/速率控制
注册新连接需向 anvil(8) 发送请求:
request=connect
ident=标识字符串
服务返回响应包含:
1. 当前并发连接数
2. 单位时间内的连接速率
数据对应指定的(服务,客户端)组合:
status=0
count=数量
rate=速率值
注销连接需发送请求:
request=disconnect
ident=标识字符串
服务返回确认响应:
status=0
邮件速率控制
注册邮件投递请求需发送:
request=message
ident=标识字符串
服务返回指定组合的单位时间投递请求速率:
status=0
rate=速率值
收件人速率控制
注册收件人请求需发送:
request=recipient
ident=标识字符串
服务返回指定组合的单位时间收件人数量:
status=0
rate=速率值
TLS 会话协商速率控制
(Postfix 2.3 及以上版本支持)
注册新 TLS 会话请求(非缓存)需发送:
request=newtls
ident=标识字符串
服务返回指定组合的单位时间新 TLS 会话请求速率:
status=0
rate=速率值
仅查询不更新计数器的请求:
request=newtls_report
ident=标识字符串
返回速率数据同上。
认证速率控制
注册认证请求需发送:
request=auth
ident=标识字符串
服务返回指定组合的单位时间认证请求速率:
status=0
rate=速率值
安全机制
1. 运行环境隔离:
- 不进行网络通信
- 不与本地用户交互
- 支持 chroot 隔离环境
- 以低权限运行
2. 状态管理:
- 使用内存表存储近期客户端请求数据
- 不持久化存储(因系统库不适用于高频更新场景)
- 自动清理过期数据
3. 内存优化:
- 处理大量客户端时可能消耗较多内存
- 可通过缩短统计时间单位降低内存占用
诊断日志
日志输出方式:
- 记录至 syslogd(8)
- 或 postlogd(8)
统计报告:
- 服务退出时自动记录峰值数据
- 每隔 anvil_status_update_time 秒记录一次
- 包含:最大连接数/速率、对应客户端标识、发生时间
- 无速率限制的服务不进行统计
已知限制
1. NAT 环境问题:
- 经过地址转换的客户端会被视为同一客户端
- 可能导致误触发限制
2. 并发处理限制:
- 当前实现中,受限制的服务进程每次只能处理一个远程客户端
- 如上报多客户端,仅记录最后上报的客户端状态
3. 状态维护建议:
- 即使未显式限制连接数,也应注册 connect/disconnect 事件
- 确保速率统计数据的时效性
配置参数
参数加载:
- 低负载系统:配置变更自动生效(anvil 进程生命周期短)
- 高负载系统:需执行 postfix reload 加速生效
核心参数说明:
anvil_rate_time_unit (60s)
速率统计的时间单位(秒)
anvil_status_update_time (600s)
峰值数据记录间隔(秒)
通用参数:
config_directory
配置文件目录(main.cf/master.cf)
daemon_timeout (18000s)
进程超时时间(5小时)
ipc_timeout (3600s)
进程间通信超时(1小时)
max_idle (100s)
空闲进程存活时间
max_use (100)
进程最大请求处理数
运行时参数(只读):
process_id
进程ID
process_name
进程名称
syslog_facility (mail)
日志设施
syslog_name
日志名前缀
Postfix 3.3+ 新增:
service_name
master.cf 中定义的服务名
相关文档
smtpd(8) - SMTP 服务
postconf(5) - 参数配置
master(5) - 服务管理
参考指南
TUNING_README - 性能调优手册
授权协议
需随软件分发 Secure Mailer 许可证
版本历史
自 Postfix 2.2 版本开始提供
作者信息
Wietse Venema
IBM T.J. Watson 研究院
美国纽约州约克镇高地 704 号信箱,邮编 10598
Wietse Venema
Google 公司
美国纽约州纽约市第八大道 111 号,邮编 10011
ANVIL(8)