web-dev-qa-db-fra.com

Désactiver la livraison locale dans Sendmail

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 pointe en fait vers une autre machine que j'utilise 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 envoyer 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 D'ESSAI D'ADRESSE (l'ensemble de règles 3 N'EST PAS automatiquement appelé) 
 Entrez 
> 3,0 [email protected] 
 Entrée canonify: info @ exemple. com 
 Entrée Canonify2: info 
 Retours Canonify2: info 
 Retours canonify: info 
 Entrée parse: info 
 Entrée Parse0: info 
 Parse0 renvoie: info 
 Entrée ParseLocal: info 
 ParseLocal renvoie: info 
 Entrée Parse1: info 
 Parse1 renvoie: $ # local $: info 
 analyse renvoie: $ # local $: info 
31
user6091

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.

38
Paweł Gościcki

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. htmlhttp://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:

# 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 vous évitera quelques maux de tête.

4
estepix

Je ne suis pas un utilisateur de sendmail mais je crois que sendmail traitera tous les domaines stockés dans /etc/mail/local-Host-names en tant que noms de domaine locaux.
Vous pouvez essayer de vider ce fichier, (ne le supprimez pas) et redémarrer sendmail et voir comment vous allez.

MODIFIER
Le nom de fichier que j'ai mentionné est en fait défini dans sendmail.cf et le vôtre ne doit pas être défini sur local-Host-names
regarder dans /etc/mail/sendmail.cf pour

# 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 à voix haute.

1
aussielunix

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
0
sporker

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. Remote Mail Exchanger 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.

0
Ali Poonawala

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

0
Trevor Harrison

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 pouvez 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 était de simplement cron job et d'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

0
KPWINC

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.

0
Greeblesnort

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 souhaitez 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 il 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-null alias qui redirige les messages vers/dev/null, cela devrait continuer à livrer le courrier racine, mais jeter les messages livrés aux autres utilisateurs.

0
gkeramidas

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.

0
Francois Wolmarans

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 de nom_serveur au /etc/hosts fichier, et c'est tout.

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

0
user737133

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

0
Joshua Vial