You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Postfix/Dovecot环境中收发加密邮件的用户数量

如何统计Postfix/Dovecot环境中收发加密邮件的用户数量

嘿,这个问题我之前帮不少人解决过,结合你手里有/var/log/mail.log和Splunk的情况,咱们可以从两个方向入手来统计——毕竟是客户端用Enigmail/PGP加密的邮件,Postfix和Dovecot本身不会参与加密过程,所以得靠邮件的特征来识别。


一、直接分析/var/log/mail.log日志文件

首先得明确:客户端加密的PGP邮件会带有明显的特征,咱们可以通过这些特征定位到对应的邮件,再关联到收发用户。

1. 识别PGP加密邮件的核心特征

加密邮件通常会满足以下至少一个条件:

  • 邮件内容包含-----BEGIN PGP MESSAGE-----或-----END PGP MESSAGE-----标记
  • 邮件头带有Content-Type: application/pgp-encrypted字段
  • 邮件头包含Enigmail的专属标识,比如X-Enigmail-Version

2. 分步提取用户信息

第一步:定位带有PGP特征的邮件ID

先从日志里筛选出包含PGP特征的记录,提取对应的邮件ID(Postfix日志里的邮件ID一般是类似A1B2C3D4的字符串):

# 搜索包含PGP标记的日志行,提取邮件ID(假设邮件ID在第6列,实际可根据你的日志格式调整)
grep -i "pgp\|enigmail\|-----BEGIN PGP MESSAGE-----" /var/log/mail.log | awk '{print $6}'

第二步:关联邮件ID到具体用户

拿到邮件ID后,用它搜索对应的发件人和收件人信息:

# 替换成你拿到的邮件ID
grep "A1B2C3D4" /var/log/mail.log | grep -E "(from=<|to=<)"

第三步:统计唯一用户

如果要批量统计,可以把结果整理后去重:

# 提取所有发件人并去重统计
grep -i "pgp\|enigmail" /var/log/mail.log | grep "from=<" | sed 's/.*from=<\([^>]*\)>.*/\1/' | sort | uniq | wc -l

# 提取所有收件人并去重统计
grep -i "pgp\|enigmail" /var/log/mail.log | grep "to=<" | sed 's/.*to=<\([^>]*\)>.*/\1/' | sort | uniq | wc -l

二、用Splunk高效统计(更推荐)

既然日志已经同步到Splunk,用它的查询能力能更快完成统计,还能灵活过滤条件。

1. 基础查询:统计收发加密邮件的唯一用户

直接搜索带有PGP特征的日志,提取并统计唯一发件人/收件人:

index=mail sourcetype=postfix_log 
("-----BEGIN PGP MESSAGE-----" OR "application/pgp-encrypted" OR "X-Enigmail-Version")
| rex field=_raw "from=<(?P<sender>[^>]+)>"
| rex field=_raw "to=<(?P<recipient>[^>]+)>"
| stats dc(sender) as 加密邮件发送者总数 dc(recipient) as 加密邮件接收者总数

2. 进阶优化:排除无效数据

如果想排除用户给自己发的测试邮件,或者特定域名的用户,可以加过滤条件:

index=mail sourcetype=postfix_log 
("-----BEGIN PGP MESSAGE-----" OR "application/pgp-encrypted" OR "X-Enigmail-Version")
| rex field=_raw "from=<(?P<sender>[^>]+)>"
| rex field=_raw "to=<(?P<recipient>[^>]+)>"
| where sender != recipient AND NOT sender LIKE "%@your-internal-domain.com"
| stats dc(sender) as 有效加密发送者总数 dc(recipient) as 有效加密接收者总数

3. 补充提示

如果Splunk已经索引了完整的邮件内容(而不只是日志),可以直接搜索邮件内容里的PGP标记,结果会更准确:

index=mail sourcetype=email_content "-----BEGIN PGP MESSAGE-----"
| stats dc(sender) as 加密邮件发送者总数 dc(recipient) as 加密邮件接收者总数

备注:内容来源于stack exchange,提问作者GodAtum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 08:24:55