Integrando o postfix ao LDAP para usuários de e-mail com acesso a um host específico

3

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?
por Nathan S. Watson-Haigh 19.08.2015 / 03:05

1 resposta

3

Algumas respostas parciais:

1. Does postfix only query using the local username and doesn't include the FQDN in the query? Is this because I'm using alias_maps in /etc/postfix/main.cf?

SIM , de acordo com a alias_maps documentação, precisamos nos referir em man 5 aliases para conhecer os detalhes da sintaxe.

The name is a local address (no domain part). Use double quotes when the name contains any special characters such as whitespace, #',:', or '@'. The name is folded to lowercase, in order to make database lookups case insensitive.

Então, esse é um comportamento esperado do postfix.

3. Is there a better/different way to achieve this?

Use virtual_alias_maps . De acordo com esta resposta em Confuso sobre alias_maps e virtual_alias_maps , virtual_alias_maps irá "usuário @ domínio" como entrada.

    
por 19.08.2015 / 10:13