我最近在我的邮件服务器中添加了 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
sendmail 不涉及。那只是一个后缀可执行文件,出于历史原因和兼容性,它被这样调用。
查看手册页:
编辑:(在您的评论后添加)
您可以使用 dovecot LDA 更改它,但它当然只适用于本地交付。您可以检查垃圾邮件以及外发电子邮件,但它们不适用于 dovecot。完全免责声明:我没有检查您的所有配置 :)
当一个商标非常成功时,它可以成为它最知名的事物的通用名称。
/usr/sbin/sendmail
Linux 和 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。