我们使用高度定制配置的 postfix 2.7 和自定义 SMTPD(基于 qpsmtpd)进行垃圾邮件过滤。我们有一个新的要求,即通过我们的自定义 qpsmtpd 流程过滤 postfix 生成的退回邮件(不是为了内容过滤,而是为了相应地处理这些退回邮件)。
我们当前的配置(部分)如下所示:
主配置文件(仅显示定制):
2526 inet n - - - 0 cleanup
pickup fifo n - - 60 1 pickup
-o content_filter=smtp:127.0.0.2
我们的 smtpd 通过直接与清理守护进程对话,将消息注入到端口 2526 上的 postfix。自定义 pickup 命令指示 postfix 将所有本地生成的邮件(来自 cron、nagios 或其他自定义脚本)移交给我们的自定义 smtpd。
问题是,此配置不会影响 postfix 生成的退回邮件,因为它们不经过 pickup 守护进程。
我尝试将相同的 content_filter 选项添加到反弹守护程序命令中,但似乎没有任何效果:
bounce unix - - - - 0 bounce
-o content_filter=smtp:127.0.0.2
defer unix - - - - 0 bounce
-o content_filter=smtp:127.0.0.2
trace unix - - - - 0 bounce
-o content_filter=smtp:127.0.0.2
作为参考,这是我的主配置文件文件,以及:
biff = no
# TLS parameters
smtpd_tls_loglevel = 0
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
smtp_tls_security_level = may
mydestination = $myhostname
alias_maps = proxy:pgsql:/etc/postfix/dc-aliases.cf
transport_maps = proxy:pgsql:/etc/postfix/dc-transport.cf
# This is enforced on incoming mail by QPSMTPD, so this is simply
# the upper possible bound (also enforced in defaults.pl)
message_size_limit = 262144000
mailbox_size_limit = 0
# We do our own message expiration, but if we set this to 0, then postfix
# will try each mail delivery only once, so instead we set it to 100 days
# (which is the max postfix seems to support)
maximal_queue_lifetime = 100d
hash_queue_depth = 1
hash_queue_names = deferred, defer, hold
我还尝试将 internal_mail_filter_classes 选项添加到 main.cf,但也没有影响:
internal_mail_filter_classes = bounce,notify
我愿意接受任何建议,包括以不同的方式处理我们当前的内容过滤循环。
如果我的问题不清楚,请告诉我,我会尽力澄清。
答案1
在这种情况下,你做的太复杂了。这是简单的方法。
您需要在您的 中包含这个(附加的)main.cf
:
notify_classes = resource, software, bounce, 2bounce
bounce_notice_recipient = [email protected]
2bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps #or another file. See below.
在/etc/postfix/transport_maps
投入
[email protected] smtp:127.0.0.2:25
然后postmap /etc/postfix/transport_maps
。之后postfix reload
或重新启动 Postfix。
这将通知[电子邮件保护]所有退回邮件的用户,由于据说该用户是通过 127.0.0.2:25 传输的,因此您可以通过该服务器获取所有这些邮件。根据您的环境替换地址/IP/端口。