Servidor de Correo con Postfix, Mariadb y PostfixAdmin en Debian9. 3ra Parte

En esta parte vamos a instalar PostfixAdmin, Dovecot y Postfix. Con PostfixAdmin podremos configurar y administrar nuestro servidor de correo basado en postfix. Con Dovecot tendremos los servicios de IMAP y POP3 en nuestro servidor de correo.

  • PostfixAdmin

Después de descargarlo de Github:

tar xfv postfixadmin-3.1.tar.gz
mv postfixadmin-3.1 postfixadmin
mv postfixadmin /usr/share/
cd /usr/share/postfixadmin
mkdir templates_c
chmod -R 755 *; chown -R www-data:www-data *
chmod -R 777 templates_c
mkdir -p /etc/postfixadmin
mv /usr/share/postfixadmin/config.inc.php /etc/postfixadmin/
ln -s /etc/postfixadmin/config.inc.php /usr/share/postfixadmin/config.inc.php
ln -s /usr/share/postfixadmin /var/www/webmail.inutil.cu/
/etc/init.d/nginx restart

Editar la configuración[config.inc.php]:
Directivas…

$CONF['configured'] = true;
$CONF['default_language'] = 'es';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1048576';

Esta directiva se usa cuando aún no se tiene nombre de dominio así el postfixadmin no chequea el dominio de email del administrador que sea válido. Se usa para pruebas solamente…

$CONF['emailcheck_resolve_domain']='YES';
$CONF['used_quotas'] = 'YES';

Esta directiva se usa desde Dovecot 1.2 o superior, si usted tiene dovecot >=1.1 poner a NO

$CONF['new_quota_table'] = 'YES';

Abrir el navegador e ir a http://ip_del_server/postfixadmin/setup.php
– Rellenar el campo del setup password
– Rellenar los campos del setup con los datos del formulario anterior
– Editar el config.inc.php y setear la variable $CONF[‘setup_password’] con el valor dado en la instalación
– Añadir el email del administrador y listo

En el navegador ir a http://ip_del_server/postfixadmin/
– Loguearnos con la info del administrador del sitio
– Lo primero es ir a «Lista de dominios/Nuevo dominio» y rellenar los datos
– Después ir a «Lista de direcciones virtuales/Añadir buzón» y rellenar los datos
– Añadir cuantos buzones sean necesarios…
– Listo!

  •  Dovecot
apt install dovecot-pop3d dovecot-imapd dovecot-core dovecot-mysql dovecot-sieve

Dovecot antes nos creaba un certificado autofirmado válido por 10 años[ya NO]. Existe un script en /usr/share/dovecot llamado mkcert.sh que se encarga de esa tarea, pero la primera vez que instalé Dovecot no sabía esto y usé openssl directamente para crearlo:

openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/dovecot/dovecot.pem -out /etc/dovecot/dovecot.pem

Y después de completar toda la info que nos pide openssl para crear el certificado, lo tendremos disponible en:

/etc/dovecot/dovecot.pem

El cual usaremos para nuestra configuración[es de prueba, no? :D]…

Nota: Dovecot divide en varios archivos la configuración, yo acostumbro a poner todo en un mismo archivo para no perderme después.

Algunos cambios antes de configurar Dovecot

mkdir -p /var/log/dovecot/
cd /var/log/dovecot/
touch dovecot.log dovecot-info.log dovecot-deliver.log dovecot-debug.log

Debido a que Dovecot a cambiado mucho no es posible adaptarle una config anterior[si, me pasó cuando migré de Dovecot 1.1 a 2.1], por lo que debemos hacer lo siguiente:

doveconf -n > /etc/dovecot/dovecot.conf

Doveconf genera una configuración bastante acertada, pero demasiado pobre, por lo que hay que pasarle la mano para que quede a nuestro gusto.

La configuración de Dovecot:

Editamos /etc/dovecot/dovecot.conf

listen = *
protocols = imap pop3

login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
deliver_log_format = msgid=%m: %$ : Subject: %s
mail_access_groups = vmail
mail_location = maildir:/home/vmail/%d/%n/Maildir:INDEX=/home/vmail/%d/%n/Maildir
mail_log_prefix = "%Us(%u): "
maildir_stat_dirs = yes

log_path = /var/log/dovecot/dovecot.log
info_log_path = /var/log/dovecot/dovecot-info.log
log_timestamp = "%Y-%m-%d %H:%M:%S "

ssl = required
ssl_protocols = !SSLv2 !SSLv3
# Good bye SSLv3
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/dovecot.pem
verbose_proctitle = no
verbose_ssl = no

mail_plugins = quota expire mailbox_alias mail_log notify acl

mail_temp_dir = /tmp
disable_plaintext_auth = yes
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_mechanisms = plain login
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
auth_verbose_passwords = plain
# For debbugging purposes only, set to yes
mail_debug = no
debug_log_path = /var/log/dovecot/dovecot-debug.log

login_greeting = Dovecot ready OK+.

first_valid_gid = 2
first_valid_uid = 2
last_valid_gid = 5000
last_valid_uid = 5000

service imap-login {
inet_listener imap {
address = *
port = 143
}
inet_listener imaps {
address = *
port = 993
ssl = yes
}
service_count = 1
}

service imap {
process_limit = 512
vsz_limit = 1 G
}

service pop3-login {
inet_listener pop3 {
address = *
port = 110
}
inet_listener pop3s {
address = *
port = 995
}
service_count = 1
}

service pop3 {
process_limit = 512
vsz_limit = 1 G
}

service dict {
unix_listener dict {
mode = 0600
user = vmail
group = vmail
}
}

namespace {
type = private
separator = /
prefix =
#location defaults to mail_location.
inbox = yes

# Refer to document for more details about alias mailbox:
# http://wiki2.dovecot.org/MailboxSettings
#
# Sent
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox "Sent Items" {
auto = no
special_use = \Sent
}

mailbox Drafts {
auto = subscribe
special_use = \Drafts
}

# Trash
mailbox Trash {
auto = subscribe
special_use = \Trash
}

mailbox "Deleted Messages" {
auto = no
special_use = \Trash
}

# Junk
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Spam {
auto = no
special_use = \Junk
}
mailbox "Junk E-mail" {
auto = no
special_use = \Junk
}

# Archive
mailbox Archive {
auto = subscribe
special_use = \Archive
}
mailbox Archives {
auto = no
special_use = \Archive
}
}

protocol imap {
mail_max_userip_connections = 10
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins imap_quota imap_acl
imap_client_workarounds = tb-extra-mailbox-sep
}
protocol pop3 {
mail_max_userip_connections = 10
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
hostname = correo.nauta.cu
lda_mailbox_autocreate = yes
info_log_path = /var/log/dovecot/dovecot-deliver.log
log_path = /var/log/dovecot/dovecot.log
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
postmaster_address = [email protected]
sendmail_path = /usr/lib/sendmail
}

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

service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
group = vmail
mode = 0660
user = vmail
}
user = root
}

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

dict {
quotadict = mysql:/etc/dovecot/dovecot-quota.conf
}

quota_full_tempfail = yes

plugin {
quota = dict:User quota::proxy::quotadict
quota_rule = *:storage=10M:messages=1000
quota_rule2 = Trash:storage=+10%

# New & WORKS!!!
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=90%% quota-warning 90 %u
quota_warning3 = storage=85%% quota-warning 85 %u
quota_grace = 10%%

trash = /etc/dovecot/trash.conf
mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size

}

service quota-warning {
executable = script /etc/dovecot/scripts/quota-warning.sh
user = vmail
unix_listener quota-warning {
user = vmail
}
}

Conexión a MySQL y obtener de datos

<dovecot-sql.conf>

driver = mysql
connect = host=localhost dbname=db_name user=db_user password=db_user_password
default_pass_scheme = md5-crypt

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

user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'

Obtener la quota

<dovecot-quota.conf>

connect = host=localhost dbname=db_name user=db_user password=db_user_password

map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}

map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}

<trash.conf>

1 Spam
2 Trash

<quota-warning.sh>

#!/bin/bash

PERCENT=$1
USER=$2

cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: [email protected]
Subject: Advertencia de quota en el servidor

Su buzon esta $PERCENT% lleno.

Usted deberia borrar algunos mensajes del servidor.

ADVERTENCIA: No ignore este mensaje, pues si su buzon alcanza
llenarse al 100%, los correos nuevos seran rechazados.

EOF

En caso de no necesitar todo esto sólo diríjase a http://wiki2.dovecot.org/QuickConfiguration para configurar Dovecot rápido y sin dolor… No lo recomiendo, estudie un poquito, diga NO a la neuroapatía.

Para probar el certificado en dovecot

openssl s_client -starttls imap -connect imap.inutil.cu:143
  • Postfix
apt install postfix postfix-pcre postfix-mysql mlock mailutils postfix-policyd-spf-perl

Lo primero es agregar el usuario postfix al grupo sasl

adduser postfix sasl

Así postfix trabajará con la autenticación SASL.

Debemos agregar a postfix las directivas smtpd_tls_dh1024_param_file y smtpd_tls_dh512_param_file que lo que hacen es añadir ECC con el fin de mejorar la seguridad de nuestro servidor:

smtpd_tls_dh1024_param_file = /etc/postfix/certs/dh_2048.pem.pem
smtpd_tls_dh512_param_file = /etc/postfix/certs/dh_1024.pem

Y para generar los certificados:

mkdir /etc/postfix/certs
cd /etc/postfix/certs
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout postfix.pem -out postfix.pem
openssl dhparam /etc/postfix/certs/dh_2048.pem -2 2048
openssl dhparam/etc/postfix/certs/dh_1024.pem -2 1024

Después de hecho esto, debemos crear el fichero smtpd.conf dentro de la carpeta sasl de Postfix para indicarle el método de autenticación smtp con sasl.

touch /etc/postfix/sasl/smtpd.conf

<smtpd.conf>

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 7
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: password_usuario_mysql
sql_database: postfix
sql_select: select password from mailbox where username = '%u'

Y los permisos:

chmod 644 /etc/postfix/sasl/smtpd.conf

Si tenemos alguna duda instalando postfix recomiendo hacer un dpkg-reconfigure postfix y analizar el instalador.Como estamos instalando postfix contra mysql debemos crear los archivos que vinculen a postfix con mysql

mkdir -p /etc/postfix/sql
cd /etc/postfix/sql/

Editar mysql_sender_login_maps.cf .Este fichero va a contener la query que chequea y evita la suplantación de identidad

touch mysql_sender_login_maps.cf

<mysql_sender_login_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
port = 3306
dbname = postfix
query = SELECT mailbox.username FROM mailbox,domain WHERE mailbox.username='%s' AND mailbox.domain='%d' AND mailbox.domain=domain.domain AND mailbox.active=1 AND domain.backupmx=0 AND domain.active=1

Editar mysql_virtual_alias_domainaliases_maps.cf .Este fichero va a contener la query de los alias de dominio

touch mysql_virtual_alias_domainaliases_maps.cf

<mysql_virtual_alias_domainaliases_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
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

Editar touch mysql_virtual_alias_maps.cf .Este fichero va a contener la query de los alias de correo virtuales

touch mysql_virtual_alias_maps.cf

<mysql_virtual_alias_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'

Editar  mysql_virtual_domains_maps.cf .Este fichero va a contener la query de los dominios de correo virtuales

touch mysql_virtual_domains_maps.cf

<mysql_virtual_domains_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'

Editar mysql_virtual_mailbox_domainaliases_maps.cf . Este fichero va a contener la query de los alias de buzón virtuales

touch mysql_virtual_mailbox_domainaliases_maps.cf

<mysql_virtual_mailbox_domainaliases_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
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

Editar  mysql_virtual_mailbox_maps.cf . Este fichero va a contener la query de los buzones virtuales

touch mysql_virtual_mailbox_maps.cf

<mysql_virtual_mailbox_maps.cf>

user = postfix
password = postfix_db_password
hosts = 127.0.0.1
dbname = postfix
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

Ya esta casi listo nuestro server de correo, en nuestro siguiente y último tutorial terminaremos de configurar el postfix para tener un servidor de correo totalmente funcional.

Síguenos en la 4ta y última parte.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 3.7 / 5. Recuento de votos: 3

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

9 comentarios

  1. Firefox 76.0 Firefox 76.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0

    Esto me recuerda mis tiempos de «Postfixadmin» los años 2009-2014 muy buen MTA se los recomiendo muy rapido sencillo y eficaz. Salu2

  2. Firefox 80.0 Firefox 80.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0

    Donde dice:
    openssl dhparam /etc/postfix/certs/dh_2048.pem -2 2048
    openssl dhparam/etc/postfix/certs/dh_1024.pem -2 1024

    Es:
    openssl dhparam -out /etc/postfix/certs/dh_2048.pem -2 2048
    openssl dhparam -out /etc/postfix/certs/dh_1024.pem -2 1024

  3. Google Chrome 73.0.3683.103 Google Chrome 73.0.3683.103 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36

    esta perfecto, pero necesito la 4ta parte

  4. Firefox 62.0 Firefox 62.0 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0

    Buenas no encuentro el post con la cuarta parte y final. me gustaria saber si lo pondran.

  5. Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 8.1 x64 Edition Windows 8.1 x64 Edition
    Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

    Por favor publica el último tutorial sobre esto

  6. Firefox 52.0 Firefox 52.0 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0

    Por favor donde se agregan las directivas al postfix
    smtpd_tls_dh1024_param_file = /etc/postfix/certs/dh_1024.pem

Responder a Leslie León Sinclair Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.


*