Lanzar rutinas con Postfix

Lunes, 9 de Febrero de 2009

En este post voy a explicar como añadir un filtro o rutina a Postfix. Esto nos puede servir para desarrollar cualquier aplicación basada en el correo electrónico, como puede ser el control remoto de tu maquina, administración de contenidos de una Web u otro tipo de aplicaciones gestionadas a trabes del correo electrónico.

La configuración de postfix en una maquina GNU/Linux es bastante sencilla, basta con hacer:

$> apt-get install postfix


y configurar Postfix para que acepte correos de nuestros dominios editando el archivo /etc/postfix/main.cf

$> vi /etc/postfix/main.cf



/etc/postfix/main.cf

myhostname = biospam.pandasoftware.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost, midominio.com
relayhost =
mynetworks = 127.0.0.0/8



Una vez comprobado que recibimos nuestro correo correctamente pasamos a configurar Postfix para que ejecute un script cada vez que llegue un correo. Por tanto editaremos el archivo /etc/postfix/master.cf de la siguiente manera:

Al principio del documento añadiremos (en negrita):


/etc/postfix/master.cf
# =============================================================
# service type private unpriv chroot wakeup maxproc command
# (yes) (yes) (yes) (never) (100)
# =============================================================
smtp inet …other stuff here, do not change… smtpd
-o content_filter=filter:dummy


Para decirle que aplique la rutina filter por cada conexión smtp entrante.

Abajo definimos la rutina filter de la siguiente manera:


/etc/postfix/master.cf
# =============================================================
# service type private unpriv chroot wakeup maxproc command
# (yes) (yes) (yes) (never) (100)
# =============================================================
filter unix - n n - 10 pipe
flags=Rq user=filter argv=/path/to/script -f ${sender} — ${recipient}


donde argv será la ruta al script que lanzara nuestra aplicación.

Un ejemplo de script podría ser este:


1 #!/bin/sh
2
3 # Simple shell-based filter. It is meant to be invoked as follows:
4 # /path/to/script -f sender recipients…
5
6 # Localize these. The -G option does nothing before Postfix 2.3.
7 INSPECT_DIR=/var/spool/filter
8 SENDMAIL=”/usr/sbin/sendmail -G -i” # NEVER NEVER NEVER use “-t” here.
9
10 # Exit codes from
11 EX_TEMPFAIL=75
12 EX_UNAVAILABLE=69
13
14 # Clean up when done or when aborting.
15 trap “rm -f in.$$” 0 1 2 3 15
16
17 # Start processing.
18 cd $INSPECT_DIR || {
19 echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
20
21 cat >in.$$ || {
22 echo Cannot save mail to file; exit $EX_TEMPFAIL; }
23
24 # Specify your content filter here.
25 python filter.py
26 echo Message content rejected; exit $EX_UNAVAILABLE; }
27
28 $SENDMAIL “$@”
29
30 exit $?


Donde podríamos llamar a nuestro script en python filter.py que parsearia el mensaje realizando las diferentes funciones. Por ejemplo podríamos recoger el subject del mensaje y lanzarlo como un comando. De tal manera que si mandáramos un mensaje con el subject “halt” podríamos apagar la maquina de forma remota.

Espero que os haya sido de gran ayuda!

admin Tecnologia

Hola Mundo!

Viernes, 19 de Diciembre de 2008

Reempezamos de nuevo..

No se cuantas veces he escrito este post… pero bueno, como se suele decir, “siempre hay que intentarlo”. He vuelto a borrar el Wordpress y a empezar de nuevo el blog y espero que esta vez consiga actualizarlo con más o menos asiduidad y escribir cosas que os puedan interesar.

Un saludo.

Iker.

admin Noticias