English translation here
Bonjour,
Ce howto fait écho au post de seby : [Solved] Identités sur Roundcube
Le besoin :
Malgré l’utilisation de Yunohost, j’ai encore besoin de gérer des adresses mails de fournisseurs comme gmail ou yahoo. Je souhaite tout centraliser sur mon serveur perso. J’ai donc besoin de recevoir les mails provenant de ces fournisseurs mais également pourvoir émettre des mails depuis roundcube en particulier et depuis mon serveur yuno en général.
Ce howto décrit comment j’ai procédé.
Avertissement 0 : La configuration décrite ici modifie la configuration Postfix et outre-passe une restriction ldap/yunohost/postfix. Cela pourrait poser problème lors d’une mise à jour de yunohost.
Avertissement 1 : La solution décrite ici peut être affectée par le syndrome du “chez moi ça marche”. Cela signifie que si vous appliquez cette astuce chez vous, il est possible que cela ne fonctionne par tel quel. À vous de voir ce qui affecte le bon fonctionnement de cette config.
Avertissement 2 : Scrutez en permanence les logs Postfix. Une erreur de configuration ou de nombreux essais en échec pourrait conduire à ce que l’adresse ip de votre serveur soit considérée comme émetteur de spam
Avertissement 3 : Ce howto couvre la configuration pour l’émission de mails avec une adresse externe à votre domaine yuno (ex: yahoo, gmail). Il ne couvre pas la récupération des mails (perso j’utilise fetchmail).
Avertissement 4 : Ne recopiez pas tout tel quel dans votre config. J’ai essayé de signaler ce qui doit changer chez vous en mettant les paramètres entre “<>
”. Pour conserver la clarté de howto ce n’est pas toujours possible alors à vous de faire le tri :-). Tout le long de howto, j’ai pris en exemple mon cas perso et donc vous verrez toute la configuration adaptée à gmail et yahoo. Bien entendu, en cas de besoin … RTFM
Avertissement 5 : Considérez que je ne suis en rien responsable d’un dysfonctionnement de votre installation suite à l’intégration de cette astuce chez vous. Je ne suis pas expert postfix/ldap/yunohost et il se peut que des imprécisions, tant sur le vocabulaire que sur les solutions techniques, soient présentes.
En route …
L’idée est d’utiliser postfix comme un client de messagerie lambda. Pour cela nous utiliserons la fonctionnalité dite “sender-dependent
”. Grâce à cette fonctionnalité, lorsque postfix détectera que l’expéditeur (le “From:
”) est une de vos adresses mails externes, il utilisera le relais smtp de votre fournisseur. Nous configurerons également roundcube afin qu’une identité correspondant à votre mail externe soit disponible.
Voici les étapes de configuration :
- Configuration Postfix :
- Configuration de /etc/postfix/main.cf
- Création et génération des maps postfix pour le “sender-dependent”
- Modification de la map sender_canonical
- Premier test
- Ajout des identités dans rouncube (et donc dans le ldap)
1 - Configuration Postfix
1.1 - Ajout des directives dans main.cf
Afin que Postfix se comporte comme un client de messagerie, nous allons implémenter des directives “smtp_sasl*
”. Copiez les directives suivantes dans votre /etc/postfix/main.cf
(les directives sont documentées en commentaires) :
# Configuration pour relayer les mails externes au domaine yuno
# =============================================================
# Map contenant la correspondance "relai smtp" <=> "login et password"
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# Activation de l'authentification smtp sasl
smtp_sasl_auth_enable = yes
# Map contenant la correspondance "adresse mail" <=> "relai smtp"
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
# Activation de la fonctionnalité "sender-dependent"
smtp_sender_dependent_authentication = yes
# Activation de tls pour la connexion au relai smtp
smtp_use_tls = yes
# Autorise la transmission du password en PLAIN TEXT mais seulement en TLS
smtp_sasl_security_options = noplaintext, noanonymous
smtp_sasl_tls_security_options = noanonymous
1.2 - Création et génération des maps postfix pour le sender-dependent
1.2.1 Map sender_relay
Cette map contient la correspondance entre votre adresse mail et le relais smtp à utiliser si l’expéditeur du mail correspond à l’adresse renseignée ici.
Créez le fichier sender_relay :
$ touch /etc/postfix/sender_relay
Placez-votre configuration de façon à obtenir ceci :
<login>@yahoo.fr [smtp.mail.yahoo.com]:submission
<login>@gmail.com [smtp.gmail.com]:submission
Générez la map :
$ postmap hash:/etc/postfix/sender_relay
1.2.2 Map sasl_passwd
Cette map contient la correspondance ente le relais smtp et les identifiants à utiliser pour l’authentification. Attention les identifiants sont en clair !!
Créez le fichier sasl_passwd :
$ touch /etc/postfix/sasl_passwd
Modifiez les permissions :
$ chmod 600 /etc/postfix/sasl_passwd
Placez votre configuration de façon à obtenir ceci :
[smtp.mail.yahoo.com]:submission <login>:<password>
[smtp.gmail.com]:submission <login>:<password>
Générez la map :
$ postmap hash:/etc/postfix/sasl_passwd
1.3 Modification de la map sender_canonical
Postfix utilise un système de “nettoyage” des adresses d’émission. Depuis votre install yunohost, si vous émettez à un mail avec par exemple l’expéditeur toto@example.com
alors Postfix modifie avant l’émission l’adresse en toto@votre_domaine_yuno
. C’est pratique mais cela casse la config que nous mettons en place. Postfix ne fera alors jamais la correspondance entre l’émetteur et le relais à utiliser.
Pour éviter cela, j’ai modifié le fichier /etc/postfix/sender_canonica
l pour ne pas modifier l’expéditeur s’il correspond à une mes adresses mails externes.
Le fichier sender_canonical d’origine est le suivant :
$ cat sender_canonical
/^(.*)@(.*)$/ ${1}
Remplacez le contenu du fichier par celui-ci :
$ cat sender_canonical
if ! /<login>@(yahoo\.fr)|(gmail\.com)$/
/^(.*)@(.*)$/ ${1}
endif
NOTE : il y a certainement une solution plus élégante
1.4 Premiers tests
À ce stade vous pouvez déjà réaliser quelques tests pour vous assurer que la configuration est fonctionnelle.
Au préalable, redémarrez postfix pour la prise en compte de toutes les modifications :
Sous Jessie : systemctl restart postfix.service
Sous Wheezy : /etc/init.d/postfix restart
Envoyez un mail avec en expéditeur votre adresse externe :
$ sendmail -f <login>@yahoo.fr -t <<EOF
> to: <login>@gmail.com
> subject: Premier test
> EOF
Scrutez bien les logs de postfix. Dans le cas présent, le mail doit être émis via le smtp de yahoo. Vous devriez voir dans /vat/log/mail.log des lignes de ce type :
[...]
Aug 15 13:43:49 hostname postfix/smtp[2895]: Untrusted TLS connection established to smtp.mail.yahoo.com[188.125.69.59]:587: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Aug 15 13:43:50 hostname postfix/smtp[2895]: E70BA360E8C: to=<<login>@gmail.com>, relay=smtp.mail.yahoo.com[188.125.69.59]:587, delay=1.2, delays=0.05/0.05/0.82/0.27, dsn=2.0.0, status=sent (250 OK , completed)
Aug 15 13:43:50 hostname postfix/qmgr[2142]: E70BA360E8C: removed
[...]
Si vous n’avez pas d’erreur c’est que tout fonctionne coté Postfix … Sinon continuer le debogage …
2 - Ajout des identités dans roundcube
À ce stade vous ne pouvez pas utiliser votre adresse mail externe depuis rouncube. Roundcube appelle cela une “identité”. Cette identité est collectée depuis le ldap. Il nous faut alors l’ajouter dans le ldap sur votre compte utilisateur.
Coté Postfix il s’agit d’alias. Yunohost offre la possibilité d’ajouter de multiple alias soit via la moulinette soit via la page de gestion de votre profile depuis l’interface web.
Il y a un tout de même un problème. En effet, vous n’aurez pas l’autorisation d’ajouter un alias dont le nom de domaine ne correspond pas à votre domaine yunohost. C’est tout à fait logique, votre installation ne peut/doit pas gérer un domaine qui ne vous appartient pas.
Nous allons contourner ce problème en ajoutant un alias en utilisant directement une commande ldap cliente : ldapmodify
J’utilise ici la commande ldapmodify
en mode interactif mais il est possible de créer au préalable un fichier ldif et le donner en entrée de la commande ldapmodify.
Dans le ldap, les alias sont gérés via un attribut multi-valué : mail
Vous aurez besoin du mot de passe du compte yuno “admin”.
Vous aurez besoin du “dn” de votre compte utilisateur yunohost.
Voici comment j’ai ajouté une adresse yahoo sur mon compte yunohost (ici nommé “mon_compte”)
$ ldapmodify -D cn=admin,dc=yunohost,dc=org -W
Enter LDAP Password:
dn: uid=mon_compte,ou=users,dc=yunohost,dc=org
changetype: modify
add: mail
mail: <login>@yahoo.fr
^d
NOTE : “^d
” signifie que vous devez insérer la séquence de touch “crontrol+d”, cela valide la modification.
Vous pourrez vérifier que l’ajout est effectif avec la moulinette :
$ yunohost user info mon_compte
Déconnectez vous puis re-connectez à roundcube. Dans “Paramètres” puis “Identités” vous devriez maintenant voir une identité avec votre adresse mail externe.
Vous pouvez refaire un test d’émission depuis roundcube. Dans le champ “De:” du message, sélectionnez votre identité “externe” et envoyer un mail. Scrutez à nouveau les logs postfix.
Voila c’est fait.
Si vous avez des remarques ou amélioration à proposer, je suis à l’écoute.
Également, si des experts yuno lisent ce message, je suis à l’écoute d’un paramétrage yuno permettant de conserver ces modifs dans le temps sans empêcher une mise à jour de yunohost.
A+
–
bidroik