jueves, 13 de marzo de 2014

Filtrando adjuntos en Postfix

Hoy en día usar una lista de distribución de correos para divulgar información es algo obsoleto, pero si parte del público de esa lista no tiene acceso a Internet es una buena alternativa. El problema viene cuando los administradores de esas listas comienzan a enviar mensajes con imágenes, documentos Word y PDFs incluso a aquellas personas de una intranet con acceso a la página donde están publicadas esas mismas informaciones. Peor si esas mismas personas acceden por módem analógico a su correo (sí, todavía sucede). Uno puede intentar decirles que envíen los mensajes sólo en texto plano o que reduzcan el tamaño, pero ellos también pueden no hacerte caso y seguir haciendo lo mismo.

Se me ocurrió que podía configurar el servidor Postfix para que le quitara todos los adjuntos que no fueran texto plano a los mensajes que vinieran de esas listas con destino a mis usuarios. Parece trivial, sin embargo tiene truco.

Lo primero es detectar que el correo viene de una lista y lo más conveniente es revisar las cabeceras del mensaje. Usamos para ello en el archivo /etc/postfix/main.cf:

header_checks = regexp:/etc/postfix/header_checks

y en /etc/postfix/header_checks

/List-Id: <test.listas.example.com>/ FILTER delattach:

Con esto lograremos que cada vez que llegue un mensaje y tenga en su encabezado

List-Id:  <test.listas.example.com>
sea procesado por el transporte delattach. Éste encabezado podemos encontrarlo mirando el código fuente de cualquier mensaje enviado desde la lista.

Para definir el transporte delattach agregamos en el archivo /etc/postfix/master.cf la siguiente línea:

delattach unix    -       n       n       -       20      pipe
   flags=Rq user=nobody argv=/usr/local/bin/delattach.py ${sender} ${recipient}

El script delattach.py se puede descargar desde aquí y es una modificación del que se describe en éste post. Su función es revisar cada una de las partes del mensaje, si alguna no es del tipo text/plain la descarta y luego le inyecta de el mensaje modificado a Postfix a través del puerto 10025. Postfix debe ser configurado para escuchar en ese puerto en localhost en /etc/postfix/master.cf agregando:

127.0.0.1:10025 inet n  -   -   -   -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks_style=host
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings

Esta ultima configuración es la que generalmente se escribe cuando se va a utilizar algun servicio anti-spam como Amavis.

domingo, 7 de agosto de 2011

Prefacio

Lo que quizá sea más difícil de asimilar para quienes entran en el mundo de la administración de un sistema GNU/Linux es que la mayoría de las configuraciones se hacen mediante archivos de texto plano. Generalmente el usuario novato va a buscar las interfaces para la configuración de un determinado servicio y se encuentra con que no están instaladas por defecto. El diálogo típico es como sigue:
  • ¿Cómo se puede hacer X?
  • Ah, tomas el editor de textos de tu preferencia y editas el archivo Y.
  • ¿Pero no existe una interfaz gráfica para hacer eso?
  • Estás de suerte, existe Z, pero no te brinda toda la flexibilidad de...
  • ¡Ah, gracias, gracias, es todo lo que necesito saber!
Para esas personas siempre está SuSE Enterprise que cuenta con un conjunto interfaces de administración maravillosas, en el paquete YaST. OpenSuSE también la tiene, pero no está tan trabajada como la Enterprise que es de pago. En fin que como iba diciendo antes de que mi interlocutor me interrumpiera, los ficheros de configuración ofrecen una flexibilidad increíble. He tenido experiencias con escenarios en que modificando un simple fichero y utilizando ssh, he implementado cambios casi instantáneos en múltiples servidores o recibido reportes actualizados en el momento que lo deseo sin ninguna demora.

Ahora bien, esto no sería posible si no fuera gracias a las excelentes herramientas con que cuentan los UNIX para la edición, análisis y tratamiento de ficheros texto. Este espacio está dedicado a esas herramientas.