Buscar en este blog

4.4.10

(BORRADOR) Servidor de Correo: postfix

¡¡AVISO. Esta entrada es un borrador y puede contener errores técnicos y tipográficos!!


INSTALACIÓN O.S.
    Debian lenny i386 'netinstall'
    IP: 192.168.1.12
    Hostname: mail.trustnone.es
    ntp:  Muy importante para el sistema de correo
    Instalación del sistema base
    Kernel 2.6

CONFIGURACIÓNES PREVIAS A NIVEL O.S.
         apt-get install openssh-server
         apt-get install ntp

    Comprobar sincronización horaria
        ps aux | grep ntp
        date

    Comprobar archivo hosts
        mail:~# cat /etc/hosts
        127.0.0.1       localhost
        192.168.1.12    mail.trustnone.es       mail

    Comprobar conectividad a/desde Internet

    Repositorios obligatorios ('/etc/apt/sources.list')
        deb http://ftp.fr.debian.org/debian/ lenny main non-free contrib
        deb-src http://ftp.fr.debian.org/debian/ lenny main non-free contrib
        deb http://security.debian.org/ lenny/updates main contrib non-free
        deb-src http://security.debian.org/ lenny/updates main contrib non-free

    Aplicar actualizaciones de seguridad:
        apt-get update
        apt-gte upgrade


MYSQL SERVER (5.0)
    apt-get install mysql-server mysql-client
        Usuario: root, contraseña: root

    Asegurarse que el servicio arranca con el sistema
        update-rc.d mysql defaults

    Tunning MySQL
        /etc/init.d/mysql stop
        Sustituir el archivo "/etc/mysql/my.cnf" por el contenido de "/usr/share/doc/mysql-server-5.0/examples/my-medium.cnf.gz". Deja más memoria para caché y mejora rendimiento. Es una configuración de ejemplo hecha por los mantenedores de Debian que funciona muy bien.
        Editar "/etc/mysql/my.cnf" para activar el motor "InnoDB":
            [...]
            # Uncomment the following if you are using InnoDB tables
            innodb_data_home_dir = /var/lib/mysql/
            innodb_data_file_path = ibdata1:10M:autoextend
            innodb_log_group_home_dir = /var/lib/mysql/
            innodb_log_arch_dir = /var/lib/mysql/
            # You can set .._buffer_pool_size up to 50 - 80 %
            # of RAM but beware of setting memory usage too high
            innodb_buffer_pool_size = 16M                    <- Estos valores se deben ajustar de acuerdo a las características de la máquina
            innodb_additional_mem_pool_size = 2M
            # Set .._log_file_size to 25 % of buffer pool size        <- Estos valores se deben ajustar de acuerdo a las características de la máquina
            innodb_log_file_size = 5M
            innodb_log_buffer_size = 8M
            innodb_flush_log_at_trx_commit = 1
            innodb_lock_wait_timeout = 50
            [...]
        Editar "/etc/mysql/my.cnf" para activar el 'log' de consultas. Esto se vuelve a dejar igual al terminar, pero en configuración es muy util para saber qué se está consultando en la base de datos:
            [...]
            # * Logging and Replication
            #
            # Both location gets rotated by the cronjob.
            # Be aware that this log type is a performance killer.
            log            = /var/log/mysql/mysql.log                <- Archivo de log
            #
            # Error logging goes to syslog. This is a Debian improvement :)
            #
            # Here you can see queries with especially long duration        <- Archivo de log
            log_slow_queries       = /var/log/mysql/mysql-slow.log
            long_query_time = 2
            log-queries-not-using-indexes
            [...]

APACHE2 + PHP5
    apt-get install apache2 php5 php5-mysql php5-imap

    Por alguna razón, no carga correctamente el módulo php en la instalación. Se soluciona reiniciando 'apache'.
        /etc/init.d/apache2 restart

    Es muy buena idea habilitar las conexiones SSL. Ver anexo a final.
    Comprobar que los scripts "php" se ejecutan correctamente.

POSTFIXADMIN (2.3)
    Descargar la versión 2.3 de la web pfadmin:  http://postfixadmin.sourceforge.net/
        wget http://downloads.sourceforge.net/[...]/postfixadmin_2.3.tar.gz[...]
    Descomprimir
        tar xvfz postfixadmin_2.3.tar.gz
    Mover a un lugar visible por el servidor web
        mv postfixadmin-2.3 /var/www/postfixadmin
    Cambiar propietario:grupo de los archivos a 'www-data'
        chown -R www-data:www-data /var/www/postfixadmin/
    Seguir las instrucciones de '/var/www/postfixadmin/INSTALL.TXT
        Conectarse al gestor MySQL
            mysql -u root -p
        Crear una base de datos MySQL de nombre 'postfix' para el usuario 'postfix'
            create database postfix;
            create user 'postfix'@'localhost' IDENTIFIED BY 'postfix';
            grant all privileges on `postfix`.* to 'postfix'@'localhost';
            flush privileges;
        Editar archivo de configuración '/var/www/postfixadmin/config.inc.php'
            [...]
            $CONF['configured'] = true;
            [...]
            # Este es el password de setup. Está 'hasheado'. Se puede obtener cargando el "setup.php" de pfadmin, generándolo y pegando aquí el resultado
            $CONF['setup_password'] = 'a4dbfc3f2c8a1cfa40ff7ec75098aa5f:c9f36703be092127f59806137efc3e3039b4ddd5';
            [...]
            $CONF['postfix_admin_url'] = 'http://192.168.1.12/postfixadmin';
            [...]
            $CONF['default_language'] = 'es';
            [...]
            $CONF['database_type'] = 'mysql';
            $CONF['database_host'] = 'localhost';
            $CONF['database_user'] = 'postfix';
            $CONF['database_password'] = 'postfix';
            $CONF['database_name'] = 'postfix';
            $CONF['database_prefix'] = '';
            [...]
            $CONF['encrypt'] = 'md5crypt';
            [...]
            $CONF['domain_path'] = 'YES';
            [...]
            $CONF['domain_in_mailbox'] = 'NO';
            [...]
            $CONF['emailcheck_resolve_domain']='NO';
            [...]
        Editar el archivo de configuración '/var/www/postfixadmin/config.inc.php' para asignar correctamente todas las direcciones de correo de administración:
            [...]
            $CONF['admin_email'] = 'josem@trustnone.es';
            [...]
            'abuse' => 'josem@trustnone.es',
            'hostmaster' => 'josem@trustnone.es',
            'postmaster' => 'josem@trustnone.es',
            'webmaster' => 'josem@trustnone.es'
            [...]
        Visitar:  http://192.168.1.12/postfixadmin/setup.php
            Generar el hash del setup password para ponerlo en en archivo config.inc.php
            Comprobar que todo está OK
        Visitar (de nuevo):  http://192.168.1.12/postfixadmin/setup.php
            Generar un administrador del sistema de correo. Es buena idea que sea un email que luego exista realmente
            Borrar 'setup.php'
        Visitar: http://192.168.1.12/postfixadmin
            Acceder con el administrador creado antes y generar el primero dominio y usuario/s, coincidiendo con los del administrador de setup del paso anterior.
            Comprobar que los registros se han añadido a las tablas de MySQL.



POSTFIX
    Desinstalar el MTA que por defecto instala Debian; Exim4
        apt-get remove --purge exim4 exim4-config exim4-daemon-light

    El paquete postfix que incluye lenny no está preparado para soportar 'quotas' de usuario. Hay que parchearlo y compilarlo para que lo soporte
    Parcheo/Compilación
        Instalar el paquete original de postfix de lenny (solo se usará para hacer la configuración inicial, además de para saber que versión es y conseguir el parche específico
            apt-get install postfix postfix-mysql
                >Internet Site
                >System mail name: mail.trustnone.es
        Parar el demonio
            /etc/init.d/postfix stop
        Comprobar la versión que dispone lenny (2.5.5).
            postconf -d  | grep -i mail_version
        Paquetes de desarrollo necesarios para la compilación y otras dependencias específicas para compilar postfix
            apt-get install dpkg-dev
            apt-get install debhelper po-debconf lsb-release libdb-dev libldap2-dev libpcre3-dev libmysqlclient15-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev hardening-wrapper
        Descarga de los fuentes
            cd /usr/src
            apt-get source postfix
        Descargar el parche correspondiente a la versión de postfix (2.5.5) de 'http://vda.sourceforge.net
            wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
        Descomprimir y parchear (desde /usr/src/)
            gunzip postfix-2.5.5-vda-ng.patch.gz
            cd postfix-2.5.5
            patch -p1 < ../postfix-2.5.5-vda-ng.patch
        Compilar
            dpkg-buildpackage
        Los paquetes .deb resultantes están en '/usr/src'.
        Instalar 'postfix' y 'postfix-mysql'
            cd /usr/src
            dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb
    Comprobar que 'uid' y 'gid' tienen en el sistema el usuario y grupo postfix. Esto se utilizará para que postfix le otorgue estos permisos a los mailboxes.
            id postfix        ->    uid=104(postfix) gid=107(postfix)
    Comprobar que la configuración actual de postfix es similar a la siguiente.
        /etc/postfix/main.cf  (ARCHIVO COMPLETO)
            #CONFIGURACION GLOBAL GENERICA
            smtpd_banner = $myhostname ESMTP $mail_name -POSTFIX-
            biff = no
            append_dot_mydomain = no
            readme_directory = no
            myhostname = mail.trustnone.es
            mydomain = trustnone.es
            alias_maps = hash:/etc/aliases
            alias_database = hash:/etc/aliases
            myorigin = /etc/mailname
            mydestination = mail.trustnone.es, localhost.trustnone.es, , localhost
            relayhost =
            mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
            mailbox_size_limit = 0
            recipient_delimiter = +
            inet_interfaces = all
    Configuración virtual-mysql para postfix
        /etc/postfix/main.cf
            [...]
            #MYSQL VIRTUAL DOMAINS
            virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
            virtual_gid_maps = static:107
            virtual_mailbox_base = /home/vmail
            virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
            virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
            virtual_minimum_uid = 104
            virtual_transport = virtual
            virtual_uid_maps = static:104
            [...]
        mkdir /etc/postfix/mysql
        /etc/postfix/mysql/virtual_alias_maps.cf
            user = postfix
            password = postfix
            hosts = 127.0.0.1
            dbname = postfix
            table = alias
            select_field = goto
            where_field = address
        /etc/postfix/mysql/virtual_domains_maps.cf
            user = postfix
            password = postfix
            hosts = 127.0.0.1
            dbname = postfix
            table = domain
            select_field = domain
            where_field = domain
            additional_conditions = and backupmx = '0' and active = '1'
        /etc/postfix/mysql/virtual_mailbox_maps.cf
            user = postfix
            password = postfix
            hosts = 127.0.0.1
            dbname = postfix
            table = mailbox
            select_field = maildir
            where_field = username
    Crear directorio para los buzones y darle permisos
        mkdir /home/vmail
        chown postfix:postfix /home/vmail
        chmod 700 /home/vmail
    Reiniciar postfix
        /etc/init.d/postfix restart
    Comprobar configuración hasta aquí. Se debería poder conectar vía SMTP (puerto tcp:25) sin autentificación y enviar correos a los mailboxes de los dominios locales. También hacia el exterior, pero posíblemente ningún otro servidor SMTP quiera 'hablar' con este aún. Además, postfix deberá crear automáticamente el mailbox del usuario. ¡¡OJO!!, el sistema ahora es un 'OpenRelay'.

COURIER POP,IMAP
    Instalación de paquetes necesarios
        apt-get install courier-base courier-authlib-mysql courier-pop courier-imap
        Create directories for web-based administration? -> No
    Editar archivos de configuración
        /etc/courier/authdaemonrc
            authmodulelist="authmysql"
            authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe"
            daemons=5
            authdaemonvar=/var/run/courier/authdaemon
            DEBUG_LOGIN=1
            DEFAULTOPTIONS=""
            LOGGEROPTS=""
        /etc/courier/authmysqlrc
            MYSQL_SERVER            127.0.0.1
            MYSQL_USERNAME          postfix
            MYSQL_PASSWORD          postfix
            MYSQL_PORT              3306
            MYSQL_OPT               0
            MYSQL_DATABASE          postfix
            MYSQL_USER_TABLE        mailbox
            MYSQL_CRYPT_PWFIELD     password
            MYSQL_UID_FIELD         104
            MYSQL_GID_FIELD         107
            MYSQL_LOGIN_FIELD       username
            MYSQL_HOME_FIELD        '/home/vmail'
            MYSQL_NAME_FIELD        name
            MYSQL_MAILDIR_FIELD     maildir
        /etc/courier/pop3d
            PIDFILE=/var/run/courier/pop3d.pid
            MAXDAEMONS=40
            MAXPERIP=4
            POP3AUTH=""
            POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
            POP3AUTH_TLS=""
            POP3AUTH_TLS_ORIG="LOGIN PLAIN"
            POP3_PROXY=0
            PORT=110
            ADDRESS=0
            TCPDOPTS="-nodnslookup -noidentlookup"
            LOGGEROPTS="-name=pop3d"
            POP3DSTART=YES
            MAILDIRPATH=Maildir
        /etc/courier/imapd
            ADDRESS=0
            PORT=143
            MAXDAEMONS=40
            MAXPERIP=20
            PIDFILE=/var/run/courier/imapd.pid
            TCPDOPTS="-nodnslookup -noidentlookup"
            LOGGEROPTS="-name=imapd"
            IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
            IMAP_KEYWORDS=1
            IMAP_ACL=1
            IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
            IMAP_PROXY=0
            IMAP_PROXY_FOREIGN=0
            IMAP_IDLE_TIMEOUT=60
            IMAP_MAILBOX_SANITY_CHECK=1
            IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
            IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
            IMAP_DISABLETHREADSORT=0
            IMAP_CHECK_ALL_FOLDERS=0
            IMAP_OBSOLETE_CLIENT=0
            IMAP_UMASK=022
            IMAP_ULIMITD=65536
            IMAP_USELOCKS=1
            IMAP_SHAREDINDEXFILE=/etc/courier/shared/index
            IMAP_ENHANCEDIDLE=0
            IMAP_TRASHFOLDERNAME=Trash
            IMAP_EMPTYTRASH=Trash:7
            IMAP_MOVE_EXPUNGE_TO_TRASH=0
            SENDMAIL=/usr/sbin/sendmail
            HEADERFROM=X-IMAP-Sender
            IMAPDSTART=YES
            MAILDIRPATH=Maildir
    Reiniciar los servicios del 'courier'
        /etc/init.d/courier-authdaemon restart
        /etc/init.d/courier-imap restart
        /etc/init.d/courier-pop restart
    Asegurarse que los servicios arrancan al inicio
        update-rc.d courier-authdaemon defaults
        update-rc.d courier-pop defaults
        update-rc.d courier-imap defaults
    Comprobar que se puede conectar tanto vía IMAP (tcp:143) como POP3 (tcp:110) y obtener el correo del mailbox.

COURIER POPS, IMAPS (Servicios seguros de conexión a los servicios POP e IMAP)
    La transmisión de datos se realiza cifrada mediante SSL. Para esto son necesarios certificados, pero 'apt' los creará automáticamente (uno para SPOP y otro para IMAPS). Después pueden ser sustituidos por otros firmados/autofirmados.
    Instalación de paquetes para POPS
        apt-get install courier-ssl courier-pop-ssl
    Instalación de paquetes para IMAPS
        apt-get install courier-imap-ssl
    Asegurarse que los servicios seguros arrancan al inicio del sistema
        update-rc.d courier-pop-ssl defaults
        update-rc.d courier-imap-ssl defaults
    El servicio IMAPS escucha por el puerto tcp:993
    El servico POPS escucha por el puerto tcp:995

SASL-AUTH Autentificación SMTP
    Instalación de paquetes
        apt-get install libsasl2-2 sasl2-bin libsasl2-modules libsasl2-modules-sql
    Configuración de 'saslauth' para que postfix pueda ver el servicio. Postfix corre en una jaula 'chroot' que cuelga de '/var/spool/postfix'.
        /etc/init.d/saslauthd stop
        rm -fr /var/run/saslauthd
        mkdir -p /var/spool/postfix/var/run/saslauthd
        chgrp sasl /var/spool/postfix/var/run/saslauthd
        ln -s /var/spool/postfix/var/run/saslauthd /var/run
        adduser postfix sasl
    Editar los archivos de configuración
        /etc/default/saslauthd
            START=yes
            NAME="saslauthd"
            MECHANISMS="pam"
            MECH_OPTIONS=""
            THREADS=5
            OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
        /etc/postfix/sasl/smtpd.conf    (Este archivo ha de ser creado Y PERMISOS)
            pwcheck_method: saslauthd
            mech_list: login plain cram-md5 digest-md5
            auxprop_plugin: sql
            sql_engine:mysql
            sql_hostnames: 127.0.0.1
            sql_user: postfix
            sql_database: postfix
            sql_passwd: postfix
            sql_select: select password from mailbox where username = '%u@%r'
            log_level: 10
        /etc/postfix/main.cf
            [...]
            #SASL auth
            smtpd_sasl_auth_enable = yes
            smtpd_sasl_local_domain =
            smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
            smtpd_sasl_security_options = noanonymous
            broken_sasl_auth_clients = yes
            [...]
    Instalar la extensión 'mysql' de 'pam'. La autentificación pasa por 'pam'
        apt-get install libpam-mysql
    Editar '/etc/pam.d/smtp'
        auth required pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1
        account sufficient pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password cryp=1 md5=1
    Reiniciar servicios
        /etc/init.d/saslauthd restart
        /etc/init.d/postfix restart
    Comprobar que 'saslauth' arranca al inicio del sistema
        update-rc.d saslauthd defaults
    El nombre de usuario para la autentificación es la dirección completa de correo electrónico


POSTFIX TLS - SMTPD. Permite que las conexiones de clientes 'smtp' con el servidor estén cifradas. Permitirá conectarse con o sin TLS, a elección del cliente.
    Utiliza un certificado. Se puede generar uno firmado/autofirmado o utilizar alguno de los que ya están en el sistema, con el 'snakeoil'
    Editar /etc/postfix/main.cf
        [...]
        #TLS
        smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
        smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
        smtpd_use_tls=yes
        smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
        smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
        [...]
    Reiniciar 'postfix'
        /etc/init.d/postfix restart
   
QUOTAs. Previamente se ha parcheado/recompilado 'postfix' para que soporte quotas
    Instalar 'maildrop'. Se encarga de actualizar el archivo 'maildirsize' desde la BD
        apt-get install maildrop
    Configurar 'postfixadmin' para que gestione las quotas en la base de datos
        /var/www/postfixadmin/config.inc.php
            [...]
            $CONF['quota_multiplier'] = '1024000';            <- Medida por defecto (1MB)
            $CONF['maxquota'] = '10';                <- Maximo 10 MB
            $CONF['quota'] = 'YES';
            [...]
    Configurar quotas a los usuarios en 'postfixadmin' (0 = ilimitado). Confirmar que los datos se actualizan en la tabla ('mailbox')
    Configurar postfix para que lea las quotas de la DB
        /etc/postfix/mysql/virtual_mailbox_quota.cf
            user = postfix
            password = postfix
            dbname = postfix
            hosts = 127.0.0.1
            query = SELECT quota FROM mailbox WHERE username='%s'
        /etc/postfix/main.cf
            #QUOTA
            virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/virtual_mailbox_quota.cf
            virtual_mailbox_limit_override = yes
            virtual_maildir_limit_message = "The user you are trying to reach is over quota."
            virtual_overquota_bounce = yes
            virtual_create_maildirsize = yes
            virtual_mailbox_extended = yes
            virtual_maildir_extended = yes
        Ahora 'postfix' lee las quotas en la base de datos y las actualiza en el archivo 'maildirsize' del buzón.

TUNNING POSTFIX: Algunas opciones de configuración a tener en cuenta
    /etc/postfix/main.cf
        [...]
        #TUNNING
        #Tamaño máximo de mensaje con 'envoltorios' (10MB)
        message_size_limit = 10240000
        #Timeout
        #Número máximo de procesos postfix
        default_process_limit = 20
        #Tiempos de reintento (reprocesado de cola)
        queue_run_delay = 300s
        #Validez de mensajes en cola (Tiempo máximo que se intenta entregar un msg)
        maximal_queue_lifetime = 2d
        bounce_queue_lifetime = 2d
        #Ratios de envío
        #Número máximo de conexiones simultaneas de un cliente smtp
        smtpd_client_connection_count_limit = 50
        #Número máximo de conexiones de un cliente por unidad de tiempo (60s)
        smtpd_client_connection_rate_limit = 150
        #Número máximo de mensajes de un cliente por unidad de tiempo (60s)
        smtpd_client_message_rate_limit = 100
        #Número máximo de destinatarios que puede contener un mensaje
        smtpd_recipient_limit = 1000
        [...]


VACATION - AUTORESPONDER
    No es muy recomendable, porque reponderá a los correos de SPAM, confirmando que somos una dirección válida, aunque para correo del trabajo empresas es muy util.
    La característica viene incluida en 'postfixadmin'. Se puede seguir la guia INSTALL
    Instalación de software necesario:
        apt-get install libdbi-perl libdbd-mysql-perl libmail-sendmail-perl libemail-valid-perl libmime-perl libmime-charset-perl libmime-encwords-perl libmail-sender-perl  liblog-log4perl-perl
    Creación del usuario/grupo vacation
        addgroup --gid 65501 vacation
        useradd -c "Virtual Vacation" -d /var/spool/vacation -u 65501 -g 65501 -s /sbin/false vacation   
    Localización/configuración del script "vacation.pl". Este script es el que hace "la magia"
        mkdir /var/spool//vacation
        cp /var/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
        chown -R vacation:vacation /var/spool/vacation/
        chmod 755 /var/spool/vacation
        chmod 711 /var/spool/vacation/vacation.pl
        chmod -x /var/spool/vacation/vacation.pl
        /var/spool/vacation/vacation.pl
            [...]
            # db_type - uncomment one of these
            #our $db_type = 'Pg';
            our $db_type = 'mysql';
            [...]
            # connection details
            our $db_username = 'postfix';
            our $db_password = 'postfix';
            our $db_name     = 'postfix';
            [...]
            our $vacation_domain = 'autoreply.trustnone.es';    "RECORDAR ESTO"
            [...]
    /etc/postfix/transport        (El archivo debe ser creado)
        autoreply.trustnone.es  vacation:
    postmap /etc/postfix/transport
    /etc/postfix/master.cf:
        vacation    unix  -       n       n       -       -       pipe
            flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
    /etc/postfix/main.cf
        #VACATION
        transport_maps = hash:/etc/postfix/transport
        vacation_destination_recipient_limit = 1
    /var/www/postfixadmin/config.inc.php
        [...]
        $CONF['vacation'] = 'YES';
        [...]
        $CONF['vacation_domain'] = 'autoreply.trustnone.es';
        [...]
        $CONF['vacation_control'] ='YES';
        [...]
        $CONF['vacation_control_admin'] = 'YES';
        [...]

LISTAS NEGRAS DE REMITENTES - BLACK LISTs ( de INTERNET)
    Internet dispone de algunos listados de IPs y remitentes "malignos" que podemos utilizar para bloquearlos en nuestro servidor. Se presupone que el uso de estas listas negras puede evitar hasta un 70% de SPAM.
    Los más interesantes son "spamcop" y "spamhaus". Para que postfix compruebe en ellos si la IP del remitente es "oscura", se edita la entrada "smtpd_recipient_restrictions" de esta forma:
    /etc/postfix/main.cf
        [...]
        smtpd_recipient_restrictions = permit_sasl_authenticated,
                                permit_mynetworks,
                                reject_unauth_destination,
                                reject_rbl_client zen.spamhaus.org,            <- Linea de blacklist
                                reject_rbl_client bl.spamcop.net            <- Linea de blacklist
        [...]   
    Las lineas de listas negras deben ir al final o lo más al final posible. Siempre después de "permit_sasl_authenticated"
   
LISTAS NEGRAS DE REMITENTES - BLACK LISTs (LOCALES)
    Si deseamos bloquear ciertos remitentes que no aparecen en las listas negras de SPAM.
    Crear un archivo de texto con los remitentes/IPs que se desea bloquear
        /etc/postfix/black_list_senders
            [...]
            spammer@domain.tld    REJECT                <- Entre ambos campos debe ir un tabulador
            [...]
            80.50.22.0        REJECT
            [...]
    Mapear el archivo:
        postmap  /etc/postfix/black_list_senders
    Añadir la restricción a la entrada "smtpd_recipient_restrictions" de esta forma:
        /etc/postfix/main.cf
            [...]
            smtpd_recipient_restrictions = permit_sasl_authenticated,
                    [...]
                    check_sender_access    hash:/etc/postfix/black_list_senders        <- La entrada debe ir lo más al final posible
                    [...]
    Cada vez que un nuevo "remitente" se añade al archivo "black_list_senders" se debe ejecutar el mapeo del archivo para que postfix lo tenga en cuenta:
        postmap  /etc/postfix/black_list_senders
   
COMPROBACIÓN DEL REGISTRO 'SPF' DEL SERVIDOR REMOTO
    Postfix no implementa nativamente la comprobación SPF, pero se pueden utilizar plugins hechos por terceros.
    Descargar de "http://openspf.org" el "appliance":  postfix-policyd.spf-perl. Existen otros escritos para otros MTA y en otros lenguajes.
        wget http://www.openspf.org/blobs/postfix-policyd-spf-perl-2.007.tar.gz
    Descomprimir/desempaquetar
        tar xvfz postfix-policyd-spf-perl-2.007.tar.gz
    Copiar "./postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl" en "/usr/lib/postfix"
        cp postfix-policyd-spf-perl-2.007/postfix-policyd-spf-perl  /usr/lib/postfix
    Añadir el nuevo servicio a "/etc/postfix/master.cf"
        /etc/postfix/master.cf
            [...]
            policy  unix  -       n       n       -       0       spawn
                        user=nobody argv=/usr/local/lib/policyd-spf-perl
            [...]
    Añadir la política a la entrada "smtpd_recipient_restrictions" de esta forma:
        /etc/postfix/main.cf
            [...]
            smtpd_recipient_restrictions = permit_sasl_authenticated,
            [...]
                reject_unauth_destination,
                check_policy_service unix:private/policy  <- Debe ir después de "reject_unauth_destination"
            [...]
    Añadir un límite al tiempo de espera para la política
        /etc/postfix/main.cf
            [...]
            policy_time_limit = 3600,
            [...]

COMPROBACIÓN DE LA RESOLUCIÓN INVERSA DEL SERVIDOR REMOTO
    En la actualidad la mayoría de servidores de correo en Internet hacen esta comprobación, que permite retener un gran número de correos SPAM
    Se activa añadiendo una nueva linea a la entrada "smtpd_recipient_restrictions" de esta forma:
        [...]
        smtpd_recipient_restrictions = permit_sasl_authenticated,
                                permit_mynetworks,
                                reject_unauth_destination,
                reject_unknown_reverse_client_hostname,        <- Linea de comprobación de rDNS
                                reject_rbl_client zen.spamhaus.org,           
                                reject_rbl_client bl.spamcop.net           
        [...]   
       
   
AMAVISD-NEW + SPAMASSASSIN + CLAMAV
    ¿Qué queremos que suceda con el spam y los virus?
    Los correos con virus no deberían llegar a ningún mailbox. Deben pasar a la carpeta de cuarentena y el 'postmaster' o el destinatario original recibir una notificación
    Los correos considerados SPAM deben ir a parar a un 'folder' especial llamdo 'SPAM'.
    Instalación de software:
        apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2  libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop rar unrar lha arj ripole cabextract pax tnef
    El servicio AMAVISD-NEW escucha en el puerto 'tcp:10024'. Comprobarlo: "netstat -an | grep 10024" y asegurarse de que se inicia con el arranque del sistema
    Añadir el usuario 'clamav' al grupo 'amavis'
        adduser clamav amavis
    Enlazar 'postfix' con 'amavisd'.
        Crear los servicios en 'master.cf' añadiendo las entradas:
        /etc/postfix/master.cf
            [...]
            # AV scan filter (used by content_filter)
            scan      unix  -       -       n       -       16      smtp
                    -o smtp_send_xforward_command=yes
            # For injecting mail back into postfix from the filter
            127.0.0.1:10025 inet  n -       n       -       16      smtpd
                    -o content_filter=
                    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
                    -o smtpd_helo_restrictions=
                    -o smtpd_client_restrictions=
                    -o smtpd_sender_restrictions=
                    -o smtpd_recipient_restrictions=permit_mynetworks,reject
                    -o mynetworks_style=host
                    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
            [...]
        Especificar en 'main.cf' que los correos se envíen primero a 'amavis'
        /etc/postfix/main.cf
            [...]
            content_filter = scan:127.0.0.1:10024
            receive_override_options = no_address_mappings
            [...]
        Reiniciar 'postfix'
            /etc/init.d/postfix restart
    Ahora los correos ya pasan por "amavis", pero por defecto no hace ningún test sobre el mensaje
    Activar filtro antivirus
        /etc/amavis/conf.d/15-content_filter_mode       <- Eliminar los comentarios de las siguientes lineas.
            [...]
            @bypass_virus_checks_maps = (
               \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
            [...]
    Activar filtro de SPAM
        /etc/amavis/conf.d/15-content_filter_mode       <- Eliminar los comentarios de las siguientes lineas.
            [...]
            @bypass_spam_checks_maps = (
               \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
            [...]
        Para que SpamAssassin reescriba el "subject" de los correos, debe reconocer los dominios locales como tales. Para ello hay que definir la variable '@local_domains_maps' para que contenga todos los dominios locales que el servidor maneja. Como son varios y pueden variar, definimos la variable como '@local_domains_maps = (1)' en el archivo:
            /etc/amavis/conf.d/20-debian_defaults
                [...]
                @local_domains_maps = (1)
                [...]
        Si queremos que los correos detectados como SPAM sean marcados en el subject, definir las variables:
            /etc/amavis/conf.d/20-debian_defaults
                [...]
                $sa_spam_subject_tag = '*SPAM*> ';
                [...]
                $sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
                $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
                [...]
        Indicar a "Amavis" que el correo llegue al destino (aunque marcado), ya que por defecto lo devuelve
            /etc/amavis/conf.d/20-debian_defaults
                [...]
                #$final_spam_destiny       = D_BOUNCE;                <- Esto es lo que había originalmente.
                $final_spam_destiny       = D_PASS;                <- Este el el comportamiento que queremos
                [...]


    Poner los correos con virus en un directorio de cuarentena y notificar al administrador del sistema que se ha recibido un virus
        /etc/amavis/conf.d/20-debian_defaults
            [...]
            $mailfrom_notify_admin = 'AMAVIS\@trustnone.es';            <- Remitentes de los correos de notificación que envia AMAVIS
            $mailfrom_notify_recip = 'AMAVIS\@trustnone.es';            <- Remitentes de los correos de notificación que envia AMAVIS
            $mailfrom_notify_spamadmin = 'AMAVIS\@trustnone.es';            <- Remitentes de los correos de notificación que envia AMAVIS
            [...]
            $QUARANTINEDIR = "$MYHOME/virusmails";                <- Directorio de cuarentena: "/var/lib/amavis/virusmails". Debería ser algo separado que se pueda controlar.
            [...]
            $virus_admin = 'josem\@trustnone.es                <- A quien se envían las notificaciones de que se ha recibido VIRUS
            [...]
            $final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)        <- El correo no llegará al destinatario
            [...]
            $X_HEADER_LINE = "Scanned with ClamAV-AmavisNew at $mydomain";        <- Linea que aparecerá en el encabezamiento del correo
            [...]
        ¡OJO!. Los correos en cuarentena no se eliminan automaticamente. Se debe escribir un script que se ejecute automáticamente y controle que el directorio de cuarentena no bloquee el FS.
   
    Reiniciar todos los servicios
        /etc/init.d/clamav-daemon restart
        /etc/init.d/amavis restart
    Mensaje de prueba SPAM
        Se puede enviar un correo que contenga la cadena:
              XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
        Una regla específica de SPAMASSASSIN debería reconocerla para marcar el correo como SPAM a modo de prueba
    Mensaje de prueba VIRUS
        Se puede descargar un archivo de prueba desde:  http://www.eicar.org/anti_virus_test_file.htm
        El archivo se puede adjuntar a un correo para comprobar que el sistema lo detecta como VIRUS y lo pone en cuarentena, además de avisar al administrador.
    Actualizació nde la base de datos de SpamAssassin
        Para actualizar desde Internet
            sa-update
            /etc/init.d/amavis restart
        No se ejecuta automáticamente, de forma que se debe añadir una linea al 'crontab'

    Actualización de la base de datos de Virus para ClamAV
        Clamav utiliza el servicio "freshclam" que se encarga de actualizar la base de datos de virus desde Internet (cada hora). Comprobar que está ejecutándose y que arranca al inicio.
        El archivo de configuración de "freshclam" donde se configura esto es:  "/etc/clamav/freshclam.conf"
        El servicio deja un log en "/var/log/clamav/freshclam.log"
        El proceso es automático

SQUIRRELMAIL
    Descargar el paquete de squirrelmail (Last Release is 1.4.19)
        wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fprdownloads.sourceforge.net%2Fsquirrelmail%2Fsquirrelmail-1.4.19.tar.gz
        tar xvfz squirrelmail-1.4.19.tar.gz
        mv squirrelmail-1.4.19 /var/www/squirrelmail
        chown -R www-data:www-data /var/www/squirrelmail
    Ejecutar el script de configuración
        cd /var/www/squirrelmail
        ./configure
            [...]
    Comprobar la configuración:  https://IPMAILSERVER/squirrelmail/src/configtest.php
    Acceder al webmail: http://IPMAILSERVER/squirrelmail

    Plugins y herramientas insteresantes; descargables desde la web de 'squirrelmail' y fáciles de instalar
        compatibility: Necesario para instalar otros módulos
        check_quota:  Muestra la cuota de buzón asignada/ocupada
        html_mail:  Permite escribir mensajes en HTML con 'fckeditor'
        calendar: Incluido en SQM
        jsclock: Hora mediante un JavaScript
        timeout_user:  Desconecta la sesión después de un tiempo (configurable) de inactividad.
       
        Idiomas internacionales (es_ES). Ojo; para que funcione la traducción hay que cambiar todo a utf-8. Ver este enlace:
            http://www.ubuntu-es.org/?q=node/33800
       
ROUNDCUBEMAIL
    Descargar paquete de RoundCubeMail (Last Release is 0.3.1)
        wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.3.1/roundcubemail-0.3.1.tar.gz?use_mirror=surfnet
        tar xvfz roundcubemail-0.3.1.tar.gz
        mv roundcubemail-0.3.1 /var/www/roundcubemail
    Crear una base de datos en MySQL para la aplicación
        mysql -u root -p
        create database roundcubemail;
        create user 'roundcubemail'@'localhost' IDENTIFIED BY 'roundcubemail';
        grant all privileges on `roundcubemail`.* to 'roundcubemail'@'localhost';
        flush privileges;
    Ejecutar el instalador
        https://IPMAILSERVER/roundcubemail/installer/
       

APENDICE I: Configurar SSL en Debian Lenny
    Activar módulo 'ssl' de apache2
        a2enmod ssl
        /etc/init.d/apache2 restart
    Activar 'default-ssl' site
        a2ensite default-ssl
        /etc/init.d/apache2 reload
    En este momento el servidor escucha tanto por el puerto http:80 como por el https:443
    Para hacer que las peticiones 'http:80' se redirijan a 'https:443'
        a2enmod rewrite
        /etc/apache2/sites-available/default
           
                        ServerAdmin webmaster@localhost
                    DocumentRoot /var/www/
                   
                            Options FollowSymLinks
                            AllowOverride None
                            RewriteEngine On
                            RewriteCond %{SERVER_PORT} !^443$
                            RewriteRule ^(.*) https://192.168.1.11
                   

               
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
               

            [...]

APENDICE II: Archivos de Log más importantes:
    /var/log/mail.info        -> Log general de todo el sistema de correo. Por defecto, todos los mensajes llegarán aquí
    /var/log/mail.err        -> Errores en postfix
    /var/log/mail.warn        -> Avisos
    /var/log/clamav/clamav.log    -> Log del antivirus
    /var/log/clamav/freshclam.log    -> Log del actualizador del antivirus

APENDICE III: "Maildrop y filtros maildroprc"
    Se desea que los correos marcados como Spam por Amavis lleguen a una carpeta IMAP especial llamada SPAM, que además deberá crearse automáticamente en caso de que no exista.
    Instalar "Maildrop" en caso de que no estuviera instalado.
        apt-get install maildrop
    Crear un usuario y un grupo "vmail" que será el que ahora posea los "maildirs". Especificar 'uid' y 'gid' cualquiera libre y recordarlo.
        groupadd vmail -g 6060
        useradd vmail -u 6060 -g 6060
        Comprobar que el usuario 'vmail' pertenece al grupo 'vmail'
            id vmail
    Editar el servicio 'maildrop' en 'master.cf'
        /etc/postfix/master.cf    (ORIGINAL)
            [...]
            #maildrop  unix  -       n       n       -       -       pipe
            #  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
            [...]
        /etc/postfix/master.cf  (MODIFICADO)
            [...]
            maildrop  unix  -       n       n       -       -       pipe
              flags=ODRhu user=vmail argv=/usr/bin/maildrop  -w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
            [...]
    El directorio socket de "saslauth" debe ser 777
        chmod 777 /var/run/courier/authdaemon/
    Reconfigurar postfix para que la entrega final de los correos la realice 'maildrop' en lugar de 'virtual'. Se modifican varias cosas del archivo 'main.cf' original
            /etc/postfix/main.cf    (ORIGINAL)
                [...]
                #MYSQL
                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_uid_maps = static:104
                virtual_gid_maps = static:107
                virtual_minimum_uid = 104
                virtual_mailbox_base = /home/vmail
                [...]
            /etc/postfix/main.cf    (MODIFICADO)
                [...]
                #MYSQL VIRTUAL DOMAINS
                virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf
                virtual_gid_maps = static:6060
                virtual_mailbox_base = /home/vmail
                virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_domains_maps.cf
                virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
                virtual_minimum_uid = 6060
                virtual_transport = maildrop
                virtual_uid_maps = static:6060
                maildrop_destination_recipient_limit = 1
                maildrop_destination_concurrency_limit = 1
                [...]
    Reconfigurar permisos de los buzones:
        chown -R vmail:vmail /home/vmail
        chmod -R 700 /home/vmail
    Reconfigurar 'saslauthdaemon'
        /etc/courier/authmysqlrc
            [...]
            MYSQL_UID_FIELD         6060            <- Originalmente estaban en 104
            MYSQL_GID_FIELD         6060            <- Originalmente estaban en 107
            [...]
    Reiniciar todos los servicios. La experiencia dice que aquí sería buena idea un reinicio completo de la máquina
    Comprobar que se puede acceder vía imap/smtp a los buzones y que los filtros de spam y correo funcionan (deberían funcionar)
    Editar el archivo de configuración de maildrop: Es el que decide su modo de funcionamiento y donde se especifican las reglas de filtrado
        /etc/maildroprc
            HOME_DIR="/home/vmail"
            logfile "/var/log/maildroprc.log"
            EXTENSION="$1"
            RECIPIENT=tolower("$2")
            USER="$3"
            HOST="$4"
            SENDER="$5"
            #Si es Spam, ponerlo en el folder de "SPAM"
            if (/^X-Spam-Flag: YES*/)
            {
                    log "Filtro Maildrop Activado /home/vmail/$DEFAULT/.SPAM"
                    to "/home/vmail/$DEFAULT/.SPAM"
            }

    Quotas (¡OJO!, con esto no es necesario el parcheo del paquete postfix):
        Si "maildrop" está compilado para soportar cuotas, hará uso de ellas si hay un archivo "maildirsize"   
        Para comprobar si maildrop tiene soporte de quotas:
            > maildrop -v
                [...]
                Maildir quota extension enabled.
                [...]
        NOTA: Los archivos de quota especifican esta con entradas tipo 1000000S , que significa 1000000 bytes o  1000C , que significa 1000 mensajes.
        Se puede probar a añadir una cuota a un maildir ya creado con la orden de ejemplo (maildirmake -q 100000S /home/vmail/DOMAIN/MAILDIR). Los archivos 'maildirsize' deben pertenecer a 'vmail:vmail' y tener permisos 700. Crear uno y probar que funciona.
    Crear el archivo de 'log' para que 'maildrop' pueda escribir
        touch /var/log/maildroprc.log
        chown vmail:vmail /var/log/maildroprc.log

    Creacion de mailboxes desde postfixadmin
        Instalar 'sudo'
            apt-get install sudo
        ./config.inc.php
            [...]
            $CONF['mailbox_postcreation_script']='sudo -u vmail sh /usr/local/bin/postfixadmin-mailbox-postcreation.sh';
            [...]
            $CONF['mailbox_postedit_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postedit.sh';
            [...]
        /etc/sudoers
            [...]
            www-data ALL=(vmail) NOPASSWD: ALL            ¿?¿?¿??¿?¿?¿?¿¿?¿?¿?
            [...]
        cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin
        /usr/local/bin/postfixadmin-mailbox-postcreation.sh
            [...]
            basedir=/home/vmail/
            [...]
            maildirmake -f SPAM "$maildir"
            maildirmake -f Trash "$maildir"
            maildirmake -f Sent "$maildir"
            maildirmake -f Drafts "$maildir"
            maildirmake -q $4S "$maildir"
            echo "INBOX.Trash" >> $maildir/courierimapsubscribed
            echo "INBOX.SPAM" >> $maildir/courierimapsubscribed
            echo "INBOX.Sent" >> $maildir/courierimapsubscribed
            echo "INBOX.Drafts" >> $maildir/courierimapsubscribed
            exit 0
        /usr/local/bin/postfixadmin-mailbox-postedit.sh        <- Script completo
            #!/bin/sh
            basedir=/home/vmail
            maildir="${basedir}/$3"
            maildirmake -q $4S "$maildir"
            exit 0
        chmod +x /usr/local/bin/postfixadmin-mailbox-post*
        NOTA: Es responsabilidad de los programas que acceden por imap modificar el archivo 'maildirsize' cuando crean o borran algo. De esta forma, cuando la bandeja esta llena y cerca del límite, al eliminar algo el archivo de cuota debe modificarse automáticamente para indicar los cambios.
    Automatizar el envio de los buzones eliminados a un lugar de cuarentena antes de eliminarlo
        Editar '/var/www/postfixadmin/config.php.inc
            [...]
            $CONF['mailbox_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
            [...]
            $CONF['domain_postdeletion_script']='sudo -u vmail /usr/local/bin/postfixadmin-domain-postdeletion.sh';
            [...]
        No es necesario generar los scripts, ya que vienen de muestra con 'postfixadmin'
            cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh    /usr/local/bin
            cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh    /usr/local/bin
            chmod +x /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
            chmod +x /usr/local/bin/postfixadmin-domain-postdeletion.sh
            Editar   /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
                [...]
                # Change this to where you keep your virtual mail users' maildirs.
                basedir=/home/vmail
                # Change this to where you would like deleted maildirs to reside.
                trashbase=/home/vmail/RETIRADOS
                [...]
            Editar   /usr/local/bin/postfixadmin-domain-postdeletion.sh
                [...]
                # Change this to where you keep your virtual mail users' maildirs.
                basedir=/home/vmail
                # Change this to where you would like deleted maildirs to reside.
                trashbase=/home/vmail/RETIRADOS
                [...]
        mkdir RETIRADOS
        chown vmail:vmail /home/vmail/RETIRADOS/        <- Suponiendo que queremos enviarlos a este path
        chmod 700 /home/vmail/RETIRADOS/


APENDICE IV:  Estadísticas de correo
    -MAILGRAPH-
    apt-get install mailgraph
    Por defecto utilizar los logs estandar de correo (/var/log/mail.log, etc) para saber lo que ha ocurrido con los correos.
    Las estadísticas se pueden ver vía navegador desde:   http://IPSERVIDOR/cgi-bin/mailgraph.cgi

    -ISOQLOG-
    apt-get install isoqlog
        Tipo servidor -> Postfix
        Salida ->  /var/www/isoqlog
        Dominios -> todos los que maneje postfix
    Añadir linea de ejecución con 'isoqlog' a 'cron'
        crontab -e
            [...]
            */10 * * * * /usr/bin/isoqlog
            [...]
    Las estadísticas se pueden ver vía navegador desde:  http://IPSERVIDOR/isoqlog
    Se pueden añadir dominios a posteriori en el archivo '/etc/isoqlog/isoqlog.domains'


APENDICE V: Bloquear la actualización de un paquete
    Util para evitar que una actualización actualice un paquete que hemos retocado a mano sin darnos cuenta.
    Obtener una lista etiquetada de los paquetes instalados en el sistema y exportarla a un archivo:
        dpkg --get-selections \* >  /root/lista_packages.list
    Editar el archivo modificando la etiqueta de los paquetes que se desea mantener a "hold":
        /root/lista_packages.list    <- ORIGINAL
            [...]
            portmap                                         install
            postfix                                         install
            postfix-mysql                                   install
            procps                                          install
            psmisc                                          install
            [...]

        /root/lista_packages.list    <- MODIFICADO PARA RETENER 'postfix' y 'postfix-mysql'
            [...]
            portmap                                         install
            postfix                                         hold
            postfix-mysql                                   hold
            procps                                          install
            psmisc                                          install
            [...]

    Recargar el listado de paquetes con sus nuevos estados
        dpkg --set-selections < /root/lista_packages.list

APENDICE VI:  Creando un alias de 'root'
    vi /etc/aliases
        mailer-daemon: postmaster
        postmaster: root
        nobody: root
        hostmaster: root
        usenet: root
        news: root
        webmaster: root
        www: root
        ftp: root
        abuse: root
        noc: root
        security: root
        clamav: root
        root: admin@trustnone.es        <- Para que los correos enviados a root se dirijan a una cuenta real en postfix
    Ejecutar 'newaliases'
        /usr/bin/newaliases
       
APENDICE VII:   Aprendizaje de spamassasin.
    Util. Plugin  'spam_buttons' de spamassasin.

    Se pueden generar en cada maildir, dos carpetas, una llamada 'SPAM' y otra llamada 'NO-SPAM'. Un script se debe encargar de recorrer estas carpetas y actuar de la siguiente forma:
        Si encuentra un mensaje en la carpeta 'SPAM' que no esté etiquetado como tal, significa que el usuario lo ha dejado ahí. Debe escanearse con "sa-learn --spam".
        Si encuentra un mensaje en la carpeta 'NO-SPAM' que está etiquetado como SPAM, significa que el usuario lo ha dejado ahí. Debe escanearse como "sa-learn --ham" y pasarlo a la bandeja de entrada.
    De esta forma el usuario puede refiltrar mensajes para que el sistema aprenda de ello.
    El script se debe ejecutar cada determinado tiempo:

APENDICE VIII:  Saber si estamos en listas de spam
    Utilizar las herramientas "rblcheck" y "amispammer"
    rblcheck
        apt-get install rblcheck
        rblcheck xxx.xxx.xxx.xxx
    amispammer
        apt-get install libmail-sender-perl
        wget  http://www.lorenzomartinez.es/projs/amispammer/amispammer_v2.zip
        unzip amispammer_v2.zip
        mv amISpammer.pl /usr/local/bin
        perl /usr/local/bin/amISpammer.pl -i -v0 -f emailfrom@from.com -t emailto@to.com
    También util:  http://www.blacklistalert.org/

APENDICE IX:    Benchmark
    Comprobar que están instaladas las herramietnas "smtp-sink" y "smtp-source"
    Para postfix
        /etc/init.d/postfix stop
        Poner "smtp-sink" a escuchar peticiones de correo:    
            smtp-sink  -4c -u :25 1024
        Bombardear el servicio desde local (10000 mensajes de 25KB cada uno con una concurrencia de 256)
            smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com localhost:25
        Bombardear el servicio desde remoto. Es necesaria otra máquina en red que disponga de "smtp-source"
            smtp-source -4dNcm 10000 -s 256 -l 25000 -f foo@bar.com -t bar@foo.com :25
   
APENDICE X:  Configuración del DNS
    Configurar correctamente el servidor DNS es fundamental para que el correo funcione.
    Ejemplo de configuración de BIND9 para un dominio ficticio: "trustnone.es"
    Registros MX: Intercambiadores de correo (con prioridades)
        /etc/bind/trustnone.es
        [...]
        MX      10 mail1.trustnone.es.
                MX      20 mail2.trustnone.es. ;
        [...]
        mail1            A       192.168.196.4
        mail2            A       192.168.196.48
        [...]
    Registro spf: Intercambiadores MX certificados.
        [...]
        trustnone.com. IN TXT "v=spf1 a mx ~all"
        [...]
    Resolución inversa (DEBE ESTAR DELEGADA POR EL ISP)
        [...]
       
        [...]   
   
APENDICE XII: SenderID Hotmail   
    Sender ID es un listado de redes/hosts autorizados que mantiene microsoft.
    Para evitar problemas, además de establecer el registro SPF del dominio, se debe dar de alta en:
        https://postmaster.live.com/snds/addnetwork.aspx
    Web para solicitar información de porque nos están filtrando
        https://support.msn.com/eform.aspx?productKey=edfsmsbl&ct=eformts


APENDICE XIII: MAILMAN (Listas de correo)
    apt-get install mailman lynx
        -> [*] Español
   
    export LC_ALL=C            <- definirlas en un profile al inicio
    export LANG=C
   
    check_perms -v -f        (x2)

    cd /var/lib/mailman
    chown list:list *

    editar "/etc/mailman/mm_cfg.py"
        [...]
        DEFAULT_EMAIL_HOST = 'mail.trustnone.es'
        DEFAULT_URL_HOST = 'mail.trustnone.es'
        [...]
        DEFAULT_SERVER_LANGUAGE = 'es'
        [...]

    editar "/etc/postfix/master.cf"   
        [...]
        mailman   unix  -       n       n       -       -       pipe
          flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
            ${nexthop} ${user}
        [...]ASEGURARSE DE QUE ESTA LINEA ESTÁ TAL Y COMO APARECE AQUÍ. SOBRETODO LA PRIMERA 'n'
   
    Configurar Apache2
        /etc/apache2/mods-available/mailman.conf
           
                AllowOverride None
                   Options ExecCGI
                   Order allow,deny
                   Allow from all
           

           
            Alias /pipermail/ /var/lib/mailman/archives/public/
               
                   Options Indexes MultiViews FollowSymLinks
                   AllowOverride None
                   Order allow,deny
                   Allow from all
               


            Alias /archives/ /var/lib/mailman/archives/public/
               
                   Options Indexes MultiViews FollowSymLinks
                   AllowOverride None
                   Order allow,deny
                   Allow from all
               

        cd /etc/apache2/mods-enabled
        ln -s /etc/apache2/mods-available/mailman.conf /etc/apache2/mods-enabled
        /etc/init.d/apache2 restart
    + postfix
        /etc/postfix/transport
            [...]
            lists.trustnone.es      mailman:
            [...]
        cd /etc/postfix
        postmap transport
    Reiniciar todos los servicios afectados
        /etc/init.d/apache2 restart
        /etc/init.d/postfix restart
        /etc/init.d/mailman restart

    Crear la lista principal:
        newlist  mailman
            -> Usuario administrador de la lista:   "admin@trustnone.es"
            -> Password para el admin: "admin"
        Introducir todos los alias en la MySQL, tabla "alias".
            mailman@trustnone.es            mailman@lists.trustnone.es
            mailman-admin@trustnone.es        mailman-admin@lists.trustnone.es
            mailman-bounces@trustnone.es        mailman-bounces@lists.trustnone.es
            mailman-confirm@trustnone.es        mailman-confirm@lists.trustnone.es
            mailman-join@trustnone.es        mailman-join@lists.trustnone.es
            mailman-leave@trustnone.es        mailman-leave@lists.trustnone.es
            mailman-owner@trustnone.es        mailman-owner@lists.trustnone.es
            mailman-request@trustnone.es        mailman-request@lists.trustnone.es
            mailman-subscribe@trustnone.es        mailman-subscribe@lists.trustnone.es
            mailman-unsubscribe@trustnone.es    mailman-unsubscribe@lists.trustnone.es

    Crear una lista operativa pública:
        newlist pruebas
            -> Usuario administrador de la lista:   "admin@trustnone.es"
            -> Password para el admin: "admin"
        Introducir todos los alias en la MySQL, tabla "alias".
            pruebas@trustnone.es            pruebas@lists.trustnone.es
            pruebas-admin@trustnone.es        pruebas-admin@lists.trustnone.es
            pruebas-bounces@trustnone.es        pruebas-bounces@lists.trustnone.es
            pruebas-confirm@trustnone.es        pruebas-confirm@lists.trustnone.es
            pruebas-join@trustnone.es        pruebas-join@lists.trustnone.es
            pruebas-leave@trustnone.es        pruebas-leave@lists.trustnone.es
            pruebas-owner@trustnone.es        pruebas-owner@lists.trustnone.es
            pruebas-request@trustnone.es        pruebas-request@lists.trustnone.es
            pruebas-subscribe@trustnone.es        pruebas-subscribe@lists.trustnone.es
            pruebas-unsubscribe@trustnone.es    pruebas-unsubscribe@lists.trustnone.es

    Web del administrador de la lista:
          http://mail.trustnone.es/cgi-bin/mailman/admin/pruebas
    Web de la propia lista:
        http://mail.trustnone.es/cgi-bin/mailman/listinfo/pruebas
    Archivos:
        http://mail.trustnone.es/pipermail/pruebas/
   
    VER: http://freemars.org/howto/mailman.html#ins



TODO:
    Ojo, comprobar que se puede poner quota 0 (ilimitada) o 100MB
    Borrado de correo antiguos
    Borrado de la carpeta SPAM y Papelera
    Agenda compartida LDAP
    DomainKeys <-
    listadmin <- mailman
    open relay check -> http://www.cyberciti.biz/tips/test-mail-server-for-an-open-relay.html