Como eu configuro o sendmail para enviar e-mail via registro MX e não para localhost?

8

Estou tentando fazer com que o sendmail transfira e-mails para os servidores especificados nos registros MX, assim, quando o servidor envia um e-mail para [email protected], eu quero pular o localhost e ir direto para o gmail.

Eu examinei os documentos do sendmail, mas não entendo como explicar minha situação. Essencialmente, o nome de host do meu servidor é 'www.domain.com', mas quando eu envio um email para '[email protected]', 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, ele está interceptando todos os e-mails enviados para domain.com . Eu não quero que ele chegue em localhost . Eu quero ir para servidores do Gmail.

Todos os e-mails destinados a outros endereços funcionam bem. Eu também tenho o sendmail configurado para usar o DKIM.

Eu adicionei um registro a mailertable (e recompilei 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 mensagens enviadas para [email protected] saiam do servidor?

INFO ADICIONAL: 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
    
por Octopus 03.09.2013 / 23:35

6 respostas

8

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

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

para mim este arquivo já estava vazio

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

eu não tinha nenhum

Opção 3: diga ao sendmail para não testar 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, eu 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.dominio.com , a classe sendmails ainda continha AMBOS www.dominio.com E dominio.com (mesmo depois de uma reinicialização)

Opção 5: ESTE É O QUE TRABALHAU PARA MIM adicione um LOCAL_RULE_0 ao arquivo mc do 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

    
por 05.09.2013 / 01:52
7

Altere o nome do host do servidor. Não há nenhum motivo válido para um nome de host ser igual a um nome de domínio sem cobertura.

    
por 04.09.2013 / 01:20
3

Aqui está o meu entendimento da sua pergunta:

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

  2. Você configurou o Sendmail para ser o servidor de e-mail autoritativo do seu namespace DNS público.

  3. Você não deseja que o Sendmail seja autoritativo para o seu namespace DNS público. Você deseja que o e-mail enviado para seu namespace DNS público seja enviado para seu e-mail hospedado pelo Google.

Solução: reconfigure o Sendmail para que ele não seja autoritativo para o seu namespace DNS público.

    
por 04.09.2013 / 01:28
0

Eu não tenho muita experiência com a configuração do sendmail, mas acho que deveria 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 primeiro consulte o arquivo de hosts locais /etc/hosts na maioria dos sistemas operacionais baseados em unix antes de usar seus servidores DNS. Se esse for o caso, e houver uma entrada no arquivo de hosts que se refere à sua máquina como domain.com se você definir isso como o nome do host, isso pode ser o que está acontecendo. Você pode editar o arquivo de hosts para atender às suas necessidades neste 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 tenho certeza de como fazer isso.

    
por 04.09.2013 / 00:02
0

1) O Sendmail preenche automaticamente a lista de 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 e-mails locais "manualmente" no arquivo /etc/mail/local-host-names .
(Requer HUPing ou reiniciar o daemon do sendmail depois)

2) O Sendmail pode adicionar (autoconfigurado) "este nome de e-mail do host" ( $j ) à lista de domínios de e-mail locais.

Você pode definir "este nome de e-mail do host"

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

3) mailertable é NÃO consulta para entregas em domínios listados em $=w .

    
por 04.09.2013 / 10:55
0

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

Isso está dizendo ao sendmail para entregar todos os e-mails para [email protected] localmente

LOCAL_DOMAIN('localhost.localdomain')dnl

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

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

okay then. alternatively, explain to me what i would do if i only want to send email from the server and not to it.

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

    
por 04.09.2013 / 18:58

Tags