Page 1 sur 2

serveur web et serveur mail séparés

Posté : 08 août 2014, 12:50
par kodjo
Bonjour,

J'ai 2 machines distinctes tournant sous Debian.

Machine 1:
Serveur web avec Apache

Machine 2:
Serveur mail avec Postfix et Dovecot

Les noms de domaine et DNS pointent actuellement sur M1.

Je souhaite savoir quelles sont globalement les étapes à suivre pour que M1 utilise M2 comme serveur mail, tant pour les envois que les réceptions de messages.

Les points de confusion:
- Je ne parviens pas à déterminer si je dois avoir postfix installé sur M1 et M2
- Faut-il que je configure bind sur M1 et M2, ou est-ce suffisant de configurer les domaines sur M1

Egalement, y a-t-il des inconvénients à utiliser un serveur mail séparé du serveur web?
Si je parviens à m'en sortir avec vos contributions, je promets d'écrire un tuto récap complet sur le forum afin que tout le monde puisse en bénéficier.

En vous remerciant pour vos réponses.

Re: serveur web et serveur mail séparés

Posté : 08 août 2014, 14:37
par Sékiltoyai
Bonjour,

Soyons précis, par la phrase suivante :
Les noms de domaine et DNS pointent actuellement sur M1.
1/ Est-ce que cela veut dire que le nom de domaine est géré par un fournisseur (par exemple le bureau d'enregistrement) et que les enregistrements DNS pointent vers la machine M1 ?
2/ Ou bien est-ce que cela veut dire que la gestion du DNS est déléguée à ton serveur M1 (via un serveur DNS) ?

A en croire la description je dirais la deuxième possibilité.

Dans les deux cas la solution est claire, il faut configurer des enregistrements DNS spéciaux pour ce cas.
Déjà, pour éliminer toute confusion, il n'y a pas à configurer plusieurs serveurs DNS pour ce cas (sauf pour des raisons de résilience pour palier la perte d'un des serveurs), le système DNS n'est qu'une brique qui fera la correspondance entre le nom de domaine et l'IP. Cette brique peut être localisée avec le service (web, mail, ou autre), comme elle peut être gérée totalement indépendamment sur des serveurs qui n'ont rien à voir. Voir l'article wikipedia : http://fr.wikipedia.org/wiki/DNS

Dans le cas ici, mettons la machine 1 héberge le site web, on aura classiquement ces enregistrements DNS :

Code : Tout sélectionner

example.net. IN A 192.0.2.1 www.example.net. IN A 192.0.2.1
Ce qui fait que par défaut, tout service devant accéder à example.net ira par défaut sur l'IP 192.0.2.1.

Pour instruire les serveurs mails extérieurs d'une IP spécifique pour le service mail, l'enregistrement à utiliser est le MX :

Code : Tout sélectionner

example.net. IN MX 10 192.0.2.2
Auquel cas, pour le trafic SMTP inter-serveurs spécifiquement, les autres serveurs utiliseront l'IP 192.0.2.2.

Dans le cas où le serveur DNS est chez un prestataire externe, il fournira généralement le même type d'options sur l'interface de gestion.

En espérant que cela règle le problème.
Cordialement

Re: serveur web et serveur mail séparés

Posté : 08 août 2014, 15:41
par kodjo
je suis effectivement dans le cas n°2
merci bcp pour ces informations très utiles, elles m'ont permis de configurer avec succès M1 dont le MX pointe maintenant sur M2.

je suppose qu'il ne me reste qu'à configurer le serveur mail sur M2.
2 questions cependant:

M1 gère mondomaine.com et M2 n'a pour l'instant aucune info sur mondomaine.com

1 -Comment dois-je configurer M2 pour qu'il puisse envoyer et recevoir des emails pour [email protected]?

Est-ce qui'l me suffit de configurer [email protected] dans postfix, ou y a-t-il une autre application qui entre en jeu pour que M2 puisse gérer les emails de [email protected]?

2- Comment ça se passe pour envoyer un email "from" [email protected] à partir de PHP sur M1?
Dois-je configurer apache d'une certaine manière?

Re: serveur web et serveur mail séparés

Posté : 09 août 2014, 00:35
par Sékiltoyai
1 -Comment dois-je configurer M2 pour qu'il puisse envoyer et recevoir des emails pour [email protected]?

Est-ce qui'l me suffit de configurer [email protected] dans postfix, ou y a-t-il une autre application qui entre en jeu pour que M2 puisse gérer les emails de [email protected]?
La réponse courte :
* Pour recevoir, il faut dire à postfix que le domaine "example.net" est un domaine local (voir configurations types)
* Pour envoyer, par défaut il n'y a pas de restriction et postfix peut envoyer des mails à partir de n'importe quel domaine, y compris @gmail.com, @yahoo.com, @nsa.gov, etc (disclaimer : par contre ce n'est pas dit que le mail soit reçu !)

La réponse longue :
* Bien évidemment c'est beaucoup plus compliqué que ça et pour faire une conf correcte de nos jours il faut penser à beaucoup de choses et se documenter (SPF, DKIM, SMTP TLS, authentification des utilisateurs, restrictions diverses, etc). Compter une ou deux semaines de travail.
2- Comment ça se passe pour envoyer un email "from" [email protected] à partir de PHP sur M1?
Dois-je configurer apache d'une certaine manière?
Réponse liée à la précédente, il n'y a pas de restriction en envoi sur les mails, sauf si déclarée explicitement pour le domaine considéré (enregistrements SPF par exmeple).
Par conséquent, deux options :
* Soit tu configures un serveur mail sur M1 (postfix, exim, opensmtpd ou plus léger, nullmailer) pour relayer tous les mails envoyés par PHP vers M2
* Soit tu configures un serveur mail sur M1 pour envoyer directement les mails vers le destinataire, vu que tu peux envoyer tes mails de n'importe quelle machine.

Ça c'était dans le cas où tu passes par la fonction mail(). Si par contre tu passes par une librairie, tu as une option supplémentaire car elle peut probablement te permettre en PHP de te connecter directement par SMTP au serveur M2 pour envoyer ton mail. Cela dit le gain n'est pas forcément significatif.

Cordialement

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 12:02
par kodjo
Bonjour,

Grâce à tes conseils et explications, je suis parvenu à faire fonctionner mon setup.
J'ai maintenant un serveur web M1 et un serveur mail M2 qui tournent et communiquent bien pour la gestion des mails.

Je parviens à envoyer un mail de l'extérieur vers M2, de M2 ver l'extérieur, avec plusieurs comptes mails différents: c'est parfait.
Seul ombre à mon tableau:

Si j'envoie un mail à partir d'un script PHP sur M1 (formulaire de contact par exemple) vers un compte mail géré par M2, je reçois un email me disant que l'email n'est pas livrable, avec l'erreur suivante:

Code : Tout sélectionner

----- The following addresses had permanent fatal errors ----- <[email protected]> (reason: 550 5.1.1 User unknown) ----- Transcript of session follows ----- 550 5.1.1 <[email protected]>... User unknown
Pourtant, [email protected] reçoit bien les emails envoyés à partir d'une autre adresse, comme gmail ou hotmail.
On dirait que postfix sur M2 refuse les emails envoyés par localhost.

Voyez-vous comment je peux régler ce pb?
En vous remerciant.

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 12:11
par Sékiltoyai
Bonjour,

Le premier réflexe est de vérifier les logs, qui fourniront beaucoup plus d'informations.
Ça se trouve en principe dans /var/log/mail.log

Cordialement

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 12:19
par kodjo
précision, je n'utilise pas php mail() pour envoyer les emails de M1 vers M2.
J'utilise une connexion SMTP.

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 12:26
par kodjo
autre précision:
Dans postfix sur M2, j'ai le paramètre de configuration suivant dans main.cf

Code : Tout sélectionner

mydestination = ns.nomdemachine.net, localhost.nomdemachine.net, , localhost, mondomaine.com
mondomaine.com est ce que j'ai rajouté à la config, le reste existait par défaut.
Si je supprime cette ligne, je ne reçois plus de message d'erreur, mais je n'ai toujours pas l'email de test dans ma boite (email envoyé depuis script php M1).

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 12:30
par Sékiltoyai
Tout cela dépend beaucoup de comment est faite la conf :
* Authentification des utilisateurs
* Ports de connexion
* Restrictions d'envoi et de réception

Mais sans vouloir me répéter, dans tous les cas les logs donneront plus d'informations.

Cordialement

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 13:12
par kodjo
voici la seule info trouvée dans les logs sur M2 a qui sont envoyés les mails

Code : Tout sélectionner

postfix/submission/smtpd[21650]: connect from unknown[une.adresse.ip]
une.adresse.ip indique une adresse ip qui n'est pas celle de M1.
Il s'agit à priori de ma propre adresse IP.

Re: serveur web et serveur mail séparés

Posté : 12 août 2014, 13:40
par kodjo
j'ai complètement vidé /var/log/mail.log et /var/log/mail.err dans M2, et refait un test d'envoi mail php depuis M1.
Après l'envoi, mail.err sur M2 reste vide, mais mail.log contient ceci:

Code : Tout sélectionner

postfix/submission/smtpd[23504]: connect from unknown[mon.adr.ip] postfix/submission/smtpd[23506]: connect from unknown[mon.adr.ip] dovecot: auth: pgsql(/var/run/postgresql/): Connected to database mail postfix/submission/smtpd[23504]: disconnect from unknown[mon.adr.ip] postfix/submission/smtpd[23506]: disconnect from unknown[mon.adr.ip]
J'utilise postgresql pour stocker les utilisateurs et ces utilisateurs reçoivent bien tous les emails internes et externes non envoyés depuis PHP.

Re: serveur web et serveur mail séparés

Posté : 13 août 2014, 12:04
par Sékiltoyai
Bonjour,

A ce moment là il va falloir augmenter le logging pour avoir plus d'infos.

Le mieux est de le faire pour cette IP seulement, du coup dans la conf postfix :

Code : Tout sélectionner

debug_peer_list = <ip_de_M2> debug_peer_level = 3
Cordialement

Re: serveur web et serveur mail séparés

Posté : 13 août 2014, 14:04
par kodjo
Bonjour,

Les logs ne donnent malheureusement rien d'intéressant.
Juste pour récapituler mon pb:

J'ai un serveur M2 avec postfix installé avec des boites mail.

Test: envoyer un message à [email protected] sur M2.
Résultat:
Si j'envoie un mail avec gmail, M2 reçoit bien le message et je peux le lire avec un client imap.
Si j'envoie un mail avec php depuis un serveur M1, je reçois en retour <[email protected]> user unknown.

M2 n'a aucun log relatif à la tentative venant de M1.
C'est M1 qui me dit user unknown. Ceci ce produit avec sendmail mais aussi avec postfix.

Se pourrait-il que M1 (PHP/apache) cherche l'utilisateur sur M1 au lieu de chercher sur M2?
Dans la mesure où mon serveur reçoit bien les messages de gmail, j'en déduis que c'est M1 qui a un pb, pas mon serveur mail se trouvant sur M2.

En vous remerciant pour vos commentaires si vous avez des idées.

Re: serveur web et serveur mail séparés

Posté : 13 août 2014, 14:32
par kodjo
précision: je viens de tester la commande suivante sur M1 sur le terminal:

echo testing | mail -s monSujet [email protected]

Même résultat qu'avec le script php: user unknown.
La question est pourquoi gmail ne me dit pas la même chose si c'est vraiment un pb d'utilisateur sur M2?

Re: serveur web et serveur mail séparés

Posté : 13 août 2014, 15:04
par Sékiltoyai
Test: envoyer un message à [email protected] sur M2.
Résultat:
Si j'envoie un mail avec gmail, M2 reçoit bien le message et je peux le lire avec un client imap.
Si j'envoie un mail avec php depuis un serveur M1, je reçois en retour <[email protected]> user unknown.

M2 n'a aucun log relatif à la tentative venant de M1.
C'est M1 qui me dit user unknown. Ceci ce produit avec sendmail mais aussi avec postfix.
Ok, c'est plus clair. C'est à dire que la configuration actuelle devrait faire ceci ?
PHP[M1] -> Postfix[M1] -> Postfix[M2]
Et que le mail n'arrive jamais à M2 ?
Se pourrait-il que M1 (PHP/apache) cherche l'utilisateur sur M1 au lieu de chercher sur M2?
Dans la mesure où mon serveur reçoit bien les messages de gmail, j'en déduis que c'est M1 qui a un pb, pas mon serveur mail se trouvant sur M2.
Oui, c'est fort probable. Dans ce cas :
* Vérifier la conf de postfix[M1]
** mydestination ne doit pas contenir "mondomaine.com", sinon les mails seront livrés localement.
** ce n'est pas obligatoire mais idéalement fixer également myhostname, mydomain et myorigin à autre chose que "mondomaine.com"
** ce n'est pas obligatoire mais pour un tel setup, je conseille également d'éditer /etc/aliases pour que les mails à destination de root soient envoyés à un vrai compte mail, donc ajouter quelquechose comme ci-dessous (non testé) puis exécuter postalias /etc/aliases :
root: [email protected]

* Tester
** Vérifier les réponses DNS sur M1 : dig MX mondomaine.com
** Ensuite tester l'envoi de mails de M1 vers M2 toujours en checkant les logs sur M1 et sur M2

Cordialement