Eu tenho uma instalação em funcionamento do openLDAP v3 no Ubuntu 14.04 ( slapd 2.4.31-1
) com phpldapadmin
, sudo-ldap
e outros pacotes instalados. Estou tentando integrar o postfix
com o LDAP para que eu possa enviar e-mails para [email protected] ou [email protected], por exemplo.
Configuração atual
Como parte dessa configuração, eu tenho host
de atributos para cada host ao qual um usuário tem acesso (ou é simplesmente um *
para permitir acesso a todos os hosts). Eu uso isso em meus clientes ldap para conceder ou negar acesso a hosts específicos. Também associado a cada usuário está seu endereço de e-mail corporativo no atributo mail
. Um exemplo de LDIF para um usuário é dado abaixo:
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
Pesquisas postfix de endereços de e-mail do usuário no LDAP
Eu tenho um arquivo /etc/postfix/ldap-aliases.cf
com o seguinte conteúdo para conseguir isso:
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
Essa configuração funciona até agora e é confirmada com os seguintes comandos postmap
retornando os endereços esperados:
# 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]
Pesquisas postfix de usuários com acesso a um host
Eu quero poder enviar e-mails para [email protected]
, por exemplo, e ter os endereços extraídos do LDAP para todos os usuários que têm acesso a host2
(ou seja, host
attribute está definido como host2
ou *
. Este eu onde eu preciso de ajuda.
Até agora, tenho um arquivo /etc/postfix/ldap-host-users.cf
que contém:
server_host = ldap.example.com
search_base = dc=example, dc=com
query_filter = (|(host=%3)(host=\*))
result_attribute = mail
result_format = %s
Ele supõe que a consulta contém o FQDN, mas acho que postfix
usa apenas o username
(possivelmente devido a eu usar alias_maps
in /etc/postfix/main.cf
?). Enfim, testando o acima:
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 Output
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
Perguntas
- O
postfix
consulta apenas usando o local username
e não inclui o FQDN na consulta?
- É porque estou usando
alias_maps
em /etc/postfix/main.cf
?
- Posso de alguma forma verificar se a parte
username
da consulta é users
e retornar nada se for outra coisa?
por exemplo. Em query_filter
posso fazer algo como %u="users"
?
- Existe uma maneira melhor / diferente de conseguir isso?