Интеграция постфикса с LDAP, чтобы послать Пользователям по электронной почте с Доступом к Определенному Хосту

У меня есть рабочая установка 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

Постфиксные поиски пользовательских адресов электронной почты в LDAP

У меня есть 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

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"?
  • Существует ли лучший/отличавшийся способ достигнуть этого?
3
задан 19 August 2015 в 11:22
1 ответ

Некоторые частичные ответы:

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".

3
ответ дан 3 December 2019 в 06:31

Теги

Похожие вопросы