Texto de documentación para la instalación y configuración de un servidor de correo Postfix en sistemas GNU/Linux.

El texto incluye la configuración necesaria para poner a funcionar un servidor Postfix con autenticación a través de SASL y PAM con usuarios en base de datos MySQL.

También se incluirá Spamassasin y Amavis como filtros de correo, así como Dovecot como servidor IMAP.



© 2011 Manuel Méndez - Manuko
Documento bajo Licencia de Documentación Libre GNU/FDL

Última revisión: 20110212-02:11

Servidor de correo Postfix con Dovecot.

Este documento incluye información sobre como instalar y configurar un servidor de correo usando Postfix con TLS, SASL, PAM, Amavis, Spamassasin y MySQL, Postfixadmin, Dovecot+Sieve y RoundCube.

Para ello, debemos tener claro cual es la función de cada servicio:
-Postfix: Es el MTA o Agente de transferencia de Correo. Es el servidor SMTP que escucha en el puerto 25 para recibir correos desde otros servidores, o peticiones de envio de correo de parte de los clientes.

-TLS: TLS es una implementación de SSL que permite conexiones seguras entre distintos servidores de correo y también con los clientes.

-MySQL, SASL y PAM: Mediante SASL, podremos lanzar peticiones de autenticación de usuarios a PAM, que es el servicio de autenticación en sistemas Linux. Configuraremos PAM, a su vez, para que compruebe los usuarios en una base de datos MySQL.

-Amavis y SpamAssasin: Amavis nos hará el favor de filtrar los correos según distintas reglas que le pondremos. A su vez, enviará cada correo a SpamAssasin, que dará una puntuación al correo según otras reglas y listas negras de SPAM. Es opcional instalar un antivirus como ClamAV, que también filtraría los correos según su contenido contuviese virus o no.

-PostfixAdmin: Herramienta web que nos permitirá administrar la base de datos MySQL, con los dominios creados y los usuarios que los utilicen.

-Dovecot+Sieve: Dovecot es un servidor IMAP, lo cual permitirá que podamos acceder a nuestras carpetas de correo. Además, en este caso lo utilizaremos de "Repartidor", es decir, para que, una vez recibidos en Postfix y filtrados por Amavis y SpamAssasin, los correos recibidos sean enviados a Dovecot. Lo haremos así para poder utilizar reglas Sieve, o filtros de usuario, para enviar nuestros correos a una carpeta u otra según los contenidos.

-RoundCube: Es un cliente web de correo, en el cual veremos nuestros correos y podremos hacer envios. Además, activaremos el plugin Sieve para poder administrar las reglas de filtos de usuario.

Un par de esquemas, para ver donde va cada cosa (click en la imagen para verla en grande)...

Esquema de recepción y envio de correos:


Esquema de filtrado de correo con Amavis, SpamAssasin y ClamAV:

Una vez claro eso, vamos p'allá...

Indice




Instalación de Postfix, SASL, Amavis, SpamAssasin, MySQL y Dovecot

Instalación de Postfixadmin

Instalación de RoundCube

Configuración Postfix

smtpd_banner = SMTP running on a Debian/GNU Toaster. Anything to toast?
biff = no
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no
home_mailbox = Maildir/

myhostname = mail.instigado.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.instigado.net, instigado.vhost.interdominios.com, 
localhost.vhost.interdominios.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = all

#dovecot specific
dovecot_destination_recipient_limit = 1

#virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = dovecot

# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox\
_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn 
his diskspace quota, please try again later.
virtual_overquota_bounce = yes
relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
virtual_mailbox_base = /var/mail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

#smtpd_recipient_restrictions = permit_mynetworks, 
permit_sasl_authenticated, reject_non_fqdn_hostname, 
reject_non_fqdn_sender, reject_non_fqdn_recipient, 
reject_unauth_destination, reject_unauth_pipelining, 
reject_invalid_hostname, reject_rbl_client list.dsbl.org,
reject_rbl_client bl.spamcop.net, reject_rbl_client opm.blitzed.org, 
reject_rbl_client sbl-xbl.spamhaus.org, smtpd_recipient_restrictions 
= permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, 
reject_non_fqdn_recipient,  reject_unauth_destination, 
reject_unauth_pipelining, reject_invalid_hostname, reject_rbl_client 
list.dsbl.org, reject_rbl_client bl.spamcop.net, reject_rbl_client 
opm.blitzed.org, reject_rbl_client sbl-xbl.spamhaus.org
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_key_file = /etc/postfix/smtpd.pem
relayhost =
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
recipient_delimiter = +

#filtering virus
content_filter = amavis:[127.0.0.1]:10024

# Mejoras antispam
message_size_limit = 20975200
# Mejoras para evitar saturacion de colas por "bounced"
bounce_queue_lifetime = 2d
maximal_queue_lifetime = 2d
fast_flush_purge_time = 3d

Configuración PostfixAdmin

Configuración Dovecot

Configuración Amavis y SpamAssassin

Configuraciones extra de dominio (SPF), GreyListing, DKIM...

Configuración RoundCube

Sieve

Esta muy feo esto...


Lo siguiente son apuntes que forman parte de una clase de LPI sobre servicios de correo electrónico y debe ser revisado:
Postfix

Imagenes de la pizarra:
-Estructura SMTP: http://manuko.instigado.net/IMG/SMTP-basic.jpg
-Filtro de correo SMTP: http://manuko.instigado.net/IMG/SMTP-filter.jpg
Errata: Amavis escucha en 10024, postfix recibe el resultado en 10025.

 yum install postfix
 yum install amavisd-new spamassassin

Cal afegir suport a postfix per a accedir a MySQL, podem fer-ho activant "centosplus"
http://www.linuxmail.info/postfix-mysql-centos-5/

Si algú vol una imatge per a VirtualBox:
http://virtualboxes.oryum install postfixg/images/debian/
http://virtualboxes.org/images/


Coses a canviar a /etc/postfix/main.cf

myhostname = mail.kenneth.org
inet_interfaces = all

#mynetworks-->Permite especificar IPs o rangos que no requeriran autenticación.
smtpd_banner = SMTP running on a 800W microwave with grill
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_non_fqdn_recipient,  reject_unauth_destination, reject_unauth_pipelining,   reject_invalid_hostname,  reject_rbl_client list.dsbl.org , reject_rbl_client bl.spamcop.net, reject_rbl_client opm.blitzed.org, reject_rbl_client sbl-xbl.spamhaus.org
content_filter = amavis:[127.0.0.1]:10024
message_size_limit = 20975200
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key



Gestió d'Aliases (redireccions):

Editar /etc/aliases
// Regenerar BBDD d'aliases:
postalias /etc/aliases

Arxius de configuració d'exemple:

http://training.gnun.net/Get,cacad2aec9f4371413f91805dcea928e
-----------------------------------------------------------------------------------------------------------

Dijous 3/2/2011:

Què hem de fer?



    * Posar un panell de control per a gestionar els comptes de correu i dominis

    * Integrar Postfix amb MySQL

    * Fer que Postfix autentiqui usuaris amb PAM

    * Configurar dovecot per a IMAP

    * Opcionals:

    * Integrar Amavis amb Postfix

    * Configuració d'amavis, Spamassassin, etc....

    * Activar SPF

    * Greylisting

    * DKIM

    * ....




Gestió de BBDD de Correu amb PostfixAdmin:

Postfixadmin:

scp linuxero@192.168.1.107:/home/linuxero/Desktop/postfixadmin-2.3.2.tar.gz .
(pot ser recomanable instal·lar phpmyadmin per a veure la BBDD si es desconeix SQL)

http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.2/postfixadmin-2.3.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2F&ts=1296742270&use_mirror=puzzle

    Dependències de PHP per a  Postfixadmin:

    yum install php-mbstring php-imap


    Paràmetres recomanats a la configuració de PostfixAdmin:
    
    
    File: config.inc.php
$CONF['configured'] = true;

    * change-this-to-your.domain.tld canviar pel teu nom de domini

    * (amb vim: :% s/change-this-to-your.domain.tld/kenneth.org/g )

$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'algodecente';
$CONF['database_name'] = 'postfix';
$CONF['database_prefix'] = '';

$CONF['encrypt'] = 'md5crypt'; // si no funciona, provar a canviar a "system"

//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/username@domain.tld
$CONF['domain_path'] = 'YES';

//   YES: /usr/local/virtual/domain.tld/username@domain.tld
//   NO:  /usr/local/virtual/domain.tld/username
// Note: If $CONF['domain_path'] is set to NO, this setting will be forced to YES.
$CONF['domain_in_mailbox'] = 'YES';
// Default Domain Values
// Specify your default values below. Quota in MB.
$CONF['aliases'] = '500';
$CONF['mailboxes'] = '100';
$CONF['maxquota'] = '1000';

// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'YES';
// You can either use '1024000' or '1048576'
$CONF['quota_multiplier'] = '1048576';
$CONF['transport'] = 'YES';



A la consola del mysql mirar:

connect postfix    
show tables;
desc domain;
select * from domain;
show tables;
desc mailbox;
select * from mailbox;



Configuració Addicional de Postfix:

(ajustaments de permissos i directoris amb safates de correu)

Cal afegir un usuari per a "mapejar" tots els comptes de correu contra ell:
[root@localhost ]# groupadd -g 5000 vmail
[root@localhost ]# useradd -g 5000 -u 5000 vmail


Integració de Postfix amb MySQL:

Corregir mysql_virtual_domains_maps.cf:
select_field = domain

Editar todos a la vez:

 perl -pi.old -e"s/PonAquiTuPAssword/esteEsElNuevo/g" mysql_*.cf
 
----------------

    Modificació de configuració a /etc/postfix/main.cf     -->poner al final.

virtual_transport = virtual
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains_maps.cf
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
//Directives necessaries per la creació d'usuaris vituals
virtual_mailbox_base = /home/vmail
//Previament s'ha de crear un usuari i grup amb el mateix UID i GID
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_non_fqdn_recipient,  reject_unauth_destination, reject_unauth_pipelining,   reject_invalid_hostname,  reject_rbl_client list.dsbl.org , reject_rbl_client bl.spamcop.net, reject_rbl_client opm.blitzed.org, reject_rbl_client sbl-xbl.spamhaus.org
message_size_limit = 20975200
#       Millores per a evitar saturacio de cues degut a missatges "bounced"
bounce_queue_lifetime = 2d
maximal_queue_lifetime = 2d
fast_flush_purge_time = 3d


    Nous arxius de configuració:
//    Arxius /etc/postfix/mysql_*
    Cal fer que siguin propietat del root, amb grup postfix i NO EXECUTABLES (640)


Proves: crear un usuari virtual al panell i provar a enviar-li un email des del sistema (mail usuari@elmeudomini.org)
Funciona?


Integració de Postfix amb Pam:

//Arxiu main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

Editem /etc/sysconfig/saslauthd
    FLAGS="-c -m /var/spool/postfix/var/run/saslauthd"

Afegir suport per a MySQL al PAM:

http://wallace.blogspot.com/2007/10/installing-pam-mysql-on-centos-50.html

Un cop es té suport pèr a pam+mysql, cal adaptar ĺ'arxiu: /etc/pam.d/smtp amb el següent contingut:

auth       required     pam_nologin.so
auth       required     pam_mysql.so user=postfix passwd=PonAquiTuPassword host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
auth       required     pam_env.so

account       sufficient   pam_mysql.so user=postfix passwd=PonAquiTuPassword host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account    required     pam_unix.so




Configuració de Dovecot-Imap:

yum install dovecot


/etc/dovecot.conf

protocols = imap
# imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_processes_count = 20
login_max_processes_count = 128
login_max_connections = 256
login_greeting = Oven started, fancy a grill?
mail_location = ~/
mail_privileged_group = vmail
mail_debug = no
protocol imap {
}
 
#protocol pop3 {
#    pop3_uidl_format = %08Xu%08Xv
#}
#protocol managesieve {
#  sieve=~/.dovecot.sieve
#  sieve_storage=~/sieve
#}
auth default {
  mechanisms = plain
     passdb sql {
        args = /etc/dovecot/dovecot-sql.conf
    }
    userdb sql {
        args = /etc/dovecot/dovecot-sql.conf
    }
    user = vmail
}
dict {
}
plugin {
}

---------------------------------------------
/etc/dovecot/dovecot-sql.conf

driver = mysql
connect = host=localhost dbname=postfix user=postfixro password=PonAquiTuPassword

default_pass_scheme = PLAIN

password_query = "SELECT username AS user, password AS password FROM mailbox WHERE username = '%u'"
 
 
user_query = "SELECT CONCAT('/home/vmail/', maildir) AS home, 5000 as uid, 5000 as gid, CONCAT('maildir:/home    /vmail/', maildir) AS userdb_home, CONCAT('maildir:/home/vmail/', maildir) AS userdb_mail, CONCAT('maildir:st    orage=', quota) as quota FROM mailbox WHERE username = '%u'"


Integració amb Amavis:

- Reconfiguració de Postfix:

- Bàsics sobre Amavis


Probando IMAP con un php simplón: http://www.instigado.net/manuko/spip.php?article926


---------------------------------

Lectures Recomanades:

http://www.karlkatzke.com/centos-postfix-dovecot-spamassassin-postfixadmin-and-squirrelmail/
http://www.howtoforge.com/virtual-users-and-domains-postfix-courier-mysql-centos5.1
http://www.postfix.org/docs.html
http://workaround.org/ispmail/lenny

---------------------------------------------------

Imatge debian prova correu:

scp linuxero@192.168.1.122:~/debian-5.0-x86.7z .



© 2011 Manuel Méndez - Manuko
Documento bajo Licencia de Documentación Libre GNU/FDL

Última revisión: 20110212-02:11