我試圖將 Postfix 設定為僅在郵件來自本地主機且僅在郵件發送到某個網域時才中繼郵件。但是,一旦我指定了中繼伺服器,所有內容(本地交付除外)都會到達那裡。我以為我的限制是錯誤的,所以我最終選擇了“拒絕一切”,但它仍然發生了。想知道是否mynetworks
繞過了一切,我未定義mynetworks
。仍然轉發一切。
此時,postconf -n
給予:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
我最初嘗試的是更像這樣的東西(展示不同之處):
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
我不知所措。沒有運輸表。後綴 2.11.0(Ubuntu 14.04)。
答案1
postfix 術語中的中繼伺服器是postfix 將所有非本地電子郵件傳遞到的伺服器(例如,內部公司網路中的postfix 會將公司的主要電子郵件伺服器定義為其中繼,因此它根本不會嘗試聯絡目標伺服器)。這是用於發送電子郵件的,由以下人員控制relayhost
指示。
Postfix 透過設定知道哪些網域是他的mydestination
指示。此清單中的網域將在本地傳送(如果它們具有正確的 MX 記錄)。
主辦地mynetworks
允許從任何地方發送電子郵件到任何地方。因此,您應該在此處僅設定您信任的網路(僅限本機或內部網路)。據說 postfix 將電子郵件從這些主機中繼到網路。這是預設設置,在v2.10中smtpd_relay_restrictions
(或之前)設定有該值。如果您從 postfix 配置中完全刪除,則參數將不會執行任何操作。smtpd_recipient_restrictions
permit_mynetworks
permit_mynetworks
mynetworks
指示relay_domains
控制 postfix 接受來自全世界的電子郵件的非本地域。當您的後綴是某個網域的備份 MX 時,通常會使用此選項。
因此,在您的情況下,配置應該為mynetworks
空(如果不可能為空,請使用您的網路中未使用的一些內部IP,例如 10.10.10.10)或者permit_mynetworks
從......中去除smtpd_client_restrictions
。
relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587
答案2
這就是我終於開始工作的了。關鍵是default_transport = error
,任何與繼電器不匹配的東西都會被彈回去。感謝@Marki555 讓我思考超越 smtpd 設定的問題。
default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
另一個很好的後綴偵錯提示:本地反彈訊息(即中繼立即拒絕)中仍然包含中繼主機的名稱,即使中繼主機沒有被觸及!
我也研究過master_service_disable = inet
,但有足夠的東西可以透過連接到 localhost:25 來處理本地郵件發送,這並不實用。