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 opendkim
usuá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 k
falta. 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/KeyTable
e 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/SigningTable
e 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!