Integrazione di postfix con LDAP agli utenti eMail con accesso a un host specifico

Ho un'installazione openLDAP v3 installata sotto Ubuntu 14.04 ( slapd 2.4.31-1 ) con phpldapadmin , sudo-ldap e altri pacchetti installati. Sto cercando di integrare il postfix con LDAP in modo da poter submit email a users@host2.example.com o users@host10.example.com per esempio.

Impostazione attuale

Come parte di questa configuration ho gli attributi host per each host che un utente può accedere a (o è semplicemente un * per consentire l'accesso a tutti gli host). Lo uso sui miei clienti ldap per concedere o negare l'accesso a particolari host. Anche associati a ciascun utente è il loro indirizzo di posta elettronica aziendale nell'attributo di mail . Di seguito è riportto un esempio di LDIF per un utente:

  • denyhosts ignorando /etc/hosts.allow
  • come avviare daemon monit con tutti i processi non monitorati
  • apt-mirror non rispecchia la directory i18n
  • Creato un volume EBS da un'istantanea, ma non può montarlo?
  • df dice che il disco è pieno, ma non lo è
  • Parametri ottimali impostati per Postfix "smtpd_recipient_restrictions"
  •  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 

    Ricerca di Postfix degli indirizzi di posta elettronica utente in LDAP

    Ho un file /etc/postfix/ldap-aliases.cf con i seguenti contenuti per get questo:

     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 

    Questa configuration funziona finora e viene confermata con i seguenti comandi postmap che restituiscono gli indirizzi che prevedo:

     # 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 

    Ricerca di Postfix degli utenti con accesso a un host

    Voglio essere in grado di submit email a users@host2.example.com per esempio e avere gli indirizzi estratti da LDAP per tutti gli utenti che hanno accesso a host2 (cioè l'attributo host è impostato su host2 o * . Questo è where ho bisogno qualche aiuto.

    Finora, ho un file /etc/postfix/ldap-host-users.cf che contiene:

     server_host = ldap.example.com search_base = dc=example, dc=com query_filter = (|(host=%3)(host=\*)) result_attribute = mail result_format = %s 

    Si presume che la query contiene il FQDN, ma penso che il postfix utilizzi solo il username (forse dovuto a me utilizzando alias_maps in alias_maps ?). Comunque, verificando quanto sopra:

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

    Le domande

    • Il postfix solo interroga utilizzando il username locale e non include il FQDN nella query?
      • È questo perché sto utilizzando alias_maps in alias_maps ?
    • Posso controllare in qualche modo che la parte di username della query sia users e non restituisca nulla se è qualcos'altro? ad esempio in query_filter posso fare qualcosa come %u="users" ?
    • C'è un modo migliore / diverso per raggiungere questo objective?

  • L'authentication LDAP non riesce
  • UID di authentication di OpenLDAP contro i problemi di CN
  • OpenLDAP ACL per impedire all'utente anonimo di get l'elenco di tutti i gruppi
  • OpenLDAP fornisce errore duplicato di attributeType
  • Controllo dell'accesso a 100 di LAMP box tramite LDAP
  • openLDAP come rimuovere lo schema nis dalla configuration corrente
  • One Solution collect form web for “Integrazione di postfix con LDAP agli utenti eMail con accesso a un host specifico”

    Alcune risposte parziali:

    1. Il postfix solo interroga utilizzando il nome utente locale e non include il FQDN nella query? È questo perché sto utilizzando alias_maps in alias_maps ?

    , secondo la documentazione alias_maps , dobbiamo fare riferimento agli alias dell'uomo 5 per conoscere i dettagli della syntax.

    Il nome è un indirizzo locale (nessun dominio) . Utilizza doppie virgolette quando il nome contiene caratteri speciali come spazi bianchi, #', :' o @. Il nome viene piegato in minuscolo, per rendere insensibili i casi di ricerca dei database.

    Quindi, questo è un comportmento previsto da postfix.


    3. C'è un modo migliore / diverso per raggiungere questo objective?

    Usa virtual_alias_maps . Secondo questa risposta su Confused about alias_maps e virtual_alias_maps , virtual_alias_maps sarà "user @ domain" come input.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.