我到处都找过了,但还是很纠结。我想我几乎试过了所有方法。
背景信息
- 搭载 CentOS 6.7 的 VPS
- Postfix 2.6.6
- dovecot、amavis、mysql、fail2ban
- 我已经与我的 VPS 提供商确认他们没有阻止任何端口。
我做过的事
- 删除了库存的 sendmail
- 我已经安装了 postfix、dovecot、mysql 等,以获得完整的邮件解决方案
- 我只允许 imap、smtp 和 STARTTLS(端口 143 和 587)
- SSH 登录已禁用,仅使用密钥登录
- 我可以接收邮件(通过端口 143)
- 我可以从本地主机 telnet 到两个端口(587、25),并收到 postfix 问候语
- 尝试连接到 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
2) 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
4) 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)Postfix 还能正常工作吗?
是的,登录服务器并从控制台发送测试邮件有效,并且另一端收到了电子邮件,即:
echo "Test mail from postfix" | mail -s "Test Postfix" [email protected]
6)连接端口 587 时会发生什么?
显然什么都没有。如果我尝试 telnet 到任何随机端口,至少会得到一些结果。例如,尝试 telnet 到端口 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
当对 587 端口进行 tcpdump 时,尝试 telnet 到该端口时什么也没有发生。
我还缺少什么?
以上所有情况都已经超出了我所能尝试的所有方法。我已成功确定我的 587 端口被某些东西完全封锁了。正如我所说,我的 VPS 提供商确认他们没有封锁任何端口。我尝试了 25 端口,情况也是一样。
我能看到的唯一另一件事是,我在设置服务器时以某种方式阻止了这些端口,但我不记得是否是这种情况,也不知道如何测试。
我将非常感激您给予我的任何帮助。事实上,我会给能帮我解决这个问题的人买一杯啤酒,我已经在这上面浪费了两天时间,这开始变得非常烦人。
答案1
Reachergilt,欢迎来到 SF,感谢您的第一个问题。您可能觉得我们拯救了您,但说实话 - 你已经完成了所有繁重的工作,并且非常系统地进行了介绍。凭借这样的法医心态,我希望您能在这里待一段时间。
输出tcpdump
结果尤其令人震惊。它毫无疑问地证明了你的连接尝试根本无法到达你的服务器,从而免除了服务器防火墙、postfix
绑定和服务器端其他一切的责任。
带着这个指针,你离开了,并确认了你的出站连接被阻止,因此您的测试永远无法到达您的服务器。25 个(在较小程度上是 587 个)从现代网络出站被阻止是相当(令人沮丧的)正常的,因为垃圾邮件发送僵尸网络会使用它们。
无论如何,您现在很高兴看到您的新邮件服务器按照广告宣传的那样运行,这很好。