自从我开始使用 Postfix virtual_alias_maps 将所有电子邮件转发到 gmail 后,我收到的垃圾邮件比我在本地投递邮件并使用 SpamAssassin/spamd 过滤时多得多。我已经用它smtpd_recipient_restrictions
来进行标准垃圾邮件过滤了。
smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unauth_pipelining,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client korea.services.net,
permit
有没有办法在转发之前让邮件通过 SpamAssassin 运行virtual_alias_maps
?
答案1
您目前没有描述如何进行 SA 过滤,但如果您目前没有通过它发送虚拟邮件,我假设您没有使用 content_filter,这是它通常连接的方式。从快速浏览来看,SpamAssassin wiki 似乎很好地涵盖了此设置:http://wiki.apache.org/spamassassin/IntegratedSpamdInPostfix
答案2
远程 MTA 通过 SMTP 向 Postfix 发送邮件。收件人列表是一系列 RCPT 命令。每个 RCPT 命令都会添加一个收件人地址。当 Postfix 在 virtual_alias_maps 中获取收件人地址时,它会用 virtual_alias_maps 查找的结果替换该地址。这发生在您的 smtpd(8) 进程中。
您可以选择如何连接您所选的垃圾邮件过滤机制。
您可以在扩展的收件人列表中使用 SpamAssassin。建议的机制是使用 content_filter。请参阅http://www.postfix.org/FILTER_README.html了解详情。最常推荐的过滤器是http://www.ijs.si/software/amavisd/
Mailscanner 存在问题,因为它直接查看队列文件,而不是使用标准机制。升级 Postfix 后,它可能会崩溃。
第二个不太推荐的选项是通过 SMTP 代理使用预排队过滤机制(http://www.postfix.org/SMTPD_PROXY_README.html)或通过 milter(http://www.postfix.org/MILTER_README.html)。
如果你只想过滤发送给特定收件人的邮件,请通过 check_recipient_access 使用 FILTER 目标。请参阅http://www.postfix.org/access.5.html
如果您想在原始地址上运行 SpamAssassin,我会使用 amavisd-new 的 content_filter 方法。使用 master.cf 条目中的 -ovirtual_alias_maps 将您的 virtual_alias_maps 放入重新注入 smtpd 中。您可能需要在 smtpd_recipient_restrictions 中添加 check_recipient_access 映射,以便对 main.cf 中的有效地址返回 OK。
答案3
高度依赖于您的操作系统和/或发行版,以及您想要以何种用户身份运行 SA 等等……
在 master.cf 中输入如下内容:
# aa.bb.cc.dd == your IP
# example.com == your hostname
aa.bb.cc.dd:smtp inet n - n - - smtpd
-o content_filter=spamassassin
-o myhostname=example.com
-o smtp_bind_address=aa.bb.cc.dd
# (note content_filter)
#
# -snip-
#
spamassassin unix - n n - - pipe
user=sa argv=/usr/bin/spamc -e /etc/alternatives/mta -oi -f ${sender} ${recipient}
# change 'user=sa' to whatever user you have setup.
# change '/etc/alternatives/mta' to whatever you're using to put
# mail back into the queue. (eg: /usr/local/sbin/sendmail )
# change /usr/bin/spamc to the location of your spamc binary, obviously. :)