为什么 postfix-spamassassin-dovecot 这么设置?

为什么 postfix-spamassassin-dovecot 这么设置?

我最近在我的邮件服务器中添加了 spamassassin,因为黑名单不够有效。

澄清一下:我使用 Postfix 作为 SMTP + Dovecot 作为 LDA,使用 postgrey 进行灰名单,使用 postfwd 进行速率限制。

要添加 Spamassassin,我使用指南:https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassassin尽管它有效,但我不明白为什么会这样。令我困扰的是master.cf:

smtp       inet  n       -       y       -       -       smtpd
-o content_filter=spamassassin

dovecot unix    -       n       n       -       -      pipe
  flags=DRhu user=virtual:virtual argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -m ${extension}

spamassassin unix -     n       n       -       -       pipe
user=debian-spamd argv=/usr/bin/spamc -f -e  
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

我不明白为什么突然涉及到sendmail。有没有办法更正确地设置这个?

这也是我的,postconf -n以防需要。

append_at_myorigin = yes
biff = no
broken_sasl_auth_clients = yes
default_destination_concurrency_limit = 1
delay_warning_time = 8h
disable_vrfy_command = yes
dovecot_destination_concurrency_limit = 1
dovecot_destination_recipient_limit = 1
enable_original_recipient = yes
local_destination_concurrency_limit = 1
mailbox_size_limit = 100000000
maximal_queue_lifetime = 6d
message_size_limit = 52428800
myhostname = REDACTED
myorigin = /etc/mailname
smtp_helo_name = REDACTED
smtp_use_tls = yes
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated
smtpd_delay_reject = no
smtpd_hard_error_limit = 10
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname
smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10040 permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unlisted_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_rbl_client zen.spamhaus.org=127.0.0.[2..11], reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, check_policy_service inet:127.0.0.1:10023
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unlisted_recipient, reject_unauth_destination, reject_unauth_pipelining
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = REDACTED
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain
smtpd_soft_error_limit = 5
smtpd_tls_cert_file = REDACTED
smtpd_tls_dh1024_param_file = /etc/ssl/dhparams.pem
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_key_file = REDACTED
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
strict_rfc821_envelopes = yes
tls_random_source = dev:/dev/urandom
virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_transport = dovecot

答案1

当商标非常成功时,它可以成为其最著名的事物的通用名称。/usr/sbin/sendmailLinux 和 Unix 系统中的命令也发生了非常相似的情况。

安装 Postfix 后,/usr/sbin/sendmail它实际上并不是 Sendmail,它只是 Postfix 的一个组件,提供与 Sendmail 相同的接口(即相同的选项和管道约定)。

Postfix 的设计初衷是替代 Sendmail。事实证明,许多程序都会通过/usr/sbin/sendmail使用众所周知的选项调用并将内容传输到邮件子系统来与邮件子系统交互。因此 Postfix 也必须支持这一点。

使用 Spamassassin 时,必须将邮件传递spamc给垃圾邮件检测。由于它将至少向邮件添加一些标头,表明已执行垃圾邮件检查及其结果(并且,如果邮件是垃圾邮件,则在邮件内容的开头显示通知),spamc因此必须传递该邮件返回 Postfix 进行最终交付。

请注意,Postfix 认为“管道”是运输方式,或者换句话说,如果消息发送到spamc,Postfix 认为此时其工作已完成。因此,经过垃圾邮件检查的邮件需要重新注入到 Postfix 的处理中 - 这就是该sendmail命令的作用。

content_filter关键字的作用比您想象的要少——它只是告诉 Postfix 将传入的消息传递smtpd给特定的传输方法。它不会自动期望返回任何内容:如果 content_filter 传输方法吞下消息而没有输出,则 Postfix 的工作就完成了。如果消息通过过滤器后还剩下任何内容,则过滤器的工作就是将其重新返回处理。

至少还有另一种方法可以实现同样的目标但它最终也会sendmail在垃圾邮件检查后使用重新注入邮件的命令。

如果您确定此 Postfix 只会处理传入的邮件,您可能可以配置spamc为将消息直接传递到 Dovecot。

答案2

不涉及sendmail。这只是一个后缀可执行文件,出于历史原因和兼容性而这样称呼它。

查看手册页:

SENDMAIL(1)                                       General Commands Manual 

NAME
       sendmail - Postfix to Sendmail compatibility interface

SYNOPSIS
       sendmail [option ...] [recipient ...]
[...]

编辑:(在您的评论后添加)

你可以用 dovecot LDA 来改变它,但它当然只适用于本地交付。您可以检查垃圾邮件以及外发电子邮件,但它们不适用于 dovecot。完整免责声明:我没有检查您的所有配置:)

相关内容