Centos

嘗試設置郵件伺服器,無法使埠(25、587)工作

  • May 19, 2016

我到處搜尋,我真的很努力解決這個問題。我想我什麼都試過了。

背景資料

  • VPS 與 CentOS 6.7
  • 後綴 2.6.6
  • 鴿舍,amavis,mysql,fail2ban
  • 我已經與我的 VPS 提供商確認他們不會阻止任何埠。

我做過的事情

  • 刪除了庫存發送郵件
  • 我已經為完整的郵件解決方案安裝了 postfix、dovecot、mysql 等
  • 我只允許 imap、帶有 STARTTLS 的 smtp(埠 143 和 587)
  • 禁用 SSH 登錄,僅使用密鑰
  • 我可以接收郵件(通過埠 143)
  • 我可以從本地主機遠端登錄到兩個埠(587、25),我得到後綴問候
  • 嘗試連接到 587 或 25(郵件客戶端或 telnet)得到零響應,即連接超時

我嘗試過的事情

  1. 埠是否開放?是的,iptables:
Chain INPUT (policy DROP 11 packets, 1375 bytes)
pkts bytes target     prot opt in     out     source               destination
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
  25  2579 f2b-dovecot  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 110,995,143,993,587,465,4190
  68  7788 f2b-postfix  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,465,587
   0     0 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22
  25  2579 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
   7   600 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
23464 2662K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
  49  2940 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
   0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3915
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
   5   300 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 23235 packets, 2494K bytes)
pkts bytes target     prot opt in     out     source               destination

Chain f2b-dovecot (1 references)
pkts bytes target     prot opt in     out     source               destination
  25  2579 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-postfix (1 references)
pkts bytes target     prot opt in     out     source               destination
  68  7788 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-sshd (1 references)
pkts bytes target     prot opt in     out     source               destination
   0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
  1. postfix 是否監聽埠 587?是的。它只在本地主機上收聽嗎?不,任何主機。

這是netstat:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      917/httpd
tcp        0      0 127.0.0.1:4190              0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 127.0.0.1:24                0.0.0.0:*                   LISTEN      749/dovecot

這裡也是 postfix/main.cf,以防萬一:

# Enable both IPv4 and/or IPv6: ipv4, ipv6, all.
inet_protocols = ipv4

# Enable all network interfaces.
inet_interfaces = all

3)您是否正確強制安全連接?據我所知,是的,這是 postfix/master.cf:

# Submission, port 587, force TLS connection.
submission inet n       -       n       -       -       smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o content_filter=smtp-amavis:[127.0.0.1]:10026
  1. smtpd 限制呢?似乎還可以:
# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_non_fqdn_helo_hostname
   reject_invalid_helo_hostname
   check_helo_access pcre:/etc/postfix/helo_access.pcre

5)後綴甚至工作正常嗎?

是的,登錄伺服器並從控制台發送測試郵件有效,另一端收到電子郵件,即:

echo "Test mail from postfix" | mail -s "Test Postfix" user@something.com
  1. 在埠 587 上連接時會發生什麼?

顯然,什麼都沒有。如果我嘗試遠端登錄到任何隨機埠,我至少會得到一些東西。例如,嘗試遠端登錄到埠 666(未打開)不會對客戶端產生任何回复,但至少我在 tcpdump 中得到了一些資訊:

15:22:20.305697 IP xxx > xxx.com.mdqs: Flags [S], seq 3195304468, win 8192, options [mss 1352,nop,wscale 8,nop,nop,sackOK], length 0

當 tcpdumping 埠 587 時,嘗試 telnet 到它時絕對沒有任何反應。

我還缺少什麼?

以上所有內容都耗盡了我對我仍然可以嘗試的事情的了解。我已經設法將其確定為我的埠 587 被某些東西完全封鎖了。正如我所說,我的 VPS 提供商確認他們根本沒有阻止任何埠。我已經嘗試過 25 埠,但情況相同。

我唯一能看到的另一件事是,我在設置伺服器時以某種方式阻止了這些埠,但我不記得是否是這種情況,我不知道如何測試。

我真的很感激你能給我的任何幫助。事實上,我正在為幫助我解決這個問題的人買啤酒,我已經浪費了兩天時間,而且開始變得非常煩人。

Reachergilt,歡迎來到舊金山,感謝您提出的第一個問題。您可能會覺得我們救了您,但老實說 - 您已經完成了所有繁重的工作,並且非常系統地介紹了它。帶著這樣的法醫心態,我希望你能在這些地方呆一段時間。

tcpdump輸出尤其令人討厭。它毫無疑問地證明您的連接嘗試甚至沒有到達您的伺服器,這免除了伺服器的防火牆、postfix綁定以及伺服器端的所有其他內容。

有了該指針,您就離開並確認您的出站連接被阻止,因此您的測試永遠不會到達您的伺服器。25 個(在較小程度上是 587 個)被阻止從現代網路出站是相當(令人沮喪的)正常的,因為發送垃圾郵件的殭屍網路使用它們。

無論如何,您現在很高興您的新郵件伺服器能夠像宣傳的那樣工作,這很好。

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