GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Parte 3:PostfixAdmin:cree buzones virtuales en el servidor de correo de Ubuntu 20.04

En artículos anteriores, discutimos cómo configurar su propio servidor de correo en Ubuntu desde cero. En la parte 1 y la parte 2 de esta serie de tutoriales, aprendimos cómo configurar el servidor Postfix SMTP y el servidor Dovecot IMAP, pero hasta ahora solo podemos tener direcciones de correo electrónico para usuarios con cuentas locales de Unix. Este tutorial le mostrará cómo crear buzones virtuales en el servidor de correo Ubuntu 20.04 con PostfixAdmin, que es una interfaz web de código abierto para configurar y administrar un servidor de correo electrónico basado en Postfix para muchos dominios y usuarios.

Con los buzones virtuales, no necesitamos crear una cuenta local de Unix para cada dirección de correo electrónico. Si va a configurar un servidor de correo para una empresa u organización, siempre es mejor tener una forma fácil de crear buzones virtuales en una interfaz basada en web, que también permite a los usuarios cambiar sus contraseñas. Ahí es donde entra PostfixAdmin.

Características de PostfixAdmin

  • administrar buzones de correo, dominios virtuales y alias
  • mensajes de vacaciones/fuera de la oficina (personalmente, creo que es mejor hacerlo en el correo web de Roundcube)
  • dominios de alias (reenvío de un dominio a otro con validación de destinatario)
  • los usuarios pueden administrar su propio buzón (cambiar alias, contraseña y mensaje de vacaciones)
  • soporte de cuota para buzones individuales y cuota total de un dominio
  • integración de fetchmail:puede obtener correos electrónicos de su dirección de correo electrónico original a su nueva dirección de correo electrónico.
  • cliente de línea de comandos postfixadmin-cli para aquellos que no quieren hacer clic en una interfaz web 😉

Nota :Una vez que termine la parte 3, ya no podrá usar cuentas locales de Unix como direcciones de correo electrónico. Debe crear direcciones de correo electrónico desde la interfaz web de PostfixAdmin.

Requisitos

Se requiere que haya seguido la parte 1 y la parte 2 de esta serie de tutoriales antes de continuar leyendo este artículo. Si siguió los tutoriales del servidor de correo en otros sitios web, le recomiendo que purgue sus configuraciones (sudo apt purge postfix dovecot-core ) y comience de nuevo con mi serie de tutoriales, para que no se confunda con los diferentes procesos de configuración.

Una vez que se cumplan los requisitos anteriores, instalemos y configuremos PostfixAdmin.

Paso 1:Instalar el servidor de base de datos MariaDB

PostfixAdmin está escrito en PHP y requiere una base de datos (MySQL/MariaDB, PostgreSQL o SQLite). Este artículo utilizará la base de datos MariaDB, que es un reemplazo directo de MySQL. Está desarrollado por antiguos miembros del equipo de MySQL que están preocupados de que Oracle pueda convertir a MySQL en un producto de código cerrado. Ingrese el siguiente comando para instalar MariaDB en Ubuntu 20.04.

sudo apt install mariadb-server mariadb-client

Una vez instalado, el servidor MariaDB debería iniciarse automáticamente. Usa systemctl para comprobar su estado.

systemctl status mariadb

Salida:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

Si no se está ejecutando, inícielo con este comando:

sudo systemctl start mariadb

Para permitir que MariaDB se inicie automáticamente en el momento del arranque, ejecute

sudo systemctl enable mariadb

Ahora ejecute el script de seguridad posterior a la instalación.

sudo mysql_secure_installation

Cuando le pida que ingrese la contraseña raíz de MariaDB, presione la tecla Intro ya que la contraseña raíz aún no está configurada. Luego ingrese y para establecer la contraseña raíz para el servidor MariaDB.

A continuación, puede presionar Entrar para responder a todas las preguntas restantes, lo que eliminará al usuario anónimo, deshabilitará el inicio de sesión raíz remoto y eliminará la base de datos de prueba. Este paso es un requisito básico para la seguridad de la base de datos MariaDB. (Observe que Y está en mayúscula, lo que significa que es la respuesta predeterminada).

Paso 2:Instale PostfixAdmin en el servidor Ubuntu 20.04

Inicie sesión en su servidor de correo. Debido a que algunos lectores usan el servidor MariaDB, mientras que otros usan MySQL, lo que complica las cosas, así que antes de instalar PostfixAdmin, instalamos el dbconfig-no-thanks paquete para evitar el postfixadmin paquete desde el inicio del asistente de configuración de la base de datos.

sudo apt install dbconfig-no-thanks

Luego instale PostfixAdmin desde el repositorio de software predeterminado de Ubuntu.

sudo apt install postfixadmin

Nota :Si ha instalado previamente mysql-server en Ubuntu, la instalación de PostfixAdmin probablemente eliminará el mysql-server paquete de su sistema. Puede volver a instalarlo ejecutando el siguiente comando.

sudo apt install mysql-server

Ahora necesitamos eliminar el dbconfig-no-thanks paquete.

sudo apt remove dbconfig-no-thanks

Luego inicie el asistente de configuración de la base de datos para PostfixAdmin.

sudo dpkg-reconfigure postfixadmin

Durante la instalación, se le preguntará si desea reinstalar la base de datos para PostfixAdmin. Esto simplemente significa crear una base de datos llamada postfixadmin , no eliminará sus bases de datos existentes. Presiona la tecla Tabulador para elegir .

Luego seleccione el tipo de base de datos predeterminado:mysql , si usa MySQL o MariaDB.

A continuación, elija el método de conexión predeterminado:Unix socket .

Luego elija el complemento de autenticación predeterminado para MySQL/MariaDB.

Pulse Intro para elegir el nombre de base de datos predeterminado para PostfixAdmin.

Pulse Intro para elegir el nombre de usuario de la base de datos predeterminado para PostfixAdmin.

Después de eso, debe establecer una contraseña para este usuario. Tenga en cuenta que la contraseña no debe contener el # carácter, o es posible que no pueda iniciar sesión más tarde.


Finalmente, elija el usuario administrador de la base de datos predeterminado.

Después de instalar PostfixAdmin, puede iniciar sesión en la consola MySQL/MariaDB con el siguiente comando. Deberá ingresar la contraseña para el postfixadmin usuario.

mysql -u postfixadmin -p

Y puede verificar a qué bases de datos tiene permiso el usuario para acceder con el siguiente comando.

SHOW DATABASES;

Salida:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| postfixadmin       |
+--------------------+
2 rows in set (0.002 sec)

Por defecto, el postfixadmin La base de datos no contiene tablas. Puede cerrar sesión en la consola MySQL/MariaDB con el siguiente comando.

EXIT;

La instalación también creará dos archivos de configuración:/etc/dbconfig-common/postfixadmin.conf y /etc/postfixadmin/dbconfig.inc.php , los cuales contienen la configuración de acceso a la base de datos, incluidos el nombre de usuario y la contraseña de la base de datos. Necesitamos cambiar el tipo de base de datos de mysql a mysqli en ambos de los dos archivos.

sudo nano /etc/dbconfig-common/postfixadmin.conf

Cambiar

dbc_dbtype='mysql'

a

dbc_dbtype='mysqli'

Luego edite el segundo archivo.

sudo nano /etc/postfixadmin/dbconfig.inc.php

Cambiar

$dbtype='mysql';

a

$dbtype='mysqli';

Los archivos web se instalan en /usr/share/postfixadmin/ directorio, que es propiedad de root. PostfixAdmin requiere un templates_c directorio, así que créalo.

sudo mkdir /usr/share/postfixadmin/templates_c

Necesitamos dar www-data el usuario lee, escribe y ejecuta permisos en este directorio con el siguiente comando.

sudo setfacl -R -m u:www-data:rwx /usr/share/postfixadmin/templates_c/

Si su sistema no puede encontrar el setfacl comando, necesita instalar el acl paquete.

sudo apt install acl

Paso 3:Cree un host virtual de Apache o un archivo de configuración de Nginx para PostfixAdmin

Apache

Si usa el servidor web Apache, cree un host virtual para PostfixAdmin.

sudo nano /etc/apache2/sites-available/postfixadmin.conf

Coloque el siguiente texto en el archivo. Reemplace postfixadmin.example.com con su nombre de dominio real y no olvide establecer un registro DNS A para él.

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /usr/share/postfixadmin/public

  ErrorLog ${APACHE_LOG_DIR}/postfixadmin_error.log
  CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /usr/share/postfixadmin/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Guarde y cierre el archivo. Luego habilite este host virtual con:

sudo a2ensite postfixadmin.conf

Vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Ahora debería poder ver el asistente de instalación basado en web de PostfixAdmin en http://postfixadmin.example.com/setup.php .

Nginx

Si usa el servidor web Nginx, cree un host virtual para PostfixAdmin.

sudo nano /etc/nginx/conf.d/postfixadmin.conf

Coloque el siguiente texto en el archivo. Reemplace postfixadmin.example.com con su nombre de dominio real y no olvide establecer un registro DNS A para él.

server {
   listen 80;
   listen [::]:80;
   server_name postfixadmin.example.com;

   root /usr/share/postfixadmin/public/;
   index index.php index.html;

   access_log /var/log/nginx/postfixadmin_access.log;
   error_log /var/log/nginx/postfixadmin_error.log;

   location / {
       try_files $uri $uri/ /index.php;
   }

   location ~ ^/(.+\.php)$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
   }
}

Guarde y cierre el archivo. Luego pruebe la configuración de Nginx.

sudo nginx -t

Si la prueba es exitosa, vuelva a cargar Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Ahora debería poder ver el asistente de instalación basado en web de PostfixAdmin en http://postfixadmin.example.com/setup.php .

Paso 4:Instale los módulos PHP requeridos y recomendados

Ejecute el siguiente comando para instalar los módulos PHP requeridos o recomendados por PostfixAdmin.

sudo apt install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp

Luego reinicie Apache. (Si usa Nginx, no necesita reiniciar Nginx).

sudo systemctl restart apache2

Paso 5:habilitar HTTPS

Para cifrar el tráfico HTTP, podemos habilitar HTTPS instalando un certificado TLS gratuito emitido por Let's Encrypt. Ejecute el siguiente comando para instalar el cliente Let's Encrypt (certbot) en el servidor Ubuntu 20.04.

sudo apt install certbot

Si usa Apache, instale el complemento Certbot Apache.

sudo apt install python3-certbot-apache

Y ejecute este comando para obtener e instalar el certificado TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

Si usa Nginx, también necesita instalar el complemento Certbot Nginx.

sudo apt install python3-certbot-nginx

A continuación, ejecute el siguiente comando para obtener e instalar el certificado TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com

donde

  • --nginx :use el complemento nginx.
  • --apache :Utilice el complemento de Apache.
  • --agree-tos :Acepto los términos del servicio.
  • --redirect :Forzar HTTPS por redirección 301.
  • --hsts : Agregue el encabezado Strict-Transport-Security a cada respuesta HTTP. Obligar al navegador a usar siempre TLS para el dominio. Protege contra la eliminación de SSL/TLS.
  • --staple-ocsp : Habilita el grapado OCSP. Se grapa una respuesta OCSP válida al certificado que ofrece el servidor durante TLS.

Ahora se debe obtener el certificado e instalarlo automáticamente, lo cual se indica en el siguiente mensaje.

Paso 6:utilice un esquema de contraseña fuerte en PostfixAdmin y Dovecot

De manera predeterminada, PostfixAdmin y Dovecot usan MD5-CRYPT, que es un esquema de contraseña débil. Puede enumerar los esquemas de contraseña disponibles en Dovecot con el siguiente comando.

sudo doveadm pw -l

Salida de muestra:

SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

Argon2 es un esquema de contraseña bastante fuerte. Para usarlo, necesitamos editar el archivo de configuración de PostfixAdmin, que por defecto es /usr/share/postfixadmin/config.inc.php , pero podemos crear un archivo separado (config.local.php ) para almacenar nuestras modificaciones, para que no se sobrescriban cuando se instale una nueva versión de PostfixAdmin en el futuro.

sudo nano /usr/share/postfixadmin/config.local.php

Agregue las siguientes líneas en el archivo para usar el esquema de contraseña de Argon2.

<?php
$CONF['encrypt'] = 'dovecot:ARGON2I';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5";
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171
    $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian
}

Guarde y cierre el archivo. También podemos crear un enlace simbólico en el /etc/postfixadmin/ directorio, en caso de que PostfixAdmin no pueda encontrar el archivo.

sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php

Configuraremos el esquema de contraseña para Dovecot en el paso 11.

Paso 7:habilite las estadísticas en Dovecot

PostfixAdmin necesita leer las estadísticas de Dovecot. Edite el archivo de configuración de Dovecot.

sudo nano /etc/dovecot/conf.d/10-master.conf

Agregue las siguientes líneas al final de este archivo.

service stats {
    unix_listener stats-reader {
    user = www-data
    group = www-data
    mode = 0660
}

unix_listener stats-writer {
    user = www-data
    group = www-data
    mode = 0660
  }
}

Guarde y cierre el archivo. Luego agregue el servidor web al dovecot grupo.

sudo gpasswd -a www-data dovecot

Reinicie Dovecot.

sudo systemctl restart dovecot

Paso 8:finalice la instalación en el navegador web

Vaya a postfixadmin.example.com/setup.php para ejecutar el asistente de configuración basado en web. Primero, verificará si todas las dependencias están instaladas y creará las tablas de la base de datos.

Si ve el siguiente error,

Invalid query: Specified key was too long; max key length is 1000 bytes

Luego, debe iniciar sesión en el servidor de la base de datos MySQL/MariaDB como root desde la línea de comandos,

sudo mysql -u root

y cambie la intercalación predeterminada de utf8mb4_general_ci a utf8_general_ci .

MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';

Salga de la consola MySQL/MariaDB y vuelva a cargar la página setup.php. Una vez que se cumplan todos los requisitos, puede crear una contraseña de configuración para PostfixAdmin.

Después de crear el hash de contraseña, debe abrir /usr/share/postfixadmin/config.local.php y agregue el hash de la contraseña de configuración al final del archivo, como se muestra a continuación. Por supuesto, debe usar su propio hash de contraseña.

A continuación, cree la cuenta de administrador. No utilice una dirección de correo electrónico de Gmail, Yahoo Mail o Microsoft para la cuenta de administrador, o es posible que no pueda iniciar sesión más tarde. Utilice una dirección de correo electrónico en su propio dominio. Puede crear la dirección de correo electrónico más tarde en PostfixAdmin.

Si ve el siguiente error al intentar crear una cuenta de superadministrador,

can’t encrypt password with dovecotpw, see error log for details

Es porque los www-data el usuario no tiene permiso para leer el certificado TLS de Let's Encrypt. Para solucionarlo, ejecute el siguiente comando para otorgar permisos.

sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Una vez que se crea la cuenta de superadministrador, puede iniciar sesión en PostfixAdmin en postfixadmin.example.com/login.php .

Paso 9:Comprobación de tablas en la base de datos

El proceso de configuración de PostfixAdmin completa el postfixadmin base de datos con algunas tablas predeterminadas. Es útil para nosotros conocer los nombres y la estructura de las tablas. Inicie sesión en la consola MySQL/MariaDB.

sudo mysql -u root

Seleccione el postfixadmin base de datos.

USE postfixadmin;

Enumere todas las tablas en esta base de datos.

SHOW TABLES;

Salida:

+------------------------+
| Tables_in_postfixadmin |
+------------------------+
| admin                  |
| alias                  |
| alias_domain           |
| config                 |
| domain                 |
| domain_admins          |
| fetchmail              |
| log                    |
| mailbox                |
| quota                  |
| quota2                 |
| vacation               |
| vacation_notification  |
+------------------------+
13 rows in set (0.001 sec)

Las 3 tablas más importantes son:

  • domain :contiene información sobre los dominios que utilizan su servidor de correo para enviar y recibir correo electrónico.
  • mailbox :contiene información sobre cada dirección de correo electrónico, incluida la contraseña codificada y la ubicación de los archivos de correo.
  • alias :contiene el alias de cada dirección de correo electrónico.

Si está interesado, puede consultar qué columnas contiene cada tabla. Por ejemplo, el siguiente comando nos mostrará las columnas en el domain mesa.

DESCRIBE domain;

Salida:

+-------------+--------------+------+-----+---------------------+-------+
| Field       | Type         | Null | Key | Default             | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain      | varchar(255) | NO   | PRI | NULL                |       |
| description | varchar(255) | NO   |     | NULL                |       |
| aliases     | int(10)      | NO   |     | 0                   |       |
| mailboxes   | int(10)      | NO   |     | 0                   |       |
| maxquota    | bigint(20)   | NO   |     | 0                   |       |
| quota       | bigint(20)   | NO   |     | 0                   |       |
| transport   | varchar(255) | NO   |     | NULL                |       |
| backupmx    | tinyint(1)   | NO   |     | 0                   |       |
| created     | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| modified    | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| active      | tinyint(1)   | NO   |     | 1                   |       |
+-------------+--------------+------+-----+---------------------+-------+

Cierre sesión en la consola MySQL/MariaDB.

EXIT;

Paso 10:Configure Postfix para usar la base de datos MySQL/MariaDB

De manera predeterminada, Postfix entrega correos electrónicos solo a usuarios con una cuenta local de Unix. Para que entregue correos electrónicos a usuarios virtuales cuya información se almacena en la base de datos, debemos configurar Postfix para usar dominios de buzones virtuales.

Primero, necesitamos agregar soporte de mapa MySQL para Postfix instalando el postfix-mysql paquete.

sudo apt install postfix-mysql

Luego edite el archivo de configuración principal de Postfix.

sudo nano /etc/postfix/main.cf

Agregue las siguientes líneas al final de este archivo.

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

donde:

  • virtual_mailbox_domains apunta a un archivo que le indicará a Postfix cómo buscar información de dominio en la base de datos.
  • virtual_mailbox_maps apunta a archivos que le indicarán a Postfix cómo buscar direcciones de correo electrónico en la base de datos.
  • virtual_alias_maps apunta a archivos que le indicarán a Postfix cómo buscar alias en la base de datos.

Queremos usar dovecot para enviar correos electrónicos entrantes al almacén de mensajes de los usuarios virtuales, así que también agregue la siguiente línea al final de este archivo.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Guarde y cierre el archivo. A continuación, debemos crear el .cf archivos uno por uno. Cree el directorio sql.

sudo mkdir /etc/postfix/sql/

Cree el mysql_virtual_domains_maps.cf archivo.

sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf

Agrega el siguiente contenido. Reemplazar password con la contraseña de postfixadmin que estableció en el Paso 2.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100

Cree el mysql_virtual_mailbox_maps.cf archivo.

sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf

Agrega el siguiente contenido.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100

Cree el mysql_virtual_alias_domain_mailbox_maps.cf archivo.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf

Agrega el siguiente contenido.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

Cree el mysql_virtual_alias_maps.cf archivo.

sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf

Agrega el siguiente contenido.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100

Cree el mysql_virtual_alias_domain_maps.cf archivo.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf

Agrega el siguiente contenido.

user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Cree los mysql_virtual_alias_domain_catchall_maps archivo.

sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf

Agrega el siguiente contenido.

# handles catch-all settings of target-domain
user = postfixadmin
password = password
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Dado que las contraseñas de la base de datos se almacenan en texto sin formato, solo deben ser legibles por el usuario postfix y root, lo que se hace ejecutando los siguientes dos comandos.

sudo chmod 0640 /etc/postfix/sql/*
sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/

A continuación, debemos cambiar el valor de mydestination parámetro en Postfix. Mostrar el valor actual:

postconf mydestination

Salida de muestra:

mydestination = $myhostname, linuxbabe.com, localhost.$mydomain, localhost

El mydestination El parámetro contiene una lista de nombres de dominio que recibirán correos electrónicos enviados a cuentas locales de Unix. En la parte 1, agregamos el nombre de dominio principal (como linuxbabe.com) a mydestination . Dado que vamos a utilizar el buzón de correo virtual, debemos eliminar el nombre de dominio principal de la lista emitiendo el siguiente comando.

sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"

Ahora abramos de nuevo el archivo de configuración principal de Postfix.

sudo nano /etc/postfix/main.cf

Agregue las siguientes líneas al final de este archivo.

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

La primera línea define la ubicación base de los archivos de correo. Las 3 líneas restantes definen qué ID de usuario e ID de grupo utilizará Postfix al entregar correos electrónicos entrantes al buzón. Usamos el ID de usuario 2000 y el ID de grupo 2000.

Guarde y cierre el archivo. Reinicie Postfix para que los cambios surtan efecto.

sudo systemctl restart postfix

A continuación, debemos crear un usuario llamado vmail con DNI 2000 y un grupo con DNI 2000.

sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home

Cree la ubicación de la base de correo.

sudo mkdir /var/vmail/

Hacer vmail como propietario.

sudo chown vmail:vmail /var/vmail/ -R

Paso 11:Configure Dovecot para usar la base de datos MySQL/MariaDB

También necesitamos configurar el servidor Dovecot IMAP para consultar la información del usuario de la base de datos. Primero, ejecute el siguiente comando para agregar compatibilidad con MySQL para Dovecot.

sudo apt install dovecot-mysql

Luego edite el 10-mail.conf archivo.

sudo nano /etc/dovecot/conf.d/10-mail.conf

En la parte 2, usamos el siguiente mail_location . Los mensajes de correo electrónico se almacenan en Maildir directorio bajo el directorio de inicio de cada usuario.

mail_location = maildir:~/Maildir

Como ahora estamos usando un dominio de buzón virtual, debemos habilitar mail_home para los usuarios virtuales agregando la siguiente línea en el archivo, porque los usuarios virtuales no tienen directorios de inicio por defecto.

mail_home = /var/vmail/%d/%n/

Guarde y cierre el archivo. Luego edite el 10-auth.conf archivo.

sudo nano /etc/dovecot/conf.d/10-auth.conf

En la parte 2, usamos el siguiente valor para auth_username_format .

auth_username_format = %n

El %n dejaría caer el dominio si se le diera. Debido a que en la parte 2 estábamos usando una cuenta local de Unix para el nombre de usuario de cada dirección de correo electrónico, debemos usar %n para eliminar el dominio, de modo que los usuarios pudieran iniciar sesión con la dirección de correo electrónico completa.

Ahora estamos usando dominios de buzón virtual, lo que significa que el nombre de usuario de cada dirección de correo electrónico incluye la parte del dominio, por lo que debemos cambiar el auth_username_format como sigue. %u no abandonará el dominio. Esto permite a los usuarios iniciar sesión con la dirección de correo electrónico completa.

auth_username_format = %u

Quite el comentario de la siguiente línea al final de este archivo, para que Dovecot pueda consultar la información del usuario de la base de datos MySQL/MariaDB.

!include auth-sql.conf.ext

Ahora probablemente no desee que los usuarios locales de Unix envíen correos electrónicos sin registrar las direcciones de correo electrónico en PostfixAdmin, luego comente la siguiente línea agregando el carácter # al principio, para que Dovecot no consulte el /etc/passwd o /etc/shadow archivo.

#!include auth-system.conf.ext

Puede ser útil agregar las siguientes dos líneas en este archivo para depurar problemas de inicio de sesión. Los errores de inicio de sesión se registrarían en /var/log/mail.log expediente. (Una vez que los usuarios puedan iniciar sesión sin problemas, puede comentar las siguientes dos líneas).

auth_debug = yes
auth_debug_passwords = yes

Guarde y cierre el archivo.

Edite el dovecot-sql.conf.ext archivo.

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Aquí está el contenido que debe tener en este archivo. De forma predeterminada, todas las líneas de este archivo están comentadas, por lo que simplemente puede copiarlas y pegarlas en la parte inferior. Reemplazar password con la contraseña de postfixadmin que estableció en el Paso 2.

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=password

default_pass_scheme = ARGON2I

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'

user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1'

iterate_query = SELECT username AS user FROM mailbox

Reinicie Dovecot.

sudo systemctl restart dovecot

Cuando un usuario intenta iniciar sesión, Dovecot usa el algoritmo Argon2 para generar un hash de contraseña a partir de la contraseña ingresada por el usuario y luego lo compara con el hash de contraseña almacenado en la base de datos.

Paso 12:Agregar dominio y buzones en PostfixAdmin

Inicie sesión en la interfaz web de PostfixAdmin como administrador. Haga clic en la Domain List pestaña y seleccione New Domain para agregar un dominio. Puede elegir cuántos alias y buzones se permiten para este dominio.

Luego haga clic en Virtual List pestaña y seleccione Add Mailbox para agregar una nueva dirección de correo electrónico para su dominio.

A continuación, puede abrir su cliente de correo electrónico de escritorio, como Mozilla Thunderbird, y agregar una cuenta de correo.

  • En la sección del servidor entrante, seleccione el protocolo IMAP, ingrese mail.your-domain.com como nombre del servidor, elija el puerto 143 y STARTTLS. Elija normal password como método de autenticación.
  • En la sección saliente, seleccione el protocolo SMTP, ingrese mail.your-domain.com como nombre del servidor, elija el puerto 587 y STARTTLS. Elija normal password como método de autenticación.

Sugerencia :también puede usar el puerto 993 con cifrado SSL/TLS para IMAP y el puerto 465 con cifrado SSL/TLS para SMTP. No deberías no use el puerto 25 como el puerto SMTP en los clientes de correo para enviar correos electrónicos salientes.

¡Ahora debería poder conectarse a su propio servidor de correo electrónico y también enviar y recibir correos electrónicos con su cliente de correo electrónico de escritorio! Tenga en cuenta que no puede usar cuentas locales de Unix para iniciar sesión ahora. Debe iniciar sesión con el usuario virtual creado desde la interfaz web de PostfixAdmin.

Consejos para solucionar problemas

Como regla general, siempre debe consultar el registro de correo (/var/log/mail.log ) en su servidor de correo cuando ocurre un error. La siguiente es una lista de errores específicos y sugerencias para solucionar problemas.

No puedo iniciar sesión desde los clientes de correo

Si no puede iniciar sesión en su servidor de correo desde un cliente de correo de escritorio, escanee su servidor de correo para ver si los puertos están abiertos. Tenga en cuenta que debe ejecutar el siguiente comando desde otra computadora o servidor Linux. Si lo ejecuta en su servidor de correo, los puertos siempre parecerán estar abiertos.

sudo nmap mail.your-domain.com

Y compruebe si Dovecot se está ejecutando.

systemctl status dovecot

También puede consultar el registro de correo (/var/log/mail.log ), que puede darte algunas pistas. Si Dovecot no se inicia, es posible que el error no se registre en /var/log/mail.log archivo, puede ejecutar el siguiente comando para ver qué está mal.

sudo journalctl -eu dovecot

Si ve el siguiente error en el registro de correo, es probable que no haya establecido una contraseña correcta en .cf archivos bajo /etc/postfix/sql/ directorio.

postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure

Si ve el siguiente error en el registro de correo, es porque olvidó agregar mail_location = maildir:~/Maildir en el /etc/dovecot/conf.d/10-mail.conf archivo.

open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775

DNS de Cloudflare

Como dije en la parte 1, si usa el servicio DNS de Cloudflare, no debe habilitar la función CDN (proxy) al crear un registro DNS A y un registro AAAA para el nombre de host de su servidor de correo. Cloudflare no admite proxy SMTP o IMAP.

Acceso de retransmisión denegado

Si ve el mensaje "acceso de retransmisión denegado ” al intentar enviar correos electrónicos desde un cliente de correo, lo más probable es que use el puerto 25 como el puerto SMTP en su cliente de correo. Como dije hace un rato, debes usar el puerto 587 o 465 como el puerto SMTP en clientes de correo (Mozilla Thunberbird, Microsoft Outlook, etc.) para enviar correos electrónicos salientes. El puerto 25 debe usarse para las comunicaciones entre el servidor SMTP y el servidor SMTP.

Aplicación de correo para iOS

Si usa la aplicación iOS Mail para iniciar sesión en su servidor de correo y encuentra el siguiente error.

Puede intentar solucionarlo aplicando el cifrado SSL, tanto para SMTP como para IMAP.

Dato curioso :Parece que la aplicación iOS Mail tiene dificultades para admitir STARTTLS en el puerto IMAP 143, pero admite STARTTLS en el puerto de envío 587.

Error de búsqueda temporal

Si su servidor de correo funcionó bien durante algún tiempo, pero de repente encuentra el siguiente error en el registro de correo,

Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure;  proto=ESMTP
Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure

Es probable que su base de datos MariaDB/MySQL se haya detenido de alguna manera. Puede usar el siguiente comando para verificar cuándo se detuvo su servidor de base de datos.

sudo journalctl -eu mariadb

o

sudo journalctl -eu mysql

Una causa común de esta situación es que su servidor no tiene memoria. Compruebe si su servidor tiene suficiente memoria.

htop

o

free -m

Limpiar automáticamente la carpeta de correo no deseado y la carpeta Papelera

Para eliminar correos electrónicos en la carpeta de correo no deseado para todos los usuarios, puede ejecutar

sudo doveadm expunge -A mailbox Junk all

Para eliminar correos electrónicos en la carpeta Papelera, ejecute

sudo doveadm expunge -A mailbox Trash all

Creo que es mejor limpiar los correos electrónicos que han estado en la carpeta Correo no deseado o Papelera durante más de 2 semanas, en lugar de limpiar todos los correos electrónicos.

sudo doveadm expunge -A mailbox Junk savedbefore 2w

Luego agregue un trabajo cron para automatizar el trabajo.

sudo crontab -e

Agregue la siguiente línea para limpiar la carpeta de basura y basura todos los días.

@daily doveadm expunge -A mailbox Junk savedbefore 2w;doveadm expunge -A mailbox Trash savedbefore 2w

Para recibir un informe cuando un trabajo Cron produce un error, puede agregar la siguiente línea encima de todos los trabajos Cron.

MAILTO="[email protected]"

Guarde y cierre el archivo. Y listo.

Cambiar contraseña de usuario en PostfixAdmin

Los usuarios pueden iniciar sesión en PostfixAdmin en https://postfixadmin.example.com/users/login.php , luego cambie sus contraseñas.

Restringir el acceso a Sendmail

Por defecto, cualquier usuario local puede usar el sendmail binario para enviar correos electrónicos salientes. Ahora que su servidor de correo está utilizando buzones virtuales, es posible que desee restringir el acceso a sendmail binario solo para usuarios locales confiables, por lo que un usuario malintencionado no puede usarlo para enviar un gran volumen de correos electrónicos para dañar la reputación de su servidor de correo. Edite el archivo de configuración principal de Postfix.

sudo nano /etc/postfix/main.cf

Agregue la siguiente línea al final de este archivo, de modo que solo el usuario root y www-data puedan enviar correos electrónicos a través de sendmail. También puede agregar otros nombres de usuario.

authorized_submit_users = root,www-data

Guarde y cierre el archivo. Luego reinicie Postfix.

sudo systemctl restart postfix

Siguiente paso

Espero que este tutorial le haya ayudado a instalar y usar PostfixAdmin en Ubuntu 20.04 para crear buzones de correo virtuales. En la parte 4, le mostraré cómo configurar SPF y DKIM con Postfix para mejorar la capacidad de entrega del correo electrónico y, en un tutorial futuro, le mostraré cómo alojar varios dominios con PostfixAdmin.

Si desea acceder a los correos electrónicos desde un navegador web, le recomiendo Roundcube, que es un cliente de correo web de código abierto muy popular y rico en funciones. Como siempre, si esta publicación te ha resultado útil, suscríbete a nuestro boletín informativo gratuito para obtener más consejos y trucos. Cuídate 🙂


Ubuntu
  1. Cómo instalar DKIM en el servidor Ubuntu

  2. Cómo configurar el servidor de correo Zimbra en Ubuntu 16

  3. Instale el servidor web Apache en Ubuntu 12.10

  4. ¿Servidor FTP básico de Ubuntu?

  5. Configure un servidor de correo con PostfixAdmin y MariaDB en CentOS 7

Cómo crear un entorno virtual de Python 3 en Ubuntu 20.04

Cómo crear un servidor de correo completo en Ubuntu

Cómo instalar el servidor de correo Postfix en Ubuntu 20.04

Parte 3:PostfixAdmin:cree buzones virtuales en el servidor de correo CentOS 8/RHEL 8

Cómo instalar un servidor de correo con PostfixAdmin en CentOS 7

Cómo crear un servidor de Minecraft en Ubuntu 20.04