To use LDAP, put this in main.cf:

virtual_alias_domains = ldap:/etc/postfix/ldap-domains.cf
virtual_mailbox_maps = ldap:/etc/postfix/ldap-virtual-mailbox.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf

ldap-domains.cf:

server_host = ldap://127.0.0.1:389
bind = yes
bind_dn = cn=admin,dc=null,dc=nl
bind_pw = <password>
search_base = ou=domain-aliases,dc=null,dc=nl
scope = sub
query_filter = (cn=@%s)
result_attribute = cn

Note the @%s in the query_filter line. This is necessary to avoid duplicate returns with more specific aliases for wildcard domains. For example, when @example.com maps to user1, but user2@example.com maps to user2.

ldap-virtual-mailbox.cf

server_host = 127.0.0.1
search_base = ou=people,dc=null,dc=nl
version = 3
bind = yes
bind_dn = cn=admin,dc=null,dc=nl
bind_pw = <password>
query_filter = (&(objectClass=inetOrgPerson)(mail=%u@%d))
result_attribute = mail

ldap-aliases.cf:

server_host = ldap://127.0.0.1:389
search_base = ou=domain-aliases,dc=null,dc=nl
scope = sub
bind = yes
bind_dn = cn=admin,dc=null,dc=nl
bind_pw = <password>
query_filter = (|(cn=%s)(cn=%d))
result_attribute = rfc822MailMember

To create the table:

echo -e "dn: ou=domain-aliases,dc=null,dc=nl\nobjectClass: organizationalUnit\nou: people" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD

To create a wildcard domain:

echo -e "dn: cn=@test1.null.nl,ou=domain-aliases,dc=null,dc=nl\nobjectClass: top\nobjectClass: nisMailAlias\ncn: @test1.null.nl\nrfc822MailMember: user@null.nl" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD

To create a more specific alias:

echo -e "dn: cn=user2@test1.null.nl,ou=domain-aliases,dc=null,dc=nl\nobjectClass: top\nobjectClass: nisMailAlias\ncn: user2@test1.null.nl\nrfc822MailMember: user2@null.nl" | ldapadd -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD

And also useful:

alias ldapls="ldapsearch -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD -b dc=null,dc=nl '(objectClass=*)'"
alias ldapdel="ldapdelete -x -D cn=admin,dc=null,dc=nl -w $LDAP_PASSWD"

 

Leave a Reply