Configurar DKIM (DomainKeys) para Ubuntu, Postfix y Mailman


22

Estoy ejecutando Ubuntu 12.04 con Postfix y Mailman. Quiero configurar DKIM . DomainKeys Identified Mail, o DKIM, es el sucesor de las "DomainKeys" de Yahoo. Incorpora el correo identificado de Cisco.

¿Cuáles son los pasos para configurar esto?

¿Se recomienda opendkim?

La única referencia que tengo es HowToForge , pero prefiero obtener ayuda aquí (incluso si es solo una confirmación de los pasos en ese enlace). En realidad, creo que la información en HowToForge está desactualizada porque menciona dkim-filter en lugar de opendkim.

Respuestas:


39

openDKIM y Postfix en Ubuntu Server 12.04LTS

Intentaré volver y formatear esto mejor. Pero como había una solicitud para publicar mi respuesta, quería publicarla ahora en lugar de esperar hasta que tuviera tiempo de formatearla correctamente. Debido a la falta de tiempo, envolví toda mi respuesta en una cita en bloque. Espero que esta solución sea útil.

Estas son mis referencias:

y Wikipedia tiene una buena entrada sobre el tema

Como mínimo, necesitará:

  • Acceso raíz a su servidor de correo
  • Acceso para actualizar los registros dns de tu dominio

Instale opendkim desde los repositorios:

# sudo apt-get install opendkim opendkim-tools

Debe decidir qué "selector" desea utilizar. El selector es esencialmente una palabra para describir la clave que desea utilizar. Aquí voy a usar el selector 201205 cuando la clave se hizo válida en mayo de 2012 (¿astucia, eh?). Doy dos ejemplos de variedad, que con suerte agregarán claridad. Solo necesita generar UNA clave. Sin embargo, estoy dando ambos ejemplos para que pueda compararlos.

  • 201205 (primera tecla)
  • my_selector (segunda tecla)

Mi dominio será example.com, pero usaré un subdominio para mi segundo ejemplo:

  • example.com (primera clave)
  • mail.example.com (2da clave)

Decidí trabajar en el siguiente directorio:

# mkdir /etc/opendkim/
# cd /etc/opendkim

Genere las claves en el directorio actual, utilizando su selector y dominio elegidos.

# opendkim-genkey -s 201205 -d example.com

Puede que necesite o no cambiar de propietario. Vea los detalles en mi ejemplo para la segunda clave a continuación para saber qué propiedad y permisos deberían ser.

Primero debe verificar si hay un opendkimusuario (sus ID de usuario / grupo pueden ser diferentes):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

Y probablemente necesites hacer esto:

# chmod 700 /var/run/opendkim

NOTA: Estos dos comandos siguientes NO son necesarios en Ubuntu 12.04. Pero si el comando anterior no muestra que el usuario opendkim se configuró correctamente, hágalo de manera similar a esto:

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

¡Ahora verifique la clave pública y observe que hay un error (en openDKIM 2.5.2 en Ubuntu 12.04)! Donde está contiene, ;=rsa;debería contener ;k=rsa;. La kfalta. Por favor insértelo.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Después de ser reparado, se verá así:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Además, probablemente necesites escapar de los puntos y comas como este. Si no desea el comentario final, simplemente bórrelo. También tenga en cuenta que debe agregar el indicador t = y para indicar a los servidores receptores que está probando DKIM pero que aún no lo está utilizando activamente. Te queda un registro de recursos viable:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Debe publicar el contenido de la clave pública anterior en su servidor DNS autorizado. Recomiendo usar un registro TXT. Parece haber un poco de controversia sobre si usar un registro SPF o ambos tipos. Después de leer un poco, elegí seguir con el tipo de registro TXT exclusivamente, aunque no creo que esta sea la última palabra sobre este tema.

Debe usar un TTL corto (tiempo de vida) para que pueda cambiar la clave sin esperar años para que se propague a través de DNS. Usé 180 segundos.

El segundo ejemplo de generar un par de claves fue un poco más complicado para mí. Describiré lo que hice. El primer elemento es que usé el valor de dominio "ejemplo.com" aunque la clave se usará para "mail.example.com". Llegué a esto por prueba y error. Funciona, mientras que usar "mail.example.com" no funcionó. Desafortunadamente, no estoy al tanto de las razones detrás de esto. Esta es realmente la única diferencia que encontré, pero fue lo suficientemente problemático como para sentir que debería documentar mis experiencias con el uso de subdominios. Ninguno de los otros tutoriales de nivel inicial que encontré hizo esto. Genere una segunda clave:

opendkim-genkey -s my_selector -d example.com

verifique la propiedad y los permisos de la clave privada, como se indicó anteriormente. Así es como deberían verse:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

Después de publicar el registro DNS, verifíquelo con dig. Debería devolver exactamente lo que ingresó en el registro de recursos (RR).

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Ahora, prueba la llave. Los siguientes comandos suponen que está en el directorio donde reside la clave (/ etc / opendkim para mí).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Se esperan estos resultados. La "clave no segura" no indica un error. Es una consecuencia esperada de no usar DNSSSEC. DNSSEC está llegando, pero aún no está listo para el horario estelar, según mi lectura.

Ejemplo con 2da clave:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Tenga en cuenta que opendkim informa que la clave no es segura. Esto se relaciona con el hecho de que DNSSEC no está implementado en mi servidor DNS y, en teoría, alguien podría interceptar la búsqueda de DNS y reemplazarla con su propia clave.

Edite el archivo de configuración de OpenDKIM:

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

Si está utilizando mi segundo ejemplo clave, con el dominio de destino "mail.example.com", la entrada todavía solo haría referencia al dominio principal:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

Nota de una de mis fuentes: si ejecuta varias instancias de Postfix, debe agregar esto a opendkim.conf para cada instancia (o las que desea usar opendkim)

Crea un archivo con tu editor de texto /etc/opendkim/TrustedHosts:

Agregue dominios, nombres de host y / o ip que deben ser manejados por OpenDKIM. No olvides localhost.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(la última línea de arriba probablemente no sea necesaria. Si tiene una dirección IP para agregar, asegúrese de usar la suya, no el ejemplo anterior).

Editar /etc/default/opendkim:

Descomente esta fila y use el puerto 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

Asegúrese de que su firewall (iptables) permita el loopback en localhost:

sudo iptables -A INPUT -i lo -j ACCEPT

A continuación, cree un archivo con su editor de texto /etc/opendkim/KeyTabley agregue el dominio a la tabla de claves

Añadir línea:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

Siguiente Cree un archivo con su editor de texto /etc/opendkim/SigningTabley agregue el dominio a SigningTable

Muestro ambos ejemplos. Tenga en cuenta que para mi segunda clave, ahora tengo que usar el nombre de dominio completo "mail.example.com":

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

Tenga en cuenta que en OpenDKIM 2.0.1 los nombres de dominio distinguen entre mayúsculas y minúsculas. En este ejemplo, estamos usando una versión más nueva de OpenDKIM y esto no parece ser un problema.

Configurar postfix. Edite /etc/postfix/main.cf y agregue las líneas al final

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

También cambie el nombre de host:

#myhostname = localhost         #original
myhostname = mail.example.com

También debe cambiar la entrada correspondiente en / etc / hosts. Estos cambios son efectivos después de un reinicio (aunque puede configurarlo inmediatamente con el comando:) hostname NEW_NAME.

Reinicie postfix y opendkim si no reinició:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

Pruebas

La mejor manera de verificar que su correo firmado se esté autenticando y que sus registros DNS estén configurados correctamente es usar uno de los servicios de prueba gratuitos. Usé estos:

  • Validador de correo electrónico Brandon Checketts - http://www.brandonchecketts.com/emailtest.php (mi favorito)
  • Enviar un correo electrónico firmado a: check-auth@verifier.port25.com (mi favorito también)
  • Envíe un correo electrónico firmado a: sa-test@sendmail.net (puede poner todas las direcciones de correo electrónico de prueba en el campo Para: de un solo mensaje saliente para probar)

  • Envíe un correo electrónico firmado a: autorespond+dkim@dk.elandsys.com <--- ¡ROTO! No uses este.

Cada uno de estos le dirá si las cosas funcionan correctamente y le dará algunos consejos sobre la solución de problemas si es necesario.

Si tiene una cuenta de Gmail, también puede enviar un mensaje firmado allí para una prueba rápida y fácil.

Una vez que esté satisfecho de que todo esté bien, puede eliminar el indicador de prueba en el registro TXT de DNS y aumentar TTL.

¡Hecho!


Funciona perfectamente en precisa. Buen recorrido gracias.
Aki

Use -b 1024 para generar claves de 1024 bits. Es imprescindible para firmar mi gmail!
Prashant Singh

1
Tenga en cuenta que en opendkim.conf los tres parámetros "Dominio", "Archivo de claves" y "Selector" se ignoran al usar "SigningTable" y "KeyTable". No estoy seguro si esto cambió en algún momento, pero vale la pena mencionarlo ( opendkim.org/opendkim.conf.5.html )
billynoah

0

Esta es una buena guía.

Explica que opendkim es realmente recomendable y que los pasos para implementar su firma dkim son los mismos que con dkim-filter.

dkim-milter ya no se está desarrollando. Su autor original ha bifurcado la fuente y ahora está desarrollando opendkim. Para Lucid y versiones posteriores, se prefiere opendkim sobre dkim-filter. Las instrucciones en esta página deben ser las mismas (solo con los nombres de paquetes ajustados según sea necesario).

BTW Domainkeys es el predecesor en desuso de DKIM. Agregue registros TXT a su zona DNS para SPF y DKIM, pero ya no es necesario molestarse con Domainkeys.


Ese artículo que vinculó está desactualizado. opendkim es el paquete para usar ahora. Estoy trabajando para configurarlo ...
MountainX para Monica Cellio

Valoro una actualización de sus experiencias, ya que estoy a punto de cambiar un servidor de Exim4 a Postfix-Dovecot y buscaré una guía actualizada.
iainH

Publiqué mi solución pero no tuve tiempo de formatearla. Usted (o cualquier otra persona) puede formatearlo. Pero mis notas son muy extensas, así que quería que tuvieras acceso a ellas sin demora. Espero que sean de ayuda.
MountainX para Monica Cellio

-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

Siempre me aseguro de cruzar algunas guías sobre cualquier cosa. Este tut en la configuración funciona, lo acabo de verificar y valida este. Pero, es posible que desee mostrar un TXT de ejemplo para que se detalle el registro de dominio. La gente puede confundirse y poner explícitamente todo lo de la clave en el valor p, lo cual no estoy completamente seguro de que sea correcto. es decir ... incluyendo ----- BEGIN PUBLIC KEY ----- y ----- END PUBLIC KEY -----. Eso puede llevar a algunos a confundirse. Solo asegúrese de poner solo la parte de cifrado y no los marcadores.


3
Bienvenido a Ask Ubuntu! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Braiam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.