Disabilita la consegna locale in Sendmail


31

Sto usando Sendmail su un server Centos per inviare e-mail per script PHP, ma il problema è che la posta viene recapitata a una cassetta postale locale sulla macchina anziché a quanto specificato nei record MX per il dominio - che in realtà punta a un'altra macchina I utilizzare per e-mail.

Vorrei che sendmail non provasse e consegnasse localmente la posta per il dominio per il quale è impostata la macchina, esiste un modo semplice per disabilitare la consegna locale?

Il dominio non si trova nel file local-host-names.

Ho già fatto molti googling e ho visto:

Configurazione di Sendmail per non recapitare la posta al computer locale

Disabilita la consegna locale in Sendmail

O o non c'è risposta o non è adatto.

Non voglio inoltrare a un altro server, voglio solo che invii posta indipendentemente dal dominio.

Per fornire un esempio:

Ho due server, uno è il server di posta su mail.example.com e un server web che è example.com, quando uso il servizio smtp sul server web attualmente instrada la posta verso una cassetta postale locale su example.com, ma dovrebbe andare alle caselle di posta su mail.example.com

Output di sendmail -bt restituisce:

MODALITÀ TEST DI INDIRIZZO (set di regole 3 NON richiamato automaticamente)
accedere  
> 3,0 info@esempio.com
input canonify: info @ esempio. com
Ingresso Canonify2: informazioni 
Restituzione di Canonify2: informazioni 
ritorni canonify: informazioni 
input di analisi: info 
Analisi 0: informazioni 
Parse0 restituisce: informazioni 
Ingresso ParseLocal: informazioni 
Restituisce ParseLocal: informazioni 
Ingresso Parse1: informazioni 
Parse1 restituisce: $ # local $: informazioni
restituisce analisi: $ # local $: informazioni

stalkr.net/forum/… Sembra essere la cosa più vicina a ciò che sto effettivamente cercando . In particolare l'impostazione di MAIL_HUB menzionata, ma sembra non funzionare davvero.

Prova quanto segue: sendmail -bt e poi digita 3,0 user@domin.com Ti darà molte regole di riscrittura, le ultime dovrebbero darti il ​​relè che userà. Si prega di fornire l'output.
Francois Wolmarans,

Ciao Francois, ho modificato la mia domanda per includere l'output

Risposte:


37

Cosa ho fatto per disabilitare la consegna locale. Userò il dominio example.com.

Requisiti:

  • esempio.com Una voce che punta all'indirizzo IP assegnato a una delle interfacce eth.
  • / etc / hosts che definisce example.com assegnato allo stesso indirizzo IP di cui sopra
  • record MX di example.com che puntano a server di Google (ASPMX.L.GOOGLE.COM, ecc.)
  • installazione predefinita di sendmail (la mia era su Ubuntu)

passi:

vim /etc/mail/sendmail.mc

alla fine:

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

e poi:

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

test:

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

Dovresti vederlo connettersi al server di Google e quindi dovresti vedere la tua posta recapitata nella tua casella di posta di Google.


3
Questo ha funzionato perfettamente, mi chiedo solo che ci sia un. dopo il nome di dominio.
Rodrigo,

Ha funzionato perfettamente!
Filipe Pina,

Grazie! Ho cercato di risolvere questo problema per un po '. Ho fatto quanto segue; eliminare e reinstallare sendmail, eseguire sendmailconfig, aggiungere le righe specificate, eseguire sendmailconfignuovamente e fare un service sendmail restarte funziona!
Liam Newmarch,

@Rodrigo example.com. con un punto finale è un FQDN canonico. Example.com senza punto è relativo e quindi impreciso, ad esempio potrebbe significare example.com.tuodominio.org. a seconda delle impostazioni del sistema operativo. Questa è esattamente la stessa differenza tra /etc/passwdeetc/passwd
kubanczyk il

4

Grazie a sporker e Pawel mi hai messo nella giusta direzione per risolvere il problema.

Il mio problema originale era che sendmail considerava i miei account di posta elettronica domain.com come account locali.

Questi collegamenti si sono rivelati molto utili: Sendmail al dominio locale ignorando i record MX (parte 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignora-mailertable-some-semilocali-domains.html

Ma nel mio caso, usando FreeBSD 8.2, quello che ha veramente fatto il trucco è stato:

# cd /etc/mail

# vim freebsd.mc

Aggiungi queste due righe:

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

Appena prima:

MAILER(local)
MAILER(smtp)

# make

--- Questo è in uscita ---

 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

--- Fine dell'uscita ---

# cp sendmail.cf sendmail.cf.bak

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

# /etc/rc.d/sendmail restart

Spero che questo risparmi un po 'di mal di testa a qualcuno.


1

Non sono una persona sendmail ma credo che sendmail tratterà qualsiasi dominio archiviato /etc/mail/local-host-namescome nomi di dominio locali.
Potresti provare a svuotare questo file, (non eliminarlo) e riavviare sendmail e vedere come vai.

EDIT
Il nome del file che ho citato è in realtà impostato in sendmail.cfe il vostro potrebbe non essere impostato per local-host-names
cercare in /etc/mail/sendmail.cfper

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

Non si tratta in alcun modo di fatti testati, ma solo di pensare ad alta voce.


Sì, ecco perché ho già menzionato il dominio non è nel file local-host-names

Mi dispiace, questo mi insegnerà a rispondere a domande che non ho letto correttamente.
aussielunix,

Ha riscontrato questo problema su un set di server Solaris 10 con patch di recente (circa 100 patch, ma solo una manciata ha riscontrato il problema). Questa era la soluzione! Grazie!
Signal15,

0

Questa potrebbe non essere la soluzione che stai cercando, ma se il tuo problema è che l'utente "admin" o "root" sta ricevendo molte e-mail e un'enorme cassetta postale, potresti prendere in considerazione l'idea di impostare un processo cron per cancellare la cassetta postale fuori ogni settimana, giorno, ecc.

Avevamo diversi server CentOS con questo problema, ma il problema era che volevamo essere in grado di leggere la posta a volte in quanto può aiutare a diagnosticare vari problemi a volte.

La soluzione era semplicemente cron job e pulire la scatola di tanto in tanto.

Se riscontrassimo un problema ... commenteremmo il lavoro cron (temporaneamente) e leggevamo i registri e le e-mail per indizi.

Solo un pensiero ... e una soluzione semplice / veloce per te.

In caso contrario, dai un'occhiata al file sendmail.mc e modifica di conseguenza.


Aggiornamento rapido:

Questo non è esattamente quello che stai chiedendo, ma potrebbe darti alcune idee e aiutarti a far luce sulle cose per te:

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


Mi dispiace che non abbia aiutato. Tutto quello che voglio fare è non spedire la posta localmente, perché sendmail lo rende così difficile?

0

Personalmente sono più una persona postfix, ma sembra proprio che tu abbia configurato il server di invio per ricevere posta per @tuodominio.com. Se esiste un sendmail equivalente al meccanismo di trasporto in postfix, è quello che uso per instradare la posta internamente tra i miei server.


Non l'ho configurato così tanto, perché era l'impostazione predefinita per l'installazione di sendmail di centos.

0

Sembra che il tuo Ruleset 3 rimuova le informazioni del dominio. Di seguito ho incluso alcuni passaggi generali per la risoluzione dei problemi. Se questo non funziona, dovrai inviarmi il tuo sendmail.cf per dare un'occhiata.

Dall'output, example.com viene trattato come un dominio locale. fare un nslookup:

impostare q = mx

domain.com

Se questo fornisce l'indirizzo IP della macchina locale, allora devi guardare il tuo dns. Cerca anche in / etc / hosts per assicurarti che domain.com non sia elencato.

Sembra anche di rimuovere @ domain.com, potresti provare con qualcosa come user@stackoverflow.com per vedere se lo elenca anche come dominio locale.

Controlla anche il valore Cw nel tuo file sendmail.cf.


Grazie Francois, sto iniziando a capire un po 'meglio gli interni di sendmail. Ho deciso di cambiare il nome host della macchina per aggirare le cose per ora, quindi ora è www.example.com invece di example.com che significa che farebbe la consegna locale per user@www.example.com ma non user@example.com - il che è un buon compromesso per me in questa fase.

0

Probabilmente non è quello che vuoi, ma SSMTP è molto utile per un server solo in uscita, dove puoi specificare un hub di posta.


Grazie, darò un'occhiata a SSMTP, ma per ora sto ancora cercando di riparare sendmail.

0

Se si desidera restituire un errore durante il tentativo di consegna a un indirizzo locale, è possibile utilizzare la mappa di accesso e qualcosa di simile:

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

Se si desidera che i messaggi di posta elettronica vengano "recapitati" ma eliminati, è possibile installare una voce virtusertable che alias tutto per " @your.domain" su dev-null. Può essere utile continuare a consegnare almeno " root" localmente, perché spesso è il destinatario di rapporti e-mail da cronologia lavori ecc. Prova qualcosa di simile nel tuo virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Con un dev-nullalias locale che reindirizza i messaggi a / dev / null, questo dovrebbe continuare a recapitare la posta elettronica di root, ma eliminare i messaggi recapitati ad altri utenti.


0

La correzione di Pawel ha funzionato per me, ma sendmailconfig non esisteva su Centos, quindi ho dovuto eseguire

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

per ottenere la configurazione aggiornata


quella seconda regola non funziona / esiste sul mio centOS
solsol

0

Confermando solo che la risposta di Pawel ha risolto il mio problema molto simile.

Per chiunque usi FreeBSD ma non sia interessato a essere troppo coinvolto nella fatica dei file sendmail cf, la seguente sequenza è quella che useresti per aggiungere le due righe nell'esempio di 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

Ho seguito questi suggerimenti e ho notato che solo aggiungendo il passaggio di cui parla Pawel,

"/ etc / hosts che definisce example.com assegnato allo stesso indirizzo IP di cui sopra", fondamentalmente ho aggiunto il mio IP del server seguito dal nomeserver al /etc/hostsfile, e il gioco è fatto.

Mi è bastato ricevere le e-mail indirizzate tramite Google e tornare alle mie e-mail.


0

Se si utilizza Cpanel / WHM per gestire il server, assicurarsi di selezionare Scambiatore di posta remoto in Cpanel / WHM invece di Rileva automaticamente configurazione. Scambiatore di posta remoto invierà tutta la posta elettronica tramite i record MX, incluso il dominio locale. Con Automatico, le e-mail di dominio locale verranno indirizzate direttamente localmente e non verranno inviate a un server esterno definito nei record MX.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.