Deshabilitar la entrega local en Sendmail


31

Estoy usando Sendmail en un servidor Centos para enviar correos electrónicos para scripts PHP, pero el problema es que el correo se entrega a un buzón local en la máquina en lugar de lo que se especifica en los registros MX para el dominio, que en realidad apuntan a otra máquina I utilizar para correo electrónico.

Me gustaría que sendmail no intente entregar localmente el correo para el dominio para el que está configurada la máquina, ¿hay alguna manera simple de desactivar la entrega local?

El dominio no está en el archivo local-host-names.

Ya he buscado mucho en Google y he mirado:

Configuración de Sendmail para no entregar correo a la máquina local

Deshabilitar la entrega local en Sendmail

Pero o no hay respuesta o no es adecuado.

No quiero retransmitir a otro servidor, solo quiero que envíe correo independientemente del dominio.

Para dar un ejemplo:

Tengo dos servidores, uno es el servidor de correo en mail.example.com y un servidor web que es example.com, cuando uso el servicio smtp en el servidor web actualmente dirige el correo a un buzón local en example.com, pero debería ir a buzones en mail.example.com

La salida de sendmail -bt devuelve:

MODO DE PRUEBA DE DIRECCIÓN (el conjunto de reglas 3 NO se invoca automáticamente)
Entrar  
> 3,0 info@ejemplo.com
canonify input: info @ example. com
Entrada Canonify2: información 
Canonify2 devuelve: información 
canonify devuelve: información 
analizar entrada: información 
Entrada Parse0: información 
Parse0 devuelve: información 
Entrada ParseLocal: información 
ParseLocal devuelve: información 
Entrada Parse1: información 
Parse1 devuelve: $ # local $: info
análisis devuelve: $ # local $: info

stalkr.net/forum/… Parece ser lo más parecido a lo que realmente busco. Específicamente la configuración MAIL_HUB mencionada, pero no parece funcionar realmente.

Pruebe lo siguiente: sendmail -bt y luego escriba 3,0 user@domin.com. Le dará muchas reglas de reescritura, las últimas le darán el relé que usará. Por favor proporcione la salida.
Francois Wolmarans

Hola Francois, he editado mi pregunta para incluir la salida

Respuestas:


37

Lo que hice para deshabilitar la entrega local. Usaré el dominio example.com.

Requisitos:

  • example.com Una entrada que apunta a la dirección IP asignada a una de las interfaces eth.
  • / etc / hosts que define example.com asignado a la misma dirección IP que la anterior
  • Los registros MX de example.com apuntan a los servidores de Google (ASPMX.L.GOOGLE.COM, etc.)
  • instalación predeterminada de sendmail (la mía estaba en Ubuntu)

Pasos:

vim /etc/mail/sendmail.mc

al final:

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

y entonces:

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

pruebas:

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

Debería ver que se conecta al servidor de Google y luego debería ver que su correo se entrega a su bandeja de entrada de Google.


3
Esto funcionó perfecto, solo me pregunto por qué hay un. después del nombre de dominio.
Rodrigo

¡Funcionó perfectamente también!
Filipe Pina

¡Gracias! He estado tratando de arreglar esto por un tiempo. Hice lo siguiente; purgue y reinstale sendmail, ejecute sendmailconfig, agregue las líneas que especificó, sendmailconfigvuelva a ejecutar y haga una service sendmail restarty ¡funciona!
Liam Newmarch

@Rodrigo example.com. con un punto final es un FQDN canónico. El example.com sin punto es relativo y, por lo tanto, impreciso, por ejemplo, podría significar example.com.yourdomain.org. dependiendo de la configuración de su sistema operativo. Esta es exactamente la misma diferencia que entre /etc/passwdyetc/passwd
kubanczyk

4

Gracias a Sporker y Pawel me pusiste en la dirección correcta para arreglar esto.

Mi problema original era que sendmail estaba considerando mis cuentas de correo electrónico de dominio example.com como cuentas locales.

Estos enlaces resultaron muy útiles: Sendmail al dominio local ignorando los registros MX (parte 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignores-mailertable-some-semilocal-domains.html

Pero en mi caso, usando FreeBSD 8.2, lo que realmente funcionó fue:

# cd /etc/mail

# vim freebsd.mc

Agregue estas dos líneas:

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

Justo antes de:

MAILER(local)
MAILER(smtp)

# make

--- Esto es salida ---

 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

--- Fin de salida ---

# cp sendmail.cf sendmail.cf.bak

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

# /etc/rc.d/sendmail restart

Espero que esto ahorre algunos dolores de cabeza a alguien.


1

No soy una persona de sendmail, pero creo que sendmail tratará cualquier dominio almacenado /etc/mail/local-host-namescomo nombres de dominio locales.
Puedes intentar vaciar este archivo (no lo elimines) y reiniciar sendmail y ver cómo te va.

EDITAR
el nombre del archivo que he mencionado es en realidad situado en sendmail.cfy el suyo no puede ajustarse a local-host-names
mirar en /etc/mail/sendmail.cfpara

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

Esto no es de ninguna manera hechos probados sino solo yo pensando en voz alta.


Sí, es por eso que ya mencioné que el dominio no está en el archivo de nombres de host locales

Lo siento, eso me enseñará a responder preguntas que no leí correctamente.
aussielunix

Tenía este problema en un conjunto de servidores Solaris 10 recientemente parcheados (más o menos 100 parcheados, pero solo unos pocos experimentaron el problema). Esta fue la solución! ¡Gracias!
Señal15

0

Es posible que esta no sea la solución que está buscando, pero si su problema es que el usuario "administrador" o "raíz" está recibiendo muchos correos electrónicos y un buzón enorme, puede considerar configurar un trabajo cron para borrar el buzón fuera cada semana, día, etc.

Teníamos varios servidores CentOS con este problema, pero el problema era que queríamos poder leer el correo a veces, ya que puede ayudar a diagnosticar varios problemas a veces.

La solución fue simplemente cron job y limpiar la caja de vez en cuando.

Si encontramos un problema ... comentaríamos el trabajo cron (temporalmente) y leeremos los registros y correos electrónicos en busca de pistas.

Solo un pensamiento ... y una solución rápida / fácil para ti.

De lo contrario, eche un vistazo al archivo sendmail.mc y modifique en consecuencia.


Actualización rápida:

Esto no es exactamente lo que está pidiendo, pero podría darle algunas ideas y ayudarlo a arrojar algo de luz sobre usted:

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


Lo siento, eso no ha ayudado. Todo lo que quiero hacer es que no se entregue el correo localmente, ¿por qué sendmail lo hace tan difícil?

0

Personalmente, soy más una persona de postfix, pero esto se parece mucho a que hayas configurado el servidor de envío para recibir correo para @ tudominio.com. Si hay un sendmail equivalente al mecanismo de transporte en postfix, eso es lo que uso para enrutar el correo interno entre mis servidores.


No lo he configurado mucho, ya que era el valor predeterminado para una instalación de centos sendmail.

0

Parece que su conjunto de reglas 3 elimina la información del dominio. He incluido algunos pasos generales de solución de problemas a continuación. Si esto no funciona, deberá enviarme su sendmail.cf para echar un vistazo.

De la salida, example.com se trata como un dominio local. hacer un nslookup:

conjunto q = mx

dominio.com

Si esto le da la dirección IP de la máquina local, entonces debe mirar su dns. También busque en / etc / hosts para asegurarse de que domain.com no esté en la lista.

También parece eliminar el @ dominio.com, ¿podría intentar con algo como user@stackoverflow.com para ver si también lo enumera como un dominio local?

También verifique el valor de Cw en su archivo sendmail.cf.


Gracias Francois, estoy empezando a entender un poco mejor las partes internas de sendmail. Por ahora, he decidido cambiar el nombre de host de la máquina para solucionar los problemas, por lo que ahora es www.example.com en lugar de example.com, lo que significa que haría la entrega local para user@www.example.com pero no user@example.com, lo cual es un buen compromiso para mí en esta etapa.

0

Probablemente no sea lo que desea, pero SSMTP es muy bueno para un servidor solo de salida, donde puede especificar un centro de correo.


Gracias, echaré un vistazo a SSMTP, aunque todavía estoy intentando arreglar sendmail por ahora.

0

Si desea devolver un error cuando se intenta la entrega a una dirección local, puede usar el mapa de acceso y algo como:

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

Si desea que los mensajes de correo electrónico se 'entreguen' pero se desechen, puede instalar una entrada virtusable que alias todo " @your.domain" para dev-null. Puede ser útil seguir entregando al menos " root" localmente, porque a menudo es el destinatario de informes por correo electrónico de trabajos cron, etc. Intente algo como esto en su virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Con un dev-nullalias local que redirige los mensajes a / dev / null, esto debería seguir entregando correo electrónico raíz, pero desechando los mensajes entregados a otros usuarios.


0

La solución de Pawel funcionó para mí, pero sendmailconfig no existía en centos, así que tuve que ejecutar

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

para actualizar la configuración


esa segunda regla no funciona / existe en mi centOS
solsol

0

Simplemente confirmando que la respuesta de Pawel resolvió mi problema muy similar.

Para cualquiera que use FreeBSD pero no esté interesado en involucrarse demasiado en el trabajo de envío de archivos cf de sendmail, la siguiente secuencia es la que usaría para agregar las dos líneas en el ejemplo de 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

Seguí estas sugerencias y me di cuenta de que solo agregando el paso que mencionó Pawel,

"/ etc / hosts que define example.com asignado a la misma dirección IP anterior", básicamente agregué la IP de mi servidor seguido del nombre del servidor al /etc/hostsarchivo, y eso es todo.

Fue suficiente para mí recibir correos electrónicos enrutados a través de Google y volver a mis correos electrónicos.


0

Si está utilizando Cpanel / WHM para administrar su servidor, asegúrese de seleccionar Intercambiador de correo remoto en Cpanel / WHM en lugar de Detectar configuración automáticamente. Remote Mail Exchanger enviará todos los correos electrónicos a través de registros MX, incluido el dominio local. Con Automatic, los correos electrónicos de dominio local se enrutarán directamente localmente y no se enviarán a un servidor externo definido en los registros MX.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.