Centos

postfix smtp 連接超時,為什麼?

  • March 3, 2015

CentOS 7 Web 伺服器安裝了 postfix、dovecot 和 mailx。我已經能夠與伺服器建立 IMAP 連接,以便使用遠端 Thunderbird 客戶端閱讀收件箱郵件,但我無法建立 SMTP 連接以從 Thunderbird 發送電子郵件。當我進行取證時,我發現嘗試的 SMTP 連接超時。 如何解決連接超時的問題,以便我可以通過伺服器從 Thunderbird 發送電子郵件?

到目前為止,我的取證結果是:

hostname在伺服器終端輸入返回mydomain.com

nano /usr/lib/firewalld/services/smtp.xml表示 smtp 埠為 25

smtp 服務在公共區域中被啟動,因為firewall-cmd --list-all結果:

public (default, active)
 interfaces: enp3s0
 sources: 
 services: dhcpv6-client imaps openvpn smtp
 ports: 
 masquerade: yes
 forward-ports: 
 icmp-blocks: 
 rich rules: 

但是當我嘗試從我的 devbox 遠端登錄到遠端 CentOS 7 伺服器時,我得到以下結果。打字telnet mydomain.com 25導致:

Trying my.SERVER.ip.addr...
telnet: connect to address my.SERVER.ip.addr: Connection timed out

然後輸入telnet smtp.mydomain.com 25結果:

Trying my.SERVER.ip.addr...
telnet: connect to address my.SERVER.ip.addr: Connection timed out

此外,鍵入openssl s_client -CApath /etc/ssl/certs -starttls smtp -port 25 -host smtp.mydomain.com會導致:

socket: Connection timed out
connect:errno=110

同樣,打字openssl s_client -CApath /etc/ssl/certs -starttls smtp -port 25 -host mydomain.com也導致:

socket: Connection timed out
connect:errno=110

我鍵入nano /etc/postfix/main.cf開始檢查配置,但沒有找到與埠相關的任何內容。

編輯:

根據 FaheemMitha 的建議,我telnet mydomain.com 587從客戶那裡嘗試過,並得到No route to host了答复。我認為這是因為在 firewalld 中只為 smtp 開放了 25 埠。

因此,我想從遠端伺服器 mydomain.com 中嘗試 telnet。當我通過 ssh 登錄到遠端伺服器並輸入telnet localhost 25時,結果是:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix  

這使我懷疑 postfix 正在埠 25 上執行,但不知何故它無法接受外部連接。

編輯#2

根據@RedCricket 的建議,我跑了iptables -L. 由於結果很冗長,我將它們上傳到文件共享站點,您可以通過點擊此連結查看。

我也嘗試過iptables --flushfirewall-cmd --reload然後從上面重複 telnet 和 Thunderbird 測試,但我仍然收到連接超時錯誤。

我還能嘗試什麼?

我將整個文件上傳/etc/postfix/main.cf到一個文件共享網站。您可以通過點擊此連結閱讀它。

編輯#3

有效的電子郵件地址someone.else@some_other_domain.com 可以毫無問題地向me@mydomain.com 發送電子郵件。因此,作為測試,我讓我的遠端 Thunderbird 客戶端嘗試將電子郵件發送到 some.else@some_other_domain.com 作為本 OP 中上述工作的一部分。今天早上,作為測試電子郵件的結果,我在 Thunderbird 中收到了回復發件人的消息。我將此返回的消息解釋為至少有一條來自 Thunderbird 的測試消息進入 mydomain.com 上的 SMTP,但 mydomain.com 無法查找或以其他方式連接到 some_other_domain.com。這是消息:

This is the mail system at host mydomain.com.

I'm sorry to have to someone.elserm 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

<someone.else@some_other_domain.com>: Host or domain name not found. Name service error for
   name=some_other_domain.com type=MX: Host not found, try again

Reporting-MTA: dns; mydomain.com
X-Postfix-Queue-ID: 2C915811BD1C
X-Postfix-Sender: rfc822; me@mydomain.com
Arrival-Date: Mon, 23 Feb 2015 16:46:34 -0500 (EST)

Final-Recipient: rfc822; someone.else@some_other_domain.com
Action: failed
Status: 4.4.3
Diagnostic-Code: X-Postfix; Host or domain name not found. Name service error
   for name=some_other_domain.com type=MX: Host not found, try again

ForwardedMessage.eml
Subject: key enclosed
From: me@mydomain.com
Date: 02/23/2015 01:46 PM
To:    someone.else@some_other_domain.com

this is the body of the email  

因此,有時從我的遠端 devbox 到 mydomain.com 的連接似乎是關閉的,而在其他時候,從 mydomain.com 到 Internet 其餘部分的連接似乎是關閉的。

編輯#4

按照@derobert 的建議,我首先嘗試了從 devbox 到伺服器的兩個 telnet 命令,然後嘗試使用我的 devbox 上的 Thunderbird 客戶端從 me@mydomain.com 發送電子郵件,然後我在兩個伺服器上執行 tcpdump 命令devbox 和伺服器上。在 devbox 終端中鍵入tcpdump port 25會導致以下結果:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

監聽 tun0,連結類型 RAW(原始 IP),擷取大小 65535 字節^C 0 個數據包擷取 0 個數據包被過濾器接收 0 個數據包被核心丟棄

接下來,tcpdump在伺服器上輸入會產生如此多的輸出,結果會無限滾動,直到我輸入 Ctrl-C。所以我然後輸入tcpdump port 25並得到以下結果:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

出於好奇,我隨後tcpdump port 25在 devbox 和伺服器上同時再次輸入並保持打開狀態而不輸入Ctrl-C,我嘗試使用我的 devbox 上的 Thunderbird 客戶端從 me@mydomain.com 手動發送電子郵件。我仍然遇到相同的連接超時失敗,但打開tcpdump port 25命令沒有報告任何活動。Ctrl-C之後,當我在兩個終端上打字時,總數也歸零。

經過多次故障排除,我們確定客戶端的 ISP 阻止了傳出埠 25 (SMTP)。通過使用 Internet 上的隨機郵件伺服器測試站點並發現它可以很好地連接到郵件伺服器,證實了這一點。來自客戶端機器的 SMTP 數據包根本沒有到達(通過 確認tcpdump)。

解決方案是在不同的埠上重新配置 SMTP 偵聽器。465(基於 SSL 的 SMTP)和 587(郵件送出,RFC6409)是常用選項。

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