Postfix

為什麼 postfix-spamassassin-dovecot 是這樣設置的?

  • March 28, 2018

我最近在我的郵件伺服器中添加了 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

當一個商標非常成功時,它可以成為它最知名的事物的通用名稱。/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。

引用自:https://unix.stackexchange.com/questions/433828