Forum Linux.debian/ubuntu Postfix, Dovecot, et OpenLDAP: je m'en sors pas.

Posté par  .
Étiquettes :
1
6
avr.
2011

Bonjour,

Je ne m'en sors pas entre postfix, dovecot et ldap.

Je suis sous debian lenny. Je souhaite tout simplement faire un serveur de mail, basé sur un webmail, avec des utilisateurs virtuels.
Et là, c'est le drame.

Invariablement, je tombe sur 'user unknown' lors de la distribution locale.
utilisateur vmail(1000) et groupe mail(8) propriétaires des boites virtuelles
machine: mymachine domaine: myhost.mydomain utilisateurs virtuels: user1, user2 suivant schema inetOrgPerson: sn: user1 cn: mon user1 uid: user1 mail: user1@myhost.mydomain userPasswd: pass1 ldap en bind avec admin: dn= cn=admin,dc=myhost,dc=mydomain

J'ai donc: config LDAP : uniquement des inetOrgPerson, avec un 2 utilisateurs, filtrés par leur uid. ldapsearch et testsaslauthd me semblent correct (ils renvoient bien les infos attendues). Même si je ne pense pas utiliser sasl dans postfix pour debugguer mon souci configuration de Dovecot: je me connecte bien en telnet localhost 143, - login user1 pass1 me renvoie OK. Du coup, j'ai accès via ma webmail aux dossiers IMAPs, qui sont crée lors du premier accès avec un utilisateur virtuel via ma webmail *configuration de postfix: j'ai défini Dovecot en LDA, postmap -q user1@myhost.mydomain ldap:/etc/postfix/ldap.cf me renvoit bien user1@myhost.mydomain

Si vous aviez des points me permettant de tester précisement soit dovecot soit ldap, soit postfix, merci à vous, j'ai passé bcp de temps là dessus sans entrevoir une solution, malgré les innombrables tutos sur le net. J'ai un tiret dans le nom de mon hôte, du coup avec une méthode de test précise ca m'aiderait peut-être à séparer ce qui marche de ce qui ne marche pas :(

Merci !

le log système:

Apr 6 21:15:37 mymachine postfix/smtpd[8857]: connect from localhost.localdomain[127.0.0.1] Apr 6 21:15:37 mymachine postfix/smtpd[8857]: C703941C20C: client=localhost.localdomain[127.0.0.1] Apr 6 21:15:37 mymachine postfix/cleanup[8860]: C703941C20C: message-id=<1f9c-4d9cbc00-13-3dbe5fc0@212200418> Apr 6 21:15:37 mymachine postfix/smtpd[8857]: disconnect from localhost.localdomain[127.0.0.1] Apr 6 21:15:37 mymachine postfix/qmgr[8526]: C703941C20C: from=<user1@myhost.mydomain>, size=561, nrcpt=1 (queue active) Apr 6 21:15:37 mymachine postfix/pipe[8861]: C703941C20C: to=<user2@myhost.mydomain>, relay=dovecot, delay=0.17, delays=0.15/0.01/0/0.02, dsn=5.1.1, status=bounced (user unknown) Apr 6 21:15:37 mymachine postfix/cleanup[8860]: E360C41C20D: message-id=<20110406191537.E360C41C20D@mymachine.myhost.mydomain> Apr 6 21:15:37 mymachine postfix/bounce[8863]: C703941C20C: sender non-delivery notification: E360C41C20D Apr 6 21:15:37 mymachine postfix/qmgr[8526]: E360C41C20D: from=<>, size=2404, nrcpt=1 (queue active) Apr 6 21:15:37 mymachine slapd[8535]: <= bdb_equality_candidates: (uid) not indexed Apr 6 21:15:37 mymachine postfix/qmgr[8526]: C703941C20C: removed Apr 6 21:15:37 mymachine postfix/pipe[8861]: E360C41C20D: to=<user1@myhost.mydomain>, relay=dovecot, delay=0.06, delays=0.03/0/0/0.03, dsn=5.1.1, status=bounced (user unknown) Apr 6 21:15:38 mymachine postfix/qmgr[8526]: E360C41C20D: removed

mon main.cf:

myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache myhostname = mymachine.myhost.mydomain mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf alias_maps = ldap:/etc/postfix/ldap-aliases.cf mydestination = myhost.mydomain, mymachine.myhost.mydomain, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 local_transport = dovecot mailbox_size_limit = 51200000 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv4

mon master.cf, d'origine avec ajouté:

dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $recipient

ldap-accounts.cf:

server_host = localhost server_port = 389 search_base = dc=myhost,dc=mydomain query_filter = (&(objectClass=inetOrgPerson)(mail=%s)) result_attribute = uid bind = yes bind_dn = cn=admin,dc=myhost,dc=mydomain bind_pw = adminpassword version = 3

ldap-aliases.cf:

server_host = localhost server_port = 389 search_base = dc=myhost,dc=mydomain query_filter = (&(objectClass=inetOrgPerson)(mail=%s)) result_attribute = mail bind = yes bind_dn = cn=admin,dc=myhost,dc=mydomain bind_pw = adminpassword version = 3

dovecot.conf:

`protocols = imap imaps pop3s mail_location = maildir:/var/mail/%n mail_uid = 1000 mail_gid = 8

protocol lda {

    postmaster_address = postmaster
    auth_socket_path = /var/run/dovecot/auth-master

} protocol imap {

    imap_client_workarounds = outlook-idle

} protocol pop3 {

    pop3_uidl_format = %08Xu%08Xv

}

auth default {

    mechanisms = plain

    passdb ldap {
            args = /etc/dovecot/dovecot-ldap.conf
    }
    userdb ldap {
            args = /etc/dovecot/dovecot-ldap.conf
    }
    socket listen {
            master {
                    path = /var/run/dovecot/auth-master
                    mode = 0600
                    user = vmail
                    group = mail
            }
    }

}`

dovecot-ldap.conf:

hosts = localhost dn = cn=admin,dc=myhost,dc=mydomain dnpass = adminpassword auth_bind = yes ldap_version = 3 base = dc=myhost,dc=mydomain scope = subtree user_filter = (&(objectClass=inetOrgPerson)(uid=%u)) pass_attrs = uid=user,userPassword=password pass_filter = (&(objectClass=inetOrgPerson)(uid=%u)) default_pass_scheme = CRYPT

  • # Pourquoi pas du SQL ?

    Posté par  . Évalué à 1.

    J'avais la même conf quand j'étais sous lenny.
    Le passage à squeeze m'en a dégouté (la conf de slapd).
    Si tu n'utilises ldap que pour le stockage des comptes mail, pourquoi ne pas passer à une base de données (mysql ou postgresql).

    Je te paste le lien qui m'a permis de passer très rapidement de ldap à pgsql : http://wiki1.dovecot.org/HowTo/DovecotPostgresql

    • [^] # Re: Pourquoi pas du SQL ?

      Posté par  . Évalué à 1.

      Salut Fabien, merci de ta réponse.

      In fine, j'aurais pu choisir un backend MySQL ou PostGreSQL, mais ce qui a conditionné mon choix:

      • j'utilise SOGo comme webmail/calendrier -> backend ldap ou mysql
      • j'ai du format mbox pour 100 utilisateurs, et seul dovecot supporte mbox -> backend ldap ou mysql
      • je vais jouer avec sasl pour tout ça, et je ne sais pas si mysql s'interface bien avec sasl
      • dernier point: j'ai un serveur Active Directory, et je voulais me laisser la possibilité de m'appuyer dessus (ce sera clairement pour plus tard)

      Bref, avec un backend sql, j'aurais au mieux du faire une passerelle AD <-> MySQL. Ca m'a semblé plus pérenne de passer par ldap.

      Le truc c'est que je n'avais jamais bossé avec ldap ni sasl, et encore moins adapté dovecot/postfix pour s'appuyer dessus. Ca a pas mal augmenté le temps de mise en oeuvre, mais j'avais assez envie de travailler avec tout ça :)

  • # ah, ben...

    Posté par  . Évalué à 2.

    bon, c'est con j'y ai passé 3 jours entre comprendre postfix, ldap et dovecot et tenter la maquette.

    Donc dovecot n'authentifie que user1, et postfix balance au départ un user1 puis lors du delivery un user1@myhost.mydomain.

    J'ai donc rajouté dans dovecot-ldap.conf:

    user_filter = (|(mail=%u)(uid=%u))

    à affiner bien sûr (je suis sur Dovecot pour la gestion des mbox au lieu des maildirs) mais là j'ai la brique webmail - LDA qui fonctionne.

    Allez, un schema LDAP pour le maildrop et les maildomains, un peu de amavis, clamav, postgrey et je peux sérieusement envisager de migrer mon ancien MX :)

    Des commentaires sur ma bidouille, ou sur le serveur en général au regard de la conf ci-dessus ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.