Como configurar o sendmail para enviar email via registro MX e não para o host local?

8

Estou tentando fazer com que o sendmail transfira e-mails para os servidores especificados nos registros MX; portanto, quando o servidor enviar um email para me@domínio.com, quero que ele pule o localhost e vá direto para o gmail.

Analisei os documentos do sendmail, mas não entendo como explicar minha situação. Essencialmente, o nome do host do meu servidor é 'www.domínio.com', mas quando envio um email para 'me@domínio.com', ele acaba no spool de correio local.

Quando executo o sendmail no modo de depuração:

sendmail -bt
> $=w

Eu recebo:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

Portanto, está interceptando todos os emails enviados para domain.com. Não quero que chegue localhost. Eu quero que ele vá para os servidores do Gmail.

Todo o correio vinculado a outros endereços funciona bem. Eu também tenho o sendmail configurado para usar o DKIM.

Adicionei um registro ao mailertable (reconstruí o mailertable.db e recompilei o arquivo mc> cf), mas não tenho certeza se é isso que preciso fazer ou se estou fazendo corretamente.

domain.com esmtp:[aspmx.l.google.com]

Como faço para permitir que o email vinculado para [email protected] saia do servidor?

INFORMAÇÕES ADICIONAIS: Aqui está o meu arquivo sendmail.mc:

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl
Polvo
fonte
1
A lógica da sua pergunta é completamente falha. Tudo se resume a "Não quero usar o Sendmail para enviar meus e-mails. Como reconfigurar o Sendmail com uma configuração extra para enviar e-mails exatamente como o Sendmail envia e-mails por padrão?" Resposta: deixe em paz. Sua pergunta precisa ser totalmente reformulada para entender o que você realmente está tentando fazer ou você precisa parar de se intrometer na configuração do servidor e deixá-lo fazer o que faz sem quebrá-la.
Sammitch 3/09/13
1
está bem então. Em alternativa, explique-me o que faria se pretender enviar apenas um email do servidor e não para ele.
Oct

Respostas:

8

Finalmente encontrei uma solução bastante abrangente aqui . Para resumir, há várias opções (a maioria mencionada em outras respostas, mas por qualquer motivo não funcionou no meu cenário específico).

Opção 1: remova a entrada de / etc / mail / local-host-names

para mim esse arquivo já estava vazio

Opção 2: remova qualquer entrada LOCAL_DOMAIN no arquivo mc

eu não tinha

Opção 3: diga ao sendmail para não analisar interfaces

define(`confDONT_PROBE_INTERFACES', `true')dnl

no meu caso, isso foi definido, mas o host problemático ainda estava presente na classe w do sendmail

Opção 4: renomeie o servidor. o link externo fornecido acima diz especificamente: "Se eu quiser remover o whipple.org da classe w, poderia renomear o servidor para frodo.whipple.org, www.whipple.org, elvis.whipple.org, por exemplo".

para mim isso não foi suficiente. com o host chamado www.domain.com , a classe sendmails ainda continha AMBOS www.domain.com AND domain.com (mesmo após uma reinicialização)

Opção 5: O QUE FUNCIONOU PARA MIM adicione um LOCAL_RULE_0 ao arquivo mc sendmail

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

isso precisa ir no final do arquivo e <tab>precisa ser um caractere de tabulação real

Polvo
fonte
Eu iria com a opção 5 e usando um bestmxmapa para torná-lo genérico.
adamo 5/09/13
Este funciona perfeitamente. Obrigado por Octopus LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com. > $ * <tab> $ # esmtp $ @ mail.domain.com $: $ 1 <@ domain.com.> $ 2 é necessário ir no final do arquivo e <tab>, na verdade, você precisa usar a tecla tab em vez de o código.
Vinodh Kumar 02/02
7

Mude o nome do host do servidor. Não há motivo válido para que um nome de host seja igual a um nome de domínio simples.

Michael Hampton
fonte
Sim, tentei isso, mesmo quando defino o nome do host como www.domain.com, o sendmail deseja manter tudo vinculado a www.domain.com, domain.com e localhost. Eu posso ver que quando executo o sendmail no modo de depuração e digite $ = w. Eu reformulei a pergunta um pouco para explicar.
Octopus
3

Aqui está o meu entendimento da sua pergunta:

  1. Você instalou o Sendmail para poder usá-lo para enviar email do seu site.

  2. Você configurou o Sendmail para ser o servidor de email autoritativo do seu espaço para nome DNS público.

  3. Você não deseja que o Sendmail seja autoritário para seu espaço de nome DNS público. Você deseja que o email enviado para o espaço de nome DNS público seja enviado para o email hospedado no Google.

Solução: reconfigure o Sendmail para que ele não seja autorizado para o seu espaço para nome DNS público.

joeqwerty
fonte
2
Minha pergunta é sobre a configuração do sendmail. Sua resposta pode ser mais específica do que "reconfigurar o sendmail"?
Octopus
0

Não tenho muita experiência com a configuração do sendmail, mas acho que deve estar fazendo a coisa certa com relação aos registros MX. No entanto, imagino que seja possível que, na precedência das pesquisas de DNS, o sendmail esteja primeiro consultando o arquivo de hosts locais /etc/hostsna maioria dos sistemas operacionais baseados em unix antes de usar seus servidores DNS. Se for esse o caso, e houver uma entrada no arquivo hosts que se refira à sua máquina como domain.com, se você definir isso como o nome do host, pode ser o que está acontecendo. Você pode editar o arquivo hosts para atender às suas necessidades nesse caso específico, modificando as entradas ou adicionando novas.

Ou você pode configurar o sendmail para ignorar o arquivo de hosts do sistema local ao resolver URLs. Não sei bem como fazer isso.

inetplumber
fonte
0

1) O Sendmail preenche automaticamente a lista dos domínios de email locais ( $=w).

Você não pode desativá-lo usando a seguinte linha no seu sendmail.mc:

define(`confDONT_PROBE_INTERFACES',`True')

Você pode adicionar emails locais "manualmente" no /etc/mail/local-host-namesarquivo.
(Requer HUPing ou reiniciar o daemon sendmail depois)

2) O Sendmail pode adicionar (configurado automaticamente) "este nome de email do host" ( $j) à lista de domínios de email locais.

Você pode definir "este nome de email do host"

define(`confDOMAIN_NAME',`hostname.example.net')

3) NÃOmailertable é consultado para entregas nos domínios listados em .$=w

AnFi
fonte
mas define ( confDONT_PROBE_INTERFACES',True ') já está (e sempre foi) ativado
Octopus
Portanto, o seu caso pode ser coberto por opção 2.
Anfi
Essas são todas as boas sugestões que eu explorei completamente, mas acredito que a opção 2 é a mesma que adicionar hosts ao arquivo de nomes de host local. Neste caso, eu quero excluir um host e não incluir um.
Octopus
0

O código que está enviando o e-mail, você está usando um endereço de e-mail completo ou apenas o servidor envia por e-mail por uma conta local? Porque:

Isso está dizendo ao sendmail para entregar todos os emails para [email protected] localmente

LOCAL_DOMAIN(`localhost.localdomain')dnl

E isso está dizendo ao sendmail para reescrever os domínios nos endereços locais para domain.com, mas não altera a entrega local .

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

está bem então. Em alternativa, explique-me o que faria se pretender enviar apenas um email do servidor e não para ele.

Etapa 1: Volte para a configuração padrão.
Etapa 2: use a configuração padrão.

Sammitch
fonte
Sim, está certo, mas estou enviando para [email protected]. A configuração padrão tem exatamente os mesmos problemas que descrevi na pergunta.
Polvo