Setup DKIM (DomainKeys) para Ubuntu, Postfix e Mailman

20

Estou executando o Ubuntu 12.04 com o Postfix e o Mailman. Desejo configurar o DKIM . DomainKeys Identified Mail, ou DKIM, é o sucessor das "DomainKeys" do Yahoo. Incorpora o Correio Identificado da Cisco.

Quais são os passos para configurar isso?

O opendkim é recomendado?

A única referência que eu tenho é HowToForge , mas eu prefiro obter ajuda aqui (mesmo que seja apenas uma confirmação dos passos nesse link). Na verdade, acho que a informação no HowToForge está desatualizada porque menciona dkim-filter em vez de opendkim.

    
por MountainX 10.05.2012 / 04:02

3 respostas

38

openDKIM e Postfix no Ubuntu Server 12.04LTS

Vou tentar voltar e formatar isso melhor. Mas como havia uma solicitação para postar minha resposta, eu queria postá-la agora em vez de esperar até que eu tivesse tempo para formatá-la corretamente. Devido à falta de tempo, envolvi toda a minha resposta em um blockquote. 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á:

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

Instale o opendkim nos repositórios:

# sudo apt-get install opendkim opendkim-tools

Você deve decidir qual "seletor" deseja usar. O seletor é essencialmente uma palavra para descrever a chave que você deseja usar. Aqui eu vou usar o seletor 201205 como a chave se tornou válida em maio de 2012 (astúcia eh?). Eu dou dois exemplos para a variedade, que esperamos adicionar clareza. Você só precisa gerar uma chave. No entanto, estou dando os dois exemplos para que você possa compará-los.

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

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

  • example.com (primeira 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 segunda chave abaixo para qual propriedade e permissão devem ser.

Primeiro, você deve verificar se há um usuário opendkim (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 precisará fazer isso:

# chmod 700 /var/run/opendkim

NOTA: Estes dois comandos seguintes 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 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 bug (no openDKIM 2.5.2 no Ubuntu 12.04)! Onde está, ;=rsa; , deve conter ;k=rsa; . O k está faltando. Por favor insira-o.

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

Depois de ser 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 apagá-lo. Observe também que você deve adicionar o sinalizador t = y para indicar aos servidores de recebimento que você está testando o DKIM, mas não o está usando ativamente ainda. Você tem 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 em seu servidor DNS autoritativo. Eu recomendo usar um registro TXT. Parece haver um pouco de controvérsia sobre se deve usar um registro SPF ou os dois tipos. Depois de um pouco de leitura, eu decidi ficar com o tipo de registro TXT exclusivamente, embora eu não acredite que essa seja a palavra final sobre esse assunto.

Você deve usar um curto TTL (time to live) para poder alterar a chave sem esperar que ela se propague pelo DNS. Usei 180 segundos.

O segundo exemplo de geração de um par de chaves foi um pouco mais complicado para mim. Eu vou descrever o que fiz. O primeiro elemento é que usei o valor de domínio "example.com", mesmo que a chave seja usada para "mail.example.com". Eu cheguei a isso via tentativa e erro. Ele funciona, enquanto o uso de "mail.example.com" não funcionou. Infelizmente, não tenho conhecimento das razões por trás disso. Esta é realmente a única diferença que encontrei, mas foi bastante preocupante perceber que 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. Veja 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ê digitou 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 reside a chave (/ 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 consequência esperada de não usar o DNSSSEC. O DNSSEC está chegando, mas ainda não está pronto para o horário nobre, de acordo com minha leitura.

Exemplo com a segunda 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 em 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 segmentado "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 múltiplas instâncias do Postfix você precisa adicionar isto ao opendkim.conf para cada instância (ou aquelas que você quer usar o opendkim)

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

Adicione domínios, nomes de host e / ou ip que devem ser manipulados pelo OpenDKIM. Não se 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, certifique-se de usar o seu próprio, não o exemplo acima).

Edite o /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 em localhost:

sudo iptables -A INPUT -i lo -j ACCEPT

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

Adicione linha:

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

Em seguida, crie um arquivo com seu editor de texto /etc/opendkim/SigningTable e adicione o domínio à SigningTable

Eu mostro os dois exemplos. Note que para a minha segunda chave, agora tenho que 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 nova do OpenDKIM e isso não parece ser um problema.

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

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

Altere 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 configurá-lo imediatamente com o comando: hostname NEW_NAME ).

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

# 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 o seu e-mail assinado está sendo autenticado e se seus registros DNS estão configurados corretamente é usar um dos serviços de teste gratuitos. Eu usei estes:

  • Brandon Checketts Email Validator - link (meu favorito)
  • Envie um email assinado para: [email protected] (meu favorito também)
  • Envie um email assinado para: [email protected] (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: [email protected] & lt; --- BROKEN !!! 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ê tiver uma conta do Gmail, também poderá enviar uma mensagem assinada para um teste rápido e fácil.

Quando estiver satisfeito por estar tudo bem, pode remover o sinalizador de teste no registo TXT do DNS e aumentar o TTL.

Feito!

    
por MountainX 13.05.2012 / 20:52
0

Este é um bom guia.

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

  

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

O BTW Domainkeys é o predecessor descontinuado 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.

    
por iainH 10.05.2012 / 11:19
-1

link

Sempre me certifico de cruzar alguns guias sobre qualquer coisa. Este tut sobre a configuração funciona, eu apenas verifiquei e valida este. Mas, talvez você queira exibir um exemplo de TXT para o registro de domínio a ser detalhado. As pessoas podem se confundir e explicitamente colocar tudo da chave em si mesmo no valor p, o que não tenho certeza se está correto. ie ... incluindo ----- INICIAR CHAVE PÚBLICA ----- e ----- CHAVE PÚBLICA -----. Isso pode levar alguns a serem confundidos. Apenas certifique-se de colocar apenas a parte de criptografia e não os marcadores.

    
por Tom 02.10.2013 / 15:26

Tags