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 Sí .
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. Elijanormal 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. Elijanormal 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 🙂