Página siguiente Página anterior Índice general

7. El correo y Linux

7.1 Netscape, lo fácil

Cuando instalé Linux también me instalé Netscape para todos los temas relativos a internet como www, correo y news, su uso es bastante sencillo y hasta ahora no me ha dado demasiados problemas, solo de vez en cuando algún molesto 'bus error' y todo se va al carajo ...

Sin embargo, no hago mas que oir hablar sobre programas como sendmail, fetchmail, procmail, pine, etc. , además parece ser que el uso de Netscape no está muy bien visto por la gente linuxera, por ejemplo se dice que Netscape consume demasiados recursos y que lo tienen instalado la gente que es poco currante ...

De todas formas, yo personalmente, lo que busco en Linux es poder aprender cosas, no me gustan los S.O. o programas que son muy fáciles de configurar, quiero meterme en líos y buscarme problemas que es la única forma de aprender, por lo tanto siguiendo con esa filosofía, decididamente voy a intentar instalarme y configurarme todos estos programas de correo y news.

7.2 Información sobre el tema

7.3 Agentes que pueden intervenir

En primer lugar, estos son los agentes que pueden intervenir en todo el tema este del correo :

MUA (Mail User Agent)

agente de usuario, programas para leer y escribir correo (Elm, Mutt, Pine)

MTA (Mail Transport Agent)

agente de transporte (mailer), transfiere los mails a su correcto destino (Sendmail)

MDA (Mail Delivery Agente)

agente de entrega de correo (Sendmail, Procmail)

Para no liarme mucho, de momento usaré como MUA el propio Netscape, es decir lo usaré para escribir el correo, pero cuando lo envíe pinchando el botón "Send now", quiero que me lo deje en la cola de mensajes a enviar de mi MTA, para ello configuro Netscape indicándole que mi servidor es mi propia máquina (localhost o 127.0.0.1), es decir :

        en edit / preferences / Mail&Groups / Mail server 
        pongo como Outgoing mail (SMTP) Server = 127.0.0.1

7.4 SENDMAIL

Ahora voy a configurar el MTA Sendmail, este programa tomará los correos provenientes de mi MUA, establecerá una sesión SMTP con el MTA de mi servidor, y le transferirá el mensaje.

Sigo las instrucciones del Fetchmail+Sendmail-COMO que antes estaba en la página del Proyecto Lucas (la última vez que entré ya no estaba este COMO) :

Ahora efectúo una prueba :

Como dice monkiki en su página El correo: Pine, Fetchmail, Sendmail :

Si queremos borrar un mensaje de la cola, hay que borrar el mensaje de los dos ficheros 
que están en /var/spool/mqueue. Pero cuidado con lo que borras ;-). 

(Efectivamente, en este directorio se guardan los mensajes hasta tanto no se envían. 
El mensaje se divide en dos ficheros :  df+identificativo es el cuerpo del mensaje y 
qf+identificativo es la cabecera, debes borrar los dos.

Si no quieres recibir un warning cada vez que un mensaje lleve más de cuatro horas sin ser enviado podemos comentar la siguiente línea de /etc/sendmail.cf: O Timeout.queuewarn=4h

7.5 FETCHMAIL

Bueno, ahora que tengo el Sendmail configurado y ya puedo enviar mensajes con él, voy a ver que hay para recibir. Me ha parecido ver por ahí que el Sendmail también vale para recibir (?), pero el que veo que usa y recomienda todo el mundo es Fetchmail, así que vamos con él.

Según las paginas man, Fetchmail es un programa que recoge el correo desde un servidor POP o IMAP y se lo pasa a tu sistema local de entrega de correo después de lo cual puedes tratarlo con algún MUA. Según monkiki la razón para usar Fetchmail para recoger el correo en lugar de Sendmail es que :

Como no siempre estamos conectados a Internet, Sendmail no es capaz de recibir al correo 
automáticamente, de modo que usamos este programa que recoge el correo de donde le digamos 
y se lo pasa a Sendmail.

Como antes, sigo las instrucciones del Fetchmail+Sendmail-COMO del Proyecto Lucas

Nuevamente, voy a probar usando como MUA el Netscape esta vez para leer los mensajes recibidos. Parece ser, que Fetchmail recoge el correo y se lo envía al sendmail local, el cual, si está correctamente configurado, lo escribirá en el directorio /var/spoll/mail en el fichero correspondiente al nombre del usuario.

Los programas (MUA) de correo de Linux acceden habitualmente a este lugar para leer el correo. Para usar Netscape hay que hacer :

        en edit / preferences / Mail&Groups / Mail server type 
        pincho  'Movemail aplication' y 'Built in'

Con esto Netscape busca el correo en /var/spool/mail y no en ningún servidor POP. Ahora la prueba :

También he probado a mandarme mensajes entre los usuarios de mi propia máquina y funciona perfectamente, no hay que ejecutar sendmail ni fetchmail ya que el demonio sendmail local se encarga de repartirlos, por supuesto no hace falta estar conectado a internet

7.6 PROCMAIL

Paso ahora a configurar Procmail, que es un programa que recoge el correo recibido y, en base a un fichero de control que contiene una serie de condiciones y acciones, verifica si el mensaje cumple alguna de las condiciones y si es así ejecuta la acción correspondiente.

Este fichero de control es un fichero que debe estar en el Home del usuario y llamarse .procmailrc, la serie de condiciones y acciones que contiene se llaman recetas.

Lo primero que hay que hacer es conseguir que cada vez que se reciba un correo se ejecute Procmail para ello, como está expuesto en el documento Procmail del que hablo arriba, puedes crear un fichero home/.forward, pero yo me he liado un poco con esta opción y no me ha llegado a funcionar bien, además creo que es mucho mejor la segunda posibilidad, que es configurar procmail como Agente de Entrega de Correo (mail delivery agent) de sendmail.

Por lo tanto, volvemos al fichero de configuración /etc/sendmail.cf y hay que buscar Mlocal en la sección Local and Program Mailer specification y sustituir lo que pone por esto :

          Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qmn, S=10/30, 
                  R=20/40, T=DNS/RFC822/X-Unix, 
                  A=procmail -a $h -d $u

Esto me ha funcionado bien. Después configuramos el home/.procmailrc del usuario/s que recibe el correo incluyendo las recetas que se quiera que pueden servir para desviar correos a distintos directorios en función de los parámetros de la cabecera del mensaje, etc.

Mi ./procmailrc no lo tengo todavía muy depurado y es bastante sencillo, pero funciona bien :

          VERBOSE=on 
          MAILDIR=/home/traque/nsmail 
          LOGFILE=/home/traque/procmailog 
          # 
          # Esta receta manda todo lo que trae en el subject la palabra 'linux' 
                al directorio /home/traque/nsmail/Linux 
          # 
          :0 
          * ^Subject:.*(linux) 
          Linux 
          # 
          # Esta receta manda todo lo que trae en el subject la palabra 'internet' 
                a /home/traque/nsmail/Internet 
          # 
          :0 
          * ^Subject:.*internet 
          Internet 
          # 
          # Esta receta manda todo lo que viene para mi e-mail a Personal 
          # 
          :0 
          * ^TOtraque@mx3.redestb.es 
          Personal 

El fichero logfile viene bien para depurar las recetas, verbose=on es para que se graben todos los mensajes en el log, el Maildir es el que utiliza Netscape, ya que es el que estoy usando de momento.

Si ejecutas el programa Mailstat que viene con el paquete Procmail, te saca una estadística de los mensaje recibidos y ha que directorio los ha llevado, desde la última vez que lo ejecutaste.

*********************************************************************************

DOCUMENTOS

PROCMAIL

Cuando se invoca, procmail lee el mensaje de correo de su entrada estándar, después separa la cabecera del cuerpo, y examina el fichero $HOME/.procmailrc. De acuerdo con el contenido de este fichero, el correo es entregado en su lugar correcto. Si no existe el fichero rc o falla en su procesamiento el correo es entregado en el fichero mailbox por defecto.

El fichero .procmailrc contiene una serie de instrucciones llamadas recetas las cuales pueden contener asignaciones de variables, sentencias condicionales e instrucciones. Cuando se procesa un mensaje, primero se examina si hay alguna asignación de variable en el fichero, si la hay lleva a cabo ésta y las acciones asociadas en caso de que se trate de una variable con significado especial.

Cuando se encuentra una receta comprueba si la cabecera del mensaje cumple alguna de las condiciones de la receta, si es así ejecuta la línea de acción y termina. Si la cabecera del mensaje no contiene alguna de las expresiones regulares de las líneas de condición de la receta, ésta falla y procmail pasa a la siguiente receta o asignación. Si se llega al final del recetario sin que se cumpla ninguna receta, el mensaje es añadido al final del fichero $DEFAULT y termina. El fichero recetario también puede ser dado por la línea de órdenes.

Para que procmail procese cada mensaje que recibimos debemos conseguir que cada vez que nos llegue uno de ellos procmail se ejecute y el mensaje le sea alimentado por su entrada estándar. Esto se puede conseguir de dos formas :

El fichero de recetas se compone de tres elementos: comentarios, asignaciones de variables de entorno y recetas.

Defensa contra Email-Bombing y Mail No-deseado

GUÍA DEL HACKING (mayormente) INOFENSIVO
Serie del Principiante #2, Sección 2.
Hackear en Windows95 (y un poco de NT, por dios)!
_____________________________________________________________
Copyright (c) Zach Babayco, 1996

Últimamente, existe más y más gente ahí fuera enviándote email que simplemente no deseas, como "Haz Dinero Rápidamente" basura o lamer-zines que nunca has deseado recibir. O peor todavía, está el email bomb.

Existen dos clases de email bomb, el Mail-masivo y el , email bomb empleando listas de correo:

1) Ataques de Mail-masivo. Esto es cuando el atacante te envía cientos, o puede que incluso miles de piezas de email, normalmente con la ayuda de un script y de mail falso. De los dos tipos, este es del que más fácilmente nos podemos defender, ya que los mensajes provendrán de sólo unas pocas direcciones como mucho.

2) Mail bombs usando Listas de Correo. En este caso, el atacante te suscribirá a todas las listas de correo que él o ella pueda. Esto es mucho peor que un ataque por email masivo porque estarás recibiendo email desde muchas listas de correo distintas, y tendrás que guardar alguna cantidad de ellos para poder averiguar cómo desuscribirte de cada lista.

Aquí es donde Procmail entra en acción. Procmail (pronunciado prok-mail) es un programa de filtrado de email que puede hacer varias cosas muy ingeniosas con tu email, como por ejemplo, si te suscribes a varias listas de correo que producen un gran volumen de mensajes, puede configurarse para clasificar el email en distintas carpetas de manera que todos los mensajes no estén mezclados en tu buzón. Procmail puede también ser configurado para borrar el email recibido de ciertas personas y direcciones.

Configurando Procmail

Primero, necesitas ver si tu sistema tiene instalado Procmail. En el prompt, teclea:

> which procmail

Si tu sistema tiene instalado Procmail, este comando te dirá dónde está localizado el programa. Apunta esto, lo necesitarás más tarde.

*NOTA* Si tu sistema te da una respuesta como "Comando desconocido: which" entonces prueba a sustituir `which´ por `type´, `where´ o `whereis´.

Si todavía no encuentras Procmail, entonces seguramente es que tu sistema no lo tiene instalado. Sin embargo, la suerte no te ha abandonado completamente (mira el FAQ mencionado al comienzo de este archivo y mira si tu sistema tiene alguno de los programas sobre los que se habla allí.)

A continuación, tienes que configurar el archivo sobre el que trabajará Procmail. Durante el resto de este documento, usaré el editor Pico. Tú puedes usar cualquier editor con el que te sientas cómodo.

Asegúrate de que estás en el directorio raíz, y entonces arranca tu editor.

>cd
>pico .procmailrc

Introduce lo siguiente en el archivo .procmailrc:

#Esta línea le dice a Procmail lo que tiene que poner en su archivo de registro. 
#Ponlo en on cuando estés #haciendo el debugging. 

VERBOSE=off 

#Sustituye ?mail? por tu directorio de email. 
MAILDIR=$HOME/mail 

#Aquí es donde el archivo de registro (logfile) y el archivo rc serán guardados 
PMDIR=$HOME/.procmail 

LOGFILE=$PMDIR/log 
#INCLUDERC=$PMDIR/rc.ebomb 
(sí, teclea la línea INCLUDERC CON el #) 

Ahora que has tecleado eso, guardalo y regresa al directorio raíz. 

> cd 
> mkdir .procmail 
Ahora ve al directorio que acabas de crear, y arranca tu editor con un nuevo archivo: rc.ebomb:

IMPORTANTE: Asegúrate que desactivas la opción de ajuste de palabras de tu editor en esta parte. Necesitarás tener la segunda, tercera y cuarta línea del siguiente ejemplo todas en una sola línea. Con Pico, usa el modificador -w. Consulta el manual de uso de tu editor para desactivar la opción de ajuste de palabras. Asegúrate de que cuando lo edites, NO DEJES ESPACIOS en esa línea.

> cd 
> pico -w rc.noebomb 

#noebomb = bloqueador de email bomb 

:0 
*!^((((Resent-)?(From|Sender)|X-Envelope-From):|From)(.*[^.%@a-z0-9])? 
(Post(ma?(st(e?r)?|n)|office)|Mail(er)?|daemon|mmdf|root|uucp|LISTSERV|owner 
|request|bounce|serv(ices)?|er))([^.!:a-z0-9]|$))) 
* ! ^From:.*(postmaster|Mailer|listproc|majordomo|listserv|cmeinel|johnb) 
* ! ^TO(netstuff|computing|pcgames) 
/dev/null 
Veamos qué es lo que hace lo anterior. Las primeras líneas le dicen a Procmail que este es el principio de un archivo "receta". Una receta consiste básicamente en lo que suena, le dice al programa lo que debe buscar en cada mensaje de email, y si encuentra lo que estaba buscando, realiza una acción con su correspondiente mensaje: dirigiendo el mensaje a alguien, colocándolo en una carpeta determinada, o en este caso, borrarlo.

La segunda, tercera y cuarta líneas (las que empiezan con *) se llaman CONDICIONES. El asterisco (*) le dice a Procmail que ese es el comienzo de una condición. El ! le dice que haga lo CONTRARIO de lo que normalmente haría.

Condición 1:

* ! ^((((Resent-)?(From|Sender)|X-Envelope-From):|From)(.*[^.%@a-z0-9])? 
(Post(ma?(st(e?r)?|n)|office)|Mail(er)?|daemon|mmdf|root|uucp|LISTSERV|owner 
|request|bounce|serv(ices)?|er))([^.!:a-z0-9]|$))) 
No te desmoralices con esto, es más simple de lo que parece a primera vista. Esta condición le dice a Procmail que mire el encabezamiento del mensaje, y que vea si proviene de direcciones de administración como root o postmaster, y que también compruebe si proviene de un mailer-daemon (la cosa que te envía el mensaje cuando tú envías uno). Si el mensaje SÍ proviene de una de estas direcciones, la receta pondrá el mensaje en tu buzón y no lo borrará.

Nota para el Usuario Avanzado: Aquellos de vosotros que estéis familiarizados con Procmail os estareis preguntando seguramente por qué digo que es necesario que el usario teclee esa línea de comandos tan larga entera, en vez de usar el comando FROM_MAILER. Bueno, parecía una buena idea al principio, pero hace unos días descubrí que FROM_MAILER comprueba también la Prioridad en el encabezamiento para las palabras "junk", "bulk" y "list". Muchos (si no todos) los servers de listas de correo ponen en el apartado de Prioridad: bulk o Prioridad: list, por tanto si alguien te subscribe a varios cientos de listas FROM_MAILER dejará pasar la mayoría de los mensajes, lo cual NO es lo que deseamos.

Condición 2:

* ! ^From:.*(listproc|majordomo|cmeinel|johnb) 
Esta condición hace una revisión más exhaustiva de la línea From: del encabezamiento. En este ejemplo, busca las palabras listserv, majordomo, cmeinel, y johnb. Si es de cualquiera de esa gente, le permite pasar a tu buzón. Si no, lo echa a patadas. Aquí es donde pondrías los nombres de usuario de la gente que normalmente te envía mensajes, y también los nombres de los servidores de listas de correo , como por ejemplo listproc y majordomo. Cuando edites esta línea, acuérdate de: únicamente poner el nombre de usuario en la condición, no la dirección de email completa de la persona, y acuérdate también de poner una | entre cada nombre.

Condición 3:

* ! ^TO(netnews|crypto-stuff|pcgames) 
Esta condición final es donde pondrías los nombres de usuario de las listas de correo a las que estas suscrito (si es que estás suscrito a alguna). Por ejemplo, yo estoy suscrita a las listas netnews, crypto-stuff y pcgames. Cuando recibes una mensaje desde una lista de correo la mayoría de las veces la lista de direcciones vendrá en la parte To: o Cc: del encabezamiento, en vez de en la parte From:. Esta línea buscará esos nombres de usuario y pasará los mensajes que concuerden a tu buzón. Las instrucciones de edición son las mismas que para la Condición 2.

La línea final, /dev/null, es esencialmente la papelera de tu sistema. Si una pieza de email no concuerda con ninguna de las condiciones (por ejemplo, no proviene de un administrador de sistema, ni de ninguna de tus listas de correo ni de nadie que conozcas) Procmail arrojará ese mensaje a dev/null, para que nunca vuelva a ser visto.

Ok. Ahora deberías tener ya creados dos archivos: .procmailrc y rc.noebomb. Necesitamos uno más antes de poner a funcionar todo apropiadamente. Guarda rc.noebomb y sal de tu editor, y ve a tu directorio raíz. Una vez allí, arranca tu editor otra vez con la opción de ajuste de palabra desactivada.

> cd > pico -w .forward
Ahora vamos a ver un extracto del FAQ sobre Filtrado de Email de Nancy M.:
        Introduce una versión modificada de lo siguiente en tu ~/.forward: 

        ?|IFS=? ? && exec /usr/local/bin/procmail -f- || exit 75 #nancym"
        
         == NOTAS IMPORTANTES == 
        * Asegúrate de que incluyes todas estos símbolos, comillas dobles(") y simple ('). 
        * La barra vertical es un adorno.       
        * Sustituye /usr/local/bin por la ruta de acceso correcta para procmail en tu sistema 
          (ver paso 1). 
        * Sustituye `nancym´ por tu userid. Necesitas poner tu userid en tu .forward para que 
          sea diferente de cualquier otro .forward que exista en tu sistema. 
        * NO USES ~ o variables como $HOME en tu archivo .forward. Si Procmail reside bajo tu 
          directorio raíz escribe la ruta de acceso *completa*. 

        En muchos sistemas necesitarás poner permisos de lectura universales en tu archivo 
        .forward y tu directorio raíz navegable para permitir al cliente de correo transportar 
        los mensajes. Para hacer esto, teclea: 
  
        cd 
        chmod 644 .forward 
        chmod a+x. 
Si el archivo .forward de arriba no funciona, las siguientes alternativas pueden ser de ayuda:
        En un mundo perfecto:           "|exec /usr/local/bin/procmail #nancym"
        En un mundo casi perfecto:      "|exec /usr/local/bin/procmail USER=nancym"
        En otro mundo:                  "|IFS=' '; exec /usr/local/bin/procmail #nancym"
        En un mundo diferente:          "|IFS=' '; exec /usr/local/bin/procmail USER=nancym" 
        En un mundo smrsh:              "|/usr/local/bin/procmail #nancym"
Ahora que tienes creados todos los archivos necesarios, es hora de probar este filtro. Ve a tu lector de mail y crea una nueva carpeta llamada Ebombtest. Este procedimiento difiere según cada programa, por lo que puede que tengas que experimentar un poco. Entonces abre tu archivo rc.noebomb y cambia /dev/null por Ebombtest. (Deberías haber cambiado ya las Condiciones 2 y 3 según tus preferencias; si no, ves y hazlo ahora!) Finalmente, abre .procmailrc y quita el # de la última línea.

Necesitarás dejar esto así un rato para probarlo. Dile a gente que tengas en la Condición 2 que te mande algún mensaje de prueba.

Si los mensajes acceden a tu buzón, entonces esa condición está correcta. Envíate a ti mismo algunos mensajes falsos con un nombre cambiado para comprobar si van a parar a la carpeta Ebombtest. También, mandate algún mensaje a ti mismo desde la dirección root@loquequieras.com para asegurarte de que la condición 1 funciona. Si estás en alguna lista de correo, sus mensajes deberían ir a tu buzón también.

Si todo esto sale bien, entonces felicidades! Ahora tienes una defensa activa contra mail bombs! Por el momento, carga la línea Ebombtest en el archivo .procmailrc. Si alguien decide alguna vez atacarte con un mail bomb, sólo necesitarás quitar el #, y te habrás desecho de la gran cantidad de mensajes que de otra manera irían a parar a tu buzón, dándote un momento para respirar antes de empezar a desuscribirte de todas las listas de correo, o empezar a tracear a los idiotas que hicieron eso, y echarlos de sus PSI´s.

si tienes algún comentario o preguntas sobre esto, mándame un email a zachb@netcom.com. Email bombs IRÁN a tu /dev/null, así que no te preocupes!

Disclaimer: Cuando activas este programa es inevitable que una pequeña cantidad de tu correo "legal" sea puesto en /dev/null debido a que es casi imposible saber los nombres de todas las personas que te mandan mensajes. Además, no asumo ninguna responsabilidad por las irresponsabilidades de la pérdida de email, ni por ningún daño que puedan causar esos mensajes perdidos.


Página siguiente Página anterior Índice general