如果“rcpt to”與relay_domain不匹配,則拒絕電子郵件 - Postfix

如果“rcpt to”與relay_domain不匹配,則拒絕電子郵件 - Postfix

我的郵件伺服器目前在 mxtoolbox 中顯示為 Open Relay。

RCPT TO:目標:僅當顯示 example.com時才允許 SMTP 連接

RCPT TO:我應該對其進行哪些更改,以便它在知道不是時立即拒絕連接example.com。目前,我收到垃圾郵件並且我拒絕基於 的電子郵件check_recipient_access

測試電子郵件:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 <HOSTNAME> ESMTP Postfix (Debian/GNU)
ehlo test.com
250-<HOSTNAME>
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

現在的情況:

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok

期待:

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
REJECT

mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok

的輸出postconf -n

user@hostname:~$ sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
header_checks = pcre:/etc/postfix/header_checks
inet_interfaces = loopback-only
mailbox_size_limit = 0
mydestination = <hostname>, localhost.<domain>, localhost
mydomain = example.com
myhostname = <hostname>
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.32.247.0/24
myorigin = <hostname>
readme_directory = no
recipient_delimiter = +
relay_domains = example.com
relayhost = [10.32.247.125]:10000
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unauth_destination, reject_unknown_recipient_domain, permit
smtpd_sender_restrictions = check_recipient_access pcre:/etc/postfix/sender_access,  reject_unauth_pipelining,  reject_non_fqdn_recipient,  reject_unknown_recipient_domain,  permit_mynetworks,  reject_unauth_destination,  permit
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

詳細模式下的郵件日誌檔:http://pastebin.com/9q7f5DFp

我目前的情況:

電子郵件 --> Postfix 接受 --> 檢查標頭 --> 如果不屬於 example.com 則丟棄

預期的:

Email --> Postfix 檢查 RCPT TO: == example.com --> 如果不是則拒絕並且不進一步處理

答案1

這是您的 mail.log 中的關鍵行

NOQUEUE:discard:RCPT from localhost[127.0.0.1]: : 收件者位址觸發DISCARD動作;從= 到= 原型=ESMTP helo=

在 postfix 中,DISCARD表示 postfix 假裝接受電子郵件,但實際上它會將電子郵件發送到 /dev/null (換句話說,它會丟棄電子郵件)。因此,當您使用 telnet 檢查時,postfix 將回覆「好吧,我接受」。

答案2

開放中繼的定義是一個 smtp 伺服器,它允許任何未實體綁定到您的網路的人透過它發送郵件。因此,內部網路上的任何人都應該能夠透過該伺服器向其他 smtp 伺服器發送郵件,而無需進行身份驗證。然而,您並不想將這種能力擴展到全世界。通常情況下,所有的permit語句都會先完成,然後reject_unauth_destination我還沒有看到它以相反的方式完成,所以我不確定它是否有效。然而,你拒絕了你的設定中錯誤的東西。 reject_unknown_recipient_domain 在這裡並不真正適用,它是寄件者限制。 reject_unauth_destination 在這裡不執行任何操作,因為您使用許可證聲明允許所有內容。這就是為什麼許可證通常位於拒絕語句之前,這樣它就知道要拒絕什麼。至少這對我來說是有意義的。

smtpd_recipient_restrictions=permit_mynetworks、permit_sasl_authenticated、reject_unauth_destination

這意味著它將允許 mynetworks 中定義的任何網絡,並允許任何已透過 SSL/TLS 連接正確驗證的用戶,並拒絕其他所有網路。即不是一個開放的繼電器。

相關內容