[postfix-es] Cambiar la configuracion de postfix

Simon J Mudd sjmudd en pobox.com
Lun Ene 20 13:04:16 CET 2003


r.lizana en telefonica.net ("Roberto Lizana") writes:

> A ver si me explico...
>   Mi server esta configurado a modo de correo interno entre los usuarios de
> una red cuyo dominio es interno.int (no registrado en internet) y algunos
> usuarios tienen una cuenta externa (ej. pepe en telefonica.net,
> jose en hotmail.com, etc..), la funcionalidad interna no requiere ningun
> cambio, pero lo que nos proponemos hacer es que cuando un usuario envie un
> correo externo a traves del servidor interno este modifique el campo From
> para que modifique la dirección por la que tiene en internet y sea valida
> para que usuario que recibe el mensaje pueda contestar.
> 
> En mis preguntas anteriores me orientaron a crear un content filter, en un
> principio desconocia lo que era, pero despues de haber preguntado varias
> veces al gran dios google encontre un enlace a
> http://bulmalug.net/body.phtml?nIdNoticia=878 donde explican como hacer un
> filtrado de mensajes.
> 
> Bien, llegado a este momento ya se como aceptar o rechazar un mensaje
> dependiendo del contenido pero lo que no consigo hacer es sustituir o añadir
> texto al header del mensaje, dependiendo de si existe o no una cadena.

Personalmente haría lo siguiente:

canonical_maps = hash:$config_directory/canonical

con

pepe en interno.net                pepe en telefonica.net
juan en interno.net                juan en hotmail.com
...

virtual_maps = hash:$config_directory/virtual

con

pepe en telefonica.net             pepe
juan en hotmail.com                juan
...

Esto hará que todo correo enviado a los usuarios @interno.net será
modificado para mostrar su verdadero dirección (si hay una) pero aún
así se guardará estos mensajes como "locales" cueando el destino final
es una dirección "local".

> Despues tambien intentamos introducir al final de todos los mensaje que se
> dirigan al exterior un texto de información legal (LOPD.

Directamente en Postfix esto no se puede hacer.  Y es otro uso de un
content_filter.  Lo malo es que para hacer lo que propones _bien_
requiere que tienes en cuenta cuando los mensajes son en formato MIME
para no "destrozar su contenido": algo bastante complicado.

> Llegado a este punto me encuentro en que mis conocimientos de programación
> en Linux no da para mas, me he estado empapando de perl y parece una buena
> solucion utilizar este sistema, pero tengo varias dudas al respecto entre
> ellas:
>  * como se recibe en perl el mensaje.
>  * como he de debolver le mensaje para que el servidor lo envie despues de
> realizar las modificaciones.

No es un tema de programación en Linux. Darte cuenta que es UNIX.  El
problema es que tienes que hacer un programa capaz de "parse" un
mensaje que puede tener contenido en formato MIME y no debes
equivocarte _nunca_.

Si recibes el mensaje en perl, debes recibirlo via un pipe. Ver 'man 8
pipe' para más información. Es un "custom delivery agent".  Para
aceptar o rechazar el mensaje usas los valores en
/usr/include/sysexits.h y ten en cuenta que las direcciones de destino
NO están en las cabeceras del mensaje: postfix te las pasará todas en
la línea de comandos cuando llama a tu programa.

Para injectar de nuevo el mensaje podrías usar /usr/sbin/sendmail,
pero no olvides de incluir una cabecera tuya, nueva, que muestra que
el menaje ha sido procesada por tu "filtro".

Puedes hacer lo mismo vía SMTP pero esto solo te complica más las cosas.

> En el caso de que un usuario envie un mensaje tanto con usuarios internos
> como a usuarios externos en el header, como puedo duplicar el mensaje para
> que se envie uno al que no se le realize ninguna modificacion que es para
> los usuarios internos y otro que se les haga todas las modificaciones,
> elimine los usuarios internos del To (que supuestamente les llegará el
> mensaje sin ninguna modificación) y lo envie.

Con esto te complicas la vida (más).  En principio tendrías que (según
la lista de recipientes) separar el menajes en dos copias modificando
una de ellas de una manera determinada.

> Creo que ahora si me he explicado un poco mas.
> 
> Tambien tengo conocimientos de C, pero los conocimientos que tengo estan
> basados en la programacion de MS-DOS, pero no tendria ningún problema en
> mamarme información para realizar el script en C.

El problema no es realmente el lenguaje de programación sino la tarea
que te estás planteando.  No es nada trivial.  O mejor dicho no es
nada trivial de hacer _bien_ y rápido.  Desde luego quizá empezaría
con Perl y cuando el algoritmo tienes bien, ya podrías pleantear
hacerlo rápido en C.

Suerte

Simon
-- 
Simon J Mudd, Postfix RPM Packager, Amsterdam, The Netherlands.
email: sjmudd en pobox.com, Tel: +31-627-592 627

-
Para ENVIAR mensajes a esta lista tienes que estar SUSCRITA a ella.
.
Envía la linea "unsubscribe postfix-es" en el cuerpo de un mensaje
a majordomo en WL0.org para quitarte de la lista.



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