DKIM assina correio de saída de qualquer domínio (com Postfix e Ubuntu)

38

Eu tenho a configuração do DKIM no meu servidor de e-mail (postfix e ubuntu) para assinar e-mails enviados. Eu usei estas instruções: link

No entanto, preciso que ele assine e-mails de qualquer domínio (no endereço De) e não apenas do meu. Estou construindo um serviço de boletim informativo por e-mail e os clientes enviarão seus próprios e-mails através do servidor.

Primeiro eu defino "Domain *" no /etc/dkim-filter.conf. Isso incluiu os cabeçalhos DKIM em todos os e-mails enviados, independentemente do domínio.

No entanto, a verificação de verificação falha no Gmail porque está verificando o domínio no endereço de e não no meu domínio (e no registro do DNS). Alguém sabe como fazer isso?

    
por Brian Armstrong 11.08.2009 / 18:41

4 respostas

40
Ok, eu consegui descobrir isso sozinho, mas eu queria postar os passos aqui para a posteridade, porque não havia documentação sobre isso (que eu encontrei) e foi praticamente chute e cheque.

Depois de definir "Domínio *" como descrito acima, ele seria assinado assim:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

observe o "d = clientdomain.com". Ele estava gerando isso com base no endereço de e-mail, onde o endereço do remetente era algo como "[email protected]". Obviamente, se ele checou o domínio do cliente e não o meu, nenhum registro TXT do DNS estava lá e a verificação falharia.

Enfim, descobri neste documentaion que você pode definir um parâmetro KeyList. link

Não descrevia realmente o que eu queria fazer, mas imaginei que iria brincar com ele. Eu comentei o KeyFile e configurei o KeyList para "/etc/mail/dkim_domains.key", que é um nome de arquivo arbitrário que inventei. Eu criei esse arquivo e coloquei nele "*: feedmailpro.com: /etc/mail/dkim.key". Isso diz para qualquer domínio do cliente, assiná-lo com meu domínio (feedmailpro.com) e usar o arquivo dkim.key.

DKIM reiniciado e postfix

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

Agora, essa é a chave gerada quando enviei um e-mail de teste.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

Melhoria, você vê que o d = now está definido para o meu domínio (mesmo que o endereço de e-mail não seja meu domínio). No entanto s = foi alterado para "dkim.key" em vez do seletor que eu escolhi no dkim-filter.conf. Nas instruções de configuração originais , defini o seletor como "mail". Isso foi estranho, mas notei que mudou para o nome do arquivo da minha chave, dkim.key.

Então eu fui e renomei "/etc/mail/dkim.key" para "/ etc / mail / mail". Também atualizou a referência a ele em "/etc/mail/dkim_domains.key".

Reinicie o dkim-filter e o postfix novamente, como acima, e agora ele começou a funcionar. Aqui está o cabeçalho final que assina corretamente usando o seletor direito (aparentemente baseado no nome do arquivo da chave).

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

Agora s = mail está certo, e d = feedmailpro.com está certo. Funciona!

No geral, isso foi muito mais difícil do que eu esperava e parecia não haver documentação sobre como fazer isso (assinando todos os domínios de saída), mas acho que é um software de código aberto, então não posso reclamar.

Uma observação final, para verificar se o registro DNS TXT foi configurado corretamente, você pode fazer um comando como o seu domínio

dig mail._domainkey.feedmailpro.com TXT

Pode ser necessário instalar o dig (sudo apt-get install dig). Se você estiver usando o gerenciador do Slicehost para adicionar a entrada DNS, insira o registro TXT assim.

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

Eu realmente não entendo porque o nome está definido para "mail._domainkey" sem um período no final ou sem o meu domínio, como "mail._domainkey.feedmailpro.com". Mas seja como for, parece funcionar, então estou feliz.

Se você está tentando duplicar isso, aqui estão as instruções que eu comecei com: link

    
por 11.08.2009 / 19:04
15

Inspirado pela resposta de Brian Armstrong para o dkim-filter, aqui está como eu fiz isso para o OpenDKIM .

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

Observe que SigningTable tem refile: em sua definição, isso especifica que o arquivo inclui expressões regulares; no nosso caso, o curinga *.

/etc/mail/dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

Aqui keyname é usado para corresponder a chave entre esse arquivo e o arquivo dkim_signing_table. No meu arquivo real eu nomeei isso como o meu seletor.

example.com e o seletor deve ser substituído pelo domínio e seletor que você deseja usar nas d = e s = respectivamente.

/etc/mail/dkim_signing_table

*   keyname

Este endereço de mapa simples de arquivo encontrado no cabeçalho De: para uma chave na dkim_key_table. Nesse caso, queremos que todos os emails enviados por esse servidor sejam assinados com a mesma chave, de modo que um caractere curinga * seja usado.

    
por 10.12.2010 / 12:37
3

Tópico antigo, mas talvez alguém mais ache que isso seja útil para saber que a versão 2.x do opendkim funciona com o KeyTable em vez do KeyList.

Você pode converter seu arquivo KeyList com a ferramenta opendkim-convert-keylist ( link )

Você pode ler mais sobre a implementação do KeyTable na página do manual do opendkim: ( link )

    
por 23.12.2013 / 15:52
2

I don't really understand why the name is set to "mail._domainkey" without a period

A documentação do filtro DKIM é geralmente instalada no formato man do unix. Apenas o Google sabe disso :-) Eu também tive um problema.

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

Eu tentei no Debian. Se não estiver na sua distribuição, você pode baixar o tarball de origem e o documento de fácil leitura.

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

etc.

-

I don't really understand why the name is set to "mail._domainkey" without a period

Para que você possa usar exatamente o mesmo em ambos os registros DNS de domínios diferentes.

    
por 17.10.2010 / 01:09

Tags