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.
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
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
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
https://www.sysadminsdecuba.com/2018/01/servidor-de-correo-con-postfix-mariadb-y-postfixadmin-en-debian9-4ta-parte/
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
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.
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
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
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
En el main.cf
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Quedamos a la espera del gran final.