sviluppo-web-qa.it

Disabilita la consegna locale in Sendmail

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

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 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 INDIRIZZO (set di regole 3 NON richiamato automaticamente) 
 Immettere 
> 3,0 [email protected] 
 Input canonify: info @ esempio. com 
 Canonify2 input: info 
 Canonify2 restituisce: info 
 canonify restituisce: info 
 analizza input: info 
 analizza0 input: info 
 Restituisce Parse0: info 
 Input ParseLocal: info 
 Restituisce ParseLocal: info 
 Input Parse1: info 
 Restituisce Parse1: $ # local $: info 
 restituisce analisi: $ # local $: info 
31
user6091

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: [email protected]\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.

38

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. htmlhttp://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-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 mal di testa a qualcuno.

4
estepix

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

[~ ~ #] modifica [~ ~ #]
Il nome file che ho citato in realtà è impostato in sendmail.cf e il tuo potrebbe non essere impostato su local-Host-names
guarda dentro /etc/mail/sendmail.cf per

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

Non si tratta affatto di fatti testati, ma solo di una mia riflessione ad alta voce.

1
aussielunix

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 cf di sendmail, 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
sporker

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.

0
Ali Poonawala

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

0
Trevor Harrison

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 avessimo riscontrato 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

0
KPWINC

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.

0
Greeblesnort

Se si desidera restituire un errore quando si tenta di consegnare a un indirizzo locale, è possibile utilizzare la mappa di accesso e qualcosa di simile:

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

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

[email protected] local:root

@your.domain local:dev-null

Con un locale dev-null alias 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
gkeramidas

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 [email protected] per vedere se lo elenca anche come dominio locale.

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

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", in pratica ho aggiunto il mio IP del server seguito dal nomeserver al /etc/hosts file e il gioco è fatto.

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

0
user737133

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

0
Joshua Vial