xpt*_*xpt 6 networking linux email sendmail ubuntu
出于安全原因sendmail,默认配置为接受来自本地系统 (127.0.0.1) 的连接,以避免打开邮件中继问题。但,
如何强制 sendmail 接受来自 Internet 的邮件?
http://www.cyberciti.biz/tips/sendmail-is-only-accepting-connections-from.html 上的文章说,Addr=127.0.0.1从
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)
到
DAEMON_OPTIONS(`Port=smtp,Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)
将“强制接受来自任何主机的连接”。我已经这样做了:
$ grep smtp /etc/mail/sendmail.mc
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp')dnl
MAILER(`smtp')dnl
Run Code Online (Sandbox Code Playgroud)
但是,看起来我仍然无法接受来自 Internet 的传入电子邮件。所以按照moonpoint的建议将其注释掉:
$ grep smtp /etc/mail/sendmail.mc
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
dnl DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp')dnl
MAILER(`smtp')dnl
% make
Updating databases ...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/databases...
Creating /etc/mail/relay-domains
# Optional file...
Updating Makefile ...
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Creating /etc/mail/Makefile...
Updating sendmail.cf ...
The following file(s) have changed:
/etc/mail/sendmail.cf /etc/mail/local-host-names
** ** You should issue `/etc/init.d/sendmail reload` ** **
% /etc/init.d/sendmail reload
* Reloading Mail Transport Agent (MTA) sendmail [ OK ]
Run Code Online (Sandbox Code Playgroud)
但是,我认为它没有按预期工作,因为以前至少我收到“中继被拒绝”错误,但是现在,当我尝试通过谷歌向我的系统发送电子邮件时,现在大约 10 分钟没有发生任何事情。尝试自己解决问题,我参考http://support.moonpoint.com/blog/blosxom/2015/04/04#smtp-telnet-commands并尝试使用telnet. 但立即,我收到“连接被拒绝”错误:
$ telnet xpt.mydomain.org 25
Trying 104.243.xx.xx...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
删除它dnl以便恢复到我以前得到的东西,我现在至少可以连接:
$ telnet xpt.mydomain.org 25
Connected to xpt.mydomain.org.
Escape character is '^]'.
220 mail.xpt.mydomain.net ESMTP Sendmail 8.14.4/8.14.4/Debian-2.1ubuntu4; Sun, 14 Jun 2015 22:16:13 -0400; (No UCE/UBE) logging access from: my.remote.domain
Run Code Online (Sandbox Code Playgroud)
如果我想接受来自互联网的电子邮件,我该怎么做?
更新:我已经将 sendmail 配置为我的 LAN 的邮件服务器,并认为我已经将 sendmail 配置为接受我在服务器上用于电子邮件的相关域名的电子邮件,但这是我得到的:
% sendmail -bv me@xpt.mydomain.org
me@xpt.mydomain.org... deliverable: mailer relay, host mail.myisp.com, user me@xpt.mydomain.org
Run Code Online (Sandbox Code Playgroud)
现在我知道它不是(实际上它是用我拥有的另一个动态 dns 名称配置的),所以我将其更改为 xpt.mydomain.org。现在看起来没问题:
% sendmail -bv me@xpt.mydomain.org
me@xpt.mydomain.org... deliverable: mailer local, user me
Run Code Online (Sandbox Code Playgroud)
但是,使用外部电子邮件帐户向我的系统发送电子邮件时,我得到了:
Delivery to the following recipient failed permanently:
me@xpt.mydomain.org
Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by the server for the recipient domain xpt.mydomain.org by xpt.mydomain.org. [104.243.xx.xx].
The error that the other server returned was:
550 5.7.1 <me@xpt.mydomain.org>... Relaying denied
----- Original message -----
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:date:message-id:subject:from:to:content-type;
bh=0rLnzRsn....
Run Code Online (Sandbox Code Playgroud)
好的,我很高兴垃圾邮件发送者不能使用我的 Sendmail 服务器进行电子邮件中继,但我也没有收到电子邮件。
那么如何在允许来自所有 LAN 主机的连接发送邮件和接收来自任何人的邮件的同时避免开放邮件中继问题呢?
更新 2:尝试自己进一步解决问题,我进一步推动了它,以使用telnet. 奇怪的是,我在使用时没有收到“中继被拒绝”错误telnet:
...
mail from: testing@example.com
250 2.1.0 testing@example.com... Sender ok
rcpt to: testing2@example.com
550 5.7.1 testing2@example.com... Relaying denied
rcpt to: me@xpt.mydomain.org
250 2.1.5 me@xpt.mydomain.org... Recipient ok
Data
354 Enter mail, end with "." on a line by itself
This is a test message.
.
250 2.0.0 t5F2ItI0008331 Message accepted for delivery
quit
221 2.0.0 mail.xpt.mydomain.net closing connection
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
所以现在一切正常。非常感谢月点!!!
谢谢
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 13.10
Release: 13.10
Codename: saucy
$ apt-cache policy sendmail-bin
sendmail-bin:
Installed: 8.14.4-2.1ubuntu4
Candidate: 8.14.4-2.1ubuntu4
Version table:
*** 8.14.4-2.1ubuntu4 0
500 http://us.archive.ubuntu.com/ubuntu/ saucy/universe amd64 Packages
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
附注。关于我为什么要这样做的更多信息——我想要做的就是让我的 sendmail 服务器能够接受来自 Internet 的邮件,供我个人使用。我曾多次尝试遵循这 5 个简单的步骤,
如何通过 5 个简单步骤在 Debian 上设置简单的邮件服务器
http://cnedelcu.blogspot.ca/2014/01/how-to-set-up-simple-mail-server-debian-linux.html
但最终,他们没有成功,我什至不知道出了什么问题。所以我认为最简单的方法是启用我的 sendmail 服务器。
您是否已将 sendmail 配置为接受您在服务器上用于电子邮件的相关域名的电子邮件?例如,如果您的域名是 example.com 并且系统上的有效电子邮件地址应该是 xpt@example.com,如果您sendmail -bv xpt@example.com从系统上的 root 帐户运行该命令,是否表明该电子邮件是可传递的并参考“邮件本地”和本地帐户?例如,您是否看到类似以下内容?
# sendmail -bv xpt@example.com
xpt@example.com... deliverable: mailer local, user xpt
Run Code Online (Sandbox Code Playgroud)
如果您将 sendmail 配置为接受相关域名的电子邮件,它将引用“mailer local”和一个本地帐户。
更新:您从sendmail -bv命令提供的输出向我表明您没有将 sendmail 配置为接受发送到 xpt.mydomain.org 的电子邮件。要让 sendmail 接受域名的电子邮件,您需要添加该域名 xpt.mydomain.org,/etc/mail/local-host-names然后您需要发出命令makemap hash /etc/mail/local-host-names < /etc/mail/local-host-names。不要担心您在发出命令时可能会看到的任何“LHS 无 RHS”消息。尝试一下,然后重新运行相同的sendmail -bv me@xpt.mydomain.org命令。当您重新运行该sendmail -bv me@xpt.mydomain.org命令时,您应该会看到对“mailer local”而不是“mailer relay”的引用,并且“user”后面应该跟一个本地帐户,而不是“me@xpt.mydomain.org”。请参阅获取 sendmail 以接受域电子邮件makemapsendmail -bv 命令。
更新 2:您引用了Sendmail 仅接受来自 localhost (127.0.0.1 IP)文章的连接,但也许您没有对以下行进行所需的更改/etc/mail/sendmail.mc:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)
您需要通过将“dnl”放在开头来注释掉该行。它应该类似于以下行:
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)
我没有添加文章建议的行来代替原始行,我只是将其注释掉,然后使用以下命令从 sendmail.mc 文件重建 sendmail.cf 文件,以便让 sendmail 接受发送的电子邮件通过运行 sendmail 的服务器之外的电子邮件客户端。
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Run Code Online (Sandbox Code Playgroud)
使用 m4 命令重建文件后,您需要重新启动 sendmail。这篇文章建议使用/etc/init.d/sendmail restart如果该命令不会在您的系统上重新启动 sendmail,例如,如果它产生No such file or directory message, tryservice sendmail restart或systemctl restart sendmail, 来代替。重新启动 sendmail 后,它应该接受系统上有效电子邮件地址的电子邮件,即您在 local-host-names 文件中列出的域。
您是否有可用于向系统上的某个地址发送电子邮件的外部电子邮件帐户,例如 Hotmail、Gmail 或其他电子邮件帐户?如果是这样,如果您发送到系统上的有效电子邮件地址,您现在会在退回的电子邮件中看到什么?退回的电子邮件中引用的错误是什么?
即使您正确配置了 sendmail,您也可能需要解决其他问题才能从 Internet 接收电子邮件。您声明您的防火墙规则配置正确。在运行 sendmail 的系统和 sendmail 服务器所在的局域网 (LAN) 上的任何外部路由器/防火墙上,您可能都需要适当的防火墙规则。对于与电子邮件服务器通信的外部电子邮件服务器,如果 LAN 上的路由器/防火墙使用网络地址转换 (NAT ),则需要将该设备配置为将端口转发连接到端口 25,即简单邮件传输协议 (SMTP)用于将电子邮件从一个电子邮件服务器传送到另一个,从防火墙/路由器传送到您的 sendmail 服务器的端口。
如果您有所需的防火墙规则和任何所需的端口转发设置,那么外部系统应该能够成功连接到 sendmail 服务器上的端口 25。您可以通过使用许多网站免费提供的众多端口检查服务之一来测试这是否可行,这将有助于缩小问题的根源。例如,您可以使用端口转发测试器. 如果您没有从您的服务器运行测试,您可能需要提供外部系统在尝试与您的服务器通信时将看到的 IP 地址,该地址将与您分配给它的 IP 地址不同,如果有您的服务器所在网络上的防火墙或路由器使用 NAT 将您的服务器与 Internet 分开。要查找外部系统将看到的地址,您可以使用许多免费服务中的任何一个,如果您访问提供该服务的实体的网站,这些服务将向您显示设备的外部可见 IP 地址。例如,您可以使用 Web 浏览器从 sendmail 服务器访问whatismyip.com。然后在端口转发测试器站点,您将使用该 IP 地址作为“远程地址”,并使用 25 作为端口号。当您单击“检查”时,您应该会看到“端口 25 已打开”,然后是您提供的 IP 地址,前提是您已正确配置了必要的防火墙规则和任何所需的端口转发。
您还可以在网络外的系统上使用telnet尝试连接到 sendmail 服务器上的端口 25。如果您有所需的防火墙规则和任何所需的端口转发,您应该会在您的服务器上看到来自 sendmail 的响应。如果您可以与 sendmail 服务器上的端口 25 建立连接,那么您就可以发出 SMTP 命令,让您尝试向服务器上的帐户发送测试邮件。例如,请参阅使用 SMTP 命令测试电子邮件传送。
如果您能够通过该方法成功发送电子邮件,那么您的电子邮件服务器可能没有适当的邮件交换器 (MX) 记录。假设您的 sendmail 服务器的完全限定域名是 example.com。如果有人使用 Hotmail、Gmail 或除您的电子邮件服务器之外的任何电子邮件服务器向您发送电子邮件,例如使用 xpt@example.com,其他电子邮件服务器将检查以查看指定的电子邮件服务器或服务器来处理电子邮件例子.com。它不一定是example.com。例如,您可以使用外部电子邮件提供商提供的电子邮件服务,比如 bigemailprovider.com。
您可以使用MX 查找服务来检查您的域的 MX 记录。只需输入您的域名并单击“MX 查找”。例如,这个链接将向您显示 gmail.com 的结果。如果您尝试从 sendmail 服务器向 gmail.com 地址发送电子邮件,您的服务器将执行类似的检查并看到类似的结果。Google 有许多电子邮件服务器,可以为 Gmail 用户接受来自其他服务器的电子邮件。您将看到具有不同首选项和 IP 地址的此类服务器的列表。您的服务器和其他人将首先尝试具有最低首选项的服务器。例如,优先级为 5 的 Gmail 服务器将在优先级为 10 的 Gmail 服务器之前尝试。如果您的服务器无法与优先级为 5 的 Gmail 服务器通信,则它会尝试优先级为 10 的 Gmail 服务器,也许尝试许多 Gmail 服务器在放弃之前。
如果您没有看到您的域的任何 MX 记录,那没关系。如果您使用的是 example.com 并且 example.com 不存在 MX 记录,则另一个电子邮件服务器将假定 example.com 的 IP 地址是它应该尝试发送电子邮件的位置。如果您看到 MX 记录指向除 sendmail 服务器的 IP 地址之外的其他 IP 地址,则您可能需要通过域名注册商提供的域名系统 (DNS) 设置网页修改您的域的 MX 记录,例如,您为您的服务器注册域名的公司。默认情况下,某些注册商会在您注册域时创建指向其电子邮件服务器的 MX 记录。您可以在 Unix、Linux、OS X 或 Microsoft Windows 系统上从命令行提示符手动执行相同的检查使用 nslookup 命令检查 MX 记录。例如,nslookup -querytype=mx gmail.com
| 归档时间: |
|
| 查看次数: |
13833 次 |
| 最近记录: |