У меня есть рабочая установка openLDAP v3 в соответствии с Ubuntu 14.04 (slapd 2.4.31-1
) с phpldapadmin
, sudo-ldap
и другие пакеты установлены. Я пытаюсь интегрироваться postfix
с LDAP, таким образом, я могу послать электронные письма users@host2.example.com или users@host10.example.com, например.
Как часть этой установки я имею host
атрибуты для каждого хоста пользователю разрешают доступ к (или просто a *
для того, чтобы предоставить доступ ко всем хостам). Я использую это на своих 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: a.user@example.com
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: shadowAccount
objectclass: hostObject
objectclass: postfixUser
objectclass: top
sn: User
uid: auser
uidnumber: 1001
У меня есть a /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=%s@example.com))
# 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
a.user@example.com
# A query using the corporate username
postmap -q a.user ldap:/etc/postfix/ldap-mail.cf
a.user@example.com
# A query for a user specified in mailacceptinggeneralid
postmap -q root ldap:/etc/postfix/ldap-mail.cf
a.user@example.com
Я хочу смочь послать электронные письма users@host2.example.com
например, и вытяните адреса от 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 users@host2.example.com ldap:/etc/postfix/ldap-host-users.cf
a.user@example.com
# The following also returns a list of email addresses, but shouldn't:
postmap -q any_group@host2.example.com ldap:/etc/postfix/ldap-host-users.cf
a.user@example.com
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. Postfix запрашивает только локальное имя пользователя и не включает полное доменное имя в запросе? Это потому, что я использую
alias_maps
в/etc/postfix/main.cf
?
ДА , согласно документации alias_maps
, нам нужны обратиться к псевдонимам man 5 , чтобы узнать подробности синтаксиса.
Имя является локальным адресом (без доменной части) . Используйте двойные кавычки, если имя содержит любые специальные символы, такие как пробел,
# ',
:', или `@ '. Имя переводится в нижний регистр, чтобы сделать поиск в базе данных нечувствительным к регистру.
Итак, это ожидаемое поведение от postfix.
3. Есть ли лучший / другой способ добиться этого?
Используйте virtual_alias_maps . Согласно этому ответу на Не знаете, что такое alias_maps и virtual_alias_maps , virtual_alias_maps
будет вводить "user @ domain".