DKIM firma el correo saliente de cualquier dominio (con Postfix y Ubuntu)

40

Obtuve la configuración de DKIM en mi servidor de correo (postfix y ubuntu) por lo que firma correos electrónicos salientes. Usé estas instrucciones: https://help.ubuntu.com/community/Postfix/DKIM

Sin embargo, lo necesito para firmar correos electrónicos de cualquier dominio (en la dirección De) y no solo el mío. Estoy creando un servicio de boletín electrónico y los clientes enviarán su propio correo electrónico a través del servidor.

Primero configuro "Dominio *" en /etc/dkim-filter.conf. Esto hizo que incluyera los encabezados DKIM en todos los correos electrónicos salientes, sin importar el dominio.

Sin embargo, la verificación de verificación falla en gmail porque está verificando el dominio en la dirección de origen, y no mi dominio (y el registro dns). ¿Alguien sabe como hacer esto?

Brian Armstrong
fuente

Respuestas:

41

Ok, logré resolver esto por mi cuenta, pero quería publicar los pasos aquí para la posteridad porque no había documentación sobre esto (que pude encontrar) y era prácticamente adivinar y verificar.

Después de configurar "Dominio *" como se describe anteriormente, lo firmaría así:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

observe el "d = clientdomain.com". Estaba generando esto basado en la dirección de origen del correo electrónico, donde la dirección de origen era algo así como "[email protected]". Obviamente, si verificaba el dominio del cliente y no el mío, no había ningún registro TXT DNS y la verificación fallaba.

De todos modos, descubrí en esta documentación que puedes establecer un parámetro KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Realmente no describía lo que quería hacer, pero pensé que jugaría con eso. Comenté KeyFile y configuré KeyList en "/etc/mail/dkim_domains.key", que es un nombre de archivo arbitrario que inventé. Luego creé ese archivo y lo puse "*: feedmailpro.com: /etc/mail/dkim.key". Esto lo indica para cualquier dominio de cliente, fírmelo con mi dominio (feedmailpro.com) y use el archivo dkim.key.

Reiniciamos DKIM y postfix

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

Ahora esta es la clave que generó cuando envié un correo electrónico de prueba.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

Mejora, verá que d = ahora está configurado en mi dominio (aunque la dirección de origen del correo electrónico no era mi dominio). Sin embargo, s = se cambió a "dkim.key" en lugar del selector que elegí en dkim-filter.conf. En las instrucciones de configuración originales, configuré el selector en "mail". Eso fue extraño, pero noté que lo cambió al nombre de archivo de mi clave, dkim.key.

Así que fui y renombré "/etc/mail/dkim.key" a "/ etc / mail / mail". También actualicé la referencia en "/etc/mail/dkim_domains.key".

Reinicie dkim-filter y postfix nuevamente igual que antes, y ahora comenzó a funcionar. Aquí está el encabezado final que firma correctamente usando el selector derecho (aparentemente basado en el nombre de archivo de la clave).

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

Ahora s = mail tiene razón, y d = feedmailpro.com tiene razón. ¡Funciona!

En general, esto fue mucho más difícil de lo que esperaba y parecía haber cero documentación sobre cómo hacer esto (firmar para todos los dominios salientes), pero supongo que es un software de código abierto, así que no me puedo quejar.

Una nota final, para verificar si el registro TXT DNS se configuró correctamente, puede hacer un comando como con su dominio

dig mail._domainkey.feedmailpro.com TXT

Es posible que necesite instalar dig (sudo apt-get install dig). Si está utilizando el administrador de Slicehost para agregar la entrada DNS, ingresaría el registro TXT de esta manera.

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

Realmente no entiendo por qué el nombre se establece en "mail._domainkey" sin un punto al final o sin mi dominio, como "mail._domainkey.feedmailpro.com". Pero lo que sea, parece funcionar, así que estoy feliz.

Si está intentando duplicar esto, aquí están las instrucciones con las que comencé: https://help.ubuntu.com/community/Postfix/DKIM

Brian Armstrong
fuente
2
Gracias por poner esto aquí, está ayudando a otros (como yo) :)
thomasrutter
¡Bienvenido, Thomas!
Brian Armstrong
Wow, esto ayudó mucho. ¡Me estaba golpeando la cabeza por "s = dkim.key" hasta que encontré tu publicación!
3molo
Una cosa que la guía en ubuntu.com no menciona es que una vez que lo tienes funcionando, cambia t = y a t = n en el registro TXT para indicar que no es una prueba.
3molo
Existen algunos buenos recursos para usar SigningTable, etc. Por ejemplo, blog.tjitjing.com/index.php/2012/03/… (excelente) e incluso el archivo léame opendkim
rfay
15

Inspirado por la respuesta de Brian Armstrong para dkim-filter, así es como hice esto para OpenDKIM .

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

Tenga en cuenta que SigningTable tiene refile: en su definición, esto especifica que el archivo incluye expresiones regulares; en nuestro caso el comodín *.

/ etc / mail / dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

Aquí keyname se usa para hacer coincidir la clave entre este archivo y el archivo dkim_signing_table. En mi archivo real lo llamé igual que mi selector.

example.com y selector deben reemplazarse por el dominio y el selector que desea utilizar en su firma d = y s = respectivamente.

/ etc / mail / dkim_signing_table

*   keyname

La dirección de este archivo simple se encuentra en el encabezado De: a una clave en dkim_key_table. En este caso, queremos que todos los correos electrónicos enviados a través de este servidor se firmen con la misma clave, por lo que se utiliza un comodín *.

Adam J. Forster
fuente
para aquellos que obtienen "no coincide con la tabla de firma en OpenDKIM" serverfault.com/q/569823/115907
kommradHomer
Si alguien llega a esta respuesta (gran respuesta, por cierto, me enseñó lo que necesitaba) y está buscando enviar desde dos dominios diferentes con claves diferentes, eso se puede hacer así: Archivo de tabla de claves: "tagone._domainkey.firstdomain.com firstdomain .com: tagone: /etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo "SigningTable:" * @ firstdomain. com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "Cada archivo tiene 2 líneas (los comentarios no guardan los saltos de línea aquí)
Sean Colombo
o: SigningTable csl: * = keyname KeyTable csl: keyname = example.com: selector: /etc/mail/selector.key
danblack
3

Hilo antiguo, pero tal vez alguien más que encuentre esto tiene la utilidad de saber que la versión 2.x de opendkim funciona con KeyTable en lugar de KeyList.

Puede convertir su archivo KeyList con la herramienta opendkim-convert-keylist ( http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html )

Puede leer más sobre la implementación de KeyTable en la página de manual de opendkim: ( http://www.opendkim.org/opendkim.conf.5.html )

usuario203421
fuente
Resuma el artículo que vinculó, citando los segmentos de código relevantes o los bloques de configuración. Los sitios pueden cambiar en el futuro o no cargarse por varias razones.
89c3b1b8-b1ae-11e6-b842-48d705
2

Realmente no entiendo por qué el nombre se establece en "mail._domainkey" sin un punto

La documentación para el filtro DKIM generalmente se instala en formato unix man. Solo Google lo sabe :-) También tuve un problema.

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

Lo probé en Debian. Si no está realmente en su distribución, puede descargar el tarball de origen y el documento de lectura fácil.

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

etc.

-

Realmente no entiendo por qué el nombre se establece en "mail._domainkey" sin un punto

Para que pueda usar exactamente lo mismo en ambos registros DNS de diferentes dominios.

hynekcer
fuente