Implementando assinatura DKIM com Postfix e Amavis

Publicado por Fabio Soares Schmidt em 15/01/2013

[ Hits: 8.596 ]

 


Implementando assinatura DKIM com Postfix e Amavis



Este tutorial foi criado para apresentar o Framework DKIM, que utiliza chaves públicas para autenticação de e-mail. O remetente assina a mensagem no envio permitindo que o receptor efetue consulta no DNS para confirmar sua autenticidade.

Decidi escrever sobre este tema devido a muitos relatos de problemas ao entregar mensagens para grandes provedores que efetuam verificação DKIM como o Gmail, Yahoo! e Hotmail, por exemplo.

Nesse texto não entrarei em detalhes sobre o funcionamento deste mecanismo, e sim, apresentei uma forma rápida para implementar, caso já tenha o Amavis implementado. Nos próximos artigos sobre este tema, apresentarei todas as definições do framework.

Neste exemplo utilizamos o Debian Squeeze, portanto, o arquivo de configuração do Amavis onde iremos implementar o DKIM é /etc/amavis/conf.d/20-debian_defaults. Criaremos o diretório /etc/dkim/keys/ para armazenar nossas chaves, utilizaremos o domínio "laboratorio.com.br".

Primeiramente, vamos criar a chave para assinatura:

# amavisd-new genrsa /etc/dkim/keys/laboratorio.pem

Agora vamos editar o arquivo 20-debian_defaults incluindo as linhas abaixo, destacando que não estamos habilitando verificação com DKIM, e sim assinando nossas mensagens:

$enable_dkim_verification = 0; #não iremos verificar DKIM, apenas assinar
$enable_dkim_signing = 1;
dkim_key('laboratorio.com.br', 'default', '/etc/dkim/keys/laboratorio.pem');
@dkim_signature_options_bysender_maps = (
{ '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
@mynetworks = qw(192.168.0.0/24); # coloque aqui suas faixas de rede

Agora precisamos incluir nossa chave pública no DNS, para que os destinatários possam verificar nossa assinatura. Execute o comando abaixo, que irá apresentar na tela a saída que deve ser incluída no DNS. Se estiver utilizando o BIND, basta copiar e colar:

# amavisd-new showkeys

Exemplo:

; Deve ser incluido na configuração do seu DNS
default._domainkey.laboratorio.com.br.      3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4ZkmIpubptTSpHV7365iB7j7m"
"/46sYWN/PTHweK1LQmq4aGiXD5XfPlmZ2E78kgsCEw0weMG5q5+Q+VSBLxV+f6If"
"MOG+B9ruNx8MkoNgNQlCwsUiEV9knvMyx2+ou/KmypZv2i/wRUwOh4jT+NTcr4Ur"
"WNCLWJSH34L/eYoHvwIDAQAB")

Feito isso, reinicie o serviço do Amavis e efetue um "reload" no seu servidor DNS.

O comando:

# amavisd-new testkeys

Permite validarmos a configuração:

TESTING#1: default._domainkey.laboratorio.com.br => pass

Agora basta enviar uma mensagem e confirmar se o Amavis efetuou a assinatura:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=laboratorio.com.br; h=
	user-agent:message-id:subject:subject:from:from:date:date
	:content-transfer-encoding:content-type:content-type
	:mime-version:received:received; s=default; t=1355229764; x=
	1357044164; bh=IZzGk5hdbwv1XsfTE2Dngp1hMDfBwbnO3RaSFfeDt+k=; b=P
	AQ7bFr1vCck1ZHI6Elqm3lWxhc1Widsq4qw3hlfGvNK6xwtRYRfxFkEBM7t9sxRv
	+QLjMO8iLZb3qGDigFJNw8kfiaUX9tHI6FbexB44M0UJfh0XGSL2Cnc9hsOxk7Or
	vTXMSUBbuq8Td6Ow7b7IDaGwZw2Ly4iwc9uCyiVRkQ=

Obrigado

Fabio Soares Schmidt
http://respirandolinux.wordpress.com

Outras dicas deste autor

Forçando cache do Windows Update com Squid (Atualizado)

Cyrus Aggregator: Configurando o Postfix nos servidores back-end

Cyrus imap: habilitando "shared seen" para contas compartilhadas

Separando os logs do AMaViS no Debian

Thunderbird: Desabilitando tela de importação de mensagens

Leitura recomendada

Bloqueio por extensões no Postfix

Thunderbird: Desabilitando tela de importação de mensagens

Utilizando o dicionário do BrOffice no verificador ortográfico do Thunderbird

Zimbra: Aplicando patch para a falha Heartbleed

Cyrus Aggregator - Serviço Sieve não conecta no Backend [Resolvido]

  

Comentários
[1] Comentário enviado por allanbarcelos em 13/12/2013 - 15:40h

e quando o servidor possui vários domínios? usa-se a mesma dkim?

[2] Comentário enviado por fs.schmidt em 13/12/2013 - 18:25h

Olá @allanarab, basta voce criar outras chaves para os dominios adicionais e criar novas entadas:

dkim_key('laboratorio.com.br', 'default', '/etc/dkim/keys/laboratorio.pem');

dkim_key('DOMINIO2.com.br', 'default', '/etc/dkim/keys/DOMINIO2.pem');

[3] Comentário enviado por leonardochristo em 24/01/2014 - 10:26h

Bom Dia,

Gostei muito do seu artigo.

Tenho uma instalação distribuida onde o postfix é separado do serviço web, mas está junto dos conectores.

Gostaria de saber se tem possibilidade de implementar uma solução com DKIM e SPF e SPAMASSASSIN em um servidor separado só apontando para o postfix que tenho, vc teria uma ideia de como fazer isso? Ou Um artigo?

Obrigado!

[4] Comentário enviado por fs.schmidt em 24/01/2014 - 15:29h

Olá @leonardochristo, tudo bem?

É possível colocar o Amavis em um servidor dedicado, pois é ele quem faz a ponte com o DKIM, SPF e SPAMASSASSIN.

Não tenho nenhum artigo pronto sobre isso ainda.



Contribuir com comentário