2023-01-08 12:35 (Ultima actualización: 2023-04-21 11:59)
Firma DKIM con DKIMProxy en FreeBSD
Después de tener nuestro servidor de correo básico funcionando, podemos integrar la firma DKIM a nuestros mensajes. Ésta se utiliza para validar que el mensaje de correo electrónico se ha enviado efectivamente por el servidor de nuestro dominio, ya que es el único que tiene la clave DKIM que lo firma. Necesitaremos por un lado agregar un registro a nuestra zona DNS con la firma que utilizaremos. Por otro lado, será necesario firmar los correos salientes.
Firma DKIM
Creamos el par de claves que necesitaremos para firmar los mensajes.
cd /usr/local/etc/mail
openssl genrsa -out dkim.key 2048
openssl rsa -in dkim.private.key -pubout -out dkim.public.key
Registro DNS
Se necesita publicar desde el DNS la clave DKIM para que los servidores de correo que reciban los mensajes, comprueben que efectivamente se han enviado desde el origen que se indica.
Creamos un registro TXT con la siguiente forma:
_domainkey.correo.com TXT "v=DKIM1;h=sha256;p=<public key>"
El contenido entre <> será el contenido del fichero que creamos anteriormente **dkim.public.key
Instalación de DKIMProxy
pkg install dkimproxy
Configuración de DKIMProxy
Crear y editar su fichero
cp /usr/local/etc/dkimproxy_out.conf.example /usr/local/etc/dkimproxy_out.conf
vi /usr/local/etc/dkimproxy_out.conf
Tal que
# specify what address/port DKIMproxy should listen on
listen 127.0.0.1:10027
# specify what address/port DKIMproxy forwards mail to
relay 127.0.0.1:10028
# specify what domains DKIMproxy can sign for (comma-separated, no spaces)
domain correo.com
# specify what signatures to add
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
# specify location of the private key
keyfile /usr/local/etc/mail/dkim.private.key
# specify the selector (i.e. the name of the key record put in DNS)
selector _domainkey
# control how many processes DKIMproxy uses
# - more information on these options (and others) can be found by
# running `perldoc Net::Server::PreFork'.
#min_servers 5
#min_spare_servers 2
Habilitamos el servicio
sysrc dkimproxy_out_enable="YES"
E iniciamos
service dkimproxy_out start
Configuración de reenvío en OpenSMTPd
Ahora hace falta reenrutar el correo para que salga firmado. Para eso hay que decirle al MTA que le mande el correo saliente a DKIMproxy, que lo firmará y se lo devolverá a OpenSMTPd para que esta vez lo envíe al destino que corresponda. Para esto se añaden las líneas listen y relay en /usr/local/etc/dkimproxy_out.conf, y modificamos las reglas del MTA en /usr/local/etc/mail/smtpd.conf
# Destino del correo firmado por dkimproxy
listen on lo0 port 10025 tag dkim_out
# Reenvío al MTA externo
action "relay_dkim" relay host smtp://127.0.0.1:10027
action "relay" relay helo mail.correo.com
# Reglas de entrega
match tag dkim_out for any action "relay"
match from any auth for any action "relay_dkim"