我在专用服务器上使用 Debian 7.x amd64 + Exim 4.82,在共享主机上也有一个可用的 SMTP 服务器。我想在我的 VPS 上设置一个 SMTP,它将有一些特殊的交付脚本/过滤器(例如,发送某些帐户的所有外发电子邮件的副本)
目前VPS上的情况如下:
- 它通过智能主机发送本地(入站)电子邮件,无需任何身份验证
- 它通过智能主机发送所有出站电子邮件,无需任何身份验证<== 不良行为
- 如果 SMTP 客户端的身份验证类型设置为“普通密码”,它会要求输入凭据并正确发送电子邮件
- 无论客户端是否启用 TLS 加密,上述所有情况的行为方式都相同
/etc/exim4/更新-exim4.conf.conf
dc_eximconfig_configtype='smarthost'
dc_other_hostnames='myhost.mycompany.com; localhost'
dc_local_interfaces='127.0.0.1; xxx.xxx.xxx.xxx' <=== public IPv4 address
dc_readhost='mycompany.com'
dc_relay_domains='*'
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.external.com'
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'
/etc/exim4/passwd.client
内容:
*:smtp.external.com:secret
我已经生成自签名证书并启用了 TLS/etc/exim4/exim4.conf.localmacros
MAIN_TLS_ENABLE = 1
我曾尝试使用 plan_text 和 plain_login,现在我正在使用 saslauthd(我确信它可以工作,因为我之前已经使用 postfix 对其进行了测试)。
exim -bP authenticator_list
输出:
plain_saslauthd_server
login_saslauthd_server
cram_md5
plain
login
telnet myhost.mycompany.com 25
输出:
EHLO test
250-myhost.mycompany.com Hello xxxxxxxxx [xxx.xxx.xxx.xxx]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-STARTTLS
250 HELP
...
AUTH PLAIN <random string>
503 AUTH command used when not advertised
我认为这是因为没有通告任何身份验证器(EHLO 响应中没有 250-AUTH... 行),但默认情况下,所有标准身份验证器都具有此条件
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_in_cipher}{}{}{*}}
.endif
因此,我假设我必须将其添加AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
到我的/etc/exim4/exim4.conf.localmacros
文件中以处理 server_advertise_condition 条件,但如果客户端没有启用 TLS 加密,则无论如何都不会考虑它(我是对的吗?)。
所以我对现在该做什么有点困惑。我希望我的配置能够按如下方式工作:
- 本地 fetchmail(邮件)请求在本地路由,无需任何身份验证(即 cron 作业)
- 远程(纯文本或加密文本,无所谓)请求应该从任何目的地(我同事的笔记本电脑)通过外部 SMTP(智能主机)路由到任何其他目的地(我们的客户),并且必须要求用户身份验证,否则将拒绝该请求
答案1
*
从 中删除dc_relay domains
。这样任何人都可以中继。如果您要为本地网络中继,请将其 IP 范围放入 中dc_relay_nets
。
如果您想允许经过身份验证的用户从任何地方发送邮件,您需要一条针对经过身份验证的用户的接受规则。默认配置应包括适当的规则以绕过对经过身份验证的用户的检查,以便他们可以像在本地网络上一样发送电子邮件。
如果您将 添加AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
到/etc/exim4/exim4.conf.localmacros
,您将能够在非安全连接上测试身份验证。最佳做法是不允许这样做,因为任何可以嗅探网络的人都可以获取您的凭据。
您可能希望添加此宏来为远程用户启用提交端口。提交端口是远程提交的首选端口。
daemon_smtp_ports = 25 : 587
在我的默认配置中,服务器端身份验证器被注释掉了。我已成功将它们用于纯文本和 md5 身份验证。用户 ID 和密码是第二和第三个字段。