我正在运行带有 Postfix、Dovecot、Postgrey 和 spamassasin/spamd 的 Linux。
这是我的 main.cf
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
check_policy_service inet:127.0.0.1:10030
我使用 spamassasin 将垃圾邮件标头添加到 postfix 未捕获的其他电子邮件中,但如何让它拒绝?
答案1
您可以将 postfix 配置为使用 Spamassasin/Amavis 作为代理过滤器。这样可以防止退回:与 SMTP 远程端的连接将保持打开状态,直到垃圾邮件检查完成,并且 postfix 将以 OK 或 REJECTED 消息响应。这样,远程端将负责退回。
# master.cf
# mail inbound
smtp inet n - - - - smtpd
-o smtpd_proxy_filter=127.0.0.1:10024
-o smtpd_client_connection_count_limit=10
-o smtpd_proxy_options=speed_adjust
# spamassasin/amavis is listening to port 10024 and sending it's
# checked mail to port 10025
amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
# SMTP return (from amavis/spamassasin)
localhost:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_override_options=no_address_mappings
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
# main.cf
# for rejecting spam
header_checks = pcre:/etc/postfix/header_checks
# header_checks
/X-Spam-Level: \*{9,}/ REJECT Looks like spam to me.
如果您使用 Amavis 调用 spamassasin,您可以让 Amavis 为您拒绝邮件 - 可以使用 来配置拒绝阈值$sa_kill_level_deflt
。在使用 Amavis 时,在 SMTP 返回条目中,no_header_body_checks
添加。receive_override_options
答案2
一般情况下,您不想拒绝任何邮件。大多数垃圾邮件都有伪造的标头,因此人们可能会收到不属于他们的退回邮件,而您只会给这些人及其管理员带来麻烦(或者基本上是通过向邮箱发送大量不正确的退回邮件来自己制造垃圾邮件)。
更好的做法是保留垃圾邮件或将其放入垃圾邮件文件夹,以便用户在它实际上不是垃圾邮件的情况下仍然可以访问垃圾邮件,并且只需将您的邮件客户端设置为在邮件过期足够长的时间后删除该邮件,以便您确定不再需要它。
除此之外,请配置您的邮件服务器以建立第一道防线...您可以将其设置为使用 SPF,确保它严格遵守 RFC 等...如果您想更进一步,请让它检查 RBL 以拒绝黑洞列表中的邮件。这是强硬的,但是否要使用这些列表取决于您,因为它可能会定期阻止错误添加的服务器,但另一方面,电子邮件并不是人们认为的可靠的通信媒介。电子邮件可能会成功,也可能不会成功,如果某件事事关生死,请通过另一种媒介进行通信以验证收据...垃圾邮件发送者会毁了所有人。
答案3
最好的办法是简单地根据分数进行过滤。有时,一封重要的电子邮件会被 SA 拦截,而您不想永远丢失该电子邮件(而且最终用户会认为它永远不会被送达)。
在我的个人服务器上,分数高于 3.5 的邮件都会被发送到用户的垃圾邮件文件夹。这样邮件就会一直被发送,并且用户可以访问它。然后有一个 cronjob 会删除该文件夹中 3 周前的所有邮件。
答案4
当通过 milter 协议使用垃圾邮件过滤器时,您可以在 milter 过滤器之后进行额外的标头检查: http://www.postfix.org/header_checks.5.html
milter_header_checks(默认:空)
这些适用于使用 Milter 应用程序添加的标头。此功能在 Postfix 2.7 及更高版本中可用。