Desativar entrega local no Sendmail


31

Estou usando o Sendmail em um servidor Centos para enviar email para scripts PHP, mas o problema é que o email é entregue em uma caixa de correio local na máquina em vez do especificado nos registros MX do domínio - que na verdade apontam para outra máquina. use para email.

Gostaria que o sendmail não tentasse entregar localmente emails para o domínio em que a máquina está configurada. Existe uma maneira simples de desativar a entrega local?

O domínio não está no arquivo de nomes de host local.

Já pesquisei bastante no Google e já vi:

Configuração do Sendmail para não entregar emails na máquina local

Desativar entrega local no Sendmail

Mas ou não há resposta ou não é adequado.

Não quero retransmitir para outro servidor, só quero que ele envie e-mails, independentemente do domínio.

Para fornecer um exemplo:

Eu tenho dois servidores, um é o servidor de correio em mail.example.com e um servidor web que é exemplo.com. Quando uso o serviço smtp no servidor Web, ele atualmente encaminha o correio para uma caixa de correio local em exemplo.com, mas deve ir para as caixas de correio em mail.example.com

Saída de sendmail -bt retorna:

MODO DE TESTE DE ENDEREÇO ​​(conjunto de regras 3 NÃO invocado automaticamente)
Entrar  
> 3,0 info@example.com
canonificar entrada: info @ exemplo. com
Entrada Canonify2: informações 
Canonify2 retorna: informações 
canonify retorna: informações 
analisar entrada: informações 
Entrada Parse0: informações 
Parse0 retorna: informações 
ParseLocal input: info 
ParseLocal retorna: informações 
Entrada Parse1: informações 
Parse1 retorna: $ # local $: informações
análise retorna: $ # local $: informações

stalkr.net/forum/… Parece ser a coisa mais próxima do que realmente estou procurando. Especificamente, a configuração MAIL_HUB mencionada, mas não parece realmente funcionar.

Tente o seguinte: sendmail -bt e digite 3,0 user@domin.com Isso fornecerá muitas regras de reescrita, as últimas deverão fornecer a retransmissão que serão usadas. Por favor, forneça a saída.
Francois Wolmarans 15/09/09

Oi Francois, eu editei a minha pergunta para incluir a saída

Respostas:


37

O que fiz para desativar a entrega local. Vou usar o domínio example.com.

Requisitos:

  • example.com Uma entrada apontando para o endereço IP atribuído a uma das interfaces eth.
  • / etc / hosts que definem example.com atribuído ao mesmo endereço IP como acima
  • registros MX do example.com apontando para servidores do Google (ASPMX.L.GOOGLE.COM, etc)
  • instalação padrão do sendmail (a minha estava no Ubuntu)

Passos:

vim /etc/mail/sendmail.mc

no fim:

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

e depois:

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

teste:

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

Você deve vê-lo se conectando ao servidor do Google e, em seguida, seu e-mail sendo entregue na sua caixa de entrada do Google.


3
Isso funcionou perfeito, eu só me pergunto por que há um. após o nome do domínio.
Rodrigo

Trabalhou perfeitamente também!
Filipe Pina

Obrigado! Eu tenho tentado consertar isso por um tempo. Eu fiz o seguinte; limpe e reinstale o sendmail, execute sendmailconfig, adicione as linhas que você especificou, execute sendmailconfignovamente e execute um service sendmail restarte funciona!
Liam Newmarch

@Rodrigo example.com. com um ponto final é um FQDN canônico. O exemplo.com sem ponto é relativo e, portanto, impreciso, por exemplo, pode significar exemplo.com.seudominio.org. dependendo das configurações do seu sistema operacional. Esta é exatamente a mesma diferença que entre /etc/passwdeetc/passwd
kubanczyk

4

Graças a sporker e Pawel, você me colocou na direção certa para corrigir isso.

Meu problema original era que o sendmail estava considerando minhas contas de email do domínio example.com como contas locais.

Esses links se mostraram muito úteis: Sendmail para o domínio local, ignorando os registros MX (parte 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignora-mailertable-some-semilocal-domains.html

Mas no meu caso, usando o FreeBSD 8.2, o que realmente fez o truque foi:

# cd /etc/mail

# vim freebsd.mc

Adicione estas duas linhas:

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

Logo antes:

MAILER(local)
MAILER(smtp)

# make

--- Isso é saída ---

 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

--- Fim da saída ---

# cp sendmail.cf sendmail.cf.bak

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

# /etc/rc.d/sendmail restart

Espero que isso evite algumas dores de cabeça para alguém.


1

Não sou uma pessoa do sendmail, mas acredito que o sendmail tratará qualquer domínio armazenado /etc/mail/local-host-namescomo nomes de domínio local.
Você pode tentar esvaziar este arquivo (não o excluir) e reiniciar o sendmail e ver como está.

EDIT
o nome do arquivo que eu mencionei é realmente definido em sendmail.cfe seu não pode ser definido para local-host-names
olhar nos /etc/mail/sendmail.cfpara

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

Isso não é de forma alguma fatos testados, mas apenas eu pensando em voz alta.


Sim, isso é porque eu já mencionados o domínio não está no Hospedeiro nomes locais arquivo

Desculpe, isso me ensinará a responder perguntas que não li corretamente.
Aussielunix 15/09/09

Teve esse problema em um conjunto de servidores Solaris 10 recentemente corrigidos (100 ou mais atualizados, mas apenas um punhado com o problema). Essa foi a solução! Obrigado!
Signal15

0

Pode não ser a solução que você está procurando, mas se o seu problema é que o usuário "admin" ou "root" está recebendo muitos emails e uma caixa de correio enorme, convém considerar a configuração de um trabalho cron para limpar a caixa de correio todas as semanas, dias etc.

Tínhamos vários servidores CentOS com esse problema, mas o problema era que queríamos poder ler o e-mail algumas vezes, pois isso pode ajudar a diagnosticar vários problemas.

A solução era simplesmente agendar tarefas e limpar a caixa de vez em quando.

Se encontrássemos um problema ... comentaríamos o trabalho do cron (temporariamente) e leríamos os registros e e-mails em busca de pistas.

Apenas um pensamento ... e uma solução rápida / fácil para você.

Caso contrário, consulte o arquivo sendmail.mc e modifique-o de acordo.


Rápida atualização:

Não é exatamente isso que você está pedindo, mas pode lhe dar algumas idéias e ajudar a esclarecer algumas coisas para você:

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


Desculpe, isso não ajudou. Tudo o que eu quero fazer é que nenhum email seja entregue localmente, por que o sendmail torna isso tão difícil?

0

Pessoalmente, sou mais uma pessoa pós-fixa, mas isso parece muito com você ter configurado o servidor de envio para receber e-mail em @ seudominio.com. Se houver um sendmail equivalente ao mecanismo de transporte no postfix, é isso que eu uso para rotear emails internamente entre meus servidores.


Eu não o configurei muito, pois era o padrão para uma instalação do centos sendmail.

0

Parece que seu conjunto de regras 3 retira as informações do domínio. Incluímos algumas etapas gerais de solução de problemas abaixo. Se isso não funcionar, você terá que me enviar seu sendmail.cf para dar uma olhada.

A partir da saída, example.com é tratado como um domínio local. faça uma pesquisa:

definir q = mx

domain.com

Se isso fornecer o endereço IP da máquina local, você precisará examinar o seu DNS. Procure também em / etc / hosts para garantir que domain.com não esteja listado.

Também parece remover o @ domain.com. Você pode tentar algo como user@stackoverflow.com para ver se ele também o lista como domínio local.

Verifique também o valor Cw no seu arquivo sendmail.cf.


Obrigado François, estou começando a entender um pouco melhor os internos do sendmail. Decidi alterar apenas o nome do host da máquina para solucionar as coisas por enquanto, agora é www.example.com em vez de example.com, o que significa que faria entrega local para user@www.example.com, mas não user@example.com - o que é um bom compromisso para mim neste estágio.

0

Provavelmente não é o que você deseja, mas o SSMTP é muito bom para um servidor somente de saída, onde você pode especificar um hub de correio.


Obrigado, vou dar uma olhada no SSMTP, ainda tentando consertar o sendmail por enquanto.

0

Se você deseja retornar um erro ao tentar a entrega em um endereço local, use o mapa de acesso e algo como:

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

Se você deseja que as mensagens de email sejam 'entregues', mas descartadas, você pode instalar uma entrada virtusertable que aliase tudo " @your.domain" para dev-null. Pode ser útil continuar entregando pelo menos rootlocalmente, " " porque geralmente é o destinatário dos relatórios de email dos trabalhos cron etc. Tente algo como isto em virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Com um dev-nullalias local que redireciona as mensagens para / dev / null, isso deve continuar fornecendo email raiz, mas descarte as mensagens entregues a outros usuários.


0

A correção de Pawel funcionou para mim, mas o sendmailconfig não existia nos centos, então eu tive que executar

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

para atualizar a configuração


essa segunda regra não trabalho / existe no meu centOS
solsol

0

Apenas confirmando que a resposta de Pawel resolveu meu problema muito semelhante.

Para quem usa o FreeBSD, mas não está interessado em se envolver demais com a labuta de arquivos cf do sendmail, a seguinte seqüência é o que você usaria para adicionar as duas linhas no exemplo 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

Segui essas sugestões e notei que apenas adicionando a etapa mencionada pelo pawel,

"/ etc / hosts definindo example.com atribuído ao mesmo endereço IP que o anterior", basicamente adicionei o IP do meu servidor seguido pelo nome do servidor ao /etc/hostsarquivo, e é isso.

Foi o suficiente para eu receber emails roteados via google e voltar para meus emails.


0

Se você estiver usando o Cpanel / WHM para gerenciar seu servidor, selecione Trocador de Correio Remoto no Cpanel / WHM em vez de Detectar Configuração Automaticamente. O Remote Mail Exchanger enviará todos os emails por meio de registros MX, incluindo o domínio local. Com o Automático, os emails de domínio local serão roteados diretamente localmente e não serão enviados para um servidor externo definido nos registros MX.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.