问题现象描述
最近在配置Postfix+Dovecot邮件服务器时遇到一个典型问题:在本地可以通过telnet localhost 25正常连接并发送邮件,但从外部服务器尝试连接时却收到"421 Cannot connect to SMTP server"错误,伴随connect error 10060。
网络层检查
首先确认防火墙配置,当前iptables规则显示所有链都是ACCEPT状态:
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Postfix监听配置
关键检查项是Postfix的监听设置,在/etc/postfix/main.cf中需要确认:
inet_interfaces = all
inet_protocols = all
如果看到类似inet_interfaces = localhost
的配置,这就是问题的根源,它限制了Postfix只监听本地连接。
端口绑定验证
使用netstat命令检查25端口实际监听情况:
netstat -tulnp | grep :25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1234/master
理想状态应该显示0.0.0.0:25,如果看到127.0.0.1:25则说明配置有误。
SELinux因素排查
在CentOS/RHEL系统上,SELinux可能会阻止外部连接:
sestatus
getsebool -a | grep mail
setsebool -P smtpd_full_access on
完整配置示例
以下是经过验证可用的main.cf关键配置:
# 网络设置
inet_interfaces = all
inet_protocols = ipv4
# 安全限制
mynetworks = 127.0.0.0/8 192.168.1.0/24
smtpd_client_restrictions = permit_mynetworks,reject
# 启用TLS
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/mail.crt
smtpd_tls_key_file = /etc/ssl/private/mail.key
测试与验证
配置修改后执行:
postfix reload
telnet your.server.ip 25
EHLO test.com
应该能看到Postfix的欢迎信息和支持的SMTP命令列表。
高级调试技巧
如果问题仍然存在,可以启用详细日志:
# 在main.cf中增加
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id &
然后通过tail -f /var/log/maillog
实时查看连接尝试的详细日志。