# Activar DKIM a todos los dominios de un servidor con Directadmin

## Introducción
DKIM es pieza fundamental en el sistema actual de antispam, y sobre todo para garantizar que nuestro dominio y/o Ip no loleguen a ser considerados como SPAM.

### Configuracion DKIM global

Indicada en el manual, [directadmin.conf - #dkim](https://docs.directadmin.com/directadmin/general-usage/all-directadmin-conf-values.html#dkim)  nos indica que la variable es `dkim` 

| Valor | Comentario                                                                                 |
|-------|-------------------------------------------------------------------------------------------|
| 0     | DKIM está deshabilitado por defecto para los nuevos dominios                               |
| 1     | DKIM está habilitado por defecto para los nuevos dominios                                  |
| 2     | La funcionalidad de DKIM está habilitada, pero no es obligatoria para los nuevos dominios |

Podemos editarlo manualmente o usar por ejemplo: 

```bash
da config-set dkim 1
cd /usr/local/directadmin/custombuild
./build update
./build exim
./build eximconf
```

o

```
da build update
da build exim
da build eximconf
```

Esta configuración hará que todos los dominios futuros, se configuren con **DKIM.**

### Para dominios existentes

Es probable que en una migración o situación especifica, el administrador deseé poner el valor a `2` para poder realizar la migración sin añadir una capa de complejidad.

Bien, una vez asentado todo, o bien porque había dominios anteriores sin **DKIM,** procedemos: 

> Atención: Si hay ya dominios que no quieren tener **DKIM**, ya sea porque no saben como usar servicios exteriores de correo sin configurarlo correctamente o porque no se lo explicarón, se puede producir problemas con ellos. Tener en cuenta.

Habilitar la creación automática de registros **DKIM** no afecta a los dominios existentes. Tienes algunas opciones para agregar **DKIM** a los dominios antiguos una vez que has habilitado **DKIM** en el archivo `directadmin.conf`. Puedes hacerlo para cada dominio uno por uno o para todos los dominios existentes a la vez.

Para habilitar **DKIM** para todos los dominios existentes después de configurar **DKIM** en `1` en el archivo directadmin.conf, puedes ejecutar el siguiente comando a través de **SSH** como el usuario root. 

```bash
echo "action=rewrite&value=dkim" >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq
```

Para habilitar **DKIM** solo para dominios seleccionados uno por uno, utiliza ya sea la cola de tareas o el script `dkim_create.sh` proporcionado por DirectAdmin (reemplaza **DOMAIN.COM** con el dominio para el cual deseas habilitar **DKIM**).

```bash
/usr/local/directadmin/scripts/dkim_create.sh DOMAIN.TLD
```

o inmeditamente

```bash
echo "action=rewrite&value=dkim&domain=DOMAIN.COM&dns=yes" >> /usr/local/directadmin/data/task.queue; /usr/local/directadmin/dataskq
```

> Ambos comandos funcionan de la misma manera, con la excepción de que puedes tener el **DKIM** escrito inmediatamente con **dataskq** en comparación con dentro de un minuto utilizando el script `dkim_create.sh`.

## Deshabilitar DKIM por Usuario Cuando Está Habilitado o Permitido Globalmente

Esta función está diseñada para que **DKIM** esté habilitado o permitido globalmente, pero puedes deshabilitarlo a nivel de usuario. 

Esto requiere que se establezca `dkim=1` o `dkim=2` en el archivo `directadmin.conf`. 

La configuración de `1` habilitará **DKIM automáticamente** para todos los dominios bajo cada usuario, a menos que especifiques lo contrario en sus archivos `user.conf`. 

La configuración de `2` les permitirá a los usuarios, habilitar **DKIM** por sí mismos, a menos que se especifique lo contrario en su archivo `user.conf`.

Ten en cuenta, que establecer `dkim=0` en el archivo `directadmin.conf` **deshabilita completamente** **DKIM** para todo el servidor y los archivos `user.conf` no se verificarán. Por lo tanto, si deseas que **DKIM** esté deshabilitado globalmente por defecto con la opción de habilitarlo solo para ciertos usuarios/dominios, configurar `dkim=2` en el archivo directadmin.conf es una mejor opción.

Cuando creas un usuario, se crea con un dominio predeterminado. Este dominio tendrá **DKIM** creado para el dominio por defecto debido a la configuración habilitada globalmente y la no existencia de un `user.conf` hasta que se cree la cuenta (no hay un `user.conf` para editar y deshabilitar **DKIM**). 

Por lo tanto, se deberá eliminar manualmente **DKIM** para el dominio predeterminado si prefieres que no tenga un registro **DKIM**. 

Aquí están los pasos para, primero eliminar el registro del dominio predeterminado y luego deshabilitar la creación automática de registros DKIM para los dominios subsiguientes bajo ese usuario.

Para eliminar los registros del dominio predeterminado, elimina el registro **TXT** `x._domainkey` de `/var/named/DOMAIN.TLD.db` y luego elimina las claves.

```bash
rm -f /etc/virtual/DOMAIN.COM/dkim.public.key
rm -f /etc/virtual/DOMAIN.COM/dkim.private.key
```

Ahora, edita el `user.conf` para que no se habiliten registros **DKIM* para los dominios que se creen posteriormente bajo el usuario. El `user.conf` se puede editar a través de **SSH** como el usuario root y el archivo se encuentra aquí (donde USERNAME representa el nombre de usuario del usuario que estás editando), 

```bash
/usr/local/directadmin/data/users/USERNAME/user.conf
```

Esto permite que la configuración de **DKIM** de ese usuario particular anule la configuración de **DKIM** habilitada globalmente establecida en el archivo `directadmin.conf`, evitando así que se creen registros **DKIM** para los dominios de ese usuario en adelante.

Reinicia DirectAdmin después de hacer los cambios.

```bash
systemctl restart directadmin
```

## Deshabilitar DKIM a Nivel de Dominio

Esta es esencialmente la misma función que la característica a nivel de usuario, con la excepción de que editarías el archivo de configuración del dominio ubicado en `/usr/local/directadmin/data/users/USERNAME/domains/DOMAIN.TLD.conf`, en su lugar. 

No es necesario editar el archivo `user.conf` del usuario para controlar **DKIM** a nivel de dominio.

Si un determinado dominio utiliza tanto un DNS remoto como un servidor de correo remoto, es posible que desees deshabilitar DKIM para este dominio en particular en lugar de para todos los dominios del usuario. Aquí es donde esta función es útil.

> En realidad no es necesaria esta dudosa práctica usada, cuando el usuario final o la otra empresa que le ofrece servicios de correo, no le da las putas adecuadas) La gran mayoría de los sevricios de correo externo, si dan la información necesaria para crear y mantener un registro **DKIM** para cada servicios de correo, basandonos en el registro **selector** pero su complejidad y la falta de conocimientos llevan a un salida incorrecta. Pero este es otro tema del que hablaremos en otro post, en fechas próximas.

Reinicia DirectAdmin después de hacer cambios en el archivo DOMAIN.TLD.conf:

```bash
systemctl restart directadmin
```

## Cambiar el Selector Predeterminado

DirectAdmin utiliza `x` como el selector predeterminado. Para cambiar el selector, necesitarás actualizar el archivo directadmin.conf con el selector deseado. Los siguientes ejemplos cambian el selector a `default`:

```bash
/usr/local/directadmin/directadmin set dkim_selector default restart
```

Necesitarás reconstruir la configuración de Exim de la siguiente manera:

```bash
/usr/local/directadmin/custombuild/build exim_conf
```

Confirma que el selector fue cambiado en el archivo `/etc/exim.dkim.conf`:

```
❯ grep -i selector /etc/exim.dkim.conf
  dkim_selector = x
```

Ahora, cualquier registro DKIM creado nuevo utilizará tu selector especificado. Ten en cuenta que necesitarás eliminar y recrear los registros DKIM antiguos que utilicen el selector antiguo si deseas que usen el nuevo selector.

## Conclusión

Ya hemos revisado el procedimiento paso a paso para habilitar DKIM con el panel de control DirectAdmin. 
Podemos decir, qu el registro **DNS DKIM** es esencial para un servicio de correo electrónico más fluido y para la autenticación de correos electrónicos.
##### Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. 
También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.
El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).