Désactiver la livraison locale dans Sendmail

31

J'utilise Sendmail sur un serveur Centos pour envoyer des e-mails pour les scripts PHP, mais le problème est que le courrier est remis à une boîte aux lettres locale sur la machine plutôt que ce qui est spécifié dans les enregistrements MX pour le domaine - qui pointent en fait vers une autre machine I utiliser pour le courrier électronique.

Je voudrais que sendmail n'essaye pas de livrer localement le courrier pour le domaine pour lequel la machine est configurée, existe-t-il un moyen simple de désactiver la livraison locale?

Le domaine n'est pas dans le fichier local-host-names.

J'ai déjà fait beaucoup de recherches sur Google et j'ai regardé:

Configuration de Sendmail pour ne pas remettre de courrier à la machine locale

Désactiver la livraison locale dans Sendmail

Mais soit il n'y a pas de réponse, soit il ne convient pas.

Je ne veux pas relayer vers un autre serveur, je veux juste qu'il envoie du courrier quel que soit le domaine.

Pour donner un exemple:

J'ai deux serveurs, l'un est le serveur de messagerie à mail.example.com et un serveur Web qui est example.com, lorsque j'utilise le service smtp sur le serveur Web, il achemine actuellement le courrier vers une boîte aux lettres locale sur example.com, mais il devrait aller dans les boîtes aux lettres sur mail.example.com

Sortie des retours sendmail -bt:

MODE DE TEST D'ADRESSE (l'ensemble de règles 3 n'est PAS automatiquement invoqué)
Entrer  
> 3,0 [email protected]
entrée canonify: info @ exemple. com
Entrée Canonify2: info 
Canonify2 retourne: info 
canonify renvoie: info 
entrée d'analyse: info 
Entrée Parse0: info 
Parse0 retourne: info 
Entrée ParseLocal: info 
Retours ParseLocal: info 
Entrée Parse1: info 
Parse1 renvoie: $ # local $: info
retours d'analyse: $ # local $: info
Communauté
la source
stalkr.net/forum/… Semble être la chose la plus proche de ce que je recherche réellement. Plus précisément, le paramètre MAIL_HUB mentionné, mais il ne semble pas réellement fonctionner.
Essayez ce qui suit: sendmail -bt puis tapez 3,0 [email protected] Cela vous donnera beaucoup de règles de réécriture, les dernières devraient vous donner le relais qu'il utilisera. Veuillez fournir la sortie.
Francois Wolmarans
Salut François, j'ai modifié ma question pour inclure la sortie

Réponses:

37

Ce que j'ai fait pour désactiver la livraison locale. J'utiliserai le domaine example.com.

Exigences:

  • example.com Une entrée pointant vers l'adresse IP attribuée à l'une des interfaces eth.
  • / etc / hosts définissant example.com affecté à la même adresse IP que ci-dessus
  • enregistrements MX example.com pointant vers des serveurs Google (ASPMX.L.GOOGLE.COM, etc.)
  • installation de sendmail par défaut (la mienne était sur Ubuntu)

Pas:

vim /etc/mail/sendmail.mc

à la fin:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

et alors:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

essai:

echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

Vous devriez le voir se connecter au serveur Google, puis vous devriez voir votre courrier être livré dans votre boîte de réception Google.

Paweł Gościcki
la source
3
Cela a fonctionné parfaitement, je me demande juste s'il y a un. après le nom de domaine.
Rodrigo
A parfaitement fonctionné aussi!
Filipe Pina
Merci! J'essaie de résoudre ce problème depuis un certain temps. J'ai fait ce qui suit; purgez et réinstallez sendmail, exécutez sendmailconfig, ajoutez les lignes que vous avez spécifiées, exécutez à sendmailconfignouveau et faites un service sendmail restartet cela fonctionne!
Liam Newmarch
@Rodrigo example.com. avec un point de fin est un nom de domaine complet canonique. L'exemple.com sans point est relatif et donc imprécis, par exemple cela pourrait signifier exemple.com.votredomaine.org. selon les paramètres de votre système d'exploitation. C'est exactement la même différence qu'entre /etc/passwdetetc/passwd
kubanczyk
4

Grâce au sporker et à Pawel, vous m'avez mis dans la bonne direction pour résoudre ce problème.

Mon problème d'origine était que sendmail considérait mes comptes de messagerie example.com de domaine comme des comptes locaux.

Ces liens se sont révélés très utiles: Sendmail vers le domaine local en ignorant les enregistrements MX (partie 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignores-mailertable-some-semilocal-domains.html

Mais dans mon cas, en utilisant FreeBSD 8.2, ce qui a vraiment fait l'affaire, c'est:

# cd /etc/mail

# vim freebsd.mc

Ajoutez ces deux lignes:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Juste avant:

MAILER(local)
MAILER(smtp)

# make

--- C'est la sortie ---

 cp freebsd.mc host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
 cp freebsd.submit.mc host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

--- Fin de sortie ---

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

J'espère que cela évite quelques maux de tête à quelqu'un.

estepix
la source
1

Je ne suis pas une personne sendmail mais je crois que sendmail traitera tout domaine stocké en /etc/mail/local-host-namestant que nom de domaine local.
Vous pouvez essayer de vider ce fichier, (ne le supprimez pas) et redémarrer sendmail et voir comment vous allez.

EDIT
Le nom de fichier je l' ai mentionné est effectivement mis en sendmail.cfet le vôtre ne peut pas être mis à local-host-names
regarder dans /etc/mail/sendmail.cfpour

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-host-names    

Ce ne sont en aucun cas des faits testés mais juste moi qui pense à haute voix.

aussielunix
la source
Oui, c'est pourquoi j'ai déjà mentionné que le domaine n'est pas dans le fichier local-host-names
Désolé, cela m'apprendra à répondre à des questions que je n'ai pas lues correctement.
aussielunix
J'ai eu ce problème sur un ensemble de serveurs Solaris 10 récemment corrigés (environ 100 correctifs, mais seulement une poignée a rencontré le problème). C'était la solution! Merci!
Signal15
0

Ce n'est peut-être pas la solution que vous recherchez, mais si votre problème est que l'utilisateur "admin" ou "root" reçoit beaucoup d'e-mails et une énorme boîte aux lettres, vous voudrez peut-être envisager de configurer un travail cron pour effacer la boîte aux lettres sortie chaque semaine, jour, etc.

Nous avions plusieurs serveurs CentOS avec ce problème, mais le problème était que nous voulions parfois lire le courrier car cela peut aider à diagnostiquer parfois divers problèmes.

La solution consistait à simplement cron job et essuyer la boîte de temps en temps.

Si nous trouvions un problème ... nous commentions le travail cron (temporairement) et lisions les journaux et les e-mails pour trouver des indices.

Juste une pensée ... et une solution rapide / facile pour vous.

Sinon, jetez un œil au fichier sendmail.mc et modifiez-le en conséquence.


Mise à jour rapide:

Ce n'est pas exactement ce que vous demandez, mais cela pourrait vous donner quelques idées et aider à vous éclairer:

http://www.pettingers.org/code/sendmail-local.html

KPWINC
la source
Désolé, cela n'a pas aidé. Tout ce que je veux faire, c'est qu'aucun courrier ne soit livré localement, pourquoi sendmail rend-il cela si difficile?
0

Je suis personnellement plus un postfix, mais cela ressemble beaucoup à ce que vous avez configuré le serveur d'envoi pour recevoir du courrier pour @ votredomaine.com. S'il existe un sendmail équivalent au mécanisme de transport dans postfix, c'est ce que j'utilise pour acheminer le courrier en interne entre mes serveurs.

Greeblesnort
la source
Je ne l'ai pas tellement configuré, car c'était la valeur par défaut pour une installation de centos sendmail.
0

Il semble que votre ensemble de règles 3 supprime les informations de domaine. J'ai inclus quelques étapes de dépannage générales ci-dessous. Si cela ne fonctionne pas, vous devrez m'envoyer votre sendmail.cf pour y jeter un œil.

À partir de la sortie, example.com est traité comme un domaine local. faire un nslookup:

définir q = mx

domain.com

Si cela donne l'adresse IP de la machine locale, vous devez regarder votre DNS. Regardez également dans / etc / hosts pour vous assurer que domain.com n'est pas répertorié.

Il semble également supprimer le @ domain.com, pourriez-vous essayer avec quelque chose comme [email protected] pour voir s'il le répertorie également en tant que domaine local.

Vérifiez également la valeur Cw dans votre fichier sendmail.cf.

François Wolmarans
la source
Merci François, je commence à mieux comprendre les internes de sendmail. J'ai décidé de simplement changer le nom d'hôte de la machine pour contourner les choses pour l'instant, c'est donc maintenant www.example.com au lieu d'exemple.com qui signifie qu'il ferait la livraison locale pour [email protected] mais pas [email protected] - ce qui est un bon compromis pour moi à ce stade.
0

Probablement pas ce que vous voulez, mais SSMTP est très agréable pour un serveur sortant uniquement, où vous pouvez spécifier un concentrateur de messagerie.

Trevor Harrison
la source
Merci, je vais jeter un œil à SSMTP, essayant toujours de réparer sendmail pour l'instant.
0

Si vous souhaitez renvoyer une erreur lors d'une tentative de livraison à une adresse locale, vous pouvez utiliser le plan d'accès et quelque chose comme:

@your.domain error:nouser 550 No such user here

Si vous voulez que les e-mails soient «remis» mais jetés, vous pouvez installer une entrée virtusertable qui alias tout pour « @your.domain» à dev-null. Il peut être utile de continuer à livrer au moins " root" localement, car c'est souvent le destinataire des rapports par e-mail des tâches cron, etc. Essayez quelque chose comme ceci dans votre virtusertable:

[email protected] local:root

@your.domain local:dev-null

Avec un dev-nullalias local qui redirige les messages vers / dev / null, cela devrait continuer à livrer le courrier racine, mais à jeter les messages livrés aux autres utilisateurs.

gkeramidas
la source
0

Le correctif de Pawel a fonctionné pour moi, mais sendmailconfig n'existait pas sur les centos, j'ai donc dû exécuter

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

pour mettre à jour la configuration


la source
cette deuxième règle ne fonctionne pas / n'existe pas sur mon centOS
solsol
0

Je confirme simplement que la réponse de Pawel a résolu mon problème très similaire.

Pour toute personne utilisant FreeBSD mais pas intéressée à s'impliquer trop dans la corvée des fichiers sendmail cf, la séquence suivante est celle que vous utiliseriez pour ajouter les deux lignes dans l'exemple de Pawel:

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart
sporker
la source
0

J'ai suivi ces suggestions et j'ai remarqué qu'en ajoutant simplement l'étape mentionnée par Pawel,

"/ etc / hosts définissant example.com assigné à la même adresse IP que ci-dessus", j'ai simplement ajouté l'adresse IP de mon serveur suivie du nom du serveur dans le /etc/hostsfichier, et c'est tout.

Cela m'a suffi pour que les e-mails soient acheminés via Google et reviennent à mes e-mails.

user737133
la source
0

Si vous utilisez Cpanel / WHM pour gérer votre serveur, assurez-vous de sélectionner Remote Mail Exchanger dans Cpanel / WHM au lieu de Détecter automatiquement la configuration. L'échangeur de courrier distant enverra tous les e-mails via les enregistrements MX, y compris le domaine local. Avec Automatique, les e-mails du domaine local seront directement acheminés localement et ne seront pas envoyés à un serveur externe défini dans les enregistrements MX.

Ali Poonawala
la source