• Serveurs
  • [Discussion] Installer un serveur de mail avec Postfix et Dovecot

Je viens de re-vérifier la doc de Postfix et Dovecot par rapport à SASL :

http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL
http://www.postfix.org/SASL_README.html#server_dovecot

Par défaut le chemin vers le spooler est définit avec cette valeur : /var/spool/postfix. Mais peut-être que dans ton cas, il est différent, donc pour s'en assurer, ajoute la directive queue_directory dans le fichier main.cf de Postfix :
queue_directory = /var/spool/postfix

# Relatif à queue_directory ( /var/spool/postfix/private/auth )
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
Bonjour Hardware,

C'est fait et ça ne change rien :
tail -f /var/log/mail.log
Oct 31 09:48:50 postfix/master[30265]: terminating on signal 15
Oct 31 09:48:51 postfix/master[30563]: daemon started -- version 2.9.6, configuration /etc/postfix
Oct 31 09:48:57 dovecot: master: Warning: Killed with signal 15 (by pid=30593 uid=0 code=kill)
Oct 31 09:48:57 dovecot: master: Dovecot v2.1.7 starting up (core dumps disabled)
Oct 31 09:49:06 postfix/smtpd[30664]: connect from localhost.localdomain[127.0.0.1]
Oct 31 09:49:06 dovecot: auth: Fatal: mysql: Missing value in connect string: DE
Oct 31 09:49:06 dovecot: master: Error: service(auth): command startup failed, throttling for 2 secs
Oct 31 09:49:06 postfix/smtpd[30664]: fatal: no SASL authentication mechanisms
Oct 31 09:49:07 postfix/master[30563]: warning: process /usr/lib/postfix/smtpd pid 30664 exit status 1
Oct 31 09:49:07 postfix/master[30563]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling
Mon uname :
 uname -a
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2 x86_64 GNU/Linux

Le chemin vers le spooler est pourtant bien /var/spool.

La première ligne renvoie à :
Fatal: mysql: Missing value in connect string : DE
Cela ne pourrait pas venir de mysql ?

Petite question qui me passe par la tête: dans le tutoriel, à cette partie :
# Création de la base de données "postfix"
mysqladmin -p create postfix
# Connexion au serveur MySQL en tant que root
mysql -u root -p
# Création de l'utilisateur postfix et ajout des permissions
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
mysql> GRANT USAGE ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
mysql> GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost';
# On quitte la console MySQL
mysql> exit
Le champ ' MOT DE PASSE' est bien à remplacer par un mot de passe personnel, hein ?

Petite précision, j'ai réalisé ce tutoriel pour la première fois sur un VPS, et rencontrait les premières erreurs, cf. mes premiers messages. Hier, j'ai décidé de tenter le coup sur un autre de mes serveurs, et on obtient les erreurs citées plus-haut. Sachant que ce dernier possède une installation toute fraîche où ce tutoriel a été réalisé dans la foulée.
Oui faut bien remplacer 'MOT DE PASSE'.

Essaye d'installer le serveur de mail avec mon script : http://mondedie.fr/d/5793
Lance une désinstallation avant ( ./uninstall.sh )
Je persiste, voulant comprendre... Et c'est mieux déjà !
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 plooxx.gandi.oim ESMTP Postfix (Debian/GNU)
ehlo localhost
250-ploxx.gandi.oim
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
Par comparaison, je vois que j'ai ces deux lignes en plus :
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
Est-ce normal ?
tail -f /var/log/mail.log
Oct 31 15:40:50 postfix/smtpd[2931]: connect from localhost.localdomain[127.0.0.1]
Oct 31 15:41:04 postfix/smtpd[2931]: disconnect from localhost.localdomain[127.0.0.1]
Je teste directement la connexion à partir d'un client mail et là... :
 tail -f /var/log/mail.log
Oct 31 16:03:56 dovecot: imap-login: Aborted login (auth failed, 1 attempts in 2 secs): user=<contact>, method=PLAIN, rip=81.53.90.214, lip=37.xx.xx.xx, TLS, session=<EEs0TrkG2QBRNVrW>
Oct 31 16:03:58 dovecot: imap-login: Aborted login (auth failed, 1 attempts in 2 secs): user=<contact>, method=PLAIN, rip=81.53.90.214, lip=37.xx.xx.xx, TLS, session=<q2tZTrkG2gBRNVrW>
Bon au moins j'ai avancé, c'est positif !
Tu as fait quoi exactement pour que ça fonctionne ?

Active le mode verbose de Dovecot :
# /etc/dovecot/conf.d/10-logging.conf

log_path = /var/log/dovecot.log
auth_verbose = yes
mail_debug = yes
Puis regarde dans le fichier /var/log/dovecot.log
Hormis reprendre toute l'installation, LEMP compris, rien de spécifique Hardware.
tail -f /var/log/dovecot.log
Oct 31 16:42:51 auth-worker(6631): Info: sql(contact,81.xx.xx.xx): unknown user
Oct 31 16:42:53 imap-login: Info: Aborted login (auth failed, 1 attempts in 2 secs): user=<contact>, method=PLAIN, rip=81.xx.xx.xx, lip=37.187.119.147, TLS, session=<v7KD2bkGBQBRNVrW>
En lisant le log, je me rends compte qu'il ne trouve pas "contact" dans la base de données 'postfix' si j'ai bien compris. Faut-il l'ajouter ? L'implémentation n'est pas automatiquement répercutée lors de la création dans postfix.admin ?

J'ai oublié de te préciser Hardware, j'ai fait ces tests à partir de mon mac.

Je te file d'autres logs à partir de Thunderbird, après avoir importer le certificat :
tail -f /var/log/dovecot.log
Oct 31 16:54:30 imap-login: Info: Disconnected (no auth attempts in 0 secs): user=<>, rip=81.xx.xx.xx, lip=37.xx.xx.xx, TLS: SSL_read() failed: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate: SSL alert number 42, session=<PeEsA7oGxABRNVrW>
Tu as correctement lu le tuto au moins ?
Oui, je pense, trop de fois même peut-être... D'où ma potentielle connerie, c'est ça ? Pour moi, Postfix interagit avec mysql.
Bonsoir

1*) Envoi :
tail -f /var/log/mail.log
postfix/smtp[972]: 4B94B2C0058: to=<blablad@gmail.com>, relay=gmail-smtp-in.l.google.com[173.194.78.27]:25, delay=1.1, delays=0.3/0.03/0.29/0.51, dsn=2.0.0, status=sent (250 2.0.0 OK 1414883968 bd10si8106852wjc.128 - gsmtp)
2*) Réception :
tail -f /var/log/mail.log
postfix/lmtp[1467]: 555802C0058: to=<contact@gandi.oim>, relay=xx.gandi.oim[private/dovecot-lmtp], delay=0.43, delays=0.25/0.03/0.03/0.13, dsn=2.0.0, status=sent (250 2.0.0 <contact@gandi.oim> uaCBIS1tVVS8BQAAro/Gug Saved)


Tu vas me demander ce que j'ai fait Hardware ? J'ai recréé les certificats, dovecot & postfix. Pourquoi ? Parce que certaines personnes sur d'autres forums, me dirigeaient vers cette solution, suite à mon erreur :
TLS: SSL_read() failed: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate: SSL alert number 42
Ensuite, j'ai dû redéfinir le propriétaire /var/mail/... Vas savoir pourquoi, root était le propriétaire et du coup, rien ne se créait dans vhosts/domain. J'ai simplement réappliqué :
chown -R vmail:vmail /var/mail
Allez, c'est parti pour la suite !

edit : Ben, c'est bizarre, non ? Pourquoi ai-je autant de points dès le premier test ?



J'attends la propagation DNS pour le champ domainkey...

Sinon, des petites questions :

Dans Rainloop, est-il possible sur l'écran de login de remplacer "Email" (l'inscription en gris, vous voyez ?) par "ce qu'on veut" ? et, est-il possible d'avoir une fonction mot de passe oubliée ? On peut modifier son mot de passe par postfixadmin, mais si on l'oublie ?

Je vois qu'on peut ajouter des contacts, et je suppose, les balancer dans mysql. Suffit-il de créer une BDD "rainloop" ?

Merci
Solinvictus wrote:Dans Rainloop, est-il possible sur l'écran de login de remplacer "Email" (l'inscription en gris, vous voyez ?) par "ce qu'on veut" ?
Par l'interface d'administration non mais en modifiant le code source oui, tu peux changer le label dans le fichier de langue. Par exemple :
# /var/www/rainloop/rainloop/v/1.x.xx.xxx/langs/fr.ini

[LOGIN]
LABEL_EMAIL = "Email"
Par contre à chaque mise à jour, tu devras refaire ce changement.
Solinvictus wrote:Est-il possible d'avoir une fonction mot de passe oubliée ?
Possible oui, par contre il faudra développer un plugin.
Solinvictus wrote:On peut modifier son mot de passe par postfixadmin, mais si on l'oublie ?
Voir : http://mondedie.fr/d/5751/122
Solinvictus wrote:Je vois qu'on peut ajouter des contacts, et je suppose, les balancer dans mysql. Suffit-il de créer une BDD "rainloop" ?
Tout à fait.
# Connexion au serveur MySQL en tant que root
mysql -u root -p

# Création de la base de données "rainloop"
mysql> CREATE database rainloop;

# Création de l'utilisateur "rainloop" et ajout des permissions
mysql> CREATE USER 'rainloop'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
mysql> GRANT USAGE ON *.* TO 'rainloop'@'localhost';
mysql> GRANT ALL PRIVILEGES ON rainloop.* TO 'rainloop'@'localhost';

# On quitte la console MySQL
mysql> exit
Merci Hardware 🙂. Pour le développement du plugin, je vais attendre
Malgré un 10/10, mon mail est considéré comme spam, par gmail notamment, ça arrive encore malgré ce score parfait ?
C'est possible oui, peut-être que ton serveur est considéré par google comme un relai à spam. Fait un essai avec d'autres providers (Yahoo, Outlook, laposte.net, ton FAI...etc). Si le problème persiste, tu peux contacter le support de google avec ce formulaire :

https://support.google.com/mail/contact/msgdelivery
Merci Hardware ! Je vais tester vers d'autres providers, mais je sais déjà que je chez hotmail.fr, j'atterris directement dans les spams aussi.
Je comprends pas dans l'admin de rainloop mes adresses d'envoi et reception de mon domaine sont : domain.tld

Et non pas imap.domain.tld et smtp.domain.tld

Est-ce normal ?
Non ce n'est pas normal, remet imap.domain.tld et smtp.domain.tld
Pourtant ça fonctionne bien, comment est-ce possible ?
Parce que ton domaine doit avoir un enregistrement A qui doit pointer sur ton serveur de mail. Mais c'est plutôt conseillé de mettre un FQDN à la place, genre imap.domain.tld. smtp.domain.tld. (que tu auras configuré au préalable dans la zone DNS de ton domaine), comme ça tu es sûr que l'adresse pointe bien sur ton serveur de mail.
Quand je regarde les enregistrements DNS, je me rends compte que :
hostname-----A-------xx.xx.xx.xx
pointe sur notre serveur, mais surtout, est redirigé vers postfixadmin.domain.tld (pourquoi pas vers rainloop d'ailleurs ?)

Est-il possible de faire en sorte que postfixadmin.domain.tld ne soit joignable qu'en renseignant son url ? Par extension, tous les CNAME renseignés ramènent aussi vers postfixadmin, tant que je suppose, on n'a pas défini une vhost nginx en lien avec le CNAME.

Et autre chose en passant, mon instance rainloop est accessible en http et en https. Peut-on supprimer ou rediriger l'accès http vers https? (de même pour postfixadmin aussi)

edit : J'ai trouvé une parade mais j'ai tout de même un avertissement lorsque je relance nginx :
nginx: [warn] conflicting server name "postfixadmin.domain.ltd" on 0.0.0.0:80, ignored
nginx
server {                                                                                                                       
   listen 80;                                                                                                                  
   server_name     rainloop.domain.ltd;                                                                                  
   root            /var/www/postfixadmin;                                                                                      
   index           index.php;                                                                                                  
   charset         utf-8;   
                                                                                                   
   return          301 https://$server_name$request_uri;                                                                       
   }
Je devrais peut-être remplacer par :
server {
    listen 80;
    server_name _;

    rewrite ^ https://XX.XX.XX.XX$request_uri? permanent;
}