Básicamente es una firma que sale del servidor donde originalmente se envía un mensaje, para notificar al servidor destinatario que quien lo envía, es quien dice ser.
La definición de DKIM:
DomainKeys Identified Mail es un mecanismo de autenticación de correo electrónico que permite a una organización responsabilizarse del envío de un mensaje, de manera que éste pueda ser validado por un destinatario. Dicha organización puede ser una fuente directa del mensaje, como el autor, el servidor encargado de gestionar el correo de ese dominio, o un servidor intermedio situado en el tránsito que recorre dicho correo, como por ejemplo un servicio independiente que provee recursos de correo al servidor que gestiona el dominio principal
¿Por qué debería tenerlo configurado?
Básicamente porque sin el, los servidores de correo te bajan muchos puntos y es probable que tus mensajes lleguen a SPAM o simplemente no sean entregados. Dejaremos aquí las notas para su configuración en una instalación de Ubuntu 20.04.
Configuramos DKIM
sudo apt install opendkim opendkim-tools sudo gpasswd -a postfix opendkim
Editamos el archivo /etc/opendkim.conf, nos aseguramos de hacer una copia antes (cp /etc/opendkim.conf /etc/opendki.conf.orig)
# descomentamos estas líneas y que queden así: Canonicalization simple Mode sv SubDomains no
Añadimos las líenas debajo de Subdomains No
AutoRestart yes AutoRestartRate 10/1M Background yes DNSTimeout 5 SignatureAlgorithm rsa-sha256
Añadir estas líneas al final del archivo, debajo de UserID opendkim
KeyTable refile:/etc/opendkim/key.table SigningTable refile:/etc/opendkim/signing.table ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts
Añadimos el dominio
Almacenamos el archivo con esos cambios. Ahora haremos los archivos de configuración, digamos que será para nuestro dominio tar.mx.
sudo mkdir -p /etc/opendkim/keys sudo chown -R opendkim:opendkim /etc/opendkim sudo chmod go-rw /etc/opendkim/keys # añadimos el dominio tar.mx sudo echo "*@tar.mx default._domainkey.tar.mx" >> /etc/opendkim/signing.table # indicamos donde estará la llave privada sudo echo "default._domainkey.tar.mx tar.mx:default:/etc/opendkim/keys/tar.mx/default.private" >> /etc/opendkim/key.table # ahora lo añadimos a trusted.hosts sudo echo "*.tar.mx" >> /etc/opendkim/trusted.hosts
Generamos las llaves
sudo mkdir /etc/opendkim/keys/tar.mx sudo opendkim-genkey -b 2048 -d tar.mx -D /etc/opendkim/keys/tar.mx -s default -v sudo chown opendkim:opendkim /etc/opendkim/keys/tar.mx/default.private
Listo, en el archivo default.txt tendremos la llave DKIM, digamos algo como lo que sigue:
cat /etc/opendkim/keys/tar.mx/default.txt # contenido de la llave default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BA5VDq+OOVamKOLdGND" "DVjw7fgzoN7MzVX3+q1TPzW1hPTDzpc3DxkGiIc7gDi3OkFMYQIDAQAB" ) ; ----- DKIM key default for tar.mx
Ahora lo que tenemos que hacer es en el administrador de nuestro DNS, añadir el registro TXT para el host llamado default._domainkey y pegar el contenido que está entre los paréntesis, quitando las comillas y po rejemplo en la cadena p= se puede pegar el contenido (pueden ser dos o mas líneas) dejando solo una.
Probando
opendkim-testkey -d tar.mx -s default -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'default._domainkey.tar.mx' opendkim-testkey: key not secure opendkim-testkey: key OK # le preguntamos al DNS dig default._domainkey.tar.mx TXT # lo anterior nos debería dar una respuesta TXT con el contenido de nuestra llave.
Si nos indica lo de key OK entonces ya está. Ahora si tenemos postfix instalado, será conectarlo
sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim
Volvemos a editar /etc/opendkim.conf
# cambiamos la línea Socket local:/run/opendkim/opendkim.sock # por Socket local:/var/spool/postfix/opendkim/opendkim.sock
Ahora editamos /etc/postfix/main.cf y al final de todo añadimos las líneas:
# DKIM a través de milter milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters
Almacenamos y reiniciamos los servicios de opedkim y postfix.
Eso debería ser todo, ahora podemos probar en algún sitio como mail-tester.com para hacer algunas validaciones reales.
https://panchito-kardashian.tar.mx/media/2020/05/mail-tester.jpg