Configurar DKIM (DomainKeys) para Ubuntu, Postfix e Mailman


22

Estou executando o Ubuntu 12.04 com Postfix e Mailman. Eu quero configurar o DKIM . O DomainKeys Identified Mail, ou DKIM, é o sucessor dos "DomainKeys" do Yahoo. Ele incorpora o correio identificado da Cisco.

Quais são as etapas para configurar isso?

O opendkim é recomendado?

A única referência que tenho é o HowToForge , mas prefiro obter ajuda aqui (mesmo que seja apenas uma confirmação das etapas nesse link). Na verdade, acho que as informações no HowToForge estão desatualizadas porque mencionam o dkim-filter em vez do opendkim.

Respostas:


39

openDKIM e Postfix no Ubuntu Server 12.04LTS

Vou tentar voltar e formatar isso melhor. Mas como houve um pedido para postar minha resposta, eu queria publicá-la agora, em vez de esperar até ter tempo para formatá-la corretamente. Devido à falta de tempo, envolvi minha resposta inteira em uma citação. Espero que esta solução seja útil.

Estas são minhas referências:

e Wikipedia tem uma boa entrada sobre o assunto

No mínimo, você precisará de:

  • Acesso raiz ao seu servidor de correio
  • Acesso para atualizar os registros DNS do seu domínio

Instale o opendkim a partir dos repositórios:

# sudo apt-get install opendkim opendkim-tools

Você deve decidir sobre o "seletor" que deseja usar. O seletor é essencialmente uma palavra para descrever a chave que você deseja usar. Aqui vou usar o seletor 201205 quando a chave se tornou válida em maio de 2012 (astúcia, hein?). Dou dois exemplos de variedade, que espero acrescentar clareza. Você só precisa gerar UMA chave. No entanto, estou dando os dois exemplos para que você possa compará-los.

  • 201205 (1ª tecla)
  • my_selector (segunda tecla)

Meu domínio será example.com, mas usarei um subdomínio no meu segundo exemplo:

  • example.com (1ª chave)
  • mail.example.com (segunda chave)

Eu decidi trabalhar no seguinte diretório:

# mkdir /etc/opendkim/
# cd /etc/opendkim

Gere as chaves no diretório atual, usando o seletor e o domínio escolhidos.

# opendkim-genkey -s 201205 -d example.com

Você pode ou não precisar alterar a propriedade. Veja os detalhes no meu exemplo para a 2ª chave abaixo para saber qual propriedade e permissões devem ser.

Primeiro, verifique se há um opendkimusuário (seus IDs de usuário / grupo podem ser diferentes):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

E você provavelmente precisa fazer isso:

# chmod 700 /var/run/opendkim

NOTA: Esses próximos dois comandos NÃO são necessários no Ubuntu 12.04. Mas se o comando acima não mostrar que o usuário opendkim foi configurado corretamente, faça-o da mesma forma:

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

Agora verifique a chave pública e observe que há um erro (no openDKIM 2.5.2 no Ubuntu 12.04)! Onde está contém, ;=rsa;deve conter ;k=rsa;. A kfalta. Por favor insira.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Depois de corrigido, ficará assim:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Além disso, você provavelmente precisará escapar do ponto e vírgula como este. Se você não quiser o comentário final, basta excluí-lo. Observe também que você deve adicionar o sinalizador t = y para indicar aos servidores receptores que está testando o DKIM, mas ainda não o está usando ativamente. Você fica com um registro de recurso viável:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Você deve publicar o conteúdo da chave pública acima no servidor DNS autoritativo. Eu recomendo usar um registro TXT. Parece haver alguma controvérsia sobre o uso de um registro SPF ou de ambos os tipos. Depois de um pouco de leitura, optei por permanecer exclusivamente com o tipo de registro TXT, embora não acredite que essa seja a palavra final sobre esse tópico.

Você deve usar um TTL curto (tempo de vida) para poder alterar a chave sem esperar idades para que ela se propague pelo DNS. Eu usei 180 segundos.

O segundo exemplo de geração de um par de chaves foi um pouco mais complicado para mim. Vou descrever o que fiz. O primeiro elemento é que eu usei o valor do domínio "example.com", mesmo que a chave seja usada para "mail.example.com". Cheguei a isso por tentativa e erro. Funciona, enquanto o uso de "mail.example.com" não funcionou. Infelizmente, não estou ciente das razões por trás disso. Essa é realmente a única diferença que encontrei, mas foi bastante preocupante o fato de que eu deveria documentar minhas experiências com o uso de subdomínios. Nenhum dos outros tutoriais de nível inicial que encontrei fez isso. Gere uma segunda chave:

opendkim-genkey -s my_selector -d example.com

verifique a propriedade e as permissões da chave privada, como acima. Aqui está como eles devem ser:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

Depois de publicar o registro DNS, verifique com dig. Ele deve retornar exatamente o que você inseriu no registro de recurso (RR).

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Agora, teste a chave. Os comandos abaixo assumem que você está no diretório em que a chave reside (/ etc / opendkim para mim).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Estes resultados são esperados. A "chave não segura" não indica um erro. É uma conseqüência esperada do não uso do DNSSSEC. O DNSSEC está chegando, mas ainda não está pronto para o horário nobre, de acordo com a minha leitura.

Exemplo com a 2ª chave:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Observe que o opendkim está relatando que a chave não é segura. Isso está relacionado ao fato de que o DNSSEC não está implementado no meu servidor DNS e, teoricamente, alguém poderia interceptar a pesquisa de DNS e substituí-la por sua própria chave.

Edite o arquivo de configuração do OpenDKIM:

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

Se você estiver usando meu segundo exemplo de chave, com o domínio de destino "mail.example.com", a entrada ainda fará referência apenas ao domínio principal:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

Nota de uma das minhas fontes: Se você executar várias instâncias do Postfix, precisará adicioná-lo ao opendkim.conf para cada instância (ou aquelas que você deseja usar o opendkim)

Crie um arquivo com seu editor de texto /etc/opendkim/TrustedHosts:

Adicione domínios, nomes de host e / ou ips que devem ser tratados pelo OpenDKIM. Não esqueça do localhost.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(a última linha acima provavelmente não será necessária. Se você tiver um endereço IP para adicionar, use o seu, não o exemplo acima.)

Editar /etc/default/opendkim:

Remova o comentário desta linha e use a porta 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

Verifique se o seu firewall (iptables) permite loopback no host local:

sudo iptables -A INPUT -i lo -j ACCEPT

Em seguida, crie um arquivo com seu editor de texto /etc/opendkim/KeyTablee adicione o domínio ao KeyTable

Adicionar linha:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

Próximo Crie um arquivo com seu editor de texto /etc/opendkim/SigningTablee adicione o domínio à SigningTable

Eu mostro os dois exemplos. Observe que, para minha segunda chave, agora preciso usar o nome de domínio completo "mail.example.com":

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

Observe que no OpenDKIM 2.0.1 os nomes de domínio diferenciam maiúsculas de minúsculas. Neste exemplo, estamos usando uma versão mais recente do OpenDKIM e isso não parece ser um problema.

Configure o postfix. Edite /etc/postfix/main.cf e adicione as linhas no final

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

Mude também o nome do host:

#myhostname = localhost         #original
myhostname = mail.example.com

Você também deve alterar a entrada correspondente em / etc / hosts. Essas alterações são efetivas após uma reinicialização (embora você possa defini-la imediatamente com o comando hostname NEW_NAME:).

Reinicie o postfix e o opendkim se você não reiniciou:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

Teste

A melhor maneira de verificar se seu correio assinado está sendo autenticado e se seus registros DNS estão configurados corretamente é usar um dos serviços de teste gratuitos. Eu usei estes:

  • Validador de e-mail de Brandon Checketts - http://www.brandonchecketts.com/emailtest.php (meu favorito)
  • Envie um email assinado para: check-auth@verifier.port25.com (o meu favorito também)
  • Envie um email assinado para: sa-test@sendmail.net (você pode colocar todos os endereços de email de teste no campo Para: de uma única mensagem de saída para testar)

  • Envie um email assinado para: autorespond+dkim@dk.elandsys.com <--- QUEBRADO !!! Não use este.

Cada uma delas informará se as coisas estão funcionando corretamente e fornecerá algumas dicas sobre solução de problemas, se necessário.

Se você possui uma conta do Gmail, também pode enviar uma mensagem assinada para um teste rápido e fácil.

Quando estiver satisfeito com tudo bem, você pode remover o sinalizador de teste no registro DNS TXT e aumentar o TTL.

Feito!


Funciona perfeitamente com precisão. Boa explicação, obrigado.
Aki

Use -b 1024 para gerar chaves de 1024 bits. É uma obrigação para obter o meu gmail assinado!
Prashant Singh

1
Observe no opendkim.conf os três parâmetros "Domínio", "KeyFile" e "Selector" são ignorados ao usar as "SigningTable" e "KeyTable". Não sei se isso mudou em algum momento, mas vale a pena mencionar ( opendkim.org/opendkim.conf.5.html )
billynoah

0

Este é um bom guia.

Ele explica que o opendkim é realmente recomendado e que as etapas para implementar sua assinatura do dkim são as mesmas do dkim-filter.

O dkim-milter não está mais sendo desenvolvido. É autor original bifurcou a fonte e agora está desenvolvendo opendkim. Para o Lucid e versões posteriores, o opendkim é preferido sobre o dkim-filter. As instruções nesta página devem ser as mesmas (apenas com nomes de pacotes ajustados, conforme necessário).

BTW Domainkeys é o antecessor obsoleto do DKIM. Adicione registros TXT à sua zona DNS para SPF e DKIM, mas não é mais necessário se preocupar com as chaves de domínio.


O artigo que você vinculou está desatualizado. O opendkim é o pacote para usar agora. Estou trabalhando através de sua criação ...
MountainX para Monica Cellio

Eu valorizaria uma atualização de suas experiências, pois estou prestes a mudar um servidor do Exim4 para o Postfix-Dovecot e procurarei orientações atualizadas.
IainH 13/05

Postei minha solução, mas não tive tempo para formatá-la. Você (ou qualquer outra pessoa) é bem-vindo para formatá-lo. Mas minhas anotações são muito extensas, então queria que você tivesse acesso a elas sem demora. Espero que sejam úteis.
MountainX para Monica Cellio

-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

Eu sempre me certifico de cruzar alguns guias sobre qualquer coisa. Este tutorial sobre configuração funciona, acabei de verificar e valida esta. Porém, convém exibir um exemplo de TXT para que o registro de domínio seja detalhado. As pessoas podem ficar confusas e colocar explicitamente tudo da chave em si no valor p, o que não tenho certeza de que esteja correto. ou seja ... incluindo ----- BEGIN PUBLIC KEY ----- e ----- FIND PUBLIC KEY -----. Isso pode levar alguns a ficarem confusos. Apenas certifique-se de colocar apenas a parte de criptografia e não os marcadores.


3
Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Braiam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.