【问题标题】:sendmail can not relay email to another serversendmail 无法将电子邮件中继到另一台服务器
【发布时间】:2017-08-28 06:48:15
【问题描述】:

我在 server1 和 server2 上都安装了 sendmail。它们使用相同的配置文件:sendmail.mc。我可以使用 PC 上的电子邮件客户端向/从同一服务器上的用户发送/接收邮件。但我无法向另一台服务器上的用户发送电子邮件。例如,我无法使用电子邮件客户端从 aaa@server1domain.com 向 bbb@server2domain.com 发送电子邮件。我已将我的 PC 的 IP 地址添加到 server1 上的 /etc/mail/access(连接:zz.zz.zz.zz RELAY)并重建了 access.db。查看/var/log/maillog,server1上的sendmail成功接受了来自PC的邮件,但连接server2时等待了很长时间

4 月 3 日 07:21:06 server1 sendmail[19771]: v33BKxfr019769: server1.xxxxx.com 上的 SMTP 传出连接

然后超时:

4 月 3 日 07:26:06 server1 sendmail[19771]:v33BKxfr019769:等待来自 server2domain.com 的输入超时。客户打招呼时

4 月 3 日 07:26:06 server1 sendmail[19771]: v33BKxfr019769: to=, ctladdr= (501/501), delay=00:05:04, xdelay=00:05:00, mailer=esmtp, pri =121178,中继=server2domain.com。 [yy.yy.yy.yy], dsn=4.0.0, stat=Deferred: 与 server2domain.com 的连接超时。

在 server2 上,日志是:

4 月 3 日 07:18:02 server2 sendmail[20121]: v33BI2Os020121: 分配的 id

4 月 3 日 07:18:02 server2 sendmail[20121]:NOQUEUE:从 [xx.xx.xx.xx] 连接

4 月 3 日 07:18:02 server2 sendmail[20121]: AUTH: available mech=ANONYMOUS, 允许 mech=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5

Apr 3 07:18:02 server2 sendmail[20121]: v33BI2Os020121: Milter: no active filter

4 月 3 日 07:23:02 server2 sendmail[20121]: STARTTLS=server, info: fds=6/4, err=5

4 月 3 日 07:23:02 server2 sendmail[20121]:STARTTLS=server,错误:accept failed=0,SSL_error=5,errno=0,retry=-1,relay=[xx.xx.xx.xx ]

4 月 3 日 07:23:02 server2 sendmail[20121]:v33BI2Os020121:断开级别 1

4 月 3 日 07:23:02 server2 sendmail[20121]:v33BI2Os020121:在后台,pid=20121

4 月 3 日 07:23:02 server2 sendmail[20121]: v33BI2Os020121: [xx.xx.xx.xx] 在连接到 MTA-SSL 期间未发出 MAIL/EXPN/VRFY/ETRN

我可以使用 openssl 命令成功地向 server1 上的 server2 发送电子邮件,并且不需要输入用户名/密码。 sendmail.mc 是:

divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl
define(`confDEF_USER_ID', ``8:12'')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confCRL', `/etc/pki/tls/certs/revoke.crl')
define(`confCLIENT_CERT', `/etc/pki/tls/certs/sendmail.pem')
define(`confCLIENT_KEY', `/etc/pki/tls/certs/sendmail.pem')
define(`confTO_IDENT', `0')dnl
FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
DAEMON_OPTIONS(`Family=inet, Port=465, Name=MTA-SSL, M=s')dnl
CLIENT_OPTIONS(`Family=inet')dnl
FEATURE(`accept_unresolvable_domains')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 465')
define(`ESMTP_MAILER_ARGS', `TCP $h 465')
MAILER(smtp)dnl
MAILER(procmail)dnl

两个 sendmail 都侦听端口 465。我怀疑问题与身份验证有关,但不知道原因。

请帮忙,谢谢!

采纳Andrzej A. Filip的建议,去掉sendmail.mc中的这两行后,server1上的日志出现如下错误:

4 月 3 日 13:02:25 服务器 sendmail[19927]: v33BKxfr019769: makeconnection (server2domain.com. [yy.yy.yy.yy]) 失败:连接被 server2domain.com 拒绝。 Apr 3 13:02:25 server sendmail[19927]: v33BKxfr019769: makeconnection (server2domain.com. [yy.yy.yy.yy]) 失败:连接被 server2domain.com 拒绝。 Apr 3 13:02:25 服务器 sendmail[19927]: v33BKxfr019769: to=, ctladdr= (501/501), delay=05:41:23, xdelay=00:00:01, mailer=esmtp, pri=301178,中继=server2domain.com。 [yy.yy.yy.yy], dsn=4.0.0, stat=Deferred: server2domain.com 拒绝连接。

server2 上没有记录任何消息。

我认为如果没有这两行,server1 上的 sendmail 将尝试通过端口 25 连接 server2,而不是 sendmail 正在侦听的端口 465。

【问题讨论】:

    标签: smtp sendmail emailrelay


    【解决方案1】:

    sendmail 和 OUTGOING smtps (465) 连接

    smtps (465) 在任何 SMTP 级别通信之前启动 SSL 会话。 AFAIR sendmail 本身不支持 传出 连接。
    删除以下两行,将您的 sendmail.mc 重新编译为 sendmail.cf,重新启动或(发送信号) HUP 你的 sendmail 守护进程。

    define(`RELAY_MAILER_ARGS', `TCP $h 465')
    define(`ESMTP_MAILER_ARGS', `TCP $h 465')
    

    【讨论】:

    • 感谢您的建议。但是出现了新的错误(包含在原始问题的末尾)。
    • 你能从 server1 远程登录 server2 上的 25 或 587 端口吗?你收到 smtp 问候信息吗? telnet server2domain.com 587 BTW FEATURE(no_default_msa) 关闭监听端口 587 上的连接。
    • 我无法从 server1 远程登录/openssl server2 上的端口 25 或端口 587。使用 netstat -antp,我发现 server1 上的 sendmail 连接到 server2 上的 465 端口,即使没有这两行。后来我把两台服务器上的FEATURE(no_default_msa)这行注释掉,把server1上两行的465端口改成587,就可以转发邮件了。似乎中继不能通过端口 465 完成,但可以通过 587 完成。但是,AFAIR,通过端口 587 的通信未加密且不安全。所以我想知道为什么它无法使用465端口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多