Deaktivieren Sie die lokale Zustellung in Sendmail


31

Ich verwende Sendmail auf einem Centos-Server, um E-Mails für PHP-Skripte zu senden. Das Problem besteht jedoch darin, dass E-Mails an ein lokales Postfach auf dem Computer gesendet werden und nicht an das, was in den MX-Einträgen für die Domäne angegeben ist - die tatsächlich auf einen anderen Computer I verweisen Verwenden Sie für E-Mail.

Ich möchte, dass sendmail nicht versucht, Mail für die Domain, für die der Computer eingerichtet ist, lokal zuzustellen. Gibt es eine einfache Möglichkeit, die lokale Zustellung zu deaktivieren?

Die Domain befindet sich nicht in der Datei local-host-names.

Ich habe schon viel gegoogelt und mir angeschaut:

Sendmail-Konfiguration, um keine E-Mails an den lokalen Computer zu senden

Deaktivieren Sie die lokale Zustellung in Sendmail

Aber entweder gibt es keine Antwort oder es ist nicht geeignet.

Ich möchte keine Weiterleitung an einen anderen Server, sondern nur E-Mails unabhängig von der Domäne senden.

Um ein Beispiel anzugeben:

Ich habe zwei Server, einer ist der Mailserver unter mail.example.com und ein Webserver unter example.com. Wenn ich den SMTP-Dienst auf dem Webserver verwende, leitet er E-Mails derzeit an ein lokales Postfach unter example.com weiter Es sollte zu den Postfächern auf mail.example.com gehen

Die Ausgabe von sendmail -bt gibt Folgendes zurück:

ADRESSENTESTMODUS (Regelsatz 3 NICHT automatisch aufgerufen)
Eingeben  
> 3,0 info@example.com
canonify eingabe: info @ beispiel. com
Canonify2 Eingabe: Info 
Canonify2 gibt zurück: info 
Rückgabe kanonisieren: info 
Analyseeingabe: info 
Parse0-Eingabe: info 
Parse0 liefert: info 
ParseLocal-Eingabe: info 
ParseLocal gibt Folgendes zurück: info 
Parse1-Eingabe: info 
Parse1 gibt Folgendes zurück: $ # local $: info
syntaktische Analyse gibt Folgendes zurück: $ # local $: info

stalkr.net/forum/… Scheint das Nächste zu sein, wonach ich eigentlich strebe . Insbesondere die Einstellung MAIL_HUB erwähnt, aber es scheint nicht wirklich zu funktionieren.

Versuchen Sie Folgendes: sendmail -bt und geben Sie dann 3,0 user@domin.com ein. Es gibt Ihnen eine Menge Umschreiberegeln, die letzten sollten Ihnen das Relay geben, das es verwenden wird. Bitte geben Sie die Ausgabe an.
Francois Wolmarans

Hallo François, ich habe meine Frage so bearbeitet, dass sie die Ausgabe enthält

Antworten:


37

Was ich getan habe, um die lokale Zustellung zu deaktivieren. Ich werde die example.com-Domain verwenden.

Bedarf:

  • example.com Ein Eintrag, der auf eine IP-Adresse verweist, die einer der eth-Schnittstellen zugewiesen wurde.
  • / etc / hosts Definieren von example.com, das derselben IP-Adresse wie oben zugewiesen ist
  • example.com MX-Einträge, die auf Google-Server verweisen (ASPMX.L.GOOGLE.COM usw.)
  • Standard-Sendmail-Installation (meine war unter Ubuntu)

Schritte:

vim /etc/mail/sendmail.mc

Am Ende:

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

und dann:

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

testen:

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

Sie sollten sehen, wie eine Verbindung zum Google-Server hergestellt wird, und dann sehen, wie Ihre E-Mails an Ihren Google-Posteingang gesendet werden.


3
Das hat perfekt funktioniert, ich frage mich nur, dass es eine gibt. nach dem Domainnamen.
Rodrigo

Hat auch einwandfrei funktioniert!
Filipe Pina

Vielen Dank! Ich habe versucht, dies für eine Weile zu beheben. Ich habe folgendes getan; Bereinigen Sie sendmail und installieren sendmailconfigSie es sendmailconfigerneut , führen Sie es aus , fügen Sie die angegebenen Zeilen hinzu, führen Sie es erneut aus und tun Sie a, service sendmail restartund es funktioniert!
Liam Newmarch

@ Rodrigo example.com. mit einem abschließenden Punkt ist ein kanonischer FQDN. Das example.com ohne Punkt ist relativ und daher ungenau, zum Beispiel könnte es example.com.yourdomain.org bedeuten. abhängig von Ihren Betriebssystemeinstellungen. Dies ist genau der gleiche Unterschied wie zwischen /etc/passwdundetc/passwd
Kubanczyk

4

Dank Sporker und Pawel hast du mich in die richtige Richtung gelenkt, um das zu reparieren.

Mein ursprüngliches Problem war, dass sendmail meine E-Mail-Konten von example.com als lokale Konten betrachtete.

Diese Links haben sich als sehr nützlich erwiesen: Mail an lokale Domain senden MX-Einträge ignorieren (Teil 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignoriert-mailertable-some-semilocal-domains.html

Aber in meinem Fall mit FreeBSD 8.2 war der Trick wirklich:

# cd /etc/mail

# vim freebsd.mc

Fügen Sie diese beiden Zeilen hinzu:

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

Kurz bevor:

MAILER(local)
MAILER(smtp)

# make

--- Dies wird ausgegeben ---

 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

--- Ausgabeende ---

# cp sendmail.cf sendmail.cf.bak

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

# /etc/rc.d/sendmail restart

Hoffe das erspart jemandem ein paar Kopfschmerzen.


1

Ich bin keine sendmail-Person, aber ich glaube, dass sendmail jede Domain, die in gespeichert ist, /etc/mail/local-host-namesals lokalen Domainnamen behandelt.
Sie können versuchen, diese Datei zu leeren (nicht löschen) und sendmail neu starten, um zu sehen, wie Sie vorgehen.

EDIT
Der Dateiname ich erwähnt wird tatsächlich in sendmail.cfund Ihnen möglicherweise nicht eingestellt werden , local-host-names
schauen in /etc/mail/sendmail.cffür

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

Dies sind keineswegs geprüfte Tatsachen, sondern ich denke nur laut nach.


Ja, aus diesem Grund habe ich bereits erwähnt, dass die Domain nicht in der Datei mit den lokalen Hostnamen enthalten ist

Entschuldigung, das bringt mir bei, Fragen zu beantworten, die ich nicht richtig gelesen habe.
Aussielunix

Hatte dieses Problem auf einer Reihe kürzlich gepatchter Solaris 10-Server (100 oder so gepatcht, aber nur eine Handvoll, bei denen das Problem auftrat). Das war die Lösung! Vielen Dank!
Signal15

0

Dies ist möglicherweise nicht die Lösung, nach der Sie suchen, aber wenn Ihr Problem darin besteht, dass der Benutzer "admin" oder "root" viele E-Mails und ein riesiges Postfach erhält, sollten Sie in Betracht ziehen, einen Cron-Job zum Löschen des Postfachs einzurichten jede Woche, jeden Tag usw.

Wir hatten mehrere CentOS-Server mit diesem Problem, aber der Haken war, dass wir die E-Mails manchmal lesen wollten, da dies manchmal bei der Diagnose verschiedener Probleme helfen kann.

Die Lösung bestand darin, einfach einen Job zu machen und die Kiste von Zeit zu Zeit abzuwischen.

Wenn wir ein Problem finden ... würden wir den Cron-Job (vorübergehend) auskommentieren und in den Protokollen und E-Mails nach Hinweisen suchen.

Nur ein Gedanke ... und eine schnelle / einfache Lösung für Sie.

Wenn nicht, schauen Sie sich die Datei sendmail.mc an und ändern Sie sie entsprechend.


Schnelles Update:

Dies ist nicht genau das, wonach Sie fragen, aber es könnte Ihnen einige Ideen geben und Ihnen dabei helfen, Licht in die Dinge zu bringen:

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


Entschuldigung, das hat nicht geholfen. Ich möchte nur, dass keine E-Mails lokal zugestellt werden. Warum macht sendmail dies so schwierig?

0

Ich persönlich bin eher eine Postfix-Person, aber das hört sich sehr danach an, als hätten Sie den sendenden Server so konfiguriert, dass er E-Mails für @ yourdomain.com empfängt. Wenn es in postfix ein sendmail gibt, das dem Transportmechanismus entspricht, leite ich die Mail intern zwischen meinen Servern um.


Ich habe es nicht so sehr konfiguriert, da es die Standardeinstellung für eine Centos Sendmail-Installation war.

0

Scheint, als würde Ihr Regelsatz 3 die Domaininformationen entfernen. Im Folgenden sind einige allgemeine Schritte zur Fehlerbehebung aufgeführt. Wenn dies nicht funktioniert, müssen Sie mir Ihre sendmail.cf senden, um einen Blick darauf zu werfen.

In der Ausgabe wird example.com als lokale Domain behandelt. mache einen nslookup:

setze q = mx

domain.com

Wenn dies die IP-Adresse des lokalen Computers angibt, müssen Sie Ihre DNS überprüfen. Schauen Sie auch in / etc / hosts nach, um sicherzustellen, dass domain.com nicht aufgeführt ist.

Es scheint auch @ domain.com zu entfernen. Versuchen Sie es bitte mit user@stackoverflow.com, um zu sehen, ob es auch als lokale Domain aufgeführt wird.

Überprüfen Sie auch den Cw-Wert in Ihrer sendmail.cf-Datei.


Danke Francois, ich verstehe die sendmail-Interna schon ein bisschen besser. Ich habe beschlossen, nur den Hostnamen des Rechners zu ändern, um die Dinge im Moment zu umgehen. Es ist jetzt www.example.com anstelle von example.com, was bedeutet, dass die lokale Zustellung für user@www.example.com erfolgt, aber nicht user@example.com - was für mich zu diesem Zeitpunkt ein guter Kompromiss ist.

0

Wahrscheinlich nicht das, was Sie wollen, aber SSMTP ist sehr praktisch für einen Server, auf dem nur ausgehende Nachrichten gesendet werden und auf dem Sie einen Mail-Hub angeben können.


Danke, ich werde SSMTP einen Blick darauf werfen und dennoch versuchen, sendmail vorerst zu reparieren.

0

Wenn Sie einen Fehler zurückgeben möchten, wenn die Zustellung an eine lokale Adresse versucht wird, können Sie die Zugangskarte verwenden und so etwas wie:

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

Wenn Sie möchten, dass die E-Mail-Nachrichten zugestellt, aber weggeworfen werden, können Sie einen virtusertable-Eintrag installieren, der alles " @your.domain" als dev-null deklariert . Es kann nützlich sein, mindestens " root" lokal weiterzuliefern , da dies häufig der Empfänger von E - Mail - Berichten von Cron - Jobs usw. ist. Versuchen Sie Folgendes in Ihrem virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Mit einem lokalen dev-nullAlias, der Nachrichten nach / dev / null umleitet, sollte dies weiterhin Root-E-Mails übermitteln, die an andere Benutzer übermittelten Nachrichten jedoch verwerfen.


0

Das Update von Pawel funktionierte für mich, aber sendmailconfig existierte nicht auf Centos, so dass ich laufen musste

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

um die Konfiguration zu aktualisieren


Diese zweite Regel funktioniert / existiert nicht auf meinem centOS
solsol 08.11.10

0

Nur bestätigt, dass Pawels Antwort mein sehr ähnliches Problem gelöst hat.

Für alle, die FreeBSD verwenden, aber nicht daran interessiert sind, sich zu sehr auf die Plackerei mit Sendmail-Dateien einzulassen, verwenden Sie die folgende Reihenfolge, um die beiden Zeilen in Pawels Beispiel einzufügen:

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

Ich folgte diesen Vorschlägen und bemerkte, dass ich nur den Schritt hinzufügte, den Pawel erwähnte.

"/ etc / hosts, das example.com definiert, das der gleichen IP-Adresse wie oben zugewiesen wurde", im Grunde habe ich der /etc/hostsDatei meine Server-IP gefolgt von dem Servernamen hinzugefügt , und das war's.

War genug für mich, um E-Mails über Google und zurück zu meinen E-Mails weiterzuleiten.


0

Wenn Sie Cpanel / WHM zum Verwalten Ihres Servers verwenden, stellen Sie sicher, dass Sie Remote Mail Exchanger in Cpanel / WHM auswählen, anstatt Konfiguration automatisch erkennen. Remote Mail Exchanger sendet alle E-Mails über MX-Datensätze, einschließlich der lokalen Domain. Mit Automatisch werden lokale Domain-E-Mails direkt lokal weitergeleitet und nicht an einen in MX-Einträgen definierten externen Server gesendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.