Wie konfiguriere ich sendmail so, dass E-Mails über MX-Einträge und nicht an localhost gesendet werden?

8

Ich versuche, sendmail dazu zu bringen, E-Mails an die in den MX-Datensätzen angegebenen Server zu übertragen. Wenn der Server eine E-Mail an [email protected] sendet, möchte ich, dass localhost übersprungen wird und direkt zu Google Mail wechselt.

Ich habe die sendmail-Dokumente durchgesehen, verstehe aber nicht ganz, wie ich meine Situation erklären soll. Der Hostname meines Servers lautet im Wesentlichen "www.domain.com". Wenn ich jedoch eine E-Mail an "[email protected]" sende, landet diese im lokalen Mail-Spool.

Wenn ich sendmail im Debug-Modus ausführe:

sendmail -bt
> $=w

Ich bekomme:

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

Es werden also alle ausgehenden E-Mails abgefangen domain.com. Ich möchte nicht, dass es ankommt localhost. Ich möchte, dass es zu Google Mail-Servern geht.

Alle für andere Adressen gebundenen E-Mails funktionieren einwandfrei. Ich habe auch sendmail für die Verwendung von DKIM konfiguriert.

Ich habe mailertable einen Datensatz hinzugefügt (und die mailertable.db neu erstellt und die Datei mc> cf neu kompiliert), bin mir aber nicht sicher, ob ich das tun muss oder ob ich es richtig mache.

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

Wie kann ich zulassen, dass E-Mails, die für [email protected] gebunden sind, den Server verlassen?

ZUSÄTZLICHE INFORMATIONEN: Hier ist meine sendmail.mc-Datei:

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
Tintenfisch
quelle
1
Die Logik Ihrer Frage ist völlig fehlerhaft. Es läuft darauf hinaus, "Ich möchte Sendmail nicht zum Senden meiner E-Mails verwenden. Wie konfiguriere ich Sendmail mit einer zusätzlichen Konfiguration neu, um E-Mails genau so zu senden, wie Sendmail standardmäßig E-Mails sendet?" Antwort: lass es in Ruhe. Entweder muss Ihre Frage komplett umformuliert werden, um zu vermitteln, was Sie tatsächlich versuchen, oder Sie müssen aufhören, sich in die Konfiguration Ihres Servers einzumischen, und sie das tun lassen, was sie tut, ohne sie zu beschädigen.
Sammitch
1
alles klar. Alternativ erklären Sie mir, was ich tun würde, wenn ich nur E-Mails vom Server senden möchte und nicht an diesen.
Octopus

Antworten:

8

Hier habe ich endlich eine ziemlich umfassende Lösung gefunden . Zusammenfassend gibt es eine Reihe von Optionen (von denen die meisten in anderen Antworten erwähnt wurden, aber aus welchen Gründen auch immer in meinem speziellen Szenario nicht funktionierten).

Option 1: Entfernen Sie den Eintrag aus / etc / mail / local-host-names

Für mich war diese Datei bereits leer

Option 2: Entfernen Sie alle LOCAL_DOMAIN-Einträge in der mc-Datei

Ich hatte keine

Option 3: Weisen Sie sendmail an, keine Schnittstellen zu prüfen

define(`confDONT_PROBE_INTERFACES', `true')dnl

In meinem Fall wurde dies festgelegt, aber der problematische Host war immer noch in der Klasse w von sendmail vorhanden

Option 4: Benennen Sie den Server um. Der oben angegebene externe Link sagt sogar ausdrücklich: "Wenn ich whipple.org aus Klasse w entfernen möchte, könnte ich den Server beispielsweise in frodo.whipple.org, www.whipple.org, elvis.whipple.org umbenennen."

für mich war das nicht ausreichend. Mit dem Host namens www.domain.com enthielt die sendmails-Klasse w immer noch BEIDE www.domain.com UND domain.com (auch nach einem Neustart).

Option 5: DAS IST, WAS FÜR MICH ARBEITET HAT, fügen Sie der sendmail mc-Datei ein LOCAL_RULE_0 hinzu

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

Dies muss am Ende der Datei stehen und <tab>ein tatsächliches Tabulatorzeichen sein

Tintenfisch
quelle
Ich würde mit Option 5 gehen und eine bestmxKarte verwenden, um sie generisch zu machen.
Adamo
Dieser funktioniert perfekt. Vielen Dank für Octopus LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com. > $ * <tab> $ # esmtp $ @ mail.domain.com $: $ 1 <@ domain.com.> $ 2 Dies muss am Ende der Datei stehen und <tab> Sie müssen stattdessen die Tabulatortaste verwenden der Code.
Vinodh Kumar
7

Ändern Sie den Hostnamen des Servers. Es gibt keinen gültigen Grund dafür, dass ein Hostname jemals einem nackten Domainnamen entspricht.

Michael Hampton
quelle
Ja, das habe ich versucht, auch wenn ich den Hostnamen auf www.domain.com gesetzt habe. sendmail möchte alles für www.domain.com, domain.com und localhost gebunden halten. Ich kann das sehen, wenn ich sendmail im Debug-Modus starte und $ = w eingebe. Ich habe die Frage leicht umformuliert, um sie zu erklären.
Octopus
3

Hier ist mein Verständnis Ihrer Frage:

  1. Sie haben Sendmail installiert, damit Sie damit E-Mails von Ihrer Website senden können.

  2. Sie haben Sendmail als autorisierenden E-Mail-Server für Ihren öffentlichen DNS-Namespace konfiguriert.

  3. Sie möchten nicht, dass Sendmail für Ihren öffentlichen DNS-Namespace maßgeblich ist. Sie möchten, dass E-Mails, die an Ihren öffentlichen DNS-Namespace gesendet werden, an Ihre von Google gehostete E-Mail gesendet werden.

Lösung: Konfigurieren Sie Sendmail so, dass es für Ihren öffentlichen DNS-Namespace nicht autorisierend ist.

Joeqwerty
quelle
2
Meine Frage betrifft die Konfiguration von sendmail. Kann Ihre Antwort spezifischer sein als "sendmail neu konfigurieren"?
Octopus
0

Ich bin nicht sehr erfahren mit der Sendmail-Konfiguration, aber ich denke, es sollte das Richtige in Bezug auf MX-Datensätze tun. Ich stelle mir jedoch vor, dass sendmail vor der DNS-Suche möglicherweise zuerst die lokale Hosts-Datei /etc/hostsauf den meisten Unix-basierten Betriebssystemen konsultiert , bevor die DNS-Server verwendet werden. Wenn dies der Fall ist und in der Hosts-Datei ein Eintrag vorhanden ist, der auf Ihren Computer als domain.com verweist, wenn Sie diesen als Hostnamen festlegen, könnte dies der Fall sein. Sie können die Hosts-Datei in diesem speziellen Fall bearbeiten, indem Sie die Einträge ändern oder neue hinzufügen.

Oder Sie können sendmail so konfigurieren, dass die lokale Systemhostdatei beim Auflösen von URLs ignoriert wird. Ich bin mir nicht sicher, wie ich das machen soll.

inetplumber
quelle
0

1) Sendmail füllt automatisch die Liste der lokalen E-Mail-Domains ( $=w).

Sie können es nicht über die folgende Zeile in Ihrer sendmail.mc ausschalten:

define(`confDONT_PROBE_INTERFACES',`True')

Sie können lokale E-Mails "manuell" zur /etc/mail/local-host-namesDatei hinzufügen .
(Es erfordert das HUPen oder Neustarten des sendmail-Daemons nach)

2) Sendmail kann "diesen Host-E-Mail-Namen" ( $j) zur Liste der lokalen E-Mail-Domänen hinzufügen (automatisch konfigurieren) .

Sie können "diesen Host-E-Mail-Namen" definieren.

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

3) mailertablewird NICHT für Lieferungen an Domains konsultiert, die in aufgeführt sind $=w.

AnFi
quelle
aber define ( confDONT_PROBE_INTERFACES',True ') ist bereits (und war schon immer) aktiviert
Octopus
So kann Ihr Fall durch Option 2 abgedeckt werden.
AnFi
Dies sind alles gute Vorschläge, die ich vollständig untersucht habe, aber ich glaube, dass Option 2 mit dem Hinzufügen von Hosts zur Datei mit den lokalen Hostnamen identisch ist. In diesem Fall möchte ich einen Host ausschließen, der keinen enthält.
Octopus
0

Der Code, der die E-Mail sendet, verwenden Sie eine vollständige E-Mail-Adresse oder lassen Sie den Server sie nur über ein lokales Konto versenden? Weil:

Dies weist sendmail an, alle E-Mails lokal an [email protected] zu senden

LOCAL_DOMAIN(`localhost.localdomain')dnl

Dies weist sendmail an, die Domains in lokalen Adressen in domain.com umzuschreiben, ändert jedoch nichts an der lokalen Zustellung .

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

alles klar. Alternativ erklären Sie mir, was ich tun würde, wenn ich nur E-Mails vom Server senden möchte und nicht an diesen.

Schritt 1: Kehren Sie zur Standardkonfiguration zurück.
Schritt 2: Verwenden Sie die Standardkonfiguration.

Sammitch
quelle
Ja, das stimmt, aber ich sende an [email protected]. Die Standardkonfiguration hat genau die gleichen Probleme, die ich in der Frage beschrieben habe.
Octopus