GNU/Linux >> Tutoriales Linux >  >> Cent OS

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

En artículos anteriores, discutimos cómo configurar su propio servidor de correo en CentOS 8/RHEL 8 desde cero. En las partes 1 y 2 de esta serie de tutoriales, aprendimos a configurar el servidor SMTP Postfix y servidor IMAP Dovecot , pero hasta ahora solo podemos tener direcciones de correo electrónico para usuarios con cuenta local de Unix. Este tutorial le mostrará cómo crear buzones virtuales en el servidor de correo CentOS 8/RHEL 8 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 buzones virtuales , no necesitamos crear una cuenta Unix local 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, dominios virtuales y alias
  • mensajes de vacaciones/fuera de la oficina (Personalmente, creo que esta función se realiza mejor en Roundcube Webmail).
  • 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

Supongo que ha seguido la parte 1 y la parte 2 de esta serie de tutoriales. Si siguió los tutoriales del servidor de correo en otros sitios web, le recomiendo que elimine sus configuraciones 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:Instale el servidor de base de datos MariaDB en CentOS 8/RHEL 8

PostfixAdmin está escrito en PHP y requiere una base de datos (MySQL/MariaDB, PostgreSQL o SQLite). Este artículo utilizará 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 CentOS 8/RHEL 8.

sudo dnf install mariadb-server mariadb -y

Una vez instalado, debemos iniciarlo.

sudo systemctl start mariadb

Habilite el inicio automático en el momento del arranque del sistema.

sudo systemctl enable mariadb

Comprobar estado:

systemctl status mariadb

salida:

● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 18608 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 5092)
   Memory: 77.0M
   CGroup: /system.slice/mariadb.service
           └─18608 /usr/libexec/mysqld --basedir=/usr

Habilitado ” indica que el inicio automático en el momento del arranque está habilitado y podemos ver que el servidor MariaDB se está ejecutando. Ahora necesitamos ejecutar el script de seguridad.

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. (Tenga en cuenta que la letra Y está en mayúscula, lo que significa que es la respuesta predeterminada).

Paso 2:Descargue PostfixAdmin en el servidor CentOS 8/RHEL 8

Inicie sesión en su servidor de correo, luego descargue el archivo de instalación de PostfixAdmin en su servidor. Vaya a la página PostfixAdmin Gitbub para descargar la última versión. Puedes usar el wget herramienta para descargarlo desde la línea de comandos. El enlace de descarga siempre está disponible en el formato a continuación. Si sale una nueva versión, simplemente reemplace 3.3.8 con el nuevo número de versión.

sudo dnf install wget

wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz

Una vez descargado, extraiga el archivo.

Si está utilizando Apache, extráigalo a /var/www/ directorio y cámbiele el nombre a postfixadmin .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/
sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin

Si está utilizando Nginx, extráigalo a /usr/share/nginx/ directorio y cámbiele el nombre a postfixadmin .

sudo dnf install tar
sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/
sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin

Paso 3:Configuración de permisos

PostfixAdmin requiere un templates_c directorio, y el servidor web necesita acceso de lectura y escritura a este directorio. También necesitamos cambiar el contexto de SELinux para que se pueda escribir. Así que ejecuta los siguientes comandos.

apache

sudo mkdir /var/www/postfixadmin/templates_c
sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R

Nginx

sudo mkdir /usr/share/nginx/postfixadmin/templates_c
sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/
sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R

De forma predeterminada, SELinux prohíbe que Apache/Nginx realice solicitudes de red a otros servidores, pero luego Apache/Nginx necesita solicitar el estado del certificado TLS del servidor Let's Encrypt CA para el engrapado OCSP, por lo que debemos decirle a SELinux que permita Apache/Nginx con lo siguiente comando.

sudo setsebool -P httpd_can_network_connect 1

Si usa Nginx, también debe ejecutar el siguiente comando para otorgar al usuario de nginx permisos de lectura y escritura en 3 directorios.

sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/

Reinicie Apache/Nginx.

sudo systemctl restart httpd

sudo systemctl restart nginx

A partir de Dovecot 2.3.11, el usuario del servidor web necesita permiso para leer el certificado TLS de Let's Encrypt para realizar el hash de contraseñas. Ejecute los siguientes dos comandos para otorgar permisos.

apache

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

Nginx

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

Paso 4:Cree una base de datos y un usuario para PostfixAdmin

Inicie sesión en MySQL/MariaDB shell como root con el siguiente comando. Deberá ingresar la contraseña raíz de MySQL/MariaDB.

mysql -u root -p

Una vez que haya iniciado sesión, cree una base de datos para PostfixAdmin usando el siguiente comando. Lo nombré postfixadmin , pero puedes usar el nombre que quieras. (No omita el punto y coma).

create database postfixadmin;

Luego ingrese el siguiente comando para crear un usuario de base de datos para PostfixAdmin. Este comando también otorga todos los privilegios de la base de datos postfixadmin al usuario. Reemplace postfixadmin_password con tu contraseña preferida. 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.

grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';

Vacíe la tabla de privilegios para que los cambios surtan efecto y luego salga del shell de MariaDB.

flush privileges;

exit;

Paso 5:Configurar PostfixAdmin

El archivo de configuración predeterminado de PostfixAdmin es config.inc.php . Necesitamos crear un config.local.php archivo y agregue configuraciones personalizadas.

apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

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

Agregue las siguientes líneas en el archivo, para que PostfixAdmin pueda conectarse a la base de datos MySQL/MariaDB. Reemplace postfixadmin_password con la contraseña real de PostfixAdmin creada en el paso 4.

<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['encrypt'] = 'dovecot:BLF-CRYPT';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";

Guarde y cierre el archivo. Tenga en cuenta que utilizaremos el esquema de contraseña BLF-CRYPT.

Paso 6: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/httpd/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.

<VirtualHost *:80>
  ServerName postfixadmin.example.com
  DocumentRoot /var/www/postfixadmin/public/

  ErrorLog /var/log/httpd/postfixadmin_error.log
  CustomLog /var/log/httpd/postfixadmin_access.log combined

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

  <Directory /var/www/postfixadmin/public/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Guarde y cierre el archivo. Vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload httpd

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/nginx/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-fpm/www.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 7:Instale los módulos PHP requeridos y recomendados

PostfixAdmin requiere el php-imap módulo para crear subcarpetas en buzones, pero php-imap no está incluido en el repositorio predeterminado de CentOS 8/RHEL 8, por lo que debemos usar el repositorio Remi para instalar este módulo PHP.

Instale Remi Repo.

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Luego reinicie las secuencias del módulo PHP.

sudo dnf module reset php

Habilite php:remi-7.4 flujo de módulo.

sudo dnf module enable php:remi-7.4 -y

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

sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp

Necesitamos ejecutar el siguiente comando para decirle a SELinux que permita Apache para ejecutar código PHP a través de PHP-FPM.

sudo setsebool -P httpd_execmem 1

Si usa Nginx , edite el archivo de configuración de PHP-FPM:

nano /etc/php-fpm.d/www.conf

De forma predeterminada, PHP-FPM se ejecuta como apache usuario. Como está utilizando el servidor web Nginx, debemos cambiarlo. Encuentra las siguientes dos líneas.

user = apache
group = apache

Cámbialos a

user = nginx
group = nginx

Guarde y cierre el archivo. Luego inicie PHP-FPM.

sudo systemctl start php-fpm

Habilite el inicio automático en el momento del arranque del sistema.

sudo systemctl enable php-fpm

Reinicie Apache o Nginx.

sudo systemctl restart httpd

sudo systemctl restart nginx

Paso 8:habilitar HTTPS

Para cifrar el tráfico HTTP, podemos habilitar HTTPS instalando un certificado TLS gratuito emitido por Let's Encrypt.

Si usa Apache, 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, 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:

  • --apache :Utilice el complemento de Apache.
  • --nginx :use el complemento nginx.
  • --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.
  • --email :Correo electrónico utilizado para el registro y el contacto de recuperación.
  • -d va seguido de una lista de nombres de dominio, separados por comas. Puede agregar hasta 100 nombres de dominio.

Ahora se debe obtener el certificado e instalarlo automáticamente, lo cual se indica en los mensajes a continuación.

Paso 9:Genere una política de SELinux personalizada para el servidor web

Durante la instalación, PostfixAdmin necesita leer los archivos de configuración de Dovecot para crear una contraseña. De forma predeterminada, SELinux no permite que el servidor web lea los archivos de configuración de Dovecot. Necesitamos crear una política de SELinux personalizada para permitir esta acción.

Instale los paquetes necesarios.

sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel

Genere una política personalizada para httpd. (Si usa Nginx, reemplace httpd con nginx .)

sudo sepolicy generate --init /usr/sbin/httpd

Edite el archivo de aplicación de tipos.

sudo nano httpd.te

Agregue la siguiente línea al final de este archivo, para que Apache/Nginx pueda leer los archivos de configuración de Dovecot.

dovecot_read_config(httpd_t)

Guarde y cierre el archivo. Luego instale la nueva política de SELinux.

sudo ./httpd.sh

Ahora Apache/Nginx debería poder leer los archivos de configuración de Dovecot.

Si no sabe qué agregar al httpd.te archivo, ejecute el siguiente comando después de que ocurra una denegación de SELinux.

sudo ausearch -m AVC -ts recent | audit2allow -R

audit2allow sugerirá cambios.

Paso 10: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. Si usa Nginx, cambie apache a nginx .

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

unix_listener stats-writer {
    user = apache
    group = apache
    mode = 0660
  }
}

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

apache

sudo gpasswd -a apache dovecot

NGinx

sudo gpasswd -a nginx dovecot

Reinicie Dovecot.

sudo systemctl restart dovecot

Paso 11: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, debe crear una contraseña de configuración para PostfixAdmin.

Después de crear el hash de la contraseña, PostfixAdmin mostrará una línea como la siguiente.

$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';

Debes abrir el config.local.php archivo.

apache

sudo nano /var/www/postfixadmin/config.local.php

Nginx

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

Agregue la visualización de líneas en la página de configuración de PostfixAdmin al final del archivo como se muestra a continuación.

Después de guardar el archivo, debe actualizar la página de configuración de PostfixAdmin e ingresar la contraseña de configuración nuevamente, luego crear 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.

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

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 el usuario del servidor web no tiene permiso para leer el certificado TLS de Let's Encrypt. Para solucionarlo, ejecute los siguientes dos comandos para otorgar permisos.

apache

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

Nginx

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

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,

mysql -u root -p

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.

Paso 12: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 dnf 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. (En el editor de texto Nano, puede presionar Ctrl+W , luego Ctrl+V para saltar al final de un 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. Reemplace postfixadmin_password con la contraseña de postfixadmin que estableció en el Paso 4.

user = postfixadmin
password = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = postfixadmin_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 = linuxbabe.com, $myhostname, 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 --uid 2000 --user-group --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

También necesitamos cambiar el contexto de SELinux para que se pueda escribir.

sudo chcon -t mail_spool_t /var/vmail/ -R

Paso 13: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 dnf 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 abandonaría 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 del archivo, para que Dovecot pueda consultar la información del usuario de la base de datos.

!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/maillog 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.

Crea el dovecot-sql.conf.ext archivo.

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

Aquí está el contenido que debe tener. Reemplace postfixadmin_password con la contraseña de postfixadmin que estableció en el Paso 4.

driver = mysql

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

default_pass_scheme = BLF-CRYPT

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

Guarde y cierre el archivo. Y reinicie Dovecot.

sudo systemctl restart dovecot

Cuando un usuario intenta iniciar sesión, Dovecot generaría un hash BLF-CRYPT a partir de la contraseña ingresada por el usuario, luego lo compararía con el hash de contraseña almacenado en la base de datos.

Paso 14: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.

Ahora inicie su cliente de correo electrónico de escritorio, como Mozilla Thunderbird, y agregue una cuenta de correo. Si Thunderbird encontró la configuración de su servidor de correo como se muestra a continuación, simplemente haga clic en Listo y podrás leer y enviar correos electrónicos.

Si Thunderbird no encontró la configuración de su servidor de correo, haga clic en Configuración manual para ingresar los detalles de su servidor 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!

Consejos para solucionar problemas

Como regla general, siempre debe consultar el registro de correo (/var/log/maillog ) 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/maillog ), que puede darte algunas pistas. Si Dovecot no se inicia, es posible que el error no se registre en /var/log/maillog 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.

iOS Mail App

If you use the iOS Mail app to log into your mail server and encounter the following error.

You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.

Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.

Temporary Lookup Failure

If your mail server was working fine for some time, but suddenly you find the following error in the mail log,

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

It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.

sudo journalctl -eu mariadb

o

sudo journalctl -eu mysql

A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.

htop

o

free -m

Change User Password in PostfixAdmin

Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php , then change their passwords.

Automatically Clean the Junk Folder and Trash Folder

To delete emails in Junk folder for all users, you can run

sudo doveadm expunge -u *@example.com mailbox Junk all

To delete emails in Trash folder for all users, run

sudo doveadm expunge -u *@example.com mailbox Trash all

I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.

sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w

Then add a cron job to automate the job.

sudo crontab -e

Add the following line to clean Junk and Trash folder every day

@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w

Restricting Access to Sendmail

By default, any local user can use the sendmail binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.

sudo nano /etc/postfix/main.cf

Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.

authorized_submit_users = root,www-data

Guarde y cierre el archivo. Luego reinicie Postfix.

sudo systemctl restart postfix

Siguiente paso

I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.

If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful,  subscribe to our free newsletter to get more tips and tricks. Cuídate 🙂


Cent OS
  1. Instale el servidor web Apache CentOS 6 / RHEL 6

  2. Cómo instalar Puppet en RHEL 8/CentOS 8

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

  4. Cómo configurar un servidor de correo con PostfixAdmin en CentOS 7

  5. Cómo crear un banner SSH en el servidor CentOS/RHEL

Configure el servidor Samba en CentOS 8/RHEL 8 para compartir archivos

Aloja varios dominios de correo en PostfixAdmin en CentOS/RHEL

Instale y configure OpenDKIM en el servidor de correo CentOS 8/RHEL 8

Parte 4:configurar SPF y DKIM con Postfix en el servidor de correo CentOS 8/RHEL 8

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

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