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

40

Eu tenho a configuração do DKIM no meu servidor de correio (postfix e ubuntu), para que assine os emails enviados. Eu usei estas instruções: https://help.ubuntu.com/community/Postfix/DKIM

No entanto, preciso assinar emails de qualquer domínio (no endereço De) e não apenas do meu. Estou criando um serviço de boletim informativo por email e os clientes enviarão seu próprio email através do servidor.

Primeiro, defino "Domínio *" no /etc/dkim-filter.conf. Isso permitiu incluir os cabeçalhos DKIM em todos os emails de saída, independentemente do domínio.

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

Brian Armstrong
fonte

Respostas:

41

Ok, eu consegui descobrir isso sozinho, mas eu queria postar as etapas aqui para a posteridade, porque havia zero documentação sobre isso (que eu poderia encontrar) e era praticamente adivinhar e verificar.

Depois de definir "Domínio *", conforme descrito acima, 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". Isso foi gerado com base no endereço de origem no email, onde o endereço de origem era algo como "[email protected]". Obviamente, se ele verificasse o domínio do cliente e não o meu, não havia registro DNS TXT e a verificação falharia.

De qualquer maneira, descobri nesta documentação que você pode definir um parâmetro KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Na verdade, não descrevia o que eu queria fazer, mas achei que iria brincar com isso. Comentei o KeyFile e defina KeyList como "/etc/mail/dkim_domains.key", que é um nome de arquivo arbitrário que criei. Criei esse arquivo e coloquei nele "*: feedmailpro.com: /etc/mail/dkim.key". Isso indica para qualquer domínio do cliente, assine com o meu domínio (feedmailpro.com) e use o arquivo dkim.key.

DKIM e postfix reiniciados

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

Agora, essa é a chave gerada quando enviei um email 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 d = now está definido como meu domínio (mesmo que o endereço de origem do email não seja meu domínio). No entanto, s = foi alterado para "dkim.key" em vez do seletor que escolhi no dkim-filter.conf. Nas instruções de configuração originais, eu definiria o seletor para "mail". Isso foi estranho, mas notei que o alterou para o nome do arquivo da minha chave, dkim.key.

Então, mudei o nome "/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 da mesma forma que acima, e agora começou a funcionar. Aqui está o cabeçalho final que assina corretamente usando o seletor direito (aparentemente com base 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 ed = 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 (assinatura para 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 executar um comando como no 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 por que o nome está definido como "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ê estiver tentando duplicar isso, aqui estão as instruções com as quais eu comecei: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
fonte
2
Obrigado por colocar isso aqui, é ajudar os outros (como eu) para fora :)
thomasrutter
Bem-vindo Thomas!
Brian Armstrong
Uau, isso ajudou muito. Eu estava batendo a cabeça por causa do "s = dkim.key" até me deparei com a sua postagem!
3molo
Uma coisa que o guia no ubuntu.com não menciona é que, uma vez que você o tenha funcionado, altere t = y para t = n no registro TXT para declarar que não é um teste.
3molo
Há alguns bons recursos lá fora para usar o SigningTable, etc. Por exemplo, blog.tjitjing.com/index.php/2012/03/... (excelente) e até mesmo o readme opendkim, opendkim.org/opendkim-README
rfay
15

Inspirado pela resposta de Brian Armstrong para dkim-filter, veja como eu fiz isso no OpenDKIM .

/etc/opendkim.conf

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

Observe que SigningTable possui 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 à chave entre este arquivo e o arquivo dkim_signing_table. No meu arquivo real, eu o nomeei como meu seletor.

example.com e selector deve ser substituído qual o domínio e seletor que você desejar a ser usado em de sua assinatura d = e s = respectivamente.

/ etc / mail / dkim_signing_table

*   keyname

Este arquivo mapeia o endereço encontrado no cabeçalho De: para uma chave na tabela dkim_key_table. Nesse caso, queremos que todos os emails enviados por este servidor sejam assinados com a mesma chave, portanto, um curinga * é usado.

Adam J. Forster
fonte
para aqueles que recebem "páreo mesa assinatura em OpenDKIM" serverfault.com/q/569823/115907
kommradHomer
Se alguém chegar a essa resposta (ótima resposta, btw! Me ensinou o que eu precisava) e estiver olhando para enviar de dois domínios diferentes com chaves diferentes, isso pode ser feito assim: Arquivo KeyTable: "tagone._domainkey.firstdomain.com firstdomain .com: tagone: /etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo "SigningTable:" * @ firstdomain. com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com" Cada arquivo é de 2 linhas (comentários não salvar quebras de linha aqui)
Sean Colombo
ou: SigningTable csl: * = keyname KeyTable csl: keyname = example.com: seletor: /etc/mail/selector.key
danblack 19/18
3

Thread antigo, mas talvez alguém que ache isso tenha utilidade em saber que a versão 2.x do opendkim trabalha com KeyTable em vez de KeyList.

Você pode converter seu arquivo KeyList com a ferramenta opendkim-convert-keylist ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html )

Você pode ler mais sobre a implementação do KeyTable na página do manual opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )

user203421
fonte
Resuma o artigo que você vinculou, citando todos os segmentos de código ou blocos de configuração relevantes. Os sites podem mudar no futuro ou falhar ao carregar por vários motivos.
893601b8-b1ae-11e6-b842-48d705
2

Eu realmente não entendo por que o nome está definido como "mail._domainkey" sem um período

A documentação para o filtro DKIM geralmente é instalada no formato man unix. Somente o Google sabe :-) 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 realmente 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.

-

Eu realmente não entendo por que o nome está definido como "mail._domainkey" sem um período

Para que você possa usar exatamente o mesmo nos dois registros DNS de domínios diferentes.

hynekcer
fonte