************************************************** Configuración simplificada con usuarios virtuales ************************************************** .. include:: ../enlaces.inc.rst 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 :term:`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. 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 :file:`/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á :file:`/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/ .. note:: 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. .. code-block:: :caption: Fichero /etc/exim4/virtual-users 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 .. warning:: 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 :file:`/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: .. code-block:: :caption: Fichero /etc/exim4/virtual-domains profesor.tai art-website.com Correo entrante con Exim4 ========================= En la sección :ref:`exim4-configuracion-dividida` se creo el fichero :file:`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 :file:`/etc/exim4/virtual-domains`) de la forma indicada: .. code-block:: :caption: Fichero /etc/exim4/conf.d/main/00_exim4_config_custom 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 :file:`275_exim4-config_virtual_local_user`, está de antes de "300" para que tenga prioridad sobre los usuarios locales del sistema. .. literalinclude:: files/275_exim4-config_virtual_local_user :caption: Fichero :download:`/etc/exim4/conf.d/router/275_exim4-config_virtual_local_user` 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 :file:`30_exim4-config_virtual` con el siguiente contenido: .. literalinclude:: files/30_exim4-config_virtual :caption: Fichero :download:`/etc/exim4/conf.d/transport/30_exim4-config_virtual` 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 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 Correo saliente con Exim4 ========================= El siguiente paso es activar la autenticación usando el fichero de usuarios virtuales :file:`/etc/exim4/virtual-users` con los HASH de las claves. En el directorio :file:`/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 :file:`/etc/exim4/conf.d/auth/30_exim4-auth_vmail` con el siguiente contenido: .. literalinclude:: files/30_exim4-auth_vmail :caption: Fichero :download:`/etc/exim4/conf.d/auth/30_exim4-auth_vmail` 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: .. code-block:: :emphasize-lines: 2,4 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: .. code-block:: :emphasize-lines: 6,8 openssl s_client -starttls smtp -connect localhost:25 EHLO prueba.com AUTH LOGIN 334 VXNlcm5hbWU6 aW5mb0BhcnQtd2Vic2l0ZS5jb20= 334 UGFzc3dvcmQ6 MTIzNA== 235 Authentication succeeded 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 :file:`/etc/dovecot/conf.d/` y sólo los ficheros que terminan en ".conf" son incluidos desde el principal que es :file:`/etc/dovecot/dovecot.conf`. La nueva configuración consistirá en desactivar la autenticación predeterminada incluida desde :file:`10-auth.conf`, y añadir una nueva basada en el fichero :file:`/etc/exim4/virtual-users` en un nuevo fichero :file:`/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: .. code-block:: :caption: Fichero /etc/dovecot/conf.d/10-auth.conf (Línea 122 aprox.) #!include auth-system.conf.ext !include auth-vmail.conf.ext El contenido del nuevo fichero es el mostrado a continuación: .. literalinclude:: files/auth-vmail.conf.ext :caption: Fichero :download:`/etc/dovecot/conf.d/auth-vmail.conf.ext` Tras los cambios hay que reiniciar dovecot con ``systemctl restart dovecot`` y se puede testear la nueva configuración con los siguiente comandos: .. code:: shell 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 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 :file:`/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: .. code:: shell 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 :ref:`Dovecot configuración SSL` Siguientes pasos ================ El resto de configuración es similar a la propuesta para :doc:`Configuración Macro-Servidor <../macro-servidor/index>`: - :doc:`../macro-servidor/exim4-dkim` - :doc:`../macro-servidor/spamassassin` - :doc:`../macro-servidor/clamav` - :doc:`../macro-servidor/roundcube` - :doc:`../macro-servidor/exim4-limites` .. warning:: La configuración del plugin de cambio de contraseña de Roundcube_, con el fichero de contraseñas :file:`/etc/exim4/virtual-users` no está contemplado en este manual.