slapd 2.4.31-1
我在 Ubuntu 14.04 ( )下安装了 openLDAP v3 phpldapadmin
,sudo-ldap
并安装了 和其他软件包。我正在尝试postfix
与 LDAP 集成,以便可以发送电子邮件到[电子邮件保护]或者[电子邮件保护]例如。
当前设置
作为此设置的一部分,我host
为允许用户访问的每个主机设置了属性(或者只是允许*
访问所有主机)。我在 ldap 客户端上使用它来授予或拒绝对特定主机的访问。每个用户还与属性中的公司电子邮件地址相关联mail
。下面给出了用户的示例 LDIF:
dn: uid=auser,ou=People,dc=example,dc=com
cn: A User
displayname: A User
gecos: A User
gidnumber: 1011
givenname: A
homedirectory: /home/auser
host: host1
host: host2
host: host3
host: host4
mailacceptinggeneralid: root
loginshell: /bin/bash
mail: [email protected]
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: shadowAccount
objectclass: hostObject
objectclass: postfixUser
objectclass: top
sn: User
uid: auser
uidnumber: 1001
LDAP 中用户电子邮件地址的 Postfix 查找
为了实现此目的,我有一个/etc/postfix/ldap-aliases.cf
包含以下内容的文件:
server_host = ldap.example.com
search_base = dc=example, dc=com
# look for entries with this
query_filter = (|(uid=%s)(mailacceptinggeneralid=%s)(mail=%[email protected]))
# what attribute from the search result is returned
result_attribute = mail
# the format in which the result is returned
result_format = %s
此配置到目前为止有效,并通过以下postmap
命令确认返回我期望的地址:
# A query using the uid of the user
postmap -q auser ldap:/etc/postfix/ldap-mail.cf
[email protected]
# A query using the corporate username
postmap -q a.user ldap:/etc/postfix/ldap-mail.cf
[email protected]
# A query for a user specified in mailacceptinggeneralid
postmap -q root ldap:/etc/postfix/ldap-mail.cf
[email protected]
Postfix 查找有权访问主机的用户
例如,我希望能够发送电子邮件到[email protected]
,并从 LDAP 中提取所有有权访问的用户的地址host2
(即host
属性设置为host2
或*
。这是我需要一些帮助的地方。
到目前为止,我有一个/etc/postfix/ldap-host-users.cf
包含以下内容的文件:
server_host = ldap.example.com
search_base = dc=example, dc=com
query_filter = (|(host=%3)(host=\*))
result_attribute = mail
result_format = %s
它假设查询包含 FQDN,但我认为postfix
只使用username
(可能是因为我使用alias_maps
了/etc/postfix/main.cf
?)。无论如何,测试上述内容:
postmap -q [email protected] ldap:/etc/postfix/ldap-host-users.cf
[email protected]
# The following also returns a list of email addresses, but shouldn't:
postmap -q [email protected] ldap:/etc/postfix/ldap-host-users.cf
[email protected]
postconf -n 输出
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases, ldap:/etc/postfix/ldap-mail.cf, ldap:/etc/postfix/ldap-host-users.cf
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mydestination = $myhostname, localhost.example.com, , localhost
myhostname = host2.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
问题
- 是否
postfix
仅使用本地查询username
并且不包括查询中的 FQDN?- 这是因为我正在使用
alias_maps
吗/etc/postfix/main.cf
?
- 这是因为我正在使用
- 我是否可以以某种方式检查
username
查询的部分是否为users
其他部分,如果是其他部分则不返回任何内容?例如,query_filter
我可以做类似的事情%u="users"
吗? - 有没有更好/不同的方法来实现这一点?
答案1
一些部分答案:
1. postfix 是否仅使用本地用户名进行查询,而不在查询中包含 FQDN?这是因为我使用的是
alias_maps
in/etc/postfix/main.cf
吗?
是的, 根据alias_maps
文档,我们需要参考man 5 别名了解语法细节。
该名称是本地地址(没有域部分)。当名称包含任何特殊字符(例如空格、
#',
:' 或 `@')时,请使用双引号。名称将转换为小写,以使数据库查找不区分大小写。
因此,这是 Postfix 的预期行为。
3. 有没有更好/不同的方法来实现这一点?
使用虚拟别名映射根据这个答案对 alias_maps 和 virtual_alias_maps 感到困惑,virtual_alias_maps
将“user@domain”作为输入。