DKIM (DomainKeys Identified Mail) es un mecanismo de autentificación para luchar contra el spam, que consiste en (y aquí prácticamente copio de la wikipedia) añadir una cabecera llamada «DKIM-Signature»que contendrá una firma digital tanto de la cabecera como del cuerpo del mensaje. El destinatario, hará una consulta DNS usando el dominio origen y un selector, contra un registro DNS del tipo TXT del estilo selector._domainkey.dominio.com que contendrá la clave pública necesaria para descifrar el valor de la firma de la cabecera y verificar así su procedencia.
Aquí explican mejor qué es y cómo funciona DKIM, pero en esta ocasión, lo que veremos no es explicar cómo funciona, si no cómo usar nuestro servidor de correo (postfix sobre un antiguo Fedora 13) para firmar nuestros mails mediante opendkim, instalando el rpm oficial en lugar de instalarlo mediante yum. Instalar el rpm seguramente tenga más trabajo que hacerlo desde yum, pero el proceso servirá en cualquier distribución basada en Red Hat.
Descarga e instalación
El problema de opendkim, es que no viene en los repositorios de Fedora 13. Según esta web, sólo viene en los repositorios a partir de Fedora 14 y en los repositorios EPEL. En cualquier caso, podemos descargar la versión deseada de la web oficial. En el ejemplo, usaremos la versión 2.7.3, que sabemos que funciona sin problemas con Fedora 13.
[root@server]# wget http://sourceforge.net/projects/opendkim/files/Previous%20Releases/opendkim-2.7.3.tar.gz/download
[root@server]# tar -zxvf opendkim-2.7.3.tar.gz
[root@server]# cd opendkim-2.7.3
Requisitos
Antes de realizar el configure y el make, instalaremos algunos requisitos que sabemos que necesitaremos. Es posible que necesitemos otros paquetes adicionales, o que algunos de los siguientes ya los tengamos instalados. Ésto lo sabremos al ejecutar el «configure», que sólo funcionará si tiene todos los requisitos. En caso contrario, se parará en el punto en el que no encuentra un determinado requisito.
[root@server]# yum install libssh.x86_64 openssl-devel.x86_64 sendmail-devel.x86_64
Instalación
Bastará con ejecutar la típicas sentencias:
[root@server]# ./configure
[root@server]# make
[root@server]# make install
Si todo va bien, podremos verificar la ruta de instalación de opendkim:
[root@server]# whereis opendkim
opendkim: /usr/local/sbin/opendkim
Configuración de opendkim
Un primer paso a dar, podría ser configurar opendkim para que se ejecute al inicio. Para ello, bastará con añadir la siguiente línea al final del fichero rc.local:
[root@server]#vi /etc/rc.local
# Opendkim
/usr/local/sbin/opendkim -x /etc/opendkim.cnf
En la línea anterior, se ha definido la ruta del fichero de configuración de opendkim. Lo siguiente que haremos será crear y completar este fichero, por ejemplo, tal y como sigue:
[root@server]# vi /etc/opendkim.cnf
PidFile /var/run/opendkim/opendkim.pid
Mode s
Syslog no
SyslogSuccess no
LogWhy no
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 002
Canonicalization simple/simpleKeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
InternalHosts refile:/etc/opendkim/TrustedHostsSyslogFacility news
SenderHeaders Sender,From
En el archivo de configuración hemos indicado que opendkim lo ejecutará un usuario con mismo nombre y grupo. Si no existen, como es mi caso, podemos crearlo (sin shell):
[root@server]# useradd opendkim -s /sbin/nologin
También se ha definido una carpeta donde se definirán los ficheros con las claves y los dominios que firmar, que deberemos crear:
[root@server]# mkdir /etc/opendkim
[root@server]# chown root:opendkim /etc/opendkim
[root@server]# cd /etc/opendkim
Dentro del directorio recién creado, crearemos los ficheros de Key, Signing y Hosts, así como un directorio «keys» donde almacenaremos los ficheros con las claves privadas:
[root@server]# touch KeyTable
[root@server]# touch SigningTable
[root@server]# touch TrustedHosts
[root@server]# mkdir keys
[root@server]# chown opendkim:opendkim *
KeyTable
En KeyTable, especificaremos dónde están las claves para firmar los mensajes. En este fichero, cada línea contendrá una definición, y cada línea, además, deberá seguir siempre el mismo formato, tal y como sigue:
identificador dominio.com:selector:path_to_key
Así, se introducirá un identificador (para referirnos a esa entrada cuando queramos usarla), después se indicará el dominio y el selector para poder encontrar la clave pública en el registro DNS (que se especificará en un registro DNS del tipo TXT así: selector._domainkey.midominio.com) y finalmente la ubicación de la clave privada, que en nuestro caso guardaremos dentro del directorio «keys» (/etc/opendkim/keys/midominio.com.pem).
#default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private
id.midominio.com midominio.com:default:/etc/opendkim/keys/midominio.com.pem
Es importante recordar que las claves privadas que dejaremos dentro de «keys», han de tener los permisos correctos, pues en caso contrario no funcionará. Se pueden configurar todas las claves con usuario opendkim:opendkim y permisos 600.
También es importante recalcar que necesariamente ha de haber una definición por línea. Una definición no puede estar partida en varias líneas porqué no funcionará.
SigningTable
El fichero SigningTable contendrá las direcciones de correo que se deberán firmar. Básicamente, se definen los dominios origen que se deberán firmar, y la entrada en KeyTable con la que se firmará. Por ejemplo, firmaremos todos los mails que se envíen desde una dirección @midominio.com, usando la clave especificada en la entrada KeyTable para «id.midominio.com»:
*@midominio.com id.midominio.com
TrustedHosts
Seguramente el fichero más fácil de entender. Aquí, únicamente definiremos un listado de las redes o hosts desde las que aceptaremos firmar.
127.0.0.1
80.81.82.83/24
Integración con postfix
En el fichero de configuración del opendkim, se ha definido el socket de escucha para firmar los mensajes. En nuestro ejemplo, el socket era «inet:8891@localhost». Deberemos, pues, indicarle al posftix, que use ese socket para firmar. Ésto lo haremos añadiendo al final del fichero de configuración de posftix (main.cf) la siguiente línea:
smtpd_milters = inet:127.0.0.1:8891
Será necesario reiniciar para aplicar los cambios.
Iniciar opendkim
Tal y como hemos visto, opendkim se iniciará durante el proceso de boot de la máquina, a través del comando introducido en el rc.local. Sin embargo, la primera vez, deberemos ejecutarlo a mano:
[root@server]# /usr/local/sbin/opendkim -x /etc/opendkim.cnf
Con ésto ya debería ser suficiente para empezar a enviar mails usando opendkim, aunque va bien saber que junto a opendkim, se instalarán un seguido de utilidades extra que nos pueden venir bien para testear y ayudarnos a administrar el opendkim, como son:
opendkim-genkey opendkim-genzone opendkim-testadsp opendkim-testkey opendkim-testmsg
Fuentes:
http://www.opendkim.org/opendkim-README
Foto por epSos.de