sendmail - 使用中继发送邮件(为什么它不起作用?)

sendmail - 使用中继发送邮件(为什么它不起作用?)

我正在尝试配置配置发送邮件使用一个中继。我已经尝试了几个过程,但我不知道为什么它不起作用,因为其他服务使用相同的中继并且它可以工作。

以下是我正在使用的安装过程。

我可以做什么来诊断发生的情况?可能出什么问题了?

谢谢!


安装与配置

运行以下命令来更新和安装...

yum -y update
yum -y install sendmail-cf
yum -y install m4
yum -y install cyrus-sasl-plain

创建用于存储身份验证文件的目录...

mkdir /etc/mail/authinfo
chmod 700 /etc/mail/authinfo

创建一个身份验证文件...

提示:该文件可以具有任何名称,例如“smtp-auth”。

read -r -d '' FILE_CONTENT << 'HEREDOC'
BEGIN
AuthInfo:smtp.my_domain.com.br "U:root" "I:my_user@my_domain.com.br" "P:my_password"

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" > "/etc/mail/authinfo/smtp-auth"

创建上面创建的身份验证文件的哈希映射文件...

enter code heremakemap 哈希 /etc/mail/authinfo/smtp-auth < /etc/mail/authinfo/smtp-auth

使用 SMART_HOST 配置 Sendmail...

将以下配置行添加到“MAILER(smtp)dnl”行之前的“sendmail.mc”配置文件中...

vi /etc/mail/sendmail.mc

内容...

define(`SMART_HOST', `smtp.my_domain.com.br')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo', `hash -o /etc/mail/authinfo/smtp-auth.db')dnl
MASQUERADE_AS(my_domain.com.br)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(my_domain.com.br)dnl

重新构建 sendmail 的配置...

make -C /etc/mail

启用并启动 sendmail 服务...

systemctl enable sendmail.service
systemctl restart sendmail.service

测试与输出

[root@localhost ~]# read -r -d '' EMAIL_CONTENT << 'HEREDOC'
> BEGIN
> From: my_user@my_domain.com.br
> To: recipient@recipient_domain.com
> Subject: Fail2ban test
> 
> Fail2ban test
> 
> END
> HEREDOC
[root@localhost ~]# echo -n "${EMAIL_CONTENT:6:-3}" | sendmail -Am -d60.5 -v recipient@recipient_domain.com
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, recipient_app.com, %0=recipient_app.com) => recipient_app.com. (0)
map_lookup(mailertable, recipient_app.com, %0=recipient_app.com) => NOT FOUND (0)
map_lookup(mailertable, .com, %0=.com, %1=recipient_app, %2=recipient_app) => NOT FOUND (0)
map_lookup(mailertable, ., %0=., %1=recipient_app.com) => NOT FOUND (0)
recipient@recipient_domain.com... Connecting to smtp.my_domain.com.br port 587 via relay...
220 a2-smithers5.uhserver.com ESMTP
>>> EHLO localhost.localdomain
250-a2-smithers5.uhserver.com
250-PIPELINING
250-SIZE 41943040
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN LOGIN PLAIN
250-AUTH=LOGIN PLAIN LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
map_lookup(macro, {TLS_Name}, %0={TLS_Name}, %1=smtp.my_domain.com.br) =>  (0)
map_lookup(access, TLS_Srv:smtp.my_domain.com.br, %0=TLS_Srv:smtp.my_domain.com.br) => NOT FOUND (0)
map_lookup(access, TLS_Srv:my_domain.com.br, %0=TLS_Srv:my_domain.com.br) => NOT FOUND (0)
map_lookup(access, TLS_Srv:com.br, %0=TLS_Srv:com.br) => NOT FOUND (0)
map_lookup(access, TLS_Srv:br, %0=TLS_Srv:br) => NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147.36.31, %0=TLS_Srv:200.147.36.31) => NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147.36, %0=TLS_Srv:200.147.36) => NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147, %0=TLS_Srv:200.147) => NOT FOUND (0)
map_lookup(access, TLS_Srv:200, %0=TLS_Srv:200) => NOT FOUND (0)
map_lookup(access, TLS_Srv:, %0=TLS_Srv:) => NOT FOUND (0)
map_lookup(authinfo, AuthInfo:smtp.my_domain.com.br, %0=AuthInfo:smtp.my_domain.com.br) => NOT FOUND (0)
map_lookup(authinfo, AuthInfo:200.147.36.31, %0=AuthInfo:200.147.36.31) => NOT FOUND (0)
map_lookup(authinfo, AuthInfo:, %0=AuthInfo:) => "U:my_user@my_domain.com.br" "I:my_user@my_domain.com.br" "P:brlight2012" "M:PLAIN" (0)
>>> AUTH PLAIN YWRtaW5AbGlnaHRiYXNlLmNvbS5icgBhZG1pbkBsaWdodGJhc2UuY29tLmJyAGJybGlnaHQyMDEy
235 2.7.0 Authentication successful
>>> MAIL From:<[email protected]> SIZE=97 [email protected]
550 5.7.1 Envio nao autorizado - Verifique o MX e/ou SPF do seu dominio
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(dequote, MAILER-DAEMON, %0=MAILER-DAEMON) => NOT FOUND (0)
map_lookup(host, my_domain.com.br, %0=my_domain.com.br) => my_domain.com.br. (0)
map_lookup(host, recipient_app.com, %0=recipient_app.com) => recipient_app.com. (0)
root... Connecting to local...
root... Sent
Closing connection to smtp.my_domain.com.br
>>> QUIT

笔记:“my_user@my_domain.com.br”帐户能够从其网络邮件向“recipient@recipient_domain.com”帐户发送电子邮件。

错误:“550 5.7.1 Envio nao autorizado - Verifique o MX e/ou SPF do seu dominio”(葡萄牙语)/“550 5.7.1 未经授权的发送 - 检查您域的 MX 和/或 SPF”(英语)。

答案1

  1. mc 文件需要“x”引号[已在问题的修订版本中修复]

    1. 您已部署标准建议以禁止通过未加密的 SMTP 连接发送“纯文本”(未加密)密码 [p中的标志confAUTH_OPTIONS]。

    2. 您的智能主机仅提供明文身份验证[请参阅回复AUTH中的行EHLO]它不提供升级到加密连接的功能[没有STARTTLS回复 EHLO]。

    3. 有效您的配置禁止通过未加密的 SMTP 连接发送未加密的密码,但您的智能主机不提供其他选项。

答案2

错误...

“550 5.7.1 Envio nao autorizado - Verifique o MX e/ou SPF do seu dominio”(葡萄牙语)/“550 5.7.1 未经授权的发送 - 检查您域的 MX 和/或 SPF”(英语)

...发生这种情况是因为我们使用的 SMTP 服务要求“信封发件人”与有效“发件人”相同。

为了解决这个问题,我们需要构建一个通用稳定数据库,将输入的发件人地址映射到所需的地址。

在我们的例子中,创建带有条目的文件“/etc/mail/genericstable” ,并在“/etc/mail/sendmail.mc”文件中root my_user@my_domain.com.br添加条目FEATURE(genericstable' 。hash -o /etc/mail/genericstable.db')dnl

为了更好地理解,下面是完整的过程。


Sendmail - 安装和配置

运行以下命令来更新和安装依赖项...

yum -y update
yum -y install sendmail-cf
yum -y install m4
yum -y install cyrus-sasl-plain

创建一个身份验证文件...

read -r -d '' FILE_CONTENT << 'HEREDOC'
BEGIN
AuthInfo:smtp.my_domain.com.br "U:root" "I:my_user@my_domain.com.br" "P:my_password"

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" > "/etc/mail/authinfo"

构建“通用”数据库以将输入发件人地址映射到所需地址(“信封发件人”)。

创建“genericstable”文件...

read -r -d '' FILE_CONTENT << 'HEREDOC'
BEGIN
root           my_user@my_domain.com.br

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" > "/etc/mail/genericstable"

使用“SMART_HOST”配置 Sendmail。

将以下配置行添加到“MAILER(smtp)dnl”行之前的“sendmail.mc”配置文件中...

vi /etc/mail/sendmail.mc

内容...

define(`SMART_HOST', `smtp.my_domain.com.br')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo', `hash -o /etc/mail/authinfo/smtp-auth.db')dnl
MASQUERADE_AS(my_domain.com.br)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(my_domain.com.br)dnl
FEATURE(`genericstable',`hash -o /etc/mail/genericstable.db')dnl

重新构建 sendmail 的配置...

make -C /etc/mail

启用并启动 sendmail 服务...

systemctl enable sendmail.service
systemctl restart sendmail.service

测试您的配置

read -r -d '' EMAIL_CONTENT << 'HEREDOC'
BEGIN
From: my_user@my_domain.com.br
To: recipient@recipient_domain.com
Subject: Fail2ban test

Fail2ban test

END
HEREDOC
echo -n "${EMAIL_CONTENT:6:-3}" | sendmail -Am -d60.5 -v recipient@recipient_domain.com

[参考文献:http://blog.achinthagunasekara.com/2015/08/how-to-configure-sendmail-to-work-with.html,https://access.redhat.com/discussions/2959431,https://docs.cloud.oracle.com/iaas/Content/Email/Reference/sendmail.htm,https://serverfault.com/a/574118/276753,https://serverfault.com/a/839476/276753,https://superuser.com/a/1448009/195840,https://tecadmin.net/sendmail-to-relay-emails-through-gmail-stmp/,https://www.bonusbits.com/wiki/HowTo:Configure_SendMail_to_Use_SMTP_Relay,https://www.sitepoint.com/community/t/email-mx-records-vs-spf-records/7947]


进一步的问题/加:为什么使用带有中继功能的 Sendmail?

sendmail最大的问题是很多垃圾邮件发送者喜欢用它来群发邮件而不需要域名,因此经常被拒绝。如果您有 SMTP,您可以通过它进行中继,这会有所帮助。

[参考: https://support.nagios.com/forum/viewtopic.php?f=7&t=28246]

相关内容