LDAP在Postfix系统上的应用

2022-09-12

1 LDAP介绍

L D A P是用于访问目录信息的协议, LDAP目录是一种层次结构式的树状数据结构, 通常用于存储人事信息。目前已经有越来越多的网络开始使用LDAP来记录人事信息。因此, 直接让Postfix从LDAP取得用户列表或有效地址列表, 可避免同样的信息放于两地, 减轻系统管理员的工作负担。

1.1 LDAP配置

L D A P的配置参数并非放在各自独立的文件中, 而是全部都集中在main.cf配置文件。不同组的LDAP配置, 各有一个代表该配置的名称。这就需要为每一个L D A P配置起一个名称, 并以此名称作为该组参数的名称的前缀。

假设某个LDAP配置的名称为ldapaliases:

定义LDAP server主机名称的参数是name_server_host, 所以, 此参数在ldapal i a s e s配置里的名称是l d a p a l i a s e s_server_host:

1.2 LDAP最重要的几个参数

1.2.1 Name search base参数

搜索起点的辨别名称 (D N) 。只有得知道目录的命名环境, 才可能知道目标数据的共同起源。如果不知道搜索起点, 那就从目录的“根”开始找。

1.2.2 name_scope参数

搜索范围。有三种可能范围可选择:sun、base与one, 选择哪一种范围, 要依自己的目录的结构而定。b a s e只搜索起点本身, sub搜索起点以下的整棵子树, one只搜索直接子节点 (搜索起点的下一层) 。name_scope参数的默认值是sub, 例:

1.2.3 name_query_filter参数

构成搜索条件的属性与值, 变量%s用来代表收件人邮件地址, 例:

1.2.4 name_result_attribute参数

含有搜索值的属性名称。你可以按照优先级列出多个属性。例:

2 LDAP在Postfix系统上的应用实例

LDAP在Postfix系统上最重要的应用, 莫过于核验收件地址的有效性, 以及提供邮件地址与收信主机之间的对应关系。

假设example.com是一个大型网域, 该网络上的网关上有一台Postfix server, 其内部有多个邮件系统, 分别服务不同组的用户。此网域的所有用户的人事数据都收集在同一个L D A P目录里, 而且所有邮件系统都可从这个L D A P目录取得一致的人事信息。

在这种情况下, 网关上的Postfix server可将自己的local_recipient_maps参数指向L D A P目录, 借此判断外来邮件所指定的收件人是否确有其人 (以免遭受垃圾邮件发送者的字典攻击) 。此外, 它也可将transport_maps参数指向LDAP目录, 使其能将收到的邮件转送到正确的内部邮件服务器中。

2.1 LDAP目录里的人事数据样本

假设用户的公共邮件地址是记录在LDAP目录里的mail属性, , 而其内部收信主机是记录在mailHost属性 (网关系统必须将用户的邮件转送到mailHost所指的服务器) 。以下是L D A P目录里的人事数据样本。

2.2 设置local_recpient_maps参数来完成核验收件地址的有效性

其实就local_recpient_maps的作用而言, 它只需要知道收件地址的有效性, 所以只要查询邮件地址是否存在于属性中即可;另一方面, transport_maps参数则需要mailHost属性的值, 才能将邮件转递到正确的收信主机。

Postfix依据local_recpient_maps参数参数所提供的列表, 决定是否要收下外来的邮件, 此参数的默认值是指向本地系统的账号文件与别名文件。在此例中, 有效邮件地址全部都是记录在L D A P目录, 所以local_recpient_maps应该指向一个LDAP配置的自定义名称。假设我们取的名称为ldaplocal:

定义此配置如下:

在上述配置中:ldaplocal_server_host与ldaplocal_server_base参数分别指出的主机名称与目录搜索起点。ldaplocal_query_filter参数定出的搜索条件为:收件人地址 (%s) 必须符合目录里的属性, 而且其accountstatus属性的值必须等于a c t i v e。如果能找到符合此条件的记录, 则返回该记的u i d属性。

2.3 设定transport_maps参数, 将邮件转递到正确的收信主机

网关上的收下邮件之后, 还必须将邮件传送到正确的内部邮件服务器。提供“收件人邮件地址一收信主机”对应关系的参数是transport_maps为了实现这项查询服务, 我们需要另外设置一个L D A P配置, 假设此配置的名称为ldaptransport:

以下是ldaptransport配置的LDAP参数:

local_recpient_maps参数

此处的ldaptransport_query_filter参数所规定的搜索条件, 如同先前的ldaplocal-_query_filter参数, 唯一的差别是这次我们希望返回符合条件的记录的mailHost属性值 (用户的收信主机) , 而且返回值必须被改写成ldaptransport_query-_filter所指定的格式。

设定完毕, 请记得重新启动Postfix, 这样新设定的ldap transport传输表才会开始生效。

3 结语

要让Postfix具备查询LDAP目录的能力, Postfix本身必须与LDAP函数库链接, 特别要注意的是, 如果运行时链接器需要函数库搜索路径, 记得a u x l i b变量应该包含正确的运行时搜索路径自变量 (_rpath) 。

摘要:本文将介绍如何实现LDAP数据库系统在Postfix系统中的应用。

关键词:postfix,LDAP,电子邮件,参数

参考文献

[1] Postfix LDAP Howto:http://www.postfix.org/LDAP_README.html.

[2] LDAP系统管理 (O'Reilly, ISBN:986-7794-21-4) :http://www.oreilly.com.tw/product_network.php?id=a130.

上一篇:建筑电气的施工现场安全与管理问题分析下一篇:论医院全面成本核算体系的完善