我们为许多托管域运行一个小型 postfix(和 dovecot)邮件服务器,使用虚拟别名映射并配置了 spamassassin。
最近,我们发现我们产生了一些反向散射;垃圾邮件发往不存在的电子邮件地址,并被退回给伪造的发件人。这显然会损害我们邮件服务器的声誉,也意味着我们代表垃圾邮件发送者发送垃圾邮件。
然后我想要做的是改变 postfix 的行为,这样,在 SMTP 事务期间拒绝邮件,而不是生成来自 MAILER-DAEMON 的退回电子邮件。
我尝试添加 local_recipient_maps (http://www.postfix.org/LOCAL_RECIPIENT_README.html),但这并没有什么区别。我认为这是因为我使用了 virtual_alias_maps(而且其他虚拟邮箱解决方案似乎也不适用于此)。
postconf -n 生成:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 0
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = verrotech.com
myhostname = mail.verrotech.com
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.domain.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.domain.com/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
谢谢。
答案1
经过一番研究,您的问题让我意识到我的邮件服务器也遇到了同样的问题,所以首先谢谢您。
其次,您应该注意,默认情况下,postfix 会阻止此类流量。在手册中smtpd_reject_unlisted_recipient:
smtpd_reject_unlisted_recipient(默认:是)
请求 Postfix SMTP 服务器拒绝收件人地址未知的邮件,即使没有指定明确的reject_unlisted_recipient访问限制. 这可以防止 Postfix 队列被无法投递的 MAILER-DAEMON 消息填满。
那么,为什么你会收到250 OK
目的地不明的邮件?因为这些行:
mydestination = $myhostname,localhost.$mydomain,localhost
virtual_alias_maps = hash:/etc/postfix/virtual
检查smtpd_reject_unlisted_recipient
目标邮件,但非常具体:
当地址与虚拟(5)别名或规范(5)映射匹配时,它始终被视为“已知”。
The recipient domain matches $mydestination, $inet_interfaces or $proxy_interfaces, but the recipient is not listed in $local_recipient_maps, and $local_recipient_maps is not null. The recipient domain matches $virtual_alias_domains but the recipient is not listed in $virtual_alias_maps. The recipient domain matches $virtual_mailbox_domains but the recipient is not listed in $virtual_mailbox_maps, and $virtual_mailbox_maps is not null. The recipient domain matches $relay_domains but the recipient is not listed in $relay_recipient_maps, and $relay_recipient_maps is not null.
由于您的mydestination
不包括您的$mydomain
(只有服务器名称和本地主机)并且您没有任何内容*_domains
,因此没有其他针对“已知”目的地的检查。
您只需添加:
虚拟别名域 = $mydomain
重新加载后缀。(如果我正确配置了您的邮件,并且您的所有邮件都采用“[电子邮件保护]“)
如果这不起作用,你可以尝试这个:
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,拒绝未经验证的收件人
注意:它将通过RCPT TO
命令检查目的地是否确实存在传入和传出消息。谨慎使用因为它会为每个新目的地建立额外的连接,并且需要一些时间来响应服务器处理的每封邮件(测试每个目的地可能需要几秒钟)。
答案2
这个答案并不完全是你想要的,但这是我根据自己的用例解决该问题的方法。
丢弃退回邮件:
在 /etc/postfix/main.cfg 中,我有:
2bounce_notice_recipient = devnull
bounce_notice_recipient = devnull
bounce_queue_lifetime = 0d
delay_warning_time = 0h
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
在 /etc/postfix/aliases 中,我有:
devnull: /dev/null
然后我运行:
postmap aliases
postfix reload
最终结果是反弹到 /dev/null。它可能无法捕获所有反弹,所以 YMMV。如果这对您有用,请告诉我。