Email

sendmail - 使用中繼發送郵件(為什麼它不起作用?)

  • January 22, 2020

我正在嘗試將配置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 &lt;&lt; '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) =&gt; NOT FOUND (0)
map_lookup(host, recipient_app.com, %0=recipient_app.com) =&gt; recipient_app.com. (0)
map_lookup(mailertable, recipient_app.com, %0=recipient_app.com) =&gt; NOT FOUND (0)
map_lookup(mailertable, .com, %0=.com, %1=recipient_app, %2=recipient_app) =&gt; NOT FOUND (0)
map_lookup(mailertable, ., %0=., %1=recipient_app.com) =&gt; NOT FOUND (0)
recipient@recipient_domain.com... Connecting to smtp.my_domain.com.br port 587 via relay...
220 a2-smithers5.uhserver.com ESMTP
>&gt;&gt; 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) =&gt;  (0)
map_lookup(access, TLS_Srv:smtp.my_domain.com.br, %0=TLS_Srv:smtp.my_domain.com.br) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:my_domain.com.br, %0=TLS_Srv:my_domain.com.br) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:com.br, %0=TLS_Srv:com.br) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:br, %0=TLS_Srv:br) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147.36.31, %0=TLS_Srv:200.147.36.31) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147.36, %0=TLS_Srv:200.147.36) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:200.147, %0=TLS_Srv:200.147) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:200, %0=TLS_Srv:200) =&gt; NOT FOUND (0)
map_lookup(access, TLS_Srv:, %0=TLS_Srv:) =&gt; NOT FOUND (0)
map_lookup(authinfo, AuthInfo:smtp.my_domain.com.br, %0=AuthInfo:smtp.my_domain.com.br) =&gt; NOT FOUND (0)
map_lookup(authinfo, AuthInfo:200.147.36.31, %0=AuthInfo:200.147.36.31) =&gt; NOT FOUND (0)
map_lookup(authinfo, AuthInfo:, %0=AuthInfo:) =&gt; "U:my_user@my_domain.com.br" "I:my_user@my_domain.com.br" "P:brlight2012" "M:PLAIN" (0)
>&gt;&gt; AUTH PLAIN YWRtaW5AbGlnaHRiYXNlLmNvbS5icgBhZG1pbkBsaWdodGJhc2UuY29tLmJyAGJybGlnaHQyMDEy
235 2.7.0 Authentication successful
>&gt;&gt; MAIL From:&lt;root@localhost.localdomain&gt; SIZE=97 AUTH=root@localhost.localdomain
550 5.7.1 Envio nao autorizado - Verifique o MX e/ou SPF do seu dominio
map_lookup(dequote, root, %0=root) =&gt; NOT FOUND (0)
map_lookup(dequote, root, %0=root) =&gt; NOT FOUND (0)
map_lookup(dequote, MAILER-DAEMON, %0=MAILER-DAEMON) =&gt; NOT FOUND (0)
map_lookup(host, my_domain.com.br, %0=my_domain.com.br) =&gt; my_domain.com.br. (0)
map_lookup(host, recipient_app.com, %0=recipient_app.com) =&gt; recipient_app.com. (0)
root... Connecting to local...
root... Sent
Closing connection to smtp.my_domain.com.br
>&gt;&gt; QUIT

注意: “my_user@my_domain.com.br”帳戶能夠從其網路郵件向“recipient@recipient_domain.com”帳戶發送電子郵件。

錯誤: “550 5.7.1 未經授權的發送 - 檢查您的域的 MX 和/或 SPF”(英文)/“550 5.7.1 未經授權的發送 - 檢查您的域的 MX 和/或 SPF”(英文)。

錯誤…

“550 5.7.1 未經授權的發送 - 檢查您的域的 MX 和/或 SPF”(英文)/“550 5.7.1 未經授權的發送 - 檢查您的域的 MX 和/或 SPF”(英文)

…發生是因為我們使用的 SMTP 服務要求“信封發件人”與有效的“發件人”相同。

為了解決這個問題,我們需要建構一個genericstable 數據庫來將輸入的發件人地址映射到所需的地址。

在我們的例子中,使用條目創建文件“/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 &lt;&lt; '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}" &gt; "/etc/mail/authinfo"

建構一個“genericstable”數據庫以將輸入的發件人地址映射到所需的地址(“信封發件人”)。

創建“genericstable”文件…

read -r -d '' FILE_CONTENT &lt;&lt; 'HEREDOC'
BEGIN
root           my_user@my_domain.com.br

END
HEREDOC
echo -n "${FILE_CONTENT:6:-3}" &gt; "/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 &lt;&lt; '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_Relayhttps ://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 ]

  1. mc 文件需要 `x’ 引號

$$ fixed in revised version of the question $$ 2. 1. p您已部署標準建議以禁止通過未加密的 SMTP 連接 [ flag in confAUTH_OPTIONS] 發送“純文字”(未加密)密碼。 2. 您的智能主機僅提供純文字身份驗證 [參見回復AUTH行] ,但不提供升級到加密連接 [無回复] 。 EHLO``STARTTLS``EHLO 3. 實際上,您的配置禁止通過未加密的 SMTP 連接發送未加密的密碼,但您的智能主機沒有提供其他選項。

引用自:https://unix.stackexchange.com/questions/563031