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