AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 661324
Accepted
Anentropic
Anentropic
Asked: 2015-01-22 09:38:25 +0800 CST2015-01-22 09:38:25 +0800 CST 2015-01-22 09:38:25 +0800 CST

Docker容器中的后缀不转发虚拟别名

  • 772

我正在尝试第一次配置 Postfix。我不需要邮箱,我只想要虚拟别名,转发[email protected] --> [email protected]

我的 Postfix 在 Digital Ocean 液滴上的 Docker 容器中运行。

我已经做到了:

$ postalias -q [email protected]
[email protected]

...从容器内部,即我的/etc/postfix/virtual文件正在工作。

此外,从液滴上的容器外部:

telnet example.com 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)

但在我自己的电脑上:

$ telnet example.com 25
Trying <droplet IP>...
telnet: connect to address <droplet IP>: Operation timed out
telnet: Unable to connect to remote host

我认为这是由 Digital Ocean 推荐mynetworks的配置设置(见下文)所导致的预期和正确的- 我不想托管“开放”SMTP 中继。

我有一个要example.com.设置的 MX 记录,我可以ping example.com很好地访问上面的网站。另外(从我的电脑):

$ host -t mx example.com
example.com mail is handled by 1 example.com.

所以看起来是对的。

但是,如果我发送一条测试消息[email protected]没有通过,并且我在 Postfix 日志中也看不到任何内容……我不知道它在什么时候失败了。

我不确定问题出在我的 Postfix 配置中还是在路由到容器中。

容器暴露端口 25(仅)并通过 Fig 运行

ports:
  - "25:25"

从液滴中的外壳:

$ netstat -tulpn | grep 25
tcp6       0      0 :::25                   :::*                    LISTEN      10680/docker-proxy

我/etc/postfix/main.cf的里面有这个:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = /etc/mailname, <container id>, localhost.localdomain, localhost, example.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
inet_protocols = ipv4

我不太清楚myhostname(最初设置为<container id>)mydestination和virtual_alias_domains

更新

来自http://mxtoolbox.com/SuperTool.aspx的输出

Connecting to <server IP>

220 example.com ESMTP Postfix (Ubuntu) [733 ms]
EHLO MXTB-PWS3.mxtoolbox.com
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN [714 ms]
MAIL FROM: <[email protected]>
250 2.1.0 Ok [722 ms]
RCPT TO: <[email protected]>
454 4.7.1 <[email protected]>: Relay access denied [715 ms]

MXTB-PWS3v2 4006ms

更新
正如@masegaloeh 帮助我发现的那样,我的后缀服务器基本上可以正常工作。我有两个问题使事情变得混乱:

  1. 由于我的 Dockerfile 中的错误,我/var/log/mail.log由 root 用户拥有......这就是它保持空白的原因。我没有看到任何关于它的错误,但基本上 rsyslog 无法写入它。一个chown syslog:adm /var/log/mail.log步骤解决了这个问题,我可以看到确实 postfix 正在处理邮件并将邮件转发到别名。

  2. 我错误地认为我能够从我的笔记本电脑远程登录到端口 25 上的其他服务器,只是因为我认为我过去做过一些需要它才能工作的事情。但实际上我做不到。但是,我可以telnet example.com 25从另一台服务器上进行操作,因此,东西实际上正在工作。

  3. 从另一台服务器向别名发送邮件可以正常工作,并通过我的 Gmail 目标地址发送。

  4. 看来我的问题实际上与Gmail有关......当我[email protected]从我的Gmail帐户发送消息时,它没有显示出来。从那以后,我尝试使用我在另一个主机上设置的别名......有些工作,有些没有......导致:

结论:
Gmail 似乎只接受在...下配置的别名的邮件Settings > Accounts and Import > Send mail as ......不幸的是,Gmail 现在要求您在设置新服务器时为其指定第 3 方 SMTP 服务器,所以看起来我必须掌握在我的后缀安装中使用 TLS 等。

postfix
  • 1 1 个回答
  • 4151 Views

1 个回答

  • Voted
  1. Best Answer
    masegaloeh
    2015-01-22T13:25:24+08:002015-01-22T13:25:24+08:00

    此 Telnet 日志消息

    telnet: connect to address <droplet IP>: Operation timed out
    

    不是由mynetworks后缀中的配置引起的!该错误表明您的 telnet 数据包未到达 docker IP 地址或docker 中的后缀未响应您的 telnet。

    正如您提到的,您从自己的计算机上 telnet,那么您的 ISP 可能正在阻止端口 25。但是,因为您提到来自外部的电子邮件无法通过,甚至 postfix 日志是空的,所以可能 postfix 容器根本没有响应。也许您无法将 DO droplet 端口绑定到后缀 docker 端口。尝试netstat -tulpn | grep 25 从 DO 液滴运行,以确认可以从外部访问后缀。

    由于我不熟悉 docker,所以我不能在这里提供确切的解决方案。然而,一些谷歌搜索结果表明您已将 IPtables 设置为像官方文档一样进行伪装:Binding container ports to the host

    编辑
    无论如何,您的 netstat 输出看起来不错。表明它仅在 IPv6 中侦听。但是这篇文章和这篇文章表明 Ubuntu/Debian 使用 IPv4 映射的 IPv6 地址方法来提供连接,所以也许它也可以从外部 IPv4 访问。

    为了进一步排除故障,我在这里给出了发送电子邮件的最低要求

    • netstat某些 MTA(postfix、exim、IIS)在端口 25 上侦听。您可以通过运行和 telnet 到 localhost来确认这一点
    • MX 记录/A 记录必须正确配置。
    • Internet 主机可以访问您服务器上的端口 25。这意味着没有丢弃 SMTP 数据包的防火墙问题。

    因为您在堆栈中引入了 docker 代理,所以您必须确认

    1. 在DO droplet 端口 25收到的数据包。尝试tcpdump port 25在您发送电子邮件时运行以确认您的主机收到了数据包。
    2. Docker 代理实际上将数据包转发到后缀。Postfix总是记录传入的 SMTP 连接。
    • 3

相关问题

  • Postfix 在特定端口上接受邮件

  • 让 Postfix 以两种方式处理垃圾邮件

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 后缀电子邮件地址

  • 什么是最好的开源电子邮件解决方案包

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve