Postfix + procmail + fetchmail

TÍTULO:				Postfix + procmail + fetchmail
VERSIÓN LFS:	3.1 + lfsbootscript-1.0
AUTOR:			Michenaud Laurent <lmichenaud@free.fr>
TRADUCTOR:	Proyecto LFS-ES

SINOPSIS:
	Cómo instalar y configurar postfix - procmail - fetchmail

RECETA:
Esta receta explica cómo instalar y configurar un servidor de correo en
tu sistema lfs mediante postfix, procmail y fetchmail.

Requerimientos:
- un servidor dns => mira la receta de bind o la de djbdns.
- Base de datos Berkerley (Berkerley DB)

Opcional:
- tener funcionando un fcron => mira la receta de fcrontab


I - PROCMAIL
============

Descárgalo de aquí: http://www.procmail.org/procmail-3.22.tar.gz

$ tar zxvf procmail-3.21.tar.gz
$ cd procmail-3.21
$ make BASENAME=/usr install



II - POSTFIX
============

1) Instalación
---------------

Descárgalo de aquí: ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-1.1.0.tar.gz

        a) Compilación

si el fichero db.h no se encuentra en /usr/include o en /usr/include/db
fallara la ejecución del make. Para arreglarlo busca el fichero db.h
y cambia los directorios de búsqueda editando makedefs. O utiliza el
siguiente comando:

sed 's|/usr/include/db.h|/path/to/db.h|' \
makedefs > makedefs~ &&
mv makedefs~ makedefs

Una vez echo esto ejecuta:

$ make

        b) Crear el usuario y el grupo postfix

Añade al /etc/passwd:
postfix:x:101:101::/dev/null:/bin/false

Y añade al /etc/group:
postfix:x:101:
postdrop:x:102:


        d) Modificar /var/mail

/var/mail pertenece al administrador (root) en un sistema lfs estándar,
así que postfix no puede crear ficheros en él. Cámbialo con esto:
        
$ chown postfix.postfix /var/mail


	e) Finalmente instala

# Si es la primera instalación
$ make install
# o si es una actualización
$ make upgrade 

Si eliges make install te hará algunas preguntas sobre que directorios
quieres utilizar.

Recomendado:
install_root : /
temp_dir : /tmp
config_directory : /etc/postfix
daemon_directory : /usr/libexec/postfix
command_directory: /usr/sbin
queue_directory: /var/spool/postfix
sendmail_path: /usr/sbin/sendmail
newaliases_path: /usr/bin/newaliases
mailq_path: /usr/bin/mailq
mail_owner: postfix
setgid_group: postdrop
manpage_directory: /usr/share/man
readme_directory: [no]

Ahora ejecuta:
/etc/postfix/post-install create-missing

Si no encuentras postconf es porque el guión redefine la variable de
entorno $PATH. Modifícalo para que funcione.


$ /etc/postfix/post-install

Por último, puedes copiar la documentación html:
        
$ cp -rf html /usr/doc/postfix


Con esta nueva versión de postfix, he tenido que editar 
/etc/postfix/master.cf para hacer que funcione postfix. Yo he cambiado
lo siguiente:
Activa para pickup la opción unpriv (sin privilegios)
Activa para flush y cleanup la opción private (privado)
Tengo la sensación de que no es una buena solución, pero funciona. 
Necesito ayuda en esto.

2) El fichero de configuración principal : /etc/postfix/main.cf
-----------------------------------------------------

# Principio del fichero

# Directorios de información 
queue_directory = /var/spool/postfix
mail_spool_directory = /var/mail
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix

# Dueño del proceso
mail_owner = postfix

default_privs = nobody

# Nombre de la máquina
myhostname = zarba.zerezo.org

# Dominio
mydomain = zerezo.org

# Dirección que se utiliza para enviar los mensajes
myorigin = $mydomain

# Lista de dominios que la máquina considera suyos como destino de
# mensajes
mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain

#inet_interfaces = all
inet_interfaces = $myhostname, localhost

# En que máquinas debe confiar postfix
#   los valores posibles son class subnet host
mynetworks_style = subnet

# En vez de mynetworks_style, puedes usar:
# mynetworks = 192.168.0.0, 127.0.0.1

# Que ISP utilizar para mandar los mensajes que no sean locales
relayhost = [smtp.laposte.net]

# Que protocolo utilizar para los mensajes locales
default_transport = smtp

# Permite a postfix saber que direcciones son locales y cuales externas
transport_maps = hash:/etc/postfix/transport

# Fichero de alias para transformar las direcciones locales en
# direcciones externas validas
sender_canonical_maps = hash:/etc/postfix/sender_canonical

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

# Alias
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

# Rechazar a usuarios desconocidos
local_recipient_maps = $alias_maps unix:passwd.byname

# Que programa utilizar para el envío de los mensajes
mailbox_command = /usr/bin/procmail

# Procesos concurrentes
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 5

# Depuración
debug_peer_level = 1

debugger_command =
         PATH=/usr/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5

# Espacio mínimo que debe haber libre en el disco para que se acepten
# mensajes
queue_minfree = 5000000

# Tamaño máximo de los mensajes
message_size_limit = 10000000

# Enviar una copia de los mensajes de error al administrador del
# servidor de correo (postmaster)
notify_classes = resource,software,bounce,delay,policy

# Pausa en segundos que se hará cuando el ratio de llegada de mensajes
# supere al de envío
in_flow_delay = 1

sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
manpage_directory = /usr/share/man
sample_directory = /etc/postfix/sample
readme_directory = no


# Fin del fichero


3) configuracion de los alias : /etc/postfix/aliases 
----------------------------------------------------

Los alias te permiten redireccionar los mensajes destinados a un 
usuario a otro u otros.
Edita /etc/postfix/aliases

Ejemplo:
root:   zarba:
webmaster: zarba:
familly: zarba, dad, mum, karine

Tras esto, debes actualizar el fichero de la base de datos ejecutando:

$ newaliases


4) /etc/postfix/recipient_canonical
-----------------------------------

Este fichero te permite transformar direcciones externas en direcciones
internas.

edita /etc/postfix/recipient_canonical

# Principio del fichero
laurent.michenaud@laposte.net	zarba
karine.michenaud@laposte.net	karine
laurent.michenaud@wanadoo.fr	zarba
# Fin del fichero

Una vez editado actualiza el fichero de la base de datos:
$ postmap /etc/postfix/recipient_canonical


5) /etc/postfix/sender_canonical
--------------------------------

Este fichero te permite transformar tus direcciones locales en 
direcciones externas.
Por ejemplo, mi dominio zarba.zerezo.org no esta registrado en 
internet. Así que cuando envío mensajes al exterior debo cambiar mi 
dirección por una dirección valida.

edita /etc/postfix/sender_canonical

# Principio del fichero
root  laurent.michenaud@yourfai.com
karine karine.michenaud@yourfai.com
# Fin del fichero

Y después actualiza el fichero de la base de datos:
$ postmap /etc/postfix/sender_canonical



6) /etc/postfix/transport
-------------------------

Postfix necesita saber que direcciones son locales y cuales externas.

Ejemplo:
zarba.zerezo.org        local:
localhost         local:

Actualiza el fichero de la base de datos:
postmap /etc/postfix/transport



7) Administration de postfix 
----------------------------

        postfix start         : iniciar el servidor de correo
        postfix stop         : parar el servidor de correo
        postfix reload         : recargar la configuración del servidor de correo
        postfix check         : comprobar la configuración y los permisos
        postfix flush         : enviar los mensajes que no se han enviado
        mailq                 : mirar que mensajes no se han enviado todavía
                        ( debes ser administrador (root) )
        


8) El guión de inicio /etc/rc.d/init.d/postfix
----------------------------------------------

# Cuidado, postfix usa el nuevo sistama bootscripts-1.0

#!/bin/sh

source /etc/sysconfig/rc
source $rc_functions

case "$1" in
        start)
                echo -n "Starting the mail server..."
                /usr/sbin/postfix start
                evaluate_retval
                ;;

        stop)
                echo -n "Stopping the mail server..."
                /usr/sbin/postfix stop
                evaluate_retval
                ;;

        reload)
                echo -n "Reloading the mail server..."
                /usr/sbin/postfix reload
                evaluate_retval
                ;;

        restart)
                $0 stop
                /usr/bin/sleep 1
                $0 start
                ;;

        *)
                echo "Usage: $0 {start|stop|reload|restart}"
                exit 1
        ;;

esac
# Fin del fichero


$ cd /etc/rc.d/init.d/rc0.d
$ ln -s ../init.d/postfix K05postfix
$ cd ../rc6.d
$ ln -s ../init.d/postfix K05postfix
$ cd ../rc3.d
$ ln -s ../init.d/postfix S45postfix
$ cd ../rc5.d
$ ln -s ../init.d/postfix S45postfix



III - FETCHMAIL
===============

Descárgalo de aquí: http://www.tuxedo.org/~esr/fetchmail/fetchmail-5.9.6.tar.gz

        a) instalación

# Puedes añadir la opción --with-ssl al guión ./configure si lo deseas( necesitas OpenSSL ).

$ ./configure --prefix=/usr --enable-fallback=procmail --sysconfdir=/etc
$ make
$ make install


        b) configuración
  
Edita el fichero ~/.fetchmailrc y añade tus cuentas de correo.

# Principio del fichero
set logfile /var/log/fetchmail.log
set no bouncemail
set postmaster root

poll pop.free.fr :
        user "isplogin" pass "isppassword" is zarba here ;
# Fin del fichero


        c) crontab
        
He hecho un guión que se ejecuta cada 10 minutos y recoje los mensajes 
de todas mis cuentas.

Mi guión /root/bin/checkmail :

#!/bin/bash
if [ -e /var/run/ppp0.pid ]
then
        /opt/network/bin/fetchmail
fi

El comando en el fcrontab :
$ fcrontab -u root -e

@ 10 touch /root/bin/checkmail -F


        d) Alternativa

Usaba esta configuración de fetchmail cuando no tenía conexión 
permanente. Desde que tengo una conexión adsl ya no he utilizado 
fcrontab para bajar el correo. He ejecutado fetchmail como demonio.
Para conseguirlo se añade al fichero .fetchmailrc la línea:

set daemon 600

600 es el número de segundos que transcurren entre cada comprobación 
de las cuentas de correo.


IV - QPOPPER
============

	qpopper es un servidor pop. Si tienes una pequeña red en casa 
y quieres tener la posibilidad de comprobar si fetchmail te ha 
descargado mensajes desde otra máquina debes instalarlo.

descárgalo de aquí:
ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.3.tar.gz

Instalación

./configure --prefix=/usr --sysconfdir=/etc

opcionalmente, puedes añadir --with-openssl=/path/to/openssl

make &&

make install &&

Añade el servidor qpopper a xinetd :

service pop3
{
	socket_type	= stream
	protocol	= tcp
	wait		= no
	user		= root
	server		= /usr/sbin/popper
	server_args	= qpopper -s
	port		= 110
	only_from	= 192.168.0.0
	bind		= 192.168.0.51
	disable		= no
}

reinicia xinetd.

Yo tengo restringido qpopper para que sólo este disponible en mi red y 
no para el resto de Internet.


IV - Final
==========

	Esta receta necesita ser completada.
        Buena suerte.

POR HACER:
integración con Amavis ( rasterador (scanner) de virus )
integración LDAP