如何在与 MS-Exchange 合作的 sendmail 中拒绝发送给未知用户的消息?

如何在与 MS-Exchange 合作的 sendmail 中拒绝发送给未知用户的消息?

我有一台 MS Exchange 2003 配置为某个组织的邮件服务器。由于此服务器位于该组织的内部网络中,并且我不想直接在互联网上公开它,因此我将第二台服务器(带有 sendmail 的 Linux 机器)配置为智能中继(它接受来自互联网发送到 @my_domain 的所有消息,并将其转发到内部 Exchange 服务器,并接受来自此内部 Exchange 服务器的所有消息并通过互联网转发)。此配置工作正常,但我想尽早消除发送给不常驻用户的消息。

好的解决方案可能是在 Exchange 服务器上启用过滤收件人的功能以及“tar pitting”,但就我而言,这并不能解决问题,因为在任何消息到达我的 Exchange 服务器(最终可能会拒绝它)之前,它必须已经被位于此 Exchange 服务器前面的 sendmail 服务器接受。

因此,我想以这样的方式配置我的 sendmail 服务器,以便在初始 SMTP 对话期间,它可以以某种方式查询我的 Exchange 服务器,检查收件人地址是否有效,并且根据此查询的结果,在很早的阶段接受或拒绝(可能有一些延迟)传入消息。

事实上,我已经通过编写自己的简单 sendmail 邮件过滤程序解决了这个问题,该程序会根据包含有效地址列表的文本文件检查收件人地址。但这种解决方案不再让我满意,因为它需要频繁更新此文件,而且由于缺乏时间/动力/编程技能,我不想进一步处理我的源代码,为其添加查询 Exchange 服务器的功能。

也许我可以通过配置任何现有的 Linux 软件组件来达到预期的效果。

有任何想法吗?

答案1

您可以通过查询 Exchange 来保持列表的更新 (&(|(objectClass=group)(objectClass=user))(email=*)

通过 ldapsearch,或配置 sendmail 通过 LDAP 查找传入用户

定义(confLDAP_DEFAULT_SPEC',-p 389 -h ldap.foobar.com' -b dc=foo,dc = bar'')dnl 定义(ALIAS_FILE',/ etc / aliases,ldap:-k(&(|(objectclass = user)(objectclass = group))(proxyAddresses = smtp:%0))-v mail')dnl

您需要使用适当的参数调整 LDAP_DEFAULT_SPEC 行以在 AD 设置中搜索正确的 OU。

当您的 LDAP 查询失败(交换/网络故障)或速度缓慢时,通常会发生以下情况:

答案2

好的,我终于让它工作了。我对 sendmail.mc 的更改如下:

FEATURE(`ldap_routing',, `ldap -1 -T<TMPF> -v mail -k proxyAddresses=SMTP:%0', `bounce')dnl
LDAPROUTE_DOMAIN(`my.comaind.com')dnl
define(`confLDAP_DEFAULT_SPEC', `-p 389 -h "my_ldap_server.my.domain.com" -d "CN=sendmail_user,CN=Users,DC=my,DC=domain,DC=com" -M simple -P /etc/mail/ldap-password -b "DC=my,DC=domain,DC=com"')dnl 

我需要在 Active Directory 中创建一个名为“sendmail_user”的用户,并将其密码放入 ldap-password 文件中。

但我仍然不知道如何在使用无效收件人地址的情况下延迟服务器响应(以减轻任何垃圾邮件发送者对可能的用户名的扫描)。

有什么建议吗?

答案3

我在用MIMEDefang 的 md_check_against_smtp_server()。milter-ahead 是另一个选择

相关内容