postfix smtp 連接超時,為什麼?
CentOS 7 Web 伺服器安裝了 postfix、dovecot 和 mailx。我已經能夠與伺服器建立 IMAP 連接,以便使用遠端 Thunderbird 客戶端閱讀收件箱郵件,但我無法建立 SMTP 連接以從 Thunderbird 發送電子郵件。當我進行取證時,我發現嘗試的 SMTP 連接超時。 如何解決連接超時的問題,以便我可以通過伺服器從 Thunderbird 發送電子郵件?
到目前為止,我的取證結果是:
hostname
在伺服器終端輸入返回mydomain.com
。
nano /usr/lib/firewalld/services/smtp.xml
表示 smtp 埠為 25smtp 服務在公共區域中被啟動,因為
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 --flush
,firewall-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)是常用選項。