Configurar el servidor de correo en Ubuntu Server

O ando aprendendo nesta caminhada sobre una Terra

Configurar el servidor de correo en Ubuntu Server

RedHat suspendió el Centos y dejó a muchos como yo acostumbrados a la línea derivada de RHEL huérfano de un servidor Linux estable basado en RPM.

¿Y qué tiene eso que ver con este tutorial?? Respuesta directa: ;Para mim tudo”;.

Me vi obligado a migrar mi servidor desde CentOS 8 para otra distribución disponible en VPSs da OVH e consequentemente reconfigurar tudo o que já estava em “;Vuelo de crucero; Y eso incluye el servidor de correo que incluso escribí un tutorial. Para mantener la tradición, Según Lo haré Estaba ejecutando los pasos de la configuración escribir el tutorial.

Inicialmente le informo que seguiré utilizando el mismo software y con la misma intención de uso. Esto incluye el uso de Postfix, Palomar, MariaDB, Spamassassin, ClamAV, Amavisd-new, Fail2ban, Nginx, Postfixadmin y RoundCube pero en sus versiones utlimas bajo Ubuntu Server.

Por qué Ubuntu?

He estado recibiendo algunas preguntas sobre por qué elegí Ubuntu Server para reemplazar CentOS. La respuesta está en dos premisas: Disponibilidad en el servicio contratado y familiaridad con el uso.

Entre las distribuciones disponibles, con Debian, Fedora y Ubuntu como opciones, Elegí usar uno que tenga LTS (Soporte a largo plazo) y como he estado usando Ubuntu como el sistema operativo principal en mi entorno de desarrollo durante algún tiempo, estaba más inclinado a usar el Servidor Ubuntu 20.04 por tener soporte al menos hasta 2025 y probablemente estará mucho más garantizado que Canonical no descontinuará Ubuntu como lo hizo RedHat con CentOS.

Ahora que las razones están claras podemos pasar a lo que realmente importa que es la configuración..

Instalación de paquetes

El comienzo de cualquier configuración es instalar los paquetes necesarios y sus dependencias y subrayo aquí que usaré la versión que esté disponible en los repositorios oficiales de la distribución elegida..

El siguiente comando instalará todos los paquetes que usaré y cada uno de ellos que necesite ser configurado obtendrá un texto explicativo.

$ sudo apt install -y curl htop vim wget net-tools certbot postfix postfix-mysql postfix-pcre dovecot-coreamavisd-new clamdscan mariadb-server nginx php-fpm

El orden de configuración importa porque la idea es tener un servidor ejecutándose con ciertos procesos para tener algunos servicios usando otros., es para el control de la información, Si desea mejorar su propio modelo de ejecución. Por ejemplo: Postfix no realiza ningún control de la nocividad del contenido de los mensajes y este será delegado a un software especializado en este. Otro factor es que por defecto el control de los buzones se haría a través de cuentas de usuario del Sistema Operativo (Instalación predeterminada), Pero usaremos un control basado en tablas en la base de datos y que configuraremos mediante el uso del navegador web lo que hace necesario tener un gestor de bases de datos y un servidor web previamente instalado..

Configuración de MariaDB

Última versión: 10.6.5
Versión instalada: 10.3.32

Durante la configuración de mi Webserver sufrí un poco al tener MariaDB instalado, configurado y estable porque parece haber un problema de compatibilidad entre un perfil de Apparmor y el DBMS.

Tuve que realizar los siguientes pasos para que el servicio MariaDB dejara de terminar automáticamente minutos después de que se iniciara. Se tomaron las medidas por lo tanto y por lo tanto.

$ sudo systemctl stop apparmor.service
$ sudo update-rc.d -f apparmor remove

$ sudo apt-get remove --purge mysql-server mysql-client mysql-common mariadb-server mariadb-common
$ sudo apt-get autoremove && sudo apt-get autoclean
$ sudo apt-get install mariadb-server mariadb-common mariadb-client

$ sudo systemctl start apparmor.service
$ sudo update-rc.d apparmor defaults

Después de la instalación, hay dos pasos opcionales que se pueden realizar para mejorar la seguridad en el acceso a la base de datos:.

El primero que cito es la ejecución del script sudo /usr/bin/mysql_secure_installation.

Al ejecutarlo, podrá cambiar la contraseña de acceso del usuario root, Quitar la cuenta de acceso anónimo, Quitar la capacidad de autenticarse como root de forma remota y quitar la base de datos de prueba.

Esto es lo que utilicé:

Para la pregunta sobre cambiar la contraseña del usuario root, acabo de dar Enter sin ingresar una contraseña porque no usaré conexión externa de ningún tipo y el usuario root del sistema operativo solo será accesible a través del shell local.

Enter current password for root (enter for none): 

He eliminado usuarios anónimos respondiendo con y La siguiente pregunta.

Remove anonymous users? [Y/n] y

He deshabilitado el acceso remoto para el usuario raíz Respondiendo con y Sobre la siguiente cuestión prejudicial. Más tarde configuraré ssh para no permitir el inicio de sesión por parte del usuario root también lo que me obligará a tener un usuario con la capacidad de conectarse de forma remota y escalar privilegios localmente a root y solo así poder conectarme a MariaDB como tal..

Disallow root login remotely? [Y/n] y

He eliminado la base de datos de prueba porque no debería ser necesario tenerla porque, después de todo, es un entorno productivo. A esto respondí con y La siguiente pregunta:

Remove test database and access to it? [Y/n] y

Y finalmente permití recargar la tabla de privilegios respondiendo con y Sobre la siguiente cuestión prejudicial.

Reload privilege tables now? [Y/n] y

Después de realizar estos pasos, también ejecuté el comando sudo /usr/bin/mysql_install_db --user=mysql Para inicializar las tablas necesarias, incluido el directorio de datos, para la correcta ejecución de la base de datos.

Finalmente configuré para que el servicio arranque junto con el arranque del sistema operativo ejecutando el comando sudo systemctl enabled mariadb e inicie el servicio para comprobar si todo es correcto con el comando sudo systemctl start mariadb.

Al final, La ejecución del comando indicado a continuación para comprobar el estado del servicio debe tener una salida similar a la que se muestra.

root@vps:/home/regis# systemctl status mariadb
● mariadb.service - MariaDB 10.3.32 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-12-24 11:19:52 -03; 1 day 17h ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 773 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 35 (limit: 4566)
     Memory: 494.7M
     CGroup: /system.slice/mariadb.service
             └─773 /usr/sbin/mysqld

Dec 24 11:19:50 vps systemd[1]: Starting MariaDB 10.3.32 database server...
Dec 24 11:19:51 vps mysqld[773]: 2021-12-24 11:19:51 0 [Note] /usr/sbin/mysqld (mysqld 10.3.32>
Dec 24 11:19:52 vps systemd[1]: Started MariaDB 10.3.32 database server.

Con el servicio iniciado podemos considerar MariaDB listo para ser utilizado en los próximos pasos.

PostfixAdmin

PostfixAdmin es un script PHP que hace que el mantenimiento de los buzones sea mucho más fácil y práctico. Debido a que es una aplicación web PHP es necesario que ya tengamos instalado y configurado un servidor WEB que no es el alcance de este manual. Si no tiene un servidor web instalado, Sugiero seguir los pasos de esta publicación en el que muestro la instalación de un servidor WEB con Nginx, Php-fpm, LetsEncrypt y MariaDB y solo después de tener el servidor configurado podrá continuar con la configuración propuesta por este manual.

Ejecutemos el siguiente comando para iniciar la instalación. Este paquete no se incluyó en la configuración inicial porque inicia un hechicero que abordaremos en los próximos pasos.

$ sudo apt install postfixadmin

Al final del proceso de instalación se iniciará un asistente para que podamos configurar Postfixadmin.

Configuración de la captura de pantalla postfixadmin

Al presionar Entrar en <;Yes>; será cuestionado por la contraseña para acceder a la base de datos. Introduzca la contraseña deseada, Navegar a <;Ok>; y pulse Intro.

Configuración de la captura de pantalla de confirmación de contraseña postfixadmin

En la pantalla de confirmación de contraseña, Repítelo, Vaya a <;Ok> y pulse Intro.

Primero conéctese a MariaDB usando el usuario root, que, según nuestra definición, solo se puede acceder localmente.

$ sudo mysql

Si todo está bien, estará en el shell de MariaDB y tendrá una salida similar al contenido siguiente.

usuario@host:~$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 284405
Server version: 10.3.32-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

El siguiente paso es crear la base de datos y las tablas que se utilizarán para almacenar los usuarios., las cajas y varias otras configuraciones. Puede usar los nombres mencionados aquí como ejemplo o personalizarlos (aconsejable). Los pasos aquí siguen los del archivo de instalación Manual de instalación de Postfixadmin y como puedes adivinar, tendremos que configurar PostfixAdmin para continuar la tarea.

Vamos a crear la base de datos de nombres mypostfixconfig.

Nota: Si no está familiarizado con cómo funciona una base de datos y los usuarios en MySQL pueden tener alguna dificultad si alguno de los pasos a continuación no funciona al principio, Pero en general es un proceso bastante simple y fácil.

MariaDB [(none)]> CREATE DATABASE mypostfixconfig;
Query OK, 1 row affected (0.001 sec)

Después de crear la base de datos y las tablas, Creamos un usuario, Establecemos la contraseña de acceso y le damos los permisos apropiados. Tenga en cuenta que daremos todos los privilegios sobre la base de datos creada porque será a través de ella que continuaremos la configuración.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON mypostfixconfig.* TO 'mypostfixuser'@'localhost' IDENTIFIED BY '*******';
Query OK, 0 rows affected (0.000 sec)

Después de haber creado el usuario, tipo exit Para desconectar al usuario root.

Ahora probaremos si el usuario creado puede conectarse y ver la base. Para ello, escriba mysql -u mypostfixconfiguser, -h, localhost, -p y, a continuación, presione Entrar. Ingrese la contraseña establecida en el comando de creación de usuarios y, si todo está bien, la salida será la que se muestra a continuación.

MariaDB [(none)]> mysql -u mypostfixuser -h localhost -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 950396
Server version: 10.3.32-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

Vamos a mostrar a qué bases de datos tiene permiso para acceder este usuario.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mypostfixconfig    |
+--------------------+
2 rows in set (0.001 sec)

MariaDB [(none)]>

Si la salida muestra la base que creamos en los pasos anteriores, significa que podemos seguir adelante. De lo contrario, repita los pasos anteriores, preferiblemente cambiando la base de datos y los nombres de usuario que se van a crear.

Palomar

Dovecot se encarga de entregar los mensajes intercambiados entre MTAs en las cajas que en nuestro caso serán del tipo virtual.

La siguiente configuración hará que solo los usuarios que usan SSL puedan conectarse a sus cajas..

Primero haremos una copia de seguridad de la configuración actual para que en caso de problemas podamos devolver las versiones originales.

$ sudo cp -R /etc/dovecot/conf.d /etc/dovecot/conf.d.orig

Palomar almacenará los mensajes (y todo su contenido) en un directorio definido en los archivos de configuración, y para que pueda hacerlo, debe ejecutarse con un usuario con los permisos adecuados;.

$ groupadd -g 5000 vmail
$ useradd -g 5000 -G mail -u 5000 -d /var/mail vmail

El usuario creado será utilizado en el mecanismo de autenticación y luego será por él que comenzaremos. Usaré MariaDB para almacenar la información de autenticación y para esto se modificarán dos archivos. El primero configura el tipo de autenticación y el segundo validará la autenticación.

Editar el archivo /archivo etc/dovecot/CONF.d/10-auth y descomentamos (o añadir) las líneas de abajo.

$ vim /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext
!include auth-sql.conf.ext

Después de la, Editar el archivo /etc/dovecot/CONF.d/auth-sql.conf.ext para que contenga las siguientes líneas:

$ vim /etc/dovecot/conf.d/auth-sql.conf.ext


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-mariadb.conf.ext
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-mariadb.conf.ext
}

El archivo /etc/dovecot/dovecot-mariadb.conf.ext que está presente en el modelo configura la conexión a la base de datos para que Dovecot pueda utilizarla. Todavía no existe y lo crearemos en el siguiente paso. Preste atención a sobrescribir la información dbname, Usuario y contraseña utilizados en el paso de creación de la base de datos.

$ vim /etc/dovecot/dovecot-mariadb.conf.ext

driver = mysql
connect = host=localhost dbname=mypostfixdb user=mypostfixdbuser password=**********
default_pass_scheme = SHA512-CRYPT

password_query = SELECT username as user, password, concat('/home/vmail/', maildir) as userdb_home, concat('maildir:/home/vmail/', maildir) as userdb_mail, 'vmail' as userdb_uid, 'mail' as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

user_query = SELECT concat('maildir:/home/vmail/', maildir) as mail, CONCAT('*:messages=10000:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Es una buena práctica echar un buen vistazo a los ejemplos existentes de los programas que hemos instalado.. Si tienes curiosidad sobre cada detalle de las líneas anteriores, echa un vistazo al archivo /etc/dovecot/dovecot-SQL.conf.ext.

Postfix

Como ya he explicado en la publicación realizada y que es la base para ello, Postfix es un MTA y vincula servicios a mensajes de correo electrónico de intercambio.

La versión más reciente de Postfix que está disponible en este extremo de 2021, En el momento de escribir este texto, es el 3.6, pero en el repositorio de Ubuntu está disponible el 3.4 y es el que usaré.

Si llegaste aquí comenta pidiendo continuar el tutorial. Esto te anima a seguir creando contenido.

Contesta

Su dirección de correo electrónico no se publicará. Los campos obligatorios están marcados *

Este sitio utiliza Akismet para reducir el spam. Aprender cómo se procesaron los datos de comentario.