Esta resposta não aceita mensagens para todo o TLD "ca". Isso porque descobri que os domínios curinga na tabela VirtUser exigem a correção de um arquivo m4.
Esta resposta fornece uma maneira de obter uma lista de domínios .ca e reescrever o destinatário para um endereço externo.
Instale o Sendmail, inicie-o.
apt-get install sendmail
service sendmail start
Fazendo a listagem do sendmail em todos os adaptadores
Por padrão, o sendmail irá escutar no host local (127.0.0.1). Precisamos editar o sendmail.mc para fazê-lo escutar em todos os IPs.
vim /etc/mail/sendmail.mc
Alterar:
DAEMON_OPTIONS('Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
... Para ...
DAEMON_OPTIONS('Family=inet, Name=MTA-v4, Port=smtp, Addr=0.0.0.0')dnl
... então construa o arquivo sendmail.cf:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
... então reinicie o sendmail:
service sendmail restart
Agora precisamos confirmar que o sendmail está escutando em todos os adaptadores. Use netstat, você deve obter algo assim:
netstat -tpln
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
...
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 6104/sendmail: MTA:
...
Fazendo o e-mail do RELAY do sendmail para o TLD "ca":
Precisamos editar o arquivo "access" para dizer ao sendmail para aceitar e-mails para o TLD "ca".
vim /etc/mail/access
Adicione isso em qualquer lugar próximo a outras instruções "RELAY". Isso faz com que o sendmail aceite qualquer email com um endereço de destinatário '* .ca'.
To:ca RELAY
Salvar e sair ...
Em seguida, use o makemap para criar o arquivo de mapeamento access.db:
makemap hash /etc/mail/access < /etc/mail/access
Reinicie o sendmail:
service sendmail restart
Testando a instrução RELAY com o telnet do servidor externo:
De um servidor externo, use o telnet para testar manualmente um destinatário "* .ca":
telnet your_mail.server 25
Aqui estão os comandos que eu digitei na sessão de telnet:
helo testing.com
mail from: [email protected]
rcpt to: [email protected]
quit
Aqui está uma amostra de como a saída deve ser:
root@zim:~# telnet dib.ttucker.net 25
Trying 52.43.174.20...
Connected to dib.ttucker.net.
Escape character is '^]'.
220 localhost ESMTP Sendmail 8.15.2/8.15.2/Debian-3; Mon, 5 Jun 2017 04:36:55 GMT; (No UCE/UBE) logging access from: [23.227.163.72](FORGED)-billing.bizzhost.com [23.227.163.72] (may be forged)
helo testing.com
250 localhost Hello billing.bizzhost.com [23.227.163.72] (may be forged), pleased to meet you
mail from: [email protected]
250 2.1.0 [email protected]... Sender ok
rcpt to: [email protected]
250 2.1.5 [email protected]... Recipient ok
quit
221 2.0.0 localhost closing connection
Connection closed by foreign host.
Se você ver isso:
rcpt to: [email protected]
550 5.7.1 [email protected]... Relaying denied. IP name possibly forged [23.227.163.72]
... então algo não está funcionando ...
Configurado virtusertable e virtuser-domains
Para reescrever o destinatário de qualquer e-mail recebido para nossos domínios .ca, estamos usando o virtusertable.
Primeiro editamos o sendmail.mc novamente para ativar alguns recursos:
vim /etc/mail/sendmail.mc
Encontre a linha:
FEATURE('access_db', , 'skip')dnl'
... e adicione as seguintes linhas depois ...
FEATURE('virtusertable')dnl
VIRTUSER_DOMAIN_FILE('/etc/mail/virtuser-domains')dnl
FEATURE('virtuser_entire_domain')dnl
Observação: a sintaxe FEATURE () começa com um backtick e termina com uma aspa simples
... salve e saia ...
Compile o arquivo de configuração:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
Adicionando um domínio ao arquivo virtuser-domains:
Precisamos dizer ao sendmail para quais domínios ele deve procurar a tabela virt user. Como o sendmail faz a melhor correspondência da mão esquerda no domínio, podemos colocar apenas o TLD "ca" aqui ...
vim /etc/mail/virtuser-domains
... adicione o domínio "ca":
ca
... (sim, o arquivo contém apenas "ca") ... salve e saia
Adicionando as reescritas à tabela dos virtusers:
Em seguida, precisamos informar ao sendmail o que reescrever para fazer. Nós adicionamos estes ao virtusertable. Como dito acima, você precisará adicionar cada domínio a esse arquivo manualmente ou com um script.
vim /etc/mail/virtusertable
... adicione seus domínios:
@derp.ca [email protected]
@another.ca [email protected]
@sendmail.ca [email protected]
... salve e saia ...
Agora precisamos fazer o makemap novamente:
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
Nota: você deve ter um arquivo /etc/mail/virtusertable.db agora
... reinicie o sendmail:
service sendmail restart
Testando a reescrita com o sendmail -bv
Você pode usar o sendmail no servidor para testar se as regras virtuertáveis estão funcionando conforme o esperado:
root@dib:/etc/mail# sendmail -bv [email protected]
[email protected]... deliverable: mailer esmtp, host gmail.com., user [email protected]
Testando um email real:
Em um servidor externo, execute o telnet novamente:
telnet your_email.server 25
... depois que o banner voltar, copie e cole o seguinte:
helo testing.com
mail from: [email protected]
rcpt to: [email protected]
data
subject: This is a test
from: [email protected]
to: [email protected]
Hello Self,
This is a test.
Regards,
.
quit
Todos juntos, devem ficar assim:
root@zim:~# telnet dib.ttucker.net 25
Trying 52.43.174.20...
Connected to dib.ttucker.net.
Escape character is '^]'.
220 dib.ttucker.net ESMTP Sendmail 8.15.2/8.15.2/Debian-3; Mon, 5 Jun 2017 06:28:46 GMT; (No UCE/UBE) logging access from: [23.227.163.72](FORGED)-billing.bizzhost.com [23.227.163.72] (may be forged)
helo testing.com
mail from: [email protected]
rcpt to: [email protected]
data
subject: This is a test
from: [email protected]
to: [email protected]
Hello Self,
This is a test.
Regards,
.
quit250 dib.ttucker.net Hello billing.bizzhost.com [23.227.163.72] (may be forged), pleased to meet you
250 2.1.0 [email protected]... Sender ok
250 2.1.5 [email protected]... Recipient ok
354 Enter mail, end with "." on a line by itself
250 2.1.0 [email protected]... Sender ok
250 2.1.5 [email protected]... Recipient ok
354 Enter mail, end with "." on a line by itself
250 2.0.0 v556SkbP009313 Message accepted for delivery
250 2.1.0 [email protected]... Sender ok
250 2.1.5 [email protected]... Recipient ok
354 Enter mail, end with "." on a line by itself
221 2.0.0 dib.ttucker.net closing connection
Connection closed by foreign host.
Depois de pensar:
Você também pode querer aumentar o nível de log do sendmail porque o nível de log padrão não é muito detalhado.
Adicione o seguinte ao sendmail.mc, faça a compilação e reinicie:
define('confLOG_LEVEL', '14')dnl
Google "cinza listado" me muito rapidamente ... eu acho que ...
Então, meu primeiro teste de e-mail passou e foi colocado em spam. Depois de cada teste, recebo um código 4xx (deferimento) dos servidores do Gmail. Isso faz sentido, já que isso parece com coisas horríveis de spam ...
O correio acabou por passar, mas demorou alguns minutos. A emissão de códigos 4xx é uma maneira que os servidores de correio usam para enviar spam em "limitar a taxa" procurando servidores.
Você provavelmente desejará configurar regras de lista de permissões no servidor de recebimento, pois esses e-mails, já que eles parecerão com spam.
Como isso é nos logs do sendmail:
Note que isso é com o nível de registro "20" porque mostra a mensagem bloqueada e eu estava solucionando problemas:
root@dib:/etc/mail# grep v556cKKt010016 /var/log/mail.log
Jun 5 06:38:20 dib sm-mta[10016]: v556cKKt010016: Milter: no active filter
Jun 5 06:38:21 dib sm-mta[10016]: v556cKKt010016: --- 220 dib.ttucker.net ESMTP Sendmail 8.15.2/8.15.2/Debian-3; Mon, 5 Jun 2017 06:38:20 GMT; (No UCE/UBE) logging access from: [23.227.163.72](FORGED)-billing.bizzhost.com [23.227.163.72] (may be forged)
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: <-- helo testing.com
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: --- 250 dib.ttucker.net Hello billing.bizzhost.com [23.227.163.72] (may be forged), pleased to meet you
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: <-- mail from: [email protected]
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: --- 250 2.1.0 [email protected]... Sender ok
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: <-- rcpt to: [email protected]
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: --- 250 2.1.5 [email protected]... Recipient ok
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: <-- data
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: --- 354 Enter mail, end with "." on a line by itself
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: [email protected], size=110, class=0, nrcpts=1, msgid=<[email protected]>, proto=SMTP, daemon=MTA-v4, relay=billing.bizzhost.com [23.227.163.72] (may be forged)
Jun 5 06:38:25 dib sm-mta[10016]: v556cKKt010016: --- 250 2.0.0 v556cKKt010016 Message accepted for delivery
Jun 5 06:38:25 dib sm-mta[10020]: v556cKKt010016: makeconnection (gmail-smtp-in.l.google.com. [IPv6:2607:f8b0:400e:c04:0:0:0:1a]) failed: Network is unreachable
Jun 5 06:40:25 dib sm-mta[10020]: v556cKKt010016: makeconnection (gmail-smtp-in.l.google.com. [173.194.202.26]) failed: Connection timed out with gmail-smtp-in.l.google.com.
Jun 5 06:40:26 dib sm-mta[10020]: v556cKKt010016: makeconnection (alt1.gmail-smtp-in.l.google.com. [IPv6:2607:f8b0:4001:c1a:0:0:0:1b]) failed: Network is unreachable
Jun 5 06:42:26 dib sm-mta[10020]: v556cKKt010016: makeconnection (alt1.gmail-smtp-in.l.google.com. [173.194.196.26]) failed: Connection timed out with alt1.gmail-smtp-in.l.google.com.
Jun 5 06:42:26 dib sm-mta[10020]: v556cKKt010016: makeconnection (alt2.gmail-smtp-in.l.google.com. [IPv6:2607:f8b0:4002:c03:0:0:0:1b]) failed: Network is unreachable
Jun 5 06:44:26 dib sm-mta[10020]: v556cKKt010016: makeconnection (alt2.gmail-smtp-in.l.google.com. [173.194.219.27]) failed: Connection timed out with alt2.gmail-smtp-in.l.google.com.
Jun 5 06:44:26 dib sm-mta[10020]: v556cKKt010016: makeconnection (alt3.gmail-smtp-in.l.google.com. [IPv6:2607:f8b0:400d:c0c:0:0:0:1a]) failed: Network is unreachable
Jun 5 06:44:26 dib sm-mta[10020]: v556cKKt010016: SMTP outgoing connect on ip-172-31-42-65.us-west-2.compute.intern
Jun 5 06:44:27 dib sm-mta[10020]: v556cKKt010016: [email protected], delay=00:06:02, xdelay=00:06:02, mailer=esmtp, pri=120110, relay=alt3.gmail-smtp-in.l.google.com. [173.194.68.26], dsn=2.0.0, stat=Sent (OK 1496645067 v28si8540518qth.285 - gsmtp)
Jun 5 06:44:27 dib sm-mta[10020]: v556cKKt010016: done; delay=00:06:02, ntries=1