Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Instalación y configuración de OpenDKIM.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Este documento incluye los procedimientos necesarios para configurar OpenDKIM con Sendmail o Postfix en CentOS 7 o Red Hat™ Enterprise Linux 7.

Acerca de DKIM.

DKIM (DomainKeys Identified Mail) es un mecanismo de autenticación de correo electrónico que permite firmar los mensajes de correo electrónico con una llave privada —de 1024 a 2048 bits— de modo que éste pueda ser validado por un destinatario a través de una llave pública distribuida a través de DNS.

Fue diseñado para combatir la falsificación de correo electrónico (mail spoofing), práctica muy utilizada para enviar spam que consiste en falsificar el valor del campo de la cabecera "From:" de un mensaje de corro electrónico, es decir el remitente, cuando en realidad proviene de un servidor distinto al que realmente corresponde al dominio involucrado, dificultando de este modo el poder hacer reclamos o bien engañar a los servidores de correo electrónico para que reciban spam como correo legítimo aprovechando un defecto del protocolo SMTP. Todos los grandes servicios de correo electrónico —incluidos GMail, Hotmail/Outlook.com, Yahoo y Fastmail— utilizan esta tecnología para mitigar el problema del spam.

DKIM también impide la manipulación de correo electrónico, garantizando la integridad de extremo a extremo, desde el módulo firmante en el servidor de correo de origen, que inserta una firma DKIM en las cabeceras del mensaje, hasta el módulo de comprobación en el servidor de destino que valida la firma obteniendo la llave pública del firmante a través de un registro TXT en la zona de DNS que resuelve el domino del remitente.

Acerca de OpenDKIM.

OpenDKIM es un proyecto mantenido por la comunidad y The Trusted Domain Project y derivado de dkim-milter 2.8.3, el cual originalmente desarrollado por Sendmail, Inc. Consiste en una biblioteca compartida que implementa el servicio y la aplicación de filtrado de correo (milter) que puede ser utilizado por cualquier MTA compatible con el protocolo milter.

El paquete opendkim sustituye a dkim-milter en CentOS 7 y Red Hat™ Enterprise Linux 7. Puede ser utilizado en versiones anteriores de éstos pero requiere actualizar la versión de libmemcached e instalar libbsd, por tal motivo es que en versiones anteriores y de legado se prefiere seguir utilizando dkim-milter.

URL: http://opendkim.org/

Equipamiento lógico necesario.

Instalación a través de yum.

ALDOS y Fedora™ ya incluyen lo necesario para realizar la instalación del paquete necesario. Si utiliza CentOS o Red Hat™ Enterprise Linux, puede utilizar el almacén YUM de Alcance Libre para servidores en producción, descargando el archivo http://www.alcancelibre.org/al/server/AL-Server.repo dentro del directorio /etc/yum.repos.d/:

wget -N http://www.alcancelibre.org/al/server/AL-Server.repo \
    -O /etc/yum.repos.d/AL-Server.repo

Examine el contenido del archivo /etc/yum.repos.d/AL-Server.repo:

vi /etc/yum.repos.d/AL-Server.repo

El contenido debe ser el siguiente:

[AL-Server]
name=AL Server para Enterprise Linux $releasever
mirrorlist=http://www.alcancelibre.org/al/el$releasever/al-server
gpgcheck=1
gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY

Salga del editor de texto y ejecute lo siguiente para instalar lo necesario:

yum -y install opendkim

Procedimientos.

Servicio opendkim y SELinux.

Debe saber que el Control de Acceso Discrecional (Discretionary Access Control o DAC) es una función que se encarga de gestionar las banderas estándar de pertenencia y permisos en el sistema de archivos. OpenmDKIM requiere la capacidad de ignorar la pertenencia y permisos de sus propios archivos en el sistema de archivos. De modo predeterminado SELinux impide que ésto ocurra con éste y muchos otros servicios, por tanto hay que generar una política específica para OpenDKIM.

Genere un nuevo directorio denominado /usr/share/selinux/packages/opendkim:

mkdir -p /usr/share/selinux/packages/opendkim

Cambie al directorio /usr/share/selinux/packages/opendkim:

cd /usr/share/selinux/packages/opendkim

Descargue el archivo http://www.alcancelibre.org/linux/secrets/opendkim.te:

wget http://www.alcancelibre.org/linux/secrets/opendkim.te

Edite el archivo recién descargado:

vi opendkim.te

Asegúrese que éste tenga el siguiente contenido:


module opendkim 1.0; require { type dkim_milter_t; class capability dac_override; } #============= dkim_milter_t ============== allow dkim_milter_t self:capability dac_override;

Lo anterior fue obtenido de la salida de cat /var/log/audit/audit.log|grep audit|audit2allow -m opendkim>opendkim.te en un sistema donde SELinux impedía a opendkimignoar el DAC.

Genere el archivo de módulo para SELinux (opendkim.mod) ejecutando checkmodule del siguiente modo:

checkmodule -M -m -o opendkim.mod opendkim.te

Empaquete el archivo opendkim.mod como el archivo opendkim.pp:

semodule_package -o opendkim.pp -m opendkim.mod

Vincule el archivo opendkim.pp obtenido con las políticas actuales de SELinux y cargue éstas en el núcleo en ejecución:

semodule -i /usr/share/selinux/packages/opendkim/opendkim.pp

Puede eliminar los archivos opendkim.te y opendkim.mod, pues sólo será necesario conservar el archivo binario opendkim.pp.

Creación de firma digital y configuración del servicio dkim-milter.

Si utiliza o bien planea utilizar Virtualmin para administrar o gestionar DKIM, por favor omita todos los procedimientos a continuación, debido a que este módulo para Webmin realiza todo lo necesario y porque éste ignorará y eliminará cualquier firma digital y configuración para dominio que se haya configurado fuera de la interfaz de Virtualmin.

Genere un directorio especifico para el dominio a configurar con OpenDKIM:

mkdir /etc/opendkim/keys/dominio.com

Cambie al directorio /etc/opendkim/keys/dominio.com:

cd /etc/opendkim/keys/dominio.com

Ejecute opendkim-genkey con la opción -b y 2048 como argumento para crear una nueva firma digital de 2048 bits, la opción -r para definir que la firma a crear sólo puede ser utilizar para firmar correo electrónico, la opción -d con el dominio a utilizar como argumento y la opción -s para indicar el nombre del selector deseado. Éste último pude ser cualquier cadena de texto que se desee y sirve simplemente para identificar el registro. Se recomienda utilizar default o bien el año en que se está generando la firma digital. Ejemplo:

opendkim-genkey -r -b 2048 -d dominio.com -s default

Lo anterior creará los archivos denominados default.private y default.txt; el primero corresponde a la firma digital que se utilizará para firmar todos los mensajes de correo; el segundo corresponde al archivo que incluye el registro TXT que debe añadirse a la zona de reenvío del dominio.

Se recomienda genere la firma digital a cuando menos 2048 bits. El uso y validación de firmas a 1024 bits será descartado en un futuro cercano.

Cambie el nombre del archivo default.private a simplemente default:

mv default.private default

Regrese a su directorio de inicio:

cd

Cambie el propietario de todo el directorio que corresponde al dominio gestionado para que pertenezca al usuario y grupo opendkim:

chown -R opendkim:opendkim /etc/opendkim/keys/dominio.com

Edite el archivo de configuración /etc/opendkim.conf.

vi /etc/opendkim.conf

Lo primero a modificar es el modo de funcionamiento cambiando el valor de la función Mode. Pude hacer sólo verificación, sólo firma o bien firma y verificación. El valor predeterminado es sólo verificación (v). Para realizar firma y verificación debe cambiarse el valor por sv.

Mode	sv

Localice la opción KeyFile alrededor de la línea 65 y desactive ésta colocando una almohadilla al inicio de la línea:

# KeyFile	/etc/opendkim/keys/default.private

En lugar de lo anterior se utilizará KeyTable, lo cual permitirá utilizar múltiples dominios, cada uno con su propia firma. Descomente la siguiente línea:

KeyTable	/etc/opendkim/KeyTable

Igualmente y por las mismas razones active las opciones SigningTable, ExternalIgnoreList e InternalHosts:

SigningTable    refile:/etc/opendkim/SigningTable
ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
InternalHosts	refile:/etc/opendkim/TrustedHosts

SigningTable se utiliza para definir una tabla usada para seleccionar una o más firmas para aplicar a un mensaje basado sobre la dirección de correo encontrada en el campo From de la cabecera. Es decir indica a OpenDKIM como utilizar las firmas.

ExternalIgnoreList se utiliza para definir la tabla de anfitriones que pueden enviar correo a través del servidor sin necesidad de credenciales.

InternalHosts se utiliza para definir la tabla de anfitriones cuyo correo debe ser firmado pero nunca se debe verificar. Para fines prácticos, utiliza el mismo archivo que ExternalIgnoreList.

El archivo de configuración debe quedar del siguiente modo:

PidFile	/var/run/opendkim/opendkim.pid
Mode	sv
Syslog	yes
SyslogSuccess	yes
LogWhy	yes
UserID	opendkim:opendkim
Socket	inet:8891@localhost
Umask	002
Canonicalization	relaxed/relaxed
Selector	default
MinimumKeyBits 1024
KeyTable	/etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
InternalHosts	refile:/etc/opendkim/TrustedHosts

Edite el archivo /etc/opendkim/KeyTable:

vi /etc/opendkim/KeyTable

Defina el nombre del selector que utilizó arriba para generar la firma digital y defina el dominio a utilizar.

default._domainkey.dominio.com dominio.com:default:/etc/opendkim/keys/dominio.com/default

Edite el archivo /etc/opendkim/SigningTable:

vi /etc/opendkim/SigningTable

El contenido debe indicar qué selector y firma digital utilizar para firmar el correo de el dominio. Ejemplo:

*@dominio.com default._domainkey.dominio.com

Edite el archivo /etc/opendkim/TrustedHosts:

vi /etc/opendkim/TrustedHosts

Defina como mínimo las direcciones IPv4 e IPv6 del anfitrión local, el nombre de anfitrión del servidor y el bloque de direcciones que corresponda a la red de área local:

127.0.0.1
::1
mail.dominio.com
192.168.1.0/24

Active el servicio opendkim ejecutando lo siguiente:

systemctl enable opendkim

Inicie el servicio opendkim ejecutando lo siguiente:

systemctl start opendkim

Configuración del MTA.

Procedimientos de configuración de Sendmail.

Edite el archivo /etc/mail/sendmail.mc.

vim /etc/mail/sendmail.mc

Es necesario agregar el siguiente contenido resaltado en el archivo /etc/mail/sendmail.mc, justo arriba de la línea MAILER(smtp)dnl.

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl
define(`confINPUT_MAIL_FILTERS', `opendkim')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con Clamav Milter y Spamassassin Milter:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z')dnl
define(`confINPUT_MAIL_FILTERS', `opendkim,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con Clamav Milter, Spamassassin Milter y Milter Greylist:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl
INPUT_MAIL_FILTER(`greylist', `S=local:/var/run/milter-greylist/milter-greylist.sock')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z, {greylist}')dnl
define(`confMILTER_MACROS_CONNECT', `{_}, {j}, {if_addr}, {daemon_port}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `{i}, {auth_authen}')dnl
define(`confINPUT_MAIL_FILTERS', `opendkim,greylist,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Reinicie el servicio sendmail para que surtan efectos los cambios.

systemctl restart sendmail

A partir de este momento, todo el correo electrónico emitido por el servidor incluirá una firma digital que será validada por el registro TXT anunciado a través de los servidores DNS que resuelven el dominio.

Procedimientos de configuración de Postfix.

Ejecute lo siguiente para añadir las opciones de configuración necesarias para Postfix:

postconf -e 'smtpd_milters = inet:127.0.0.1:8891'
postconf -e 'non_smtpd_milters = $smtpd_milters';
postconf -e 'milter_default_action = accept'
postconf -e 'milter_protocol = 2'

O bien edite el archivo /etc/postfix/main.cf:

vi /etc/postfix/main.cf

Y añada el siguiente contenido:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

Reinicie el servicio postfix para que surtan efectos los cambios.

systemctl restart postfix

Registro TXT en el zona de reenvío en el servidor DNS.

Revise el contenido del archivo /etc/opendkim/keys/dominio.com/default.txt:

cat /etc/opendkim/keys/dominio.com/default.txt

El archivo default.txt correspondiente al dominio gestionado contiene el registro TXT correspondiente y que es necesario publicar para permitir al resto de los servidores de correo electrónico del mundo el poder validar los mensajes firmados con DKIM. Contiene algo similar lo siguiente:

default._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ
8AMIIBCgKCAQEArwJp9KDhf44dzWbtzDucXa0JGCyLCLcHiUkmxwlMJn5i9+ivX6jmKo5kXrpzD0BrOu
3bB0tKChd08Ozbx70w6+t3Ubmi8Dw+Sxc0rlvJtyOR4IpSLGJhmD7FP8q+fiaaY+NDEiqbdXdc8GYE4y
DpN//X9F+J8PQH2rs+WFI0A+xob2ezOMpX/qIuZzPVDAgsDKIyeXV316Zc8vh1Cq02ABFk/GfzZB5vYE
kjFs8HKdj7ulnztGuOX0JVQHmt9BzwSUwIoEuUpaNiLs0UnxCKen4krme5ARZvSo5tQCm3GmXUMe6FGs
X2LM/bg2WDMzfNP2/NLRgXapFWiZIV9tmXcwIDAQAB" ; ----- DKIM default for dominio.com

Si el registro resulta ser demasiado grande para ser utilizado por algunas versiones de servidores de DNS o bien limitaciones de la interfaz gráfica para administración, puede utilizarse éste segmentando del siguiente modo:

default._domainkey IN TXT ( "v=DKIM1; g=*; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC"
"AQ8AMIIBCgKCAQEArwJp9KDhf44dzWbtzDucXa0JGCyLCLcHiUkmxwlMJn5i9+ivX6jmKo5kXrpzD0B"
"rOu3bB0tKChd08Ozbx70w6+t3Ubmi8Dw+Sxc0rlvJtyOR4IpSLGJhmD7FP8q+fiaaY+NDEiqbdXdc8G"
"YE4yDpN//X9F+J8PQH2rs+WFI0A+xob2ezOMpX/qIuZzPVDAgsDKIyeXV316Zc8vh1Cq02ABFk/GfzZ"
"B5vYEkjFs8HKdj7ulnztGuOX0JVQHmt9BzwSUwIoEuUpaNiLs0UnxCKen4krme5ARZvSo5tQCm3GmXU"
"Me6FGsX2LM/bg2WDMzfNP2/NLRgXapFWiZIV9tmXcwIDAQAB" )

La segmentación se realiza encerrando entre paréntesis el valor del registro TXT y dividiendo la firma en cualquier número de partes de hasta 80 caracteres encerradas entre comillas dobles. Es importante señalar que debido al tamaño del registro TXT para firmas de 2048 bits, será imposible añadirlo a través de nsupdate y por tanto sólo será posible hacerlo editando directamente el archivo correspondiente a la zona de reenvío del dominio.

Ejecute lo siguiente para verificar el registro después de ser añadido a la zona de reenvío del dominio involucrado:

dig default._domainkey.dominio.com TXT

La respuesta debe ser similar a la siguiente:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>>
default._domainkey.dominio.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23403
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;default._domainkey.dominio.com. IN TXT

;; ANSWER SECTION:
default._domainkey.dominio.com. 1440 IN TXT "v=DKIM1; g=*; k=rsa; p=MIIBI
jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwJp9KDhf44dzWbtzDucXa0JGCyLCLcHiUkmxwlMJ
n5i9+ivX6jmKo5kXrpzD0BrOu3bB0tKChd08Ozbx70w6+t3Ubmi8Dw+Sxc0rlvJtyOR4IpSLGJhmD7FP
8q+fiaaY+NDEiqbdXdc8GYE4yDpN//X9F+J8PQH2rs+WFI0A+xob2ezOMpX/qIuZzPVDAgsDKIyeXV31
6Zc8vh1Cq02ABFk/GfzZB5vYEkjFs8HKdj7ulnztGuOX0JVQHmt9BzwSUwIoEuUpaNiLs0UnxCKen4kr
me5ARZvSo5tQCm3GmXUMe6FGsX2LM/bg2WDMzfNP2/NLRgXapFWiZIV9tmXcwIDAQAB"

;; Query time: 75 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Mar 25 12:32:33 2014
;; MSG SIZE rcvd: 312

Es importante señalar que este registro debe ser publicado sólo hasta haber concluida la configuración de Sendmail o Postfix y se debe esperar desde 1 hasta 24 horas para que el nuevo registro sea replicado en el resto de los servidores DNS del mundo. Éste es el motivo por el cual se recomienda realizar los procedimientos sólo durante el fin de semana.

Bibliografía:

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 20/07/2016, 11:00|Hits: 5,109 Ver la versión para imprimir