Comment configurer sendmail pour envoyer du courrier via l'enregistrement MX et non vers localhost?

8

J'essaie d'obtenir sendmail pour transférer des e-mails vers les serveurs spécifiés dans les enregistrements MX, donc lorsque le serveur envoie un e-mail à [email protected], je veux qu'il ignore localhost et passe directement à gmail.

J'ai parcouru les documents sendmail, mais je ne comprends pas très bien comment prendre en compte ma situation. Essentiellement, le nom d'hôte de mon serveur est «www.domain.com», mais lorsque j'envoie un e-mail à «[email protected]», il se retrouve dans la bobine de messagerie locale.

Lorsque j'exécute sendmail en mode débogage:

sendmail -bt
> $=w

Je reçois:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

Donc, il intercepte tout le courrier sortant vers domain.com. Je ne veux pas que ça arrive localhost. Je veux qu'il aille sur les serveurs gmail.

Tout le courrier destiné à d'autres adresses fonctionne correctement. J'ai également sendmail configuré pour utiliser DKIM.

J'ai ajouté un enregistrement à mailertable (et reconstruit le mailertable.db et recompilé le fichier mc> cf) mais je ne sais pas si c'est ce que je dois faire ou si je le fais correctement.

domain.com esmtp:[aspmx.l.google.com]

Comment puis-je l'obtenir pour autoriser le courrier à destination de [email protected] à quitter le serveur?

INFORMATION ADDITIONNELLE: Voici mon fichier sendmail.mc:

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl
Poulpe
la source
1
La logique de votre question est complètement défectueuse. Cela se résume à "Je ne veux pas utiliser Sendmail pour envoyer mon courrier. Comment puis-je reconfigurer Sendmail avec une configuration supplémentaire pour envoyer du courrier exactement comment Sendmail envoie le courrier par défaut?" Réponse: laissez-le tranquille. Soit vos besoins qu'elle est entièrement réécrite pour traverser ce que vous êtes réellement tenter de le faire, ou vous devez arrêter de se mêler dans la configuration de votre serveur et laissez - le faire ce qu'il fait sans le casser.
Sammitch
1
ok alors. Alternativement, expliquez-moi ce que je ferais si je voulais seulement envoyer des e-mails à partir du serveur et non vers celui-ci.
Octopus

Réponses:

8

J'ai finalement trouvé ici une solution assez globale . Pour résumer, il existe un certain nombre d'options (dont la plupart ont été mentionnées dans d'autres réponses, mais pour des raisons qui n'ont pas fonctionné dans mon scénario particulier).

Option 1: supprimez l'entrée de / etc / mail / local-host-names

pour moi ce fichier était déjà vide

Option 2: supprimez toute entrée LOCAL_DOMAIN du fichier mc

je n'en avais pas

Option 3: dites à sendmail de ne pas sonder les interfaces

define(`confDONT_PROBE_INTERFACES', `true')dnl

dans mon cas, cela a été défini, mais l'hôte problématique était toujours présent dans la classe w de sendmail

Option 4: renommer le serveur. le lien externe fourni ci-dessus dit même spécifiquement: "Si je veux supprimer whipple.org de la classe w, je pourrais renommer le serveur en frodo.whipple.org, www.whipple.org, elvis.whipple.org, par exemple."

pour moi, ce n'était pas suffisant. avec l'hôte nommé www.domain.com , la classe sendmails contenait toujours les deux www.domain.com ET domain.com (même après un redémarrage)

Option 5: C'EST CE QUI A FONCTIONNÉ POUR MOI ajoutez un LOCAL_RULE_0 au fichier mc sendmail

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

cela doit aller à la fin du fichier et <tab>doit être un caractère de tabulation réel

Poulpe
la source
J'irais avec l'option 5 et en utilisant une bestmxcarte pour la rendre générique.
adamo
Celui-ci fonctionne parfaitement. Merci pour Octopus LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com. > $ * <tab> $ # esmtp $ @ mail.domain.com $: $ 1 <@ domain.com.> $ 2 cela doit aller à la fin du fichier et <tab> en fait vous devez utiliser la touche de tabulation au lieu de le code.
Vinodh Kumar
7

Modifiez le nom d'hôte du serveur. Il n'y a aucune raison valable pour qu'un nom d'hôte soit égal à un nom de domaine nu.

Michael Hampton
la source
oui, j'ai essayé cela, même lorsque j'ai défini le nom d'hôte sur www.domain.com sendmail veut que tout reste lié à www.domain.com, domain.com et localhost. je peux voir que lorsque j'exécute sendmail en mode débogage et que je tape $ = w. j'ai reformulé la question un peu pour l'expliquer.
Octopus
3

Voici ma compréhension de votre question:

  1. Vous avez installé Sendmail afin de pouvoir l'utiliser pour envoyer des e-mails depuis votre site Web.

  2. Vous avez configuré Sendmail pour être le serveur de messagerie faisant autorité pour votre espace de noms DNS public.

  3. Vous ne voulez pas que Sendmail fasse autorité pour votre espace de noms DNS public. Vous souhaitez que les e-mails envoyés à votre espace de noms DNS public soient envoyés à votre messagerie hébergée par Google.

Solution: reconfigurez Sendmail afin qu'il ne fasse pas autorité pour votre espace de noms DNS public.

joeqwerty
la source
2
Ma question concerne la configuration de sendmail. Votre réponse peut-elle être plus précise que "reconfigurer sendmail"?
Octopus du
0

Je ne suis pas trop expérimenté avec la configuration de sendmail, mais je pense que cela devrait faire la bonne chose en ce qui concerne les enregistrements MX. Cependant, j'imagine qu'il pourrait être possible que dans la priorité des recherches DNS, sendmail consulte d'abord le fichier des hôtes locaux /etc/hostssur la plupart des systèmes d'exploitation basés sur Unix avant d'utiliser ses serveurs DNS. Si tel est le cas, et qu'il y a une entrée dans le fichier hosts qui fait référence à votre machine en tant que domaine.com si vous le définissez comme nom d'hôte, cela pourrait être ce qui se passe. Vous pouvez modifier le fichier hosts pour l'adapter à vos besoins dans ce cas particulier en modifiant les entrées ou en en ajoutant de nouvelles.

Ou vous pouvez configurer sendmail pour ignorer le fichier d'hôtes système local lors de la résolution des URL. Je ne sais pas comment faire ça.

inetplumber
la source
0

1) Sendmail remplit automatiquement la liste des domaines de messagerie locaux ( $=w).

Vous ne pouvez pas le désactiver en utilisant la ligne suivante dans votre sendmail.mc:

define(`confDONT_PROBE_INTERFACES',`True')

Vous pouvez ajouter des e-mails locaux "manuellement" dans le /etc/mail/local-host-namesfichier.
(Il nécessite HUPing ou redémarrage du démon sendmail après)

2) Sendmail peut ajouter (configuré automatiquement) "ce nom de messagerie de l'hôte" ( $j) à la liste des domaines de messagerie locaux.

Vous pouvez définir "ce nom de messagerie de l'hôte"

define(`confDOMAIN_NAME',`hostname.example.net')

3) mailertablen'est PAS consultée pour les livraisons aux domaines énumérés dans $=w.

AnFi
la source
mais define ( confDONT_PROBE_INTERFACES',True ') est déjà (et a toujours été) activé
Octopus
Votre cas peut donc être couvert par l'option 2.
AnFi
Ce sont toutes de bonnes suggestions que j'ai complètement explorées, mais je pense que l'option 2 est la même que l'ajout d'hôtes au fichier local-host-names. dans ce cas, je veux EXCLURE un hôte pas en inclure un.
Octopus
0

Le code qui envoie le courrier, utilisez-vous une adresse e-mail complète ou faites-vous simplement envoyer le courrier par le serveur via un compte local? Parce que:

Cela indique à sendmail de livrer tout le courrier à [email protected] localement

LOCAL_DOMAIN(`localhost.localdomain')dnl

Et cela indique à sendmail de réécrire les domaines dans les adresses locales sur domain.com, mais ne modifie pas la livraison locale .

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

ok alors. Alternativement, expliquez-moi ce que je ferais si je voulais seulement envoyer des e-mails à partir du serveur et non vers celui-ci.

Étape 1: revenez à la configuration par défaut.
Étape 2: utilisez la configuration par défaut.

Sammitch
la source
Oui c'est vrai, mais j'envoie à [email protected]. La configuration par défaut a exactement les mêmes problèmes que ceux décrits dans la question.
Octopus