DKIM (DomainKeys Identified Mail) es un conjunto de protocolos y especificaciones (IETF) de autentificación de correo electrónico que permite asociar un nombre de dominio a un mensaje de email, dificultando así la falsificación de cabeceras y mensajes de correo por parte de los spammers. amavisd-new
es capaz de manejar y firmar los mensajes con DKIM, de forma transparente para el remitente, añadiendo un nuevo campo (DKIM-Signature) con la firma digital en la cabecera del mensaje. El servidor de destino podrá comprobar la autenticidad del mensaje, verificando la firma de la cabecera del mensaje contra la clave pública obtenida mediante una query a un servidor DNS.
Los pasos siguientes explican cómo configurar amavisd-new para firmar los mensajes para un dominio llamado “example.com” con DKIM.
Generamos la clave asociada al dominio:
# mkdir /var/amavisd/dkim/ # amavisd genrsa /var/amavisd/dkim/example.com.pem
Editamos /etc/amavisd.conf:
$enable_dkim_verification = 1; $enable_dkim_signing = 1; dkim_key('example.com', 'dkim', '/var/amavisd/dkim/example.com.key.pem'); @dkim_signature_options_bysender_maps = ( { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } ); @mynetworks = qw(0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16); # list your internal networks
Reiniciamos amavisd:
# /etc/rc.d/amavisd restart amavisd(ok) amavisd(ok)
Mostramos la clave pública, que añadiremos literalmente a un registro de tipo TXT en nuestro servidor DNS:
# amavisd showkeys ; key#2, domain example.com, /var/amavisd/dkim/example.com.pem dkim._domainkey.flossystems.com. 3600 TXT ( "v=DKIM1; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wbPh+0cFwUHIN+K5m1RtTePD" "m1/E4SqZzeVPFXhRiqlBTSVTvxCtGxBQnl8cUXVC4jFeBGq8/Z0mONDodpSQ1gOO" "KzrNM5ZhYKhx3Y7FSKmh86iWa8sTF+Lzi/xn7BZttBy+rg4pYzOVeUGU9puwfzHr" "FfRAoEsJwKbKufeTVwIDAQAB")
Una vez copiada la clave pública en nuestro registro de zona, cambiado el número de serie y recargada la zona ('rndc reload') comprobamos:
# amavisd testkeys TESTING#1: dkim._domainkey.example.com => pass
Nota: si obtenemos el siguiente error, es probable que el cambio en el DNS aún no se haya propagado:
# /var/amavisd/dkim# amavisd testkeys TESTING#1: dkim._domainkey.example.com => invalid (public key: not available)
También podemos comprobarlo directamente con la utilidad “host” de los Unices:
# host -t txt dkim._domainkey.example.com dkim._domainkey.example.com descriptive text "v=DKIM1\; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wbPh+0cFwUHIN+K5m1RtTePD" "m1/E4SqZzeVPFXhRiqlBTSVTvxCtGxBQnl8cUXVC4jFeBGq8/Z0mONDodpSQ1gOO" "KzrNM5ZhYKhx3Y7FSKmh86iWa8sTF+Lzi/xn7BZttBy+rg4pYzOVeUGU9puwfzHr" "FfRAoEsJwKbKufeTVwIDAQAB"
O con dig:
# dig -t txt dkim._domainkey.example.com [...] ;; ANSWER SECTION: dkim._domainkey.example.com. 3600 IN TXT "v=DKIM1\; p=" "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wbPh+0cFwUHIN+K5m1RtTePD" "m1/E4SqZzeVPFXhRiqlBTSVTvxCtGxBQnl8cUXVC4jFeBGq8/Z0mONDodpSQ1gOO" "KzrNM5ZhYKhx3Y7FSKmh86iWa8sTF+Lzi/xn7BZttBy+rg4pYzOVeUGU9puwfzHr" "FfRAoEsJwKbKufeTVwIDAQAB" [...]