3. Configuración simplificada con usuarios virtuales
En este modo de configuración se utilizarán ficheros de texto para gestionar las cuentas de correo, contraseñas y ubicación de los buzones (en formato Maildir) de cada usuario de correo electrónico.
La configuración se realizará de la siguiente forma:
Se usará un único usuario de sistema «vmail» y en su directorio home estarán todos los Maildirs de las cuentas de correo.
El listado de cuentas de correo electrónico estarán en un fichero de texto.
La autenticación de Exim4 y Dovecot se realizará contra ese mismo fichero, compartido entre los dos programas.
3.1. Ficheros: usuarios virtuales y dominios
En primer lugar toda la configuración se basa en tener un único usuario del sistema llamado «vmail» y con él, funcionará todo el servidor de correo. Para crearlo los comandos serían:
adduser --disabled-login --disabled-password vmail
Ahora, el listado de cuentas de correo estará en un fichero de usuarios, usando
el mismo formato que el de Linux /etc/passwd
. Este formato consiste en
que los datos de cada usuario están en una línea, y cada línea tiene multiples
campos separados por «:», concretamente el formato es:
user:password:uid:gid:(gecos):home:(shell):extra_fields
Tanto Dovecot como Exim4 son capaces de leer este tipo de ficheros para extraer
los datos de usuario. Este fichero con los usuarios virtuales será
/etc/exim4/virtual-users
, y del fichero se usarán, de cada línea, los
campos 1,2 y 5, que corresponden a «user», «passwd» y «home» respectivamente.
Para generar el fichero solo hay que editarlo añadiendo cuentas de correo y
generando el Hash de las claves con el siguiente comando:
openssl passwd -1 1234
$1$xyz$2ZMGVni83Z6eFAdInvJuE/
Nota
Si se desea mayor seguridad, también se puede usar openssl passwd -6
para usar la función Hash SHA256.
A continuación muestro un ejemplo de contenido del fichero de correos virtuales con la clave «1234», y así, poder hacer pruebas de conexión posteriormente. Uso un par de dominios, pero uno de ellos es ficticio.
prueba@profesor.tai:$1$bL0vc3F2$JvSkNtvGkAsLOzH1F0BlG/:65534:65534:,,,:/home/vmail/profesor.tai/prueba@profesor.tai
info@art-website.com:$1$xyz$2ZMGVni83Z6eFAdInvJuE/:65534:65534:,,,:/home/vmail/art-website.com/info@art-website.com
Advertencia
Los campos «uid» y «gid» se pueden rellenar con cualquier número menos «0», ya que el sistema de autenticación detectaría un intento de escalado de privilegios y denegaría el acceso.
Ambos campos no se usan en esta configuración y serán reemplazados por el «uid» y «gid» del usuario del sistema «vmail».
Ahora hay que crear el segundo fichero con el listado de dominios para los que
el servidor aceptará el correo entrante. Estará en otro fichero de texto llamado
/etc/exim4/virtual-domains
. En este fichero sólo hay que poner cada
dominio en una línea. Un ejemplo, concordante con el anterior, sería:
profesor.tai
art-website.com
3.2. Correo entrante con Exim4
En la sección Configuración dividida en ficheros se creo el fichero
00_exim4_config_custom
para establecer las variables de configuración de
Exim4. Este fichero se puede usar para establecer el origen del listado de
dominios (fichero /etc/exim4/virtual-domains
) de la forma indicada:
MAIN_LOCAL_DOMAINS = partial-lsearch;CONFDIR/virtual-domains
Para procesar los correos entrantes se creará un nuevo «router» de Exim4, el
cual, buscará el destinatario del correo entrante en el fichero de usuarios
virtuales. Estará en el fichero 275_exim4-config_virtual_local_user
,
está de antes de «300» para que tenga prioridad sobre los usuarios locales del
sistema.
virtual_local_user:
debug_print = "R: virtual_user for $local_part@$domain"
driver = accept
domains = +local_domains
condition = ${lookup{$local_part@$domain}lsearch*@{CONFDIR/virtual-users}}
transport = virtual_local
Este «router», en caso de cumplirse las condiciones, envía los correos entrantes
a ser procesados por el transporte «virtual_local», así que hay que crear un
nuevo transporte en el fichero 30_exim4-config_virtual
con el siguiente
contenido:
virtual_local:
debug_print = "T: virtual_local for $local_part@$domain"
driver = appendfile
# directory= ${extract{5}{:}{${lookup{$local_part@$domain}\
# lsearch{CONFDIR/virtual-users}{$value}}}}/\
# ${if eq {$h_X-Spam-Flag:}{YES} {.Junk/}}
directory = ${extract{5}{:}{${lookup{$local_part@$domain}\
lsearch{CONFDIR/virtual-users}{$value}}}}
delivery_date_add
envelope_to_add
return_path_add
maildir_format
mode = 0660
mode_fail_narrower = false
user=vmail
group=vmail
La parte comentada contiene la condición para colocar el SPAM detectado en la carpeta IMAP Spam, para ello hay que configurar Spamassassin, lo cual se trata en otra parte de este manual.
Para probar la configuración se debe enviar un correo a uno de los usuarios virtuales, revisar el log de Exim4 y comprobar que se ha creado y entregado el correo en la carpeta Maildir correspondiente. Los comandos y la salida debería ser la siguiente:
echo "Hola mundo" | mail prueba@profesor.tai -s "Primer envío"
tail /var/log/exim4/mainlog
2023-03-20 19:45:05 1peKVF-0000ty-EZ <= root@profesor U=root P=local S=365
2023-03-20 19:45:05 1peKVF-0000ty-EZ => prueba <prueba@profesor.tai> R=virtual_local_user T=virtual_local
2023-03-20 19:45:05 1peKVF-0000ty-EZ Completed
ls -l /home/vmail/profesor.tai/prueba@profesor.tai/new/
total 4
-rw-rw---- 1 vmail vmail 474 mar 20 19:45 1679337905.H458007P3472.profesor
3.3. Correo saliente con Exim4
El siguiente paso es activar la autenticación usando el fichero de usuarios
virtuales /etc/exim4/virtual-users
con los HASH de las claves. En el
directorio /etc/exim4/conf.d/auth/
hay ficheros con ejemplos y con una
configuración ya activa. La mejor opción es desactivar este fichero, renombrando
de la siguiente forma:
cd /etc/exim4/conf.d/auth
mv 30_exim4-config_examples 30_exim4-config_examples.disabled
Ahora se creará una configuración de
autenticación en /etc/exim4/conf.d/auth/30_exim4-auth_vmail
con el siguiente contenido:
login_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = "${if crypteq{$auth2}{${extract{1}{:}{${lookup{$auth1}lsearch{CONFDIR/virtual-users}{$value}{*:*}}}}}{1}{0}}"
server_set_id = $auth1
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_in_cipher}{}{}{*}}
.endif
La configuración de autenticación se puede comprobar mediante línea de comandos siguiendo el siguiente ejemplo. Primero, suponiendo que la clave de «info@art-website.com» está establecida a «1234» hay que codificarla en base 64 para usarla posteriormente:
echo -ne "info@art-website.com" | base64
aW5mb0BhcnQtd2Vic2l0ZS5jb20=
echo -ne "1234" | base64
MTIzNA==
Ahora hay que conectarse localmente usando cifrado (con openssl) e intentar identificarse, reutilizando lo obtenido anteriormente, tal y como se muestra en las líneas resaltadas:
openssl s_client -starttls smtp -connect localhost:25
EHLO prueba.com
AUTH LOGIN
334 VXNlcm5hbWU6
aW5mb0BhcnQtd2Vic2l0ZS5jb20=
334 UGFzc3dvcmQ6
MTIzNA==
235 Authentication succeeded
3.4. Configurando Dovecot
En Debian Dovecot está dividido en múltiples paquetes, ya que es un software muy extenso y modularizado. Para realizar la configuración propuesta en este manual basta con los siguientes:
apt install dovecot-core dovecot-imapd dovecot-pop3d
Del mismo modo que Exim4, la configuración está partida en ficheros ubicados en
el directorio /etc/dovecot/conf.d/
y sólo los ficheros que terminan en
«.conf» son incluidos desde el principal que es
/etc/dovecot/dovecot.conf
.
La nueva configuración consistirá en desactivar la autenticación predeterminada
incluida desde 10-auth.conf
, y añadir una nueva basada en el fichero
/etc/exim4/virtual-users
en un nuevo fichero
/etc/dovecot/conf.d/auth-vmail.conf.ext
Para hacer estos cambios hay que editar el fichero indicado a continuación comentando la inclusión indicada y añadiendo la nueva:
#!include auth-system.conf.ext
!include auth-vmail.conf.ext
El contenido del nuevo fichero es el mostrado a continuación:
# Authentication for passwd-file users. Included from 10-auth.conf.
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/exim4/virtual-users
}
userdb {
driver = passwd-file
args = username_format=%u /etc/exim4/virtual-users
override_fields = uid=vmail gid=vmail
}
Tras los cambios hay que reiniciar dovecot con systemctl restart dovecot
y se puede testear la nueva configuración con los siguiente comandos:
doveadm user prueba@profesor.tai
field value
uid 1001
gid 1001
home /home/vmail/profesor.tai/prueba@profesor.tai
mail mbox:~/mail:INBOX=/var/mail/prueba@profesor.tai
doveadm auth login prueba@profesor.tai
3.5. Ajustes de seguridad
El primer ajuste importante es conseguir que sólo Dovecot y Exim4 puedan tener
acceso al fichero de usuarios y contraseñas /etc/exim4/virtual-users
.
Hay que quitar el permiso de lectura global para que sólo lo puedan leer estos
dos programas. Una opción es la siguiente:
chmod o-r /etc/exim4/virtual-users
chown Debian-exim:dovecot /etc/exim4/virtual-users
Otro aspecto importante es el cifrado de las conexiones de red. Actualmente es necesario activar SSL/TLS en Dovecot, lo cual se cubre en otra parte de este manual, concretamente Dovecot configuración SSL
3.6. Siguientes pasos
El resto de configuración es similar a la propuesta para Configuración Macro-Servidor:
Advertencia
La configuración del plugin de cambio de contraseña de Roundcube, con el
fichero de contraseñas /etc/exim4/virtual-users
no está contemplado en
este manual.