Postfix Admin es una interfaz basada en web que permite a los usuarios configurar y administrar un servidor de correo electrónico basado en Postfix. Con Postfix Admin puede crear y administrar múltiples dominios virtuales, usuarios y alias.
Esta es la primera publicación de la serie sobre Instalación y configuración de un servidor de correo, que cubre la creación de los registros DNS necesarios y explica cómo instalar y configurar Postfix Admin, Nginx con el certificado gratuito Let's Encrypt, PHP y MySQL.
Este tutorial fue escrito para Ubuntu 16.04, sin embargo, los mismos pasos con pequeñas modificaciones deberían funcionar en cualquier versión más nueva de Ubuntu.
Requisitos previos #
Como requisitos previos para seguir esta serie, necesitarás:
- Servidor Ubuntu 16.04. El nombre de host del servidor debe ser un FQDN. En esta serie usaremos
mail.linuxize.com
. - Usuario con privilegios sudo.
Configuración de DNS #
Debe configurar los siguientes registros DNS para que funcione su sistema de correo:
- Un registro, para apuntar el FQDN (nombre de host) de su sistema a la dirección IPv4 de su servidor de correo.
mail.linuxize.com. 3600 IN A 23.45.67.89
El FQDN consta de dos partes, el nombre de host y el nombre de dominio.- Registro MX, para especificar qué servidor de correo es responsable de aceptar mensajes de correo electrónico en nombre del dominio de un destinatario. En nuestro caso, queremos que todos los correos electrónicos se envíen a
@linuxize.com
direcciones de correo electrónico que serán aceptadas pormail.linuxize.com
servidor de correo.
linuxize.com. 3600 IN MX 0 mail.linuxize.com.
- Registro SPF, que se utiliza para verificar qué servidores de correo están aprobados para enviar correo electrónico en nombre de un dominio determinado. En el siguiente ejemplo, estamos aprobando los servidores de correo de dominio (mx) y si falla la verificación de SPF, el resultado será una falla leve (~todos):
linuxize.com. 3600 IN TXT "v=spf1 mx ~all"
Por supuesto, debe reemplazar el nombre de dominio y la dirección IP con su nombre de dominio real y la dirección IP de su servidor de correo. DNS inverso (PTR) #
El DNS inverso (PTR) es una asignación de dirección IP a nombre de dominio, exactamente lo contrario de DNS, que asigna nombres de dominio a direcciones IP.
La mayoría de los servidores de correo electrónico realizarán una búsqueda inversa de DNS en la dirección IP que intenta conectarse a ellos y es posible que no acepten correos electrónicos del servidor si el registro PTR no está configurado.
En la mayoría de los casos, las entradas de PTR se pueden configurar a través de la interfaz web de su proveedor de alojamiento o comunicándose con el equipo de soporte y pídales que configuren un registro de PTR correcto para usted.
Puede usar el comando dig para averiguar el DNS inverso de una dirección IP dada.
dig -x 23.45.67.89
23.45.67.89.in-addr.arpa domain name pointer mail.linuxize.com.
Crea un número de usuario del sistema
Dado que estamos configurando un servidor de correo con usuarios virtuales, necesitamos un usuario del sistema que será el propietario de todos los buzones y será utilizado por los usuarios virtuales para acceder a sus mensajes de correo electrónico en el servidor.
El siguiente comando creará un nuevo grupo y usuario llamado vmail
y establezca el directorio de inicio del usuario en /var/mail/vmail
:
sudo groupadd -g 5000 vmail
sudo useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vmail -m vmail
Todos los buzones virtuales se almacenarán en el /var/mail/vmail
directorio.
Instalar Nginx PHP y MySQL #
Postfix Administra una aplicación basada en PHP. Para poder acceder a la interfaz web de PostfixAdmin necesitamos instalar un servidor web y PHP.
Ejecute el siguiente comando para instalar Nginx, PHP y todos los módulos PHP necesarios:
sudo apt install nginx mysql-server php7.0-fpm php7.0-cli php7.0-imap php7.0-json php7.0-mysql php7.0-opcache php7.0-mbstring php7.0-readline
Se le pedirá que cree una contraseña raíz de MySQL durante la instalación.
Descargar y configurar Postfix Admin #
En el momento de escribir este artículo, 3.1
es la última versión estable de Postfix Admin.
Descargue el archivo de administración de Postfix usando el siguiente comando wget:
VERSION=3.1
wget -q https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-${VERSION}/postfixadmin-${VERSION}.tar.gz
Una vez que se complete la descarga, extraiga el archivo:
tar xzf postfixadmin-${VERSION}.tar.gz
Mueva los archivos fuente de Postfix Admin a /var/www
directorio y crea templates_c
directorio (caché inteligente):
sudo mv postfixadmin-${VERSION}/ /var/www/postfixadmin
rm -f postfixadmin-${VERSION}.tar.gz
mkdir /var/www/postfixadmin/templates_c
Tanto Nginx como PHP-FPM se ejecutan bajo el usuario www-data
entonces necesitamos cambiar la propiedad de /var/www/postfixadmin
a ese usuario:
sudo chown -R www-data: /var/www/postfixadmin
Postfix Admin utilizará una base de datos MySQL para almacenar información sobre usuarios, dominios y la configuración de la aplicación.
Inicie sesión en el shell de MySQL:
mysql -u root -p
Cree una nueva base de datos y usuario de MySQL usando los siguientes comandos:
No olvides cambiar la contraseña (CREATE DATABASE postfixadmin;
GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'P4ssvv0rD';
FLUSH PRIVILEGES;
P4ssvv0rD
) a algo más seguro.
En lugar de editar la configuración predeterminada de Postfix Admin, crearemos un nuevo archivo llamado config.local.php
que sobrescribirá la configuración predeterminada de la aplicación:
Abra el archivo con su archivo de texto:
sudo nano /var/www/postfixadmin/config.local.php
Pegue el siguiente código php:
/var/www/postfixadmin/config.local.php<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'P4ssvv0rD';
$CONF['database_name'] = 'postfixadmin';
$CONF['default_aliases'] = array (
'abuse' => '[email protected]',
'hostmaster' => '[email protected]',
'postmaster' => '[email protected]',
'webmaster' => '[email protected]'
);
$CONF['fetchmail'] = 'NO';
$CONF['show_footer_text'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
$CONF['domain_quota_default'] = '0';
?>
Guarde y cierre el archivo.
Con la configuración anterior estamos definiendo el tipo de base de datos y las credenciales de inicio de sesión. Además, estamos especificando los alias predeterminados, deshabilitando fetchmail
y habilitar la cuota.
A continuación, ejecute el siguiente comando para crear el esquema para la base de datos de administración de Postfix:
sudo -u www-data php /var/www/postfixadmin/upgrade.php
Una vez que se completa la base de datos, podemos continuar y crear nuestro primer usuario superadministrador de PostfixAdmin usando el postfixadmin-cli
herramienta.
Este usuario tendrá privilegios de administración para modificar cualquier configuración de dominio o aplicación.
sudo bash /var/www/postfixadmin/scripts/postfixadmin-cli admin add [email protected] --superadmin 1 --active 1 --password P4ssvv0rD --password2 P4ssvv0rD
La salida debería verse así:
Welcome to Postfixadmin-CLI v0.2
---------------------------------------------------------------
The admin [email protected] has been added!
---------------------------------------------------------------
No olvides cambiar la contraseña (P4ssvv0rD
) para la cuenta de superadministrador a algo más seguro. Instalar certificado Let's Encrypt SSL gratuito n.°
Usaremos el certificado SSL para acceder a nuestra instalación de Postfix Admin y habilitar el cifrado Dovecot y Postfix SSL/TLS.
Tenemos un tutorial sobre cómo instalar un certificado SSL de Let's Encrypt. El punto más importante aquí es generar un Certificado SSL para el nombre de host de su servidor (FQDN) en nuestro caso mail.linuxize.com
.
Una vez que haya generado el certificado SSL siguiendo el tutorial vinculado anteriormente, edite su bloque de servidor Nginx de la siguiente manera:
/etc/nginx/sites-enabled/mail.linuxize.com.confserver {
listen 80;
server_name mail.linuxize.com;
include snippets/letsencrypt.conf;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name mail.linuxize.com;
root /var/www;
ssl_certificate /etc/letsencrypt/live/mail.linuxize.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.linuxize.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/mail.linuxize.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;
location / {
try_files $uri $uri/ /index.php;
}
location /postfixadmin {
index index.php;
try_files $uri $uri/ /postfixadmin/index.php;
}
location ~* \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {return 404;}
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Vuelva a cargar el servicio Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx
En este punto, debería poder iniciar sesión en su instalación de Postfix Admin en https://mail.linuxize.com/postfixadmin
, utilizando el usuario superadministrador creado anteriormente en este tutorial.