[Postfix-es] Resuelto: Problemas con Postfix y Amavis-new

Simon J Mudd sjmudd en pobox.com
Mie Jul 20 00:50:10 CEST 2005


dgrvedado at gmail.com (David González Romero) writes:

> Primero cuando trate de configurar el Amavis-new con Postfix debia
> hacer dos cosas principales.
> 1- Permitir un puerto localhost para que Amavis entregara los mensajes
> a Postfix y luego este entregara a un segundo servidor.
> 2- Permitir que Amavis reciviera de Postfix los mensajes para ser analizados. 
> 
> Aprendi que LocalSocket es mucho mas practico para esto que un
> TCP/Port. En ese sentido, Clamav escucha por un TCP/Port por defecto,
> la verdad con Sockect Local es muhco mas seguro.

Cuiadado: "mucho mas seguro" depende de muchas cosas.
1) que los unix sockets tengan los duenos y permisos correctamente definidos.
2) si amavis escucha (como lo hace por defecto) a la direccion
   127.0.0.1 solo puedes tener problemas con usuarios/procesos en tu
   servidor ya que _nadie_ mas puede llegar a ello.

Como avamis esta definido por defecto para escuchar al localhost:10025
es mas facil no modificar la configuracion predeterminada.  En cuanto
a rendimiento, los sockets no seran tu cuello de botella asi que da un
poco igual si usas unix sockets o ip sockets. La ventaja de tcp
sockets es que puede hacer el proceso de escaneo en otra maquina
independiente.

> Ahora bien que paso en mi master.cf
> 
> Yo tenia esta linea:
> 127.0.0.1:10025 inet n  -       y       -       -       smtpd
> 
> Con esta linea lograba que Postfix escuchara por el 10025 que seria
> por el que Amavis le pasaria la mensajeria analizada con Clamav y
> Spam... Que pasa la "y" apuntaba al chroot, o sea que se ejecute en el
> modo chroot. La solcucion me la indico el mismo Simon Mudd, el
> mantenedor de la lista Postfix-es y es precisamente que no debian
> funcinar de ese modo. Que pasa yo segui los manuales para hacer
> funcionar Amavis-New con Postfix sobre Debian, y yo lo que estoy
> corriendo son servidores CentOS. La verdad que enseguida que hice el
> cambio:
> 127.0.0.1:10025 inet n  -       y       -       -       smtpd
> por
> 127.0.0.1:10025 inet n  -       n       -       -       smtpd
> 
> Ya todo me funciono bien, volver a actvar las opciones de
> conten_filter y las del propio 10025 y listo Amavis la cosa funciono.

Como es de esperar.

> Ahora bien se me presentan dos dudas, porque al final no he podido
> averiguar algunas cosas del modo chroot:
> 1- Esto seria peligroso para mi sistema de correo??

Postfix estaba disenado para ser seguro. Para conseguir este objectivo
cada proceso cumple una funciona determinada y "fia" de su entorno de
manera relativa. Tambien corre como un usuario no-root (postfix) en
cuanto el proceso master le ha creado.

Ahora bien. Si hubiera un fallo que dejara el atacador con un shell en
el sistema es mas probable que seria el usuario postfix por lo que
solo puedes hacer lo que hace postfix.  El usuario y grupo postfix
deben ser usuarios solo utilizados por el mismo sistema Postfix por lo
que el atacador solo tendra acceso a archivos de escritura global
(o+w).  Aun asi podria ver "muchas cosas".  La idea del chroot es que
justo despues de iniciarse, y con varios conexiones/sockets abiertos
el proceso puede hacer un chroot a /var/spool/postfix.  Con esto el
atacador veria el directorio /var/spool/postfix como "/" y solo
tendria acceso a los archivos en la cola de
Postfix. /var/spool/postfix/*.

En este sentido el chroot es mas seguro.  De momento Postfix no ha
tenido un "compromiso"/ataque de este tipo, si ves el codigo sabras
por que.

El unico inconveniente del chroot es que para utilizar las librerias
externas como ldap / TLS / mysql / ... es necesario tener una copia de
ellos en el sitio "normal", o sea /usr/lib/* y en esto requiere que
las librerias necesarias esten en /var/spool/postfix/usr/lib/.

Crear y mantener este chroot depende de las opciones compilados en tu
version de postfix y no es facil de mantener. (Cada vez que
actualizas tu db4 o tus librerias de mysql o zlib del sistema
deberias hacer lo mismo en el chroot.)

Por este motivo, y aunque Wietse recomendo al principio el uso de los
chroot, despues de ver los problemas que podrian dejo de recomendar su
uso excepto en casos de usuarios "avanzados", conscientes de los pasos
que tenian que hacer.

> 2- Afectaria mucho el modo chroot si al final todo los manuales estan
> implementados asi??
> Leyendo en el man de master.cf aparece esto:
> 
> Chroot (default: y)
>               Whether  or  not  the  service runs chrooted to the
>               mail queue directory (pathname is controlled by the
>               queue_directory   configuration   variable  in  the
>               main.cf file).
> 
>               >Chroot  should  not  be  used  with  the  local(8),
>               >pipe(8),    spawn(8),   and   virtual(8)   daemons.
>               >Although the proxymap(8) server can  run  chrooted,
>               >doing so defeats most of the purpose of having that
>               >service in the first place.
>               (Esta parte lo dice todo en modo local no se debe usar)
> 
>               The files in the examples/chroot-setup subdirectory
>               of  the  Postfix source archive describe how to set
>               up a Postfix chroot environment for  your  type  of
>               machine,  and  BASIC_CONFIGURATION_README discusses
>               issues related to running daemons chrooted.
> 
> Trate de buscar dichos ejemplo para entender bien el tema de como
> maneja Postfix esta opcion y la verdad no lo encotre. De igual modo
> algo si se que la documentacion es esencial. Igual la iluminacion de
> otros que conocen sobre el tema.

Mira man chroot(1) o jail(8) (www.freebsd.org).  Hay paginas man de
chroot en varios sitios y jail es una implementacion mas "completa".
En Google seguramente puedes encontrar mas informacion.

Para tu info en mis paquetes RPM (que los hay tambien para CentOS)
incluyo una utilidad postfix-chroot.sh
(http://postfix.wl0.org/ftp/SOURCES/postfix-chroot.sh) que mirando las
opciones instalados en tu postfix crea o desactiva el chroot.  Mis
paquetes originalmente estaban configurados de manera predeterminada
con el chroot habilitado y aunque ahora no vienen con esta opcion
habilitada puedes habilitarla de manera eficaz con el script que acabo
de mencionar.

Seguramente funcionaria en tu sistema (no hace falta que uses mi RPM).
Si no cubre tu caso, mandame informacion fuera de la lista y ajustare
el script para que funcione en un entorno mas amplio.

El BASIC_CONFIGURATION_README si explica el chroot pero da poco
detalle.  Espero que mi breve explicacion ayude un poco mas.

Un saludo,

Simon





Más información sobre la lista de distribución Postfix-es