Postfix配置咨询:如何实现拒收特定发件人邮件同时留存邮件作为证据
嘿,这个需求完全可以实现!既留存骚扰邮件当证据,又给对方发退信来劝退,下面给你一步步拆解具体的配置方法:
核心思路
通过虚拟别名转发,把特定发件人的邮件同时送到两个目的地:一个是你的真实收件箱(留存证据),另一个是专门用来触发退信的虚拟地址(给对方返回投递失败的提示)。
具体配置步骤
1. 标记需要拦截的特定发件人
首先创建一个文件用来记录骚扰者的邮箱地址,比如/etc/postfix/spammer_list,内容格式如下:
spammer@example.com OK
把spammer@example.com替换成实际的骚扰者邮箱,每个地址一行。然后执行命令生成哈希表:
postmap /etc/postfix/spammer_list
2. 配置虚拟别名,实现邮件双转发
编辑你的虚拟用户表(比如/etc/postfix/virtual或者你正在用的virt-user-table),添加以下规则:
# 正常邮件只投递到你的真实收件箱 you@yourdomain.com you@yourdomain.com # 仅针对骚扰者的邮件,同时转发到真实收件箱和退信虚拟地址 /^(you@yourdomain.com)$/i ${1}, bounce-spammer@yourdomain.com, if=${lookup{$sender_address}hash:/etc/postfix/spammer_list}
把you@yourdomain.com替换成你的实际收件邮箱,bounce-spammer@yourdomain.com是我们用来触发退信的虚拟地址(可以随便命名,只要是你域名下的有效虚拟地址就行)。
然后更新虚拟别名的哈希表:
postmap /etc/postfix/virtual
3. 配置退信虚拟地址的行为
现在需要让bounce-spammer@yourdomain.com这个地址收到邮件时,自动返回一个永久投递失败的退信给发件人。我们可以用Postfix的transport_maps来实现:
创建
/etc/postfix/transport文件,添加一行:bounce-spammer@yourdomain.com error:5.1.1 User unknown这里的
5.1.1是标准的“收件人不存在”错误码,会让对方的邮箱服务器认为你的地址无效,从而停止投递。你也可以换成其他合适的错误码,比如5.7.0(投递失败)。生成transport的哈希表:
postmap /etc/postfix/transport确保你的
main.cf配置文件中包含以下参数(如果没有就添加):transport_maps = hash:/etc/postfix/transport virtual_alias_maps = hash:/etc/postfix/virtual # 或者你实际的virt-user-table路径
4. 重启Postfix使配置生效
最后执行命令重启Postfix服务:
systemctl restart postfix
验证效果
现在可以用骚扰者的邮箱发一封测试邮件到你的地址:
- 你会在真实收件箱收到这封邮件(留存证据)
- 骚扰者会收到一封来自你邮箱服务器的退信,提示“收件人不存在”或类似的投递失败信息
注意事项
- 确保你的Postfix服务器没有开启
bounce_queue_lifetime过短的设置,避免退信被过早丢弃 - 如果你用的是虚拟化邮箱(比如配合Dovecot),要保证虚拟别名的配置优先级正确,不会影响正常邮件投递
备注:内容来源于stack exchange,提问作者user490858

