Saltar al contenido

Configurar DKIM (DomainKeys) para Ubuntu, Postfix y Mailman

Solución:

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 de ayuda.

Estas son mis referencias:

  • man opendkim-testkey
  • man opendkim.conf
  • http://www.serveridol.com/2012/02/17/opendkim-configuring-dkim-keys-on-postfix/
  • http://stevejenkins.com/blog/2010/09/how-to-get-dkim-domainkeys-identified-mail-working-on-centos-5-5-and-postfix-using-opendkim/
  • http://blog.example.com/tag/opendkim/
  • http://blog.tjitjing.com/index.php/2012/03/guide-to-install-opendkim-for-multiple-domains-with-postfix-and-debian.html

y Wikipedia tiene una buena entrada sobre el tema.

Como mínimo necesitará:

  • Acceso root a su servidor de correo
  • Acceso para actualizar los registros dns de su 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 tecla que desea utilizar. Aquí voy a usar el selector 201205 ya que la clave entró en vigencia en mayo de 2012 (astucia, ¿eh?). Doy dos ejemplos de variedad, que espero que añadan claridad. Solo necesita generar UNA clave. Sin embargo, le doy ambos ejemplos para que pueda compararlos.

  • 201205 (1.a tecla)
  • my_selector (segunda clave)

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

  • example.com (primera clave)
  • mail.example.com (segunda clave)

Decidí trabajar en el siguiente directorio:

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

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

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

Es posible que deba cambiar de propietario o no. 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 opendkim usuario (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 mostró 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)! ¿Dónde está contiene? ;=rsa;, debe contener ;k=rsa;. los k Está perdido. 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 necesite escapar del punto y coma de esta manera. Si no desea el comentario final, simplemente elimínelo. 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í quedarme 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 generación de un par de claves fue un poco más complicado para mí. Describiré lo que hice. El primer elemento es que utilicé el valor de dominio “example.com” aunque la clave se utilizará para “mail.example.com”. Llegué a esto a través de prueba y error. Funciona, mientras que el uso de “mail.example.com” no funcionó. Desafortunadamente, no conozco las razones detrás de esto. Esta es realmente la única diferencia que encontré, pero fue lo suficientemente preocupante que sentí que debería documentar mis experiencias con el uso de subdominios. Ninguno de los otros tutoriales de nivel principiante 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, compruébelo 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, pruebe la clave. Los siguientes comandos asumen 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 utilizar DNSSSEC. DNSSEC está por llegar, pero aún no está listo para el horario de máxima audiencia, según mi lectura.

Ejemplo con 2da tecla:

# 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:[email protected]
#EOF

Si está utilizando mi segundo ejemplo clave, con el dominio de destino “mail.example.com”, la entrada 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 al 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 olvide 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 propia, no la del ejemplo anterior).

Editar /etc/default/opendkim:

Descomente esta fila y use el puerto 8891:

SOCKET="inet:[email protected]" # 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/KeyTable y agregue el dominio a la KeyTable

Añadir línea:

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

Siguiente Crea un archivo con tu editor de texto /etc/opendkim/SigningTable y 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 reciente 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 configurarlos 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 esté siendo autenticado y que sus registros DNS estén configurados correctamente es utilizar uno de los servicios de prueba gratuitos. Usé estos:

  • Validador de correo electrónico de Brandon Checketts: http://www.brandonchecketts.com/emailtest.php (mi favorito)
  • Envíe un correo electrónico firmado a: [email protected] (mi favorito también)
  • Envíe un correo electrónico firmado a: [email protected] (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: [email protected] <--- ¡¡¡ROTO !!! No uses este.

Cada uno de estos le dirá si las cosas están funcionando correctamente y le dará algunos consejos sobre la resolució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 sencilla.

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

¡Hecho!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *