DKIM
DKIM es un complemento de seguridad a SPF. Éste último consistía en especificar las IPs pero no evita la suplantación de IP. DKIM consiste en que el servidor firma digitalmente los menajes salientes, y para que el sistema receptor los verifique, se publica la clave pública en una entrada DNS de texto.
A continuación se procederá a realizar la siguiente configuración:
Generar una pareja de claves RSA en 2 ficheros específicos para su posterior uso con Exim.
Crear una entrada DNS-DKIM para publicar la clave pública.
Generación de claves
Actualmente claves RSA de 1024 bits son pocos, pero mi configuración es antigua
y no he cambiado la clave desde que la generé, así que presento el ejemplo con
1024. El código mostrado genera las claves en el directorio /etc/exim4
:
cd /etc/exim4
openssl genrsa -out exim-dkim.key 1024
openssl rsa -in exim-dkim.key -out exim-dkim.pub -pubout -outform PEM
El fichero exim-dkim.key
contiene la pareja de claves y mediante el
segundo comando en el fichero exim-dkim.pub
se extrae la pública,
cuyo contenido es el siguiente:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYCiczqjaT/IH+c9W0vc2pk12z
TaU7V3trRdDv52N3a9bHaPAQCunUHC9RudJurh1vdhWk5lBzqrvCcsZhrC9DodU3
JJcFLjWc8tU760+uoQv7d80IxrlvD25poPD7DMjjGWkIDVaCsw/sDOWoUcgjUv/W
XQzdCCzmGfHm05SltQIDAQAB
-----END PUBLIC KEY-----
Entradas DNS
Las entradas DNS-DKIM son entradas de texto con una sintaxis donde hay que especificar determinados parámetros junto con la clave pública. Hay mucha literatura al respecto en la red, así solo voy a indicar mi configuración que sirve pare replicarla sin estudiarla en profundidad.
Hay una diferencia con la entrada DKIM frente a SPF y
es que lleva un doble prefijo: «selector» y _domainkey
.
El «selector» se puede escoger como se desee, pero _domainkey
es obligatorio, así, en mi dominio art-website.com la entrada completa es:
mail._domainkey.art-website.com
En el ejemplo he escogido como selector mail
, de forma que si se realiza
una consulta DNS con con el comando host se obtendría lo siguiente:
host -t txt mail._domainkey.art-website.com
mail._domainkey.art-website.com descriptive text "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcwWh3vFwebU7z+tZt65LwDynBD0Y4JIh/kRRp14llfnwYg1xeSwV6+MEGq2JISts3X1tkqtBWGSEItFdOgRkRE+caMqROKAm6fDU3VZ5yY3oiSbAgAI7JsX/ALz/T2KrzorUED0CT1bfwLtS6mFWuTc/2HLbtQ73hY5l5L2YweQIDAQAB"
Nota
Por simplicidad en mi configuración, usaré el mismo selector (mail
)
en todos los dominios secundarios, añadiendo y usando la misma clave
pública, en la entrada DNS-DKIM de cada dominio adicional.
En la salida del comando anterior apareció la entrada DNS de texto correspondiente a mi configuración. Añadir la entrada desde el panel de control de un proveedor puede dar problemas, he visto muchos proveedores con paneles de control y formularios muy diferentes y hay que ser cuidadoso. La entrada es la mostrada a continuación, donde hay que pegar la clave pública en ***. La clave debe estar en una sola línea, hay que eliminar los saltos de línea quedando una linea muy larga:
v=DKIM1; k=rsa; p=***
Es recomendable probar que la entrada es correcta usando alguna herramienta de la red como DKIMCore.
Advertencia
Si se tiene IPv6, con Google es obligatorio tener DKIM configurado, de lo contrario los correos salientes SMTP no serán entregados.