Linux

Linux - Postfix - ISP 在埠 25 上阻止外發電子郵件

  • October 10, 2017

我將從最重要的開始 - 我已經閱讀/觀看了大量關於此的手冊、教程、論壇和建議,但我仍然覺得我不了解整個電子郵件系統的重要內容,但同時 - 一些非常簡單和小的。

  • 我在 Linode 上購買了 VPS 伺服器;
  • 我已經為郵件系統安裝並配置了 postfix、dovecot 服務;
  • 我已經為發送和接收郵件正確配置了 DNS(SPF、DKIM、DMARC、HELO、rDNS、授權給 IP 和主機名的伺服器 - 所有這些都已成功配置並通過測試);
  • 伺服器未被任何電子郵件垃圾郵件過濾器公司列入黑名單。

後綴配置(主要設置):

main.cf

mail_owner = postfix
myhostname = mail.mywebsite.com
mydomain = mywebsite.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
smtpd_banner = $myhostname ESMTP
sendmail_path = /usr/sbin/sendmail.postfix

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
broken_sasl_auth_clients = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_key_file = /path/to/ssl/server.key
smtpd_tls_cert_file = /path/to/ssl/server.crt
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
smtp_host_lookup = dns, native

我沒有配置使用任何中繼伺服器,因為我認為該伺服器應該能夠自行發送電子郵件。

master.cf

smtp      inet  n       -       n       -       -       smtpd
 -o smtpd_tls_auth_only=yes
 -o smtpd_tls_security_level=none
 -o smtpd_sasl_auth_enable=no

submission     inet  n       -       n       -       -       smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_enforce_tls=yes
 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
 -o smtpd_sasl_tls_security_options=noanonymous
 -o smtpd_sasl_security_options=noanonymous,noplaintext
 -o milter_macro_daemon_name=ORIGINATING
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth

smtps     inet  n       -       n       -       -       smtpd
 -o smtpd_tls_wrappermode=yes
 -o syslog_name=postfix/smtps
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_tls_auth_only=yes
 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
 -o smtpd_sasl_security_options=noanonymous,noplaintext
 -o smtpd_sasl_tls_security_options=noanonymous
 -o milter_macro_daemon_name=ORIGINATING

policy unix - n n - 0 spawn user=nobody argv=/bin/python /usr/libexec/postfix/policyd-spf

問題 -

我的外發電子郵件很少被 ISP 阻止在埠 25 上。關於這個案例,我有很多話要說:

  • 我正在使用外部軟體(Apple Mail)通過 mail.mywebsite.com 連接到我的 SMTP 伺服器,並且在那裡我專門配置為使用埠 587 而不是 25,但我收到的返回電子郵件仍然表明電子郵件已在埠 25 上被阻止我完全不明白;
  • 我已經測試過我的伺服器的防火牆沒有阻止任何這些埠;
  • 我注意到,只有當我將這些外發電子郵件發送到一個特定域時,它們才會被阻止。例如,當我向Google郵件伺服器(或到目前為止的其他伺服器)發送電子郵件時,一切正常 - 電子郵件發送出去,然後通過垃圾郵件箱進入收件箱;
  • 我可以看到 ISP 公司(它阻止了傳出的電子郵件)是發送電子郵件時電腦所在的那個公司,它不是我也無法理解的 Linodes 網路提供商 - 感覺就像電腦試圖通過電腦的郵件伺服器而不是通過我的 Linode 的 VPS 郵件伺服器發送電子郵件;

問題 - 如何更新我的伺服器和/或 postfix 服務以防止我的外發電子郵件被 ISP 阻止?

額外的 -

  • 我已經讀過這種情況通常是郵件伺服器是基於家庭的而不是 VPS 時,這不是我的情況。我正在使用VPS。
  • 我知道這個話題已經在論壇上多次討論過,但這些配置仍然存在一些問題,不僅對我,對開發者社區的很多人也是如此。我希望這篇文章和正確答案將比其他人更簡單地描述和解​​釋,這不會使這個問題變得無用。

更新 - 退回電子郵件的拒絕信範例:

This is the mail system at host mail.mywebsite.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                 The mail system

<phi@receiveremail.com>: connect to
  cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out
Reporting-MTA: dns; mail.mywebsite.com
X-Postfix-Queue-ID: 9004B2089
X-Postfix-Sender: rfc822; support@mywebsite.com
Arrival-Date: Mon,  2 Oct 2017 11:14:25 +0200 (CEST)

Final-Recipient: rfc822; phi@receiveremail.com
Original-Recipient: rfc822;phi@receiveremail.com
Action: failed
Status: 4.4.1
Diagnostic-Code: X-Postfix; connect to
  cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out
Return-Path: <support@mywebsite.com>
Received: from [10.25.80.102] (unknown [81.92.27.224])
   (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
   (No client certificate requested)
   by mail.mywebsite.com (Postfix) with ESMTPSA id 9004B2089
   for <phi@receiveremail.com>; Mon,  2 Oct 2017 11:14:25 +0200 (CEST)
DMARC-Filter: OpenDMARC Filter v1.3.2 mail.mywebsite.com 9004B2089
Authentication-Results: mail.mywebsite.com; dmarc=fail (p=none dis=none) header.from=mywebsite.com
Authentication-Results: mail.mywebsite.com; spf=fail smtp.mailfrom=support@mywebsite.com
DKIM-Filter: OpenDKIM Filter v2.11.0 mail.mywebsite.com 9004B2089
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mywebsite.com;
   s=default; t=1506935665;
   bh=iIf8iBaIOhXI2dMpT9tm3bYRnKMjiK49NsVTB66/1aQ=;
   h=From:Subject:Date:References:To:In-Reply-To:From;
   b=hZFiYO9NE09XtWTa7mxOq+W8s9aajWQVV9e4SY8/XIv3qX9YjULv1rBqmyUfkqKz0
    L2q8GSXBJr6ipxQsnoPCKMp7yy05rOu6L5dMyh5XndvEve+w3YkHhisy+unCM69Dyh
    M6dPAebLlo1AcF/B0AHqmskqnjvLAj03aBtwF+5E=
From: "Mywebsite.com" <support@mywebsite.com>
Content-Type: multipart/alternative; boundary="Apple-Mail=_E368298F-D51E-458B-AC0A-4284381C761C"
Message-Id: <C36F662F-74EB-4953-A032-645BD28283F9@mywebsite.com>
Mime-Version: 1.0 (Mac OS X Mail 9.0 \(3094\))
Date: Mon, 2 Oct 2017 11:14:24 +0200
References: <c2b741d3a1cd4352a8a75768833a4e33@HQ-MBX-01.receiveremail.com>
To: Per Hildebrand <phi@receiveremail.com>
In-Reply-To: <c2b741d3a1cd4352a8a75768833a4e33@HQ-MBX-01.receiveremail.com>
X-Mailer: Apple Mail (2.3094)

更新 2 -

在查看了多封退回電子郵件的拒絕信後,我注意到其中的某些行在某一時刻發生了變化(那是我不斷從論壇添加更新以防止阻止外發電子郵件的時候)。從那一刻起,錯誤表明由於連接超時,電子郵件在 cluster5.eu.messagelabs.com 中被阻止。

解決方案 -

為了解決 VPS 伺服器上埠 25 上被阻止的電子郵件的問題,只需確保伺服器已完全授權,DNS 設置正確並且電子郵件已使用所有必要的證書進行簽名。以下是帶有郵件系統的健康伺服器的所有必要任務列表:

  • 將 SPF 記錄添加到伺服器的 DNS;
  • 在外發郵件中添加 DKIM 簽名;
  • 將 DMARC 記錄添加到您伺服器的 DNS;
  • 正確設置 HELO、rDNS 記錄;

您可以在不同的“垃圾郵件測試服務”(例如mail-tester.com網站)中檢查這些更新的實施結果和進度。

關於在 cluster5.eu.messagelabs.com 服務中阻止傳出電子郵件的最新問題:

前面提到的 mail-tester.com網站還提供了在檢查黑名單的不同垃圾郵件服務中檢查伺服器主機名和 IP 的功能。如果這些服務告訴您您的伺服器沒有被列入任何垃圾郵件黑名單,那麼這並不意味著 100% 真實。這是我的情況。

messagelabs.com(現在:symantec.com)通常不會在這些垃圾郵件過濾器檢查中列出,因此您的測試人員會告訴您電子郵件不會在任何垃圾郵件過濾器中被阻止。但顯然有一些郵件公司在讓電子郵件進入郵箱之前使用這項服務 (messagelabs.com) 作為垃圾郵件測試。這意味著您必須確保您的伺服器的 IP/主機名沒有在他們的黑名單中監聽。您可以通過命令行輸入伺服器並執行命令來檢查它:

telnet cluster5.eu.messagelabs.com 25

如果您收到連接超時,則意味著您的伺服器可能在他們的服務中被列入黑名單。

要從 messagelabs.com 服務黑名單中刪除您的伺服器,您必須執行以下步驟:

  • 確保您的伺服器發出的郵件不被視為垃圾郵件(查看此解決方案的開頭);
  • 訪問 messagelabs.com (symantec.com) 網站並進入“IP 信譽調查”頁面,檢查您的伺服器是否仍被視為發送垃圾郵件。使用查找表單來完成。這是連結
  • 如果您發現您的伺服器被認為是清除垃圾郵件,請在他們的論壇上發帖,從他們的黑名單中刪除您的特定 IP/主機名。

提示 -

如果您發現自己遇到這樣的問題,請始終從使用者在這篇文章中的“barrycarter”回答中給出的說明開始。它將幫助您更快地確定郵件被阻止的部分。多虧了他的回答,我更快地理解了問題實際上隱藏在哪裡(因此我將他的答案標記為正確的答案)。

我的想法:

  • 在 VPS 上,嘗試類似host -t mx xyz.com的操作,當你得到類似的結果時mail.xyz.com,執行類似的操作ncat mail.xyz.com 25,甚至telnet mail.xyz.com。這將測試事情是否在低得多的水平上執行。
  • 在您的家用機器上,嘗試ncat my-vps-server 25確認它失敗,然後ncat my-vps-server 587確保它正常工作。
  • 當您的 VPS 嘗試連接到 SMTP 埠 25 上的遠端伺服器時,您收到的錯誤消息就cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out來了。它與您的家用電腦如何連接到您的 VPS 無關。
  • 我自己的 ghetto 解決方案(有效,但醜陋):sudo ssh -L 25:127.0.0.1:25 user@yourvps.com在您機器的 25 埠和 VPS 的 25 埠之間創建一個 ssh 隧道。

引用自:https://serverfault.com/questions/877383