FAQ sobre Linux para principiantes - es.comp.os.linux: Mail/News

Next Previous Contents

## 10. Mail/News

## 10.1 ¿Qué es el correo electronico?

El correo electrónico es casi probablemente el servicio más útil para muchos de los usuarios de Internet, permitiendo intercambio de información casi instantáneamente. Este servicio consiste, dicho de una manera sencilla, en el envío de un bloque de información de texto (aunque puede llevar incluida información multimedia o en general cualquier otro fichero adjunto) de un remitente a un destino, de igual modo que el correo convencional. La diferencia radica en que en lugar de necesitar lapiz y papel, nuestro correo electronico (email, de electronic mail) es generado normalmente por nuestro programa de correo como un bloque de texto a enviar con el siguiente formato:

      From:     <direccion_email_del_remitente>
      To:       <direccion_destino_del_email>
      Subject:  <tema_del_que_se_habla>
      Otros:    <otros_campos_de_informacion>
      <texto_que_deseamos_enviar.>
      .

Las direcciones de email son direcciones en servidores de correo igual que las direcciones postales lo son para la localización geográfica (por ejemplo, mi email es santiago.romero@iname.com, y un mensaje a dicha direccion llegaría a mi máquina servidora de correo de donde yo lo recogería para su lectura).

Un ejemplo de email seria el siguiente:

      From: agonzalo@server.es
      Date: Wed, 12 May 1999 22:19:24 +0200
      Organization: Universidad de Sevilla
      To: santiago.romero@iname.com
      Subject: Una pregunta sobre configuraciones...

      Hola, te queria hacer una pregunta...
      ¿me puedes ayudar con fetchmail?

Este bloque de texto se envia al servidor de correo de nuestro proveedor (o al nuestro, como ahora veremos) quien se encargara de moverlo por Internet hasta llegar al destinatario de nuestro mensaje. Podemos dividirlo en 2 partes: la cabecera del mensaje (todos los campos From, To, etc.), necesaria para el correcto envio del mismo, y el cuerpo del mensaje (el texto en si) que es lo que deseamos enviar.

Obviamente no tenemos que generar nosotros todo eso en un fichero de texto y despues realizar las operaciones para su envio (o recepción), sino que existen programas (clientes de correo) en los cuales introducimos el mensaje y éstos generan las cabeceras necesarias para los programas, permitiendonos además su envio y recepción. Ejemplos de clientes de correo son Pine, Netscape Communicator, MailX, Kmail, etc.

## 10.2 ¿Cómo puedo leer y contestar correo con mail/mailx?

El correo electrónico en Linux no puede considerarse como un extra al sistema operativo, sino que forma parte del mismo pues es una característica casi inherente a todo Linux. Esto quiere decir que aunque no hayamos instalado ningún cliente de correo como Netscape o Pine, probablemente dispondremos en el sistema de herramientas ya preparadas para ello.

Dentro de casi cualquier sistema Linux disponemos de un programa básico de email en consola (modo texto) llamado Mailx que nos permitirá el envio, lectura y contestación de mensajes de correo electrónico. En resumen, posibilita el envío de texto y datos dentro de una estructura coherente llamada mensaje, con su cabecera (campos: FROM (persona que envía el mensaje), TO (persona destinataria del mismo), SUBJECT (tema del que trata el mensaje) y CC o carbon copy (lista de personas que recibirán una copia del mismo).) y su BODY (cuerpo del mensaje), pudiendo incluir además ficheros añadidos que vienen incluidos dentro del paquete del mensaje (attach).

Para explicar el uso de mailx se va a usar un sencillo ejemplo en un máquina con un sólo usuario: sromero, además del obligatoriamente existente root (puede obternerse la lista de usuarios presentes en el sistema y en qué terminal están trabajando simplemente ejecutando la orden who). Suponga os que somos el usuario sromero y queremos enviarle un mensaje a root para testear las capacidades de envio de email. La manera más sencilla de enviar un mensaje a un usuario de la red es ejecutar mail :

      [sromero@localhost info]$ mail root
      Subject: Prueba de MailX.
      Esto es el cuerpo del mensaje. Es una prueba de mailx.
      Un mensaje se acaba con un punto (.) al principio de línea.
      .
      Cc: (intro)

Al ejecutar mail root se nos ha preguntado el tema (subject), el cuerpo del mensaje (acabado en punto (.)), y a quién se le deseaba enviar copias del mismo (Cc), cosa que hubiera sido bastante útil si nuestro mensaje fuera una invitación a un grupo de amigos o una información para un grupo concreto de personas. Tras escribir esto, el mensaje escrito se graba como un fichero de texto (con el mismo nombre que el destinatario del mensaje, y al que se añadirán más mensajes conforme se le vayan enviando a dicho destinatario) en el directorio /var/spool/mail, a la espera de que el usuario destino los lea y vayan siendo eliminados del mismo.

Si root está conectado o entra más tarde en cualquier terminal del sistema, recibirá un mensaje de aviso indicando que el sistema ha detectado la llegada de correo para el usuario:

      You have mail.

Para realizar la lectura del correo electrónico, simplemente se invoca al programa mail, obteniendo una lista del correo pendiente y esperando el programa a que el usuario lo lea, responda, borre o almacene para más tarde:

      [root@localhost /root]# mail
      Mail version 8.1 6/6/93.  Type ? for help.
      "/var/spool/mail/root": 3 messages 3 new
      >N  1 sromero   Thu Jul 30 17:04  17/55   "Prueba de MailX."
       N  2 sromero   Thu Jul 30 17:15  17/50   "Pregunta sobre adm"
       N  3 sromero   Thu Jul 30 17:16  15/44   "Felices vacaciones!"
      & _

Como puede verse, mail nos muestra los mensajes pendientes (en este caso 3) por responder, con su usuario de origen (sromero), la fecha y el tema, con el cursor virtual (>) situado sobre el primero (es decir, indicando sobre cual actuará una orden de lectura, respuesta o borrado), y con un promtp (el carácter &) a la espera de recepción de órdenes sobre qué hacer con dicho correo.

Estas órdenes son:

      'número' -> Listar el mensaje .
      't' -> lista el mensaje actual (el apuntado por >)
      'n' -> Pasar al siguiente mensaje y visualizarlo.
      'd' -> Borrar mensaje.
      'e' -> Editar mensaje
      'r' -> Responder mensaje.
      'q' -> Salir de mailx.

A la mayoría de estas opciones se les puede pasar un nº de mensaje (desde 1 hasta n) para indicar sobre qué mensaje realizar la acción (ejemplo 'd 3' o 'delete 3'). Otras opciones, obtenidas mediante la ayuda de mailx, son:

      & ?
      Mail Commands
      t    listar mensaje
      n    ir al mensaje especificado y listarlo.
      e    editar mensaje
      f    ver cabeceras del mensaje
      d    borrar mensaje
      s    añadir mensajes a un fichero
      u    recuperar mensajes borrados
      R    Responder a los remitentes del mensaje
      r    Responder al remitente y a todos los destinatarios.
      pre  hacer ir los mensajes de nuevo a /usr/spool/mail
      m    enviar mensaje a los usuarios especificados.
      q    salir grabando mensajes en mbox
      h    mostrar cabeceras activas.
      !    permite ejecutar una shell o comandos de shell

En el caso de no disponer de correo en ese momento, mail nos avisa con un:

      [root@localhost root]# mail
     No mail for root

Otro fichero asociado es el fichero .signature de nuestro directorio home, utilizado como fichero de firmas y cuyo contenido es incluido al final de los emails escritos y respondidos por nosotros, pudiendo editarse y rellenarse con cualquier editor estándar de Linux para incluir nuestra firma personal. Este fichero es utilizado por la mayoría de gestores de correo de Linux como fichero de firmas por defecto, tal y como hace Mail, Pine, Netscape, Kmail, etc.

## 10.3 Envio de correo: Sendmail basico

Una de las necesidades básicas en nuestros sistemas Linux es el envio de correo electrónico o email a direcciones fuera de nuestra red local (a Internet, por ejemplo) o, en general, de nuestra propia máquina. Cuando escribimos un email en mailx, en Netscape, o en cualquier otro cliente de news, hace falta alguien que lleve dicho mensaje hasta el servidor de correo saliente (SMTP) de nuestro proveedor de Internet para que éste deje cada mensaje en el buzón destino correcto. Esta es una de las tareas que sendmail puede realizar en nuestras máquinas.

En nuestros envios de mensajes, pues, necesitamos un agente que extraiga dicho correo de `/var/spool` y lo envie a nuestro Proveedor de Servicios de Internet (por ejemplo, a smtp.arrakis.es). Sendmail es un programa tan completo que su estudio dispone de libros de cientos de paginas (incluso hay alguno que llega al millar de ellas) para abordar su gestión completa. Ya que muchos disponemos de Linux en nuestras propias máquinas (y somos también root de ellas), vamos a exponer el método más sencillo de configuración para uso con un sólo Proveedor de Servicios de Internet (ISP).

Lo primero es saber si lo tenemos instalado y con el daemon funcionando. Normalmente dicho paquete estará instalado y funcionado ya que es un daemon básico en todas las distribuciones Linux. Para arrancar el daemon (si no lo tenemos ya funcionando) y de paso chequear si está instalado, basta con ir a `/etc/rc.d/init.d` en el caso de Redhat (en otras distribuciones puede variar el directorio) y ejecutar:

      /etc/rc.d/init.d/sendmail stop
      /etc/rc.d/init.d/sendmail start

Obtendremos lo siguiente.

      [root@compiler /root]# /etc/rc.d/init.d/sendmail stop
      Shutting down sendmail: sendmail
      [root@compiler /root]# /etc/rc.d/init.d/sendmail start
      Starting sendmail: sendmail

Tambien podemos observar simplemente si durante el arranque y lanzamiento de los daemons del sistema sendmail es iniciado con lo que no haría falta su lanzamiento manual.

Tras asegurarnos de disponer de sendmail instalado y si somos root de nuestra máquina procederemos a la configuración más básica y sencilla del mismo (también es posible contactar con el administrador o root de la misma si no lo somos), que consiste en la edición del fichero de configuración `/etc/sendmail.cf`, (por ejemplo con el editor joe, emacs, jed, etc) con el fin de modificar algunas líneas del mismo y configurar sendmail para nuestro uso:

- Buscamos una línea similar a la siguiente:

        # "Smart" relay host (may be null)
        DS

  Esta línea hay que cambiarla de forma que referencie a nuestro servidor de correo saliente o smtp (para que sendmail envie a dicho servidor nuestro correo). A título de ejemplo, mi servidor de correo saliente es smtp.arrakis.es, por lo que la línea debe quedar como:

        # "Smart" relay host (may be null)
        DSsmtp.arrakis.es

  La dirección del servidor de correo saliente puede ser otra, pero suelen tener todas el mismo formato (stmp.ctv.es, smtp.arrakis.es, etc). De todas formas nuestro proveedor debe de facilitarnos el nombre de la máquina servidora de correo saliente al inscribirnos en dicho ISP.

- Ahora tenemos que enmascarar nuestra dirección de correo (es decir, modificar el fichero de configuración para que las direcciones de retorno de emails no sean las que tenemos en nuestra máquina (como sromero@localhost), sino las direcciones de retorno reales. Para ello buscamos la siguiente línea:

        # Who I masquerade as (null for no masquerading)
        DM

  A esta línea se le añade el dominio de nuestra dirección de correo. Si mi dirección email es sromero@arrakis.es, el dominio es arrakis.es:

        # Who I masquerade as (null for no masquerading)
        DMarrakis.es

Con estos cambios estamos forzando a que cuando se escribe un email, la dirección de retorno del mismo tenga el dominio correcto, cosa que se podría modificar de igual manera (sin el retoque de sendmail.cf) si nuestro programa para leer/contestar el correo permite hacerlo (en PINE, por ejemplo, modificamos la cabecera FROM en las opciones, en CUSTOMIZED-HEADERS). Para un usuario medio (acceso a Internet, recogida y envio de correo en un proveedor, etc.), el método comentado del sendmail.cf es más que suficiente. Además existen otros métodos e incluso otros MTAs (agendes de correo) como qmail o smail, que pueden realizar el mismo papel de una manera más sencilla.

Una vez realizada la configuración, supongamos que desde un usuario cualquiera enviamos un email a jose@proveedor.es, mediante el comando mail jose@proveedor.es. Dicho email se grabará en `/var/spool/mqueue` a la espera de ser enviado a nuestro ISP quien a su vez lo enviará al usuario juan. Es decir, los emails que enviemos a Internet se guardarán en el directorio del correo hasta que se realice su envio mediante sendmail en la próxima conexión a Internet, gracias al comando "sendmail -q". Los mensajes en cola de envío se encuentran en `/var/spool/mqueue` (por si queremos releerlos o borrar alguno), y podemos consultarlos mediante el comando mailq.

Sendmail es un daemon o demonio, es decir, está ejecutandose en nuestra consola continuamente tratando de enviar el correo cada X tiempo. Para evitar esto, y obligarle a que el envío se realice manualmente por nuestra parte, debemos modificar el arranque de sendmail en el fichero `/etc/rc.d/init.d/sendmail` cambiándolo para que arranque con las siguientes opciones:

      daemon /usr/sbin/sendmail -bd -oDeliveryMode=d

Otro problema común es recibir una advertencia (warning) cada vez que un mensaje lleve más de X hroas sin ser enviado (4 por defecto). Para evitar eso tan sólo hay que editar /etc/sendmail.cf y comentar (colocando un símbolo # al principio de la línea, y, por tanto, deshabilitándola) la siguiente opción:

      Timeout.queuewarn=4h

Otra opción a comentar (añadiendo # al principio de la línea correspondiente en sendmail.cf) es la siguiente:

      Timeout.queuereturn=5d

Esta opción especifica que si el correo no ha podido ser enviado durante 5 días debe ser devuelto a sendmail. Esto puede ser util si estamos enviando los emails a un proveedor y se pierden, con lo que gracias a la devolución podrían ser reenviados, pero en nuestro caso no va a ser necesario pues los mensajes residiran en nuestro disco duro hasta el momento en que los enviemos.

En resumen: sendmail es un agente de transporte de correo (MTA) que recoge nuestros emails y los deja temporalmente como simples ficheros de texto que son en /var/spool/mqueue a la espera de realizar su distribucion a los destinatarios especificados. Esta entrega se puede hacer bien mediante el comando "sendmail -q" o bien esperando a que el sistema llame a sendmail (lo llama cada X tiempo, siendo este tiempo programable) para que lo distribuya. Este tiempo, así como los restantes parámetros de configuración (como el servidor SMTP, que es el lugar a donde sendmail debe enviar los mensajes, es decir, nuestro proveedor de Internet) se pueden especificar en el fichero de configuración /etc/sendmail.cf .

Gracias a sendmail podremos enviar mensajes de corre electronico estando desconectados de Internet, mensajes que serán enviados por él cuando se realice la próxima conexión. Esto nos permitirá responder el correo electrónico desde nuestro cliente de correo, con el siguiente mecanismo: una vez configurado sendmail, en nuestro cliente de correo ponemos como SMTP la direccion IP de nuestra máquina (nuestra IP de red, nuestro nombre de máquina o bien 127.0.0.1 o localhost) de modo que cuando escribamos un mensaje en Netscape y pulsemos en Enviar, éste será enviado *a nuestra propia máquina* de tal forma que sendmail se encargará de enviarlo durante la próxima conexión a Internet cuando se ejecute mediante "sendmail -q" o como daemon temporal. Esto nos permite contestar el correo electronico en nuestro cliente favorito, sin gasto de teléfono por nuestra parte, y pudiendo simplemente enviar los mensajes y dejar que sendmail los distribuya al conectar a Internet.

## 10.4 Recogida de correo: Fetchmail

Si con programas como sendmail es posible enviar el correo a nuestra máquina estando desconectados de Internet para su posterior distribución cuando se conecte a la Red, con Fetchmail es posible hacer el proceso inverso, es decir, recoger TODO el correo de todos los servidores POP o IMAP deseados para su posterior recogida desde nuestra máquina y lectura en modo desconectado.

Fetchmail es el daemon encargado de la recogida de correo, para posteriormente pasárselo a sendmail, que es quien lo distribuye. La forma más sencilla de configurar fetchmail es creando un fichero .fetchmailrc en el directorio personal del usuario (ya sea `/home/usuario` o incluso `/root`), de forma que sea el mismo usuario quien recoja el correo y se lo pase al usuario/usuarios que deban leerlo. Dicho fichero tiene un formato como el que sigue:

      defaults
      fetchall
      flush
      pass8bits

      poll servidor_de_correo
      proto pop3
      user usuario
      pass password
      to usuario_local

(pueden haber más bloques poll/proto/user/pass/to si hay mas servidores de correo de donde deseemos recoger el mismo)

Las opciones incluidas en este fichero son las siguientes:

- defaults: establece los valores por defecto para fetchmail.
- fetchall: recoge todos los mensajes pendientes en el servidor de correo.
- flush: una vez recogidos los mensajes son borrados del servidor de correo. Para nuestras primeras pruebas es recomendable cambiar este parámetro por keep, para que los mantenga y así no los perdamos en caso de un error de configuración.
- pass8bits: Indica que el mensaje puede contener carácteres de 8 bits (acentos, eñes, etc.).
- Bloque poll/proto/user/pass: Indica las características de nuestro servidor de correo. Si disponemos de más de un servidor de correo, se deben incluir tantos bloques de este tipo (repetir la estructura para ambos) como servidores dispongamos.
- poll: Indica el servidor de correo entrante (POP o IMAP) de donde leer el correo (en mi caso se trata simplemente de anteponer pop al dominio de mi ISP, quedando pop.arrakis.es).
- proto pop3: Indica que nuestro servidor de correo entrante utiliza POP para la recogida del correo (alternativo a IMAP).
- user y pass: Indican la cuenta del correo y password del usuario. Algunas cuentas de correo típicas son como las siguientes:

        user sromero@arrakis       <- en arrakis
        user sromero               <- en CTV

  (consultar con nuestro ISP cual es el login de nuestra cuenta de correo). Si nuestro password es numérico tal vez haga falta encerrarlo entre comillas dobles "".
- to usuario: Indica a qué cuenta de usuario se le ha de pasar el correo. Usuario ha de ser una cuenta de nuestro sistema Linux, tales como sromero, o root.

Un ejemplo de fichero .fetchmailrc para un usuario sromero@arrakis.es en /home/sromero sería el siguiente:

      defaults
      flush
      fetchall
      pass8bits
      poll pop.arrakis.es
      proto pop3
      user sromero@arrakis
      pass mipassword
      to sromero

Además, este fichero tiene que tener unos permisos de lectura/escritura concretos, debido a que posee nuestro password de correo, cosa que se realiza con la orden chmod:

      [sromerolocalhost sromero]#   chmod 0600 .fetchmailrc

La forma de recoger el correo es, estando conectado, ejecutar la orden "fetchmail".

Por último, podemos hacer que fetchmail corra en forma de demonio (el equivalente en MSDOS sería como un programa residente), y que recoja el correo sólo cada X segundos, cosa muy sencilla de realizar añadiendo la siguiente opción al fichero .fetchmailrc:

      set daemon X

      (ejemplo: set daemon 300)

Esto haria que fetchmail buscara correo nuevo cada 300 segundos sin necesidad de ser lanzado por nuestra parte con el comando "fetchmail".

Una vez recogidos los mensajes (ya sea en forma manual o como daemon), éstos son depositados por sendmail en `/var/spool/mail`, de manera que puedan ser accedidos por cualquier programa de correo del sistema (mailx, pine, y, como veremos ahora, Netscape). Simplemente debemos configurar nuestro cliente de correo especificando como servidor POP nuestra propia máquina (localhost, 127.0.0.1, etc). Tras haber recogido todos los mensajes con fetchmail y ya desconectados de la Red, en el cliente de correo (por ejemplo Netscape) le damos a GET NEW MESSAGES (Obtener nuevos mensajes) y aparecerán ante nosotros los emails recogidos por fetchmail dispuestos para ser respondidos totalmente offline.

## 10.5 Sendmail y Fetchmail: Todo Offline

Con fetchmail y sendmail, trabajar con el correo electrónico en modo desconectado (tanto leer como contestar el correo OFFLINE, con el consiguiente ahorro de dinero en tiempo de conexión) consiste simplemente en lo siguiente:

      [root@localhost root]# pppd
      [root@localhost root]# sendmail -q
      [root@localhost root]# fechmail
      [root@localhost root]# killall pppd

Con la primera línea conectamos a Internet, para posteriormente enviar el correo pendiente en la cola de mensajes (los enviados por nosotros a nuestramáquina), así como recoger el correo entrante en nuestro ISP con fetchmail (y dejarlo en nuestra máquina listo para recogerlo con Netscape, Pine o nuestro cliente de correo).

Gracias a esto en apenas unos minutos de conexión enviamos todo el correo saliente y recogemos los nuevos mensajes, dejándolos en nuestro sistema listos para su contestación con el modem desconectado. Otra opción es incluir las llamadas a las funciones de envío y recogida en el fichero /etc/ppp/ip-up, de manera que la recogida sea automática al realizarse la conexión. Además podremos utilizar procmail para distribuir el correo, de manera que todos los usuarios de una red tengan la misma dirección de email en Internet pero luego puedan enviarse mensajes a usuarios individuales con esa misma dirección, etc. Las posibilidades de actuación de Linux son infinitas en este campo, pudiendo crear listas de correo, filtros anti-spam, etc.

## 10.6 ¿Cómo configuro Netscape para trabajar Offline?

Si disponemos de nuestros emails en `/var/spool/mails` nada nos impide utilizar Netscape para trabajar con ellos, y así de paso trabajar en modo desconectado u offline. Para ello tan sólo hemos de ir a las opciones del programa (edit->preferences), y modificar los datos que especifican nuestro servidor de correo entrante y saliente.

Para ello vamos a la pestaña Mail & Groups, submenú Mail Server y como Outgoing mail (SMTP) server especificamos localhost (nuestro ordenador), de manera que al enviar emails con Netscape vayan a parar al directorio `/var/spool/mail`. Como Mail server type especificamos la opción "Movemail Application", y seleccionamos Built in, para que utilice la herramienta interna de Netscape para la recogida del correo, tal y como se puede ver en la figura adjunta.

Por último como root habremos de cambiar los permisos del directorio /var/spool/mail para que Netscape pueda escribir en ellos:

      [root@localhost root]# cd /var/spool
      [root@localhost spool]# chmod 01777 mail

(otra posibilidad es buscar la aplicacion movemail y darle permisos de root.root y atributos +s para que tome privilegios de administrador).

Una vez realizado esto, todas las recepciones y envíos se realizan sobre el directorio /var/spool/mail y /var/spool/mqueue, con lo que podremos leer y responder desde Netscape los emails recogidos con fetchmail, y cuyas respuestas serán enviadas por sendmail en la siguiente conexión a Internet. De la misma manera, podemos especificar localhost como servidor de correo entrante (pop) y saliente (smtp) en otros programas de correo para que accedan a nuestra máquina y podamos trabajar en modo desconectado, como en el programa Kmail incluido en KDE, en Pine, etc.

## 10.7 ¿Qué son las news o grupos de noticias?

Las news (grupos de noticias) son un interesante servicio de Internet que permite el intercambio de mensajes en un foro común sobre un determinado tema de interés para todos sus lectores. En cuanto a formato, son algo similar a los emails: simples mensajes de texto formados por la cabecera del mensaje seguida del cuerpo, y donde a su vez la cabecera se divide en diferentes campos que indican el remitente, el grupo destinatario o el tema del mensaje.

Si se busca información de un determinado tema (programación, electrónica, diseño, imágenes, etc.), sólo es necesario apuntar nuestro programa de news (por ejemplo, Collabra Discussion Groups, de Netscape, incluido con Communicator) hacia el grupo adecuado para disponer de la posibilidad de intercambio de información e intereses comunes entre un gran grupo de usuarios interesados en el mismo tema. Apuntándose, por ejemplo, al grupo es.comp.os.linux estaremos en conexión con un grupo temático dedicado exclusivamente al habla sobre este S.O. Si enviamos un mensaje al grupo, todas las personas suscritas al mismo podrán leerlo y contestarlo (algo así como enviar emails pero a un lugar donde lo pueden leer todas las personas interesadas en el tema) tanto personalmente como al grupo en general, pudiendo por tanto aprender mucho sobre el tema tratado. La variedad de temas disponibles en los diferentes grupos permiten nuestra participación activa, yendo desde la simple lectura (de la que se puede aprender mucho) hasta la colaboración con el grupo respondiendo a preguntas que ayuden a otros lectores a desarrollarse.

## 10.8 ¿Cómo se accede a las news?

En general, basta con instalar un cliente de news e indicarle la direccion de nuestro servidor de news (el nombre o IP de la máquina que contiene los grupos), tal como news.arrakis.es, news.ctv.es, o como quiera que se llame nuestro proveedor de servicios de Internet. También existen diferentes servidores de news gratuitos, algunos de ellos sin limitaciones y otros que sólo permiten postear mensajes de un determinado nº de líneas, o donde el nº de líneas de texto nuevo sea mayor que el texto al que se contesta, ya que al ser como un email, se puede dejar el texto anterior al contestar:

      Ejemplo:

      --------------------------------------------------
      > JuanJO preguntó:
      > ¿alguien sabe como hacer esto?

       Pues tienes que ir al directorio... [etc]
      --------------------------------------------------

Sabido ya nuestro servidor de news y el puerto de acceso (general- mente el 119) la configuración del acceso simplemente consiste en ir a las opciones del cliente de news que deseemos usar e indicarle como "Servidor de News" la dirección de nuestro server, y como puerto, el apropiado para el mismo.

Una vez realicemos la configuración, el cliente de news se bajará del servidor remoto una lista de todos los grupos temáticos disponibles y de las descripciones de los contenidos, para que posteriormente podamos seleccionar aquellos de nuestro interés. Suelen haber miles o decenas de miles de grupos diferentes, ordenados por tematicas. Los grupos de news son como una jerarquía donde cada grupo se divide en subgrupos hasta llegar a aquel de la tematica deseada:

      es.*                   -> todos los grupos de news en castellano
                                (hay miles de ellos)
      es.ciencia.*           -> grupos de news sobre ciencia.
                                (hay unas decenas, de electrónica,
                                 matemáticas, biología, etc)
      es.ciencia.electronica -> grupo de news sobre electronica en castellano.

      o bien:

      es.comp.*              -> grupos relacionados con ordenadores.
      es.comp.os.*           -> grupo de news dedicados a S. Operativos.
      es.comp.os.linux       -> grupo de news sobre el S.O. Linux.
      es.comp.os.windows     -> grupo de news sobre el "S.O." Windows
      (etc...)

Esta lista de grupos y sus descripciones se almacena en nuestro PC para que posteriormente a su download completo (suele tardar bastante al ser muy extensa) podamos suscribirnos a aquellos grupos que más nos interesen. En el caso del autor, y como ejemplo, uso Netscape Communicator y estoy suscrito a es.ciencia.electronica, es.comp.os.linux y rec.games.programmer, los cuales recibo en diferentes carpetas para leer mensajes de cada uno de los temas por separado (cada vez que conecto a Internet recojo los nuevos mensajes de cada grupo y envio mis respuestas).

Tanto Netscape Communicator como otros lectores/clientes de noticias (Slrn, Krn, Xrn) dan acceso a la lectura y gestión de artículos de las news siempre y cuando estemos conectados a Internet (trabajando online), es decir, hay que estar conectado, recoger los nuevos mensajes, y leerlos y contestarlos estando conectados lo cual conlleva un gasto (innecesario como veremos) de teléfono a la hora de leer, responder y descartar los mensajes que nos interesen.

Existen algunos programas que permiten hacer algo más ahorrativo: al entrar en el grupo de news que nos interesa, podremos leer las cabeceras de los mensajes disponibles (como por ejemplo en el programa HY-News), marcar los que nos interesen y posteriormente bajarlos para leerlos una vez desconectados de la línea, si bien el marcado de cabeceras requiere un tiempo de lectura y elección que puede llegar a bastantes minutos si estamos suscritos a diferentes grupos, aunque siempre es mejor esto que responder todos los artículos online.

En Linux disponemos de la posibilidad (de nuevo formando parte gratuita del Sistema Operativo y no como un extra a añadir al mismo) de instalar clientes de news (y servidores) que nos permitirán trabajar en modo desconectado de la misma manera que se puede hacer con el correo (en aquel caso mediante fetchmail y sendmail). Estos programas funcionan bajandose TODOS los nuevos articulos/mensajes de news (a gran velocidad al ser conexion directa al servidor) para luego en nuestro cliente de correo especificar como servidor de news nuestro propio PC (localhost) de modo que podremos leer y contestar las news totalmente offline.

En este aspecto podemos elegir principalmente entre leafnode e inn+suck. Éstos 2 ultimos paquetes (inn y suck) son muy potentes y mucho más avanzados para nuestros propósitos iniciales, de modo que si nuestro uso de las news es sencillo (no queremos montar nuestro propio servidor sino simplemente obtener un medio para leer las news offline) nos quedaremos con leafnode mucho más sencillo de instalar y configurar.

## 10.9 Leafnode como servidor de NNTP

Como puede leerse en la página del manual (man fetch) leafnode es un paquete de trabajo con news diseñado para ordenadores pequeños con pocos usuarios, de manera que no ocupa mucho espacio y permite la gestión de muchos grupos. El diseño de leafnode está pensado para que sea capaz de autoreparar errores cuando ocurran, y que no necesite mantenimiento manual. Es decir: nos encontramos ante un programa que requiere poco espacio y mantenimiento, pero que en cambio nos proporciona total acceso a la gestión de grupos de noticias, gracias a leafnode (un servidor de NNTP), fetch, el programa que se encarga de recoger las news de Internet y dejarlas en nuestro disco duro para su posterior lectura por parte del programa que deseemos, y texpire, que se encarga de eliminar los mensajes viejos para recuperar disco duro y deshacernos de los artículos no deseados según el tiempo de expiración que hayamos configurado.

Leafnode es un programa incluido en la mayoría de las distribuciones Linux (sobre todo en las de RedHat), y si no disponemos de él puede encontrarse en ftp.redhat.com en el directorio pub/manhattan/contrib/i386 (versión 1.5) o en la sección de viejos RPMs (la versión 1.4). Algunas (caso de algunas distribuciones Manhattan) versiones tienen un fallo con Netscape, pero al autor le consta que a partir de la versión 1.9 este fallo fue corregido completamente (NOTA: El autor usa leafnode 1.4 ya que le sigue funcionando perfectamente y no ve ninguna necesidad de actualizar a la version 1.9 :). La instalación en formato rpm es mediante el comando rpm -i, y para paquetes .deb y tar.gzs también se debe seguir el método habitual de instalación ya conocido por los que usan distribuciones Debian o Slackware, además de poder convertir el paquete de rpm a cualquier otro formato mediante el script alien, incluido en muchas distribuciones y que podemos encontrar en el home de Debian.

## 10.10 Configuracion de Leafnode

Una vez instalado leafnode se debe proceder a configurarlo. Como root entramos en el directorio /usr/lib/leafnode y editamos el fichero config, donde leeremos algo similar a lo siguiente (fichero de configuración de la versión 1.4):

      # This is the NNTP server leafnode fetches its news from.
      # You need read and post access to it.
      server = news.arrakis.es

      # Unread discussion threads will be deleted after this many days if
      # you don't define special expire times. Mandatory.
      expire = 5

      # Non-standard expire times (no regex possible)
      #groupexpire comp.linux.misc = 5   # group too big to hold articles 20 day
      #groupexpire any.newsgroup = 100  # very interesting, hold articles longe

      # Never fetch more than this many articles from one group in one run.
      maxfetch = 2000

      # Specifies an upper limit on how many groups an article may be posted to.
      maxcrosspost = 0

El significado de las diferentes opciones es muy descriptivo:

La opción server indica el servidor de donde leafnode ha de leer las noticias. En este caso se tiene especificado como servidor news.arrakis.es. En principio esta línea no contendrá ningún valor si es la primera vez que lo configuramos, así que será necesario incluir aqui el nombre de nuestro servidor de noticias habitual (news.ctv.es, news.arrakis.es, etc.).

Con expire=5 le indicamos a leafnode que si un tema (thread o hebra) de artículos no ha sido tratado durante 5 días o más, debe borrarlo (lo haremos con texpire). Es decir, si un hipotético tema llamado «Pregunta simple», y sus respuestas «Re: Pregunta simple» llevan 5 días sin ser tratados, todos estos mensajes son eliminados del disco duro para ahorrar espacio (debido a que es considerado como tema antiguo). El número de días puede ser modificado a nuestro gusto mediante esta opción.

Las 2 opciones groupexpire comentadas permiten especificar excepciones a diferentes grupos (por ejemplo, si queremos que en un determinado grupo se guarden los artículos más días) con respecto al tiempo considerado para eliminar artículos. En este sentido, se utiliza para hacer una excepción para un grupo concreto sobre el valor de expire generalizado para todos los grupos (por ejemplo, si un grupo tiene un flujo muy grande de mensajes puede no interesarnos que caduquen a los 5 dias sino a los 3).

El parámetro maxfetch especifica el máximo número de artículos a recoger cada vez de cada grupo. La primera vez que recojamos los mensajes de un grupo nos recogerá este número de posts, así que es recomendable ponerlo a 500 inicialmente y despues de la primera recogida de grupos dejarlo en el valor deseado.

La opción maxcrosspost indica el número máximo de grupos a los que un artículo puede ir dirigido (para evitar el crossposting o repeticion del mismo mensaje en diferentes grupos), o cero para no indicar límite de grupos.

Una vez configurado el programa conectamos a Internet y ejecutamos el programa de recogida de news (fetch) mediante la orden:

      [root@localhost root]#   fetch -v

Mediante esta orden, y al ser la primera vez que llamamos al programa, fetch se dedicará a bajarse de nuestro servidor de news todos los nombres y descripciones de los grupos de noticias existentes para que posteriormente podamos suscribirnos a cualquiera de ellos.

Si queremos seguir el proceso y saber que hace en todo momento leafnode, podemos ejecutar el siguiente comando en otra consola virtual o xterm:

      tail -f /var/log/messages

Veremos algo similar a:

      Jan 2 11:07:00 localhost fetch: Registered group arrakis.binarios
      Jan 2 11:07:00 localhost fetch: Registered group arrakis.consultas
      Jan 2 11:07:00 localhost fetch: Registered group arrakis.general
      Jan 2 11:07:00 localhost fetch: Registered group arrakis.noticias
      Jan 2 11:07:00 localhost fetch: Registered group a.bsu.programming
      Jan 2 11:07:00 localhost fetch: Registered group a.bsu.religion
      (y un largo etc).

El parámetro -v (verbose) le indica a leafnode que muestre mensajes en pantalla indicando qué hace en cada momento. Hay diferentes niveles de explicación (-v, -vv, ...-vvvvv) que nos permitirán saber qué hace el programa y observar la progresión del mismo. Tras un tiempo (dependiendo de la velocidad de nuestro modem), el programa terminará de recoger los nombres de los newsgroups (proceso largo, debido a la gran cantidad de ellos, así que tendremos que tener paciencia esta primera vez de ejecución), y habremos de resetear el inetd para que se active nuestro servidor de news (leafnode):

      [root@localhost root]#   /etc/rc.d/init.d/inet  restart

Por último (aunque suele ser realizado automáticamente al instalar el paquete), debemos asegurarnos de que tenemos abierto el puerto de nntp (de nuestro servidor de noticias) en el archivo /etc/inetd.conf, simplemente comprobando si existe (y creando en caso negativo) una línea similar a la siguiente:

      nntp  stream  tcp  nowait  news  /usr/sbin/tcpd  /usr/sbin/leafnode

Tras esto podemos desconectar de Internet y prepararnos para elegir los grupos a los que deseamos suscribirnos, como veremos a continuación.

Nota: Es posible que si instalamos leafnode desde un fichero tar.gz, el path destino de instalacion sea /usr/local/sbin/leafnode, de modo que la linea anterior debe cambiar para ajustarse al path donde leafnode este disponible.

      nntp  stream  tcp  nowait  news  /usr/sbin/tcpd  /usr/local/sbin/leafnode

Las ultimas versiones llevan un mayor número de opciones las cuales podemos (y deberíamos) consultar en la página man de fetch.

## 10.11 Suscripcion a los grupos de noticias deseados

Una vez tenemos la lista de grupos y sus descripciones (Active List) en nuestro disco duro, llega el momento de suscribirse a los grupos que deseamos recoger. Para ello nos vamos a /var/spool/news/interesting.groups y creamos allí ficheros con los nombres de los grupos a los que nos queremos suscribir. Dicho de una manera sencilla, si nos queremos suscribir a es.comp.os.linux y es.ciencia.electrónica, por ejemplo, dentro de /var/spool/news/interesting.groups creamos dichos ficheros sin contenido alguno:

      [root@localhost root]#   touch  es.comp.os.linux
      [root@localhost root]#   touch  es.ciencia.electronica

El comando touch sirve para actualizar la fecha de un fichero, y si no existe se encarga de crearlo (vacío, de cero bytes). El directorio interesting.groups es para leafnode una base de datos de los grupos que debe bajarse, estando especificados en forma de ficheros. Después de los 2 touch, el contenido del directorio es el siguiente:

      [root@localhost interesting.groups]# ls -l
      total 0
      -rw-r--r--   1 news     news     es.ciencia.electronica
      -rw-r--r--   1 news     news     es.comp.os.linux

Mediante esto, cada vez que recojamos los artículos llamando a fetch (como ahora veremos), leafnode se bajará los artículos nuevos de estos 2 grupos. Por supuesto, es posible suscribirse a tantos grupos como sea necesario, creando los ficheros con touch (o creandolos con cualquier editor de texto y grabándolos vacíos).

Tras esto ya estamos suscritos a diferentes grupos en el leafnode, lo cual significa que leafnode se bajará los mensajes de dichos grupos. El siguienet paso sería ir al cliente de news y poner como Groups Server (servidor de news, de nntp o de grupos) el nombre o IP de nuestra propia máquina, como 127.0.0.1 o localhost. Tras esto veremos aparecer en el cliente de news (por ejemplo en Netscape Communicator) la lista de grupos que hay en nuestro sistema (la que se bajó leafnode) y nos podremos suscribir a los grupos que deseamos leer en nuestro netscape (Join Discussion Groups).

Es decir, primero con Leafnode nos suscribimos a los grupos que deseamos recibir en el sistema, y luego cada usuario, en su cliente de news, se suscribe, de dichos grupos que se reciben, a los que desea leer en su cliente.

## 10.12 Recogida de news

Una vez configurado todo el sistema de leafnode, veamos el proceso que se seguiría cada vez que se deseen recoger los artículos de las news cada día (o cada vez que se use Internet). Para ello, conectamos a Internet (por ejemplo, ejecutamos pppd, enviamos nuestro correo con sendmail, recogemos los mensajes nuevos con fetchmail, etc.) y ejecutamos el siguiente comando:

      [root@localhost root]#   fetch -v

En ese momento, leafnode enviará los artículos que hayamos respondido (si es la primera vez, no habremos escrito nada todavía) y después comenzará a bajarse todos los artículos nuevos de los grupos a los que nos hayamos suscrito en `/var/spool/news/interesting.groups`. Nótese que leafnode la primera vez se bajará unos 2000 mensajes de cada grupo (depende de la opción maxfetch especificada en el fichero de configuración, por lo que recomendamos que inicialmente se deje en 500 para colocarla en 2000 tras la primera recogida), pero a partir de ese momento en la siguiente conexión sólo se bajará los artículos nuevos.

Nótese también que leafnode se baja todo el grupo (todos los mensajes, no siendo necesario marcar cabeceras), con lo que no es necesario pasar tiempo marcando los artículos deseados, sino que posteriormente dispondremos de todo el grupo para su lectura en offline. Además leafnode es muy rápido bajando los artículos, pues lo hace a altas velocidades y permite también ser añadido al script ip-up para su recogida automática tras la conexión.

Una vez recogidos los artículos estos son dejados en `/var/spool/news` (en nuestro disco duro) para que puedan ser accedidos por cualquier cliente de news, como Krn, Xrn, Netscape, etc. Por otra parte, una vez por semana leafnode realiza una actualización de la lista de grupos y descripciones (no recogida completa sino actualización) aunque esto se puede evitar si así lo deseamos, como veremos más adelante.

Otra de las ventajas de que la recogida se haga por medio de un comando de consola es que podemos colocar en un script de shell (como ya dijimos, algo similar a un BATCH de MSDOS, pero mucho más potente), que nos haga la recogida automática de correo y news para nuestro ordenador. Para ello creamos un fichero "recoge" con el siguiente contenido:

      # Script para recogida de correo
      echo Enviando correo pendiente...
      sendmail -q
      echo Recogiendo correo entrante...
      fetchmail
      echo Posteando y recogiendo news...
      fetch -v

Tras crear este fichero, le damos permisos de ejecución (chmod +x recoge), y ya puede ser utilizado en alguna consola virtual o xterm para recoger el correo+news automáticamente (enviar y recoger correo y news), mientras navegamos o trabajamos con el resto del sistema.

## 10.13 Configuracion del cliente de news para trabajar con leafnode

La configuración del cliente que utilicemos es muy sencilla, y consiste en cambiar el servidor de news que tuvieramos especificado en las opciones del programa (por ejemplo, news.arrakis.es) por nuestra propia máquina (localhost), con lo que cuando sea pulsado el botón de "Coger nuevos mensajes", por ejemplo, se estará accediendo a nuestra máquina (concretamente a leafnode) para leer dichos nuevos mensajes de `/var/spool/news`, es decir, los artículos recogido por fetch.

En Netscape Communicator esto se especifica en el menú Edit, opción Preferences, pestaña Mail & Groups, subopción Groups Server, donde especificaremos 127.0.0.1 (o localhost) como Groups Server y nuestro home (`/home/sromero` en mi caso) en la opción Discussion Groups (news) directory. Tras eso nos suscribiremos a los grupos deseados (cada usuario puede elegir cualquier grupo de los especificados en interesting.groups) mediante la opción Join Discussion Groups del menú File. El proceso es similar para otros clientes como Krn, Slrn (con un sencillo fichero de configuración) o incluso el editor de texto Emacs (que puede utilizarse también para gestionar las news).

Una vez realizado esto, al pulsar sobre "Get new messages" estaremos accediendo a nuestro disco duro para leer los ultimos artículos recogidos por leafnode, y al enviar un mensaje en realidad estará siendo grabado como un fichero de texto en el directorio /var/spool/news/out.going, donde se almacenan todos los mensajes enviados offline hasta que en la próxima conexión fetch los envíe a nuestro servidor de news (y por tanto, sean posteados en Internet).

## 10.14 Eliminacion de noticias antiguas (Texpire)

Cada cierto tiempo debemos limpiar nuestro disco duro para eliminar mensajes antiguos. Esto no significa que debamos entrar en el directorio news para comprobar qué mensajes están atrasados y eliminarlos, porque como ya se ha comentado, leafnode es un programa diseñado para automatizar todo este tipo de procesos. Para ello sólo tendremos que ejecutar el programa texpire (incluido con leafnode), que se encarga de recorrer todos los grupos de que dispongamos en nuestro disco duro y eliminar aquellos threads que sobrepasen sin actualizar el número de días indicado en el fichero de configuración de leafnode (en nuestro ejemplo indicamos 10 días). Al ejecutar texpire la salida suele ser algo parecido a lo siguiente (la aparición de varios grupos a los que no estamos suscritos es debido a que hay mensajes con crossposting, dirigidos a varios grupos):

      [root@localhost root]# texpire
      es.ciencia.electronica: 10 articles deleted, 182 kept
      es.ciencia.misc: 21 articles deleted, 25 kept
      es.comp.hackers: 1 articles deleted, 10 kept
      es.comp.lenguajes.java: 10 articles deleted, 1 kept
      es.comp.os.linux: 100 articles deleted, 690 kept
      total: 142 articles deleted, 1012 kept

Realizando esto regularmente mantendremos nuestro disco duro sólo con los últimos mensajes deseados en lugar de ir llenándolo con la acumulación de mensajes antiguos. La cantidad de días a los que hayamos configurado texpire variará el nivel de limpieza de artículos viejos. Texpire es automáticamente ejecutado por "cron" (la parte de Linux que se encarga de ejecutar procesos a determinadas horas), pero para que cron tenga utilidad es necesario tener conectado el ordenador todo el dia (cron hace las cosas a unas determinadas horas), cosa que viene muy bien en las estaciones de trabajo pero que a nosotros no obliga a usar el "anacron" (no necesita tener el ordenador permanentemente conectado) o a hacerlo manualmente (la forma más sencilla, simplemente llamando a texpire cada 15 días, ejecutándolo en la línea de comandos del sistema).

Normalmente a texpire le costará cerca de un mes de uso empezar a borrar artículos, de modo que aunque inicialmente veamos que al llamarlo no borra los artículos antiguos, debemos dejarlo porque eso quiere decir que ninguno de los artículos ha expirado aún (o que hemos puesto un tiempo de expiracion muy grande. Un tiempo razonable es 5 dias, pero eso depende fundamentalmente del tráfico del grupo en cuestión). Además texpire está basado en detectar TEMAS caducados (no artículos). Esto implica que un TEMA caduca cuando no se postee ningún mensaje sobre él (o respuesta) en el tiempo especificado, tras el cual será borrado. Estar basado en temas hace que se tarde más (inicialmente) en comenzar a borrar artículos viejos, pero que a partir de la primera expiración de artículos el proceso sea contínuo y eficiente.

Por Internet es posible encontrar también un programa en PERL llamado texpire.pl el cual hace un borrado artículo por artículo (no basado en cuando un TEMA caduca sino en cuando un ARTICULO caduca) que también puede utilizarse para este fin. No obstante el uso de texpire es más adecuado ya que viene integrado con leafnode y su funcionamiento es excelente.

## 10.15 ¿Cómo hacer que leafnode no actualice la lista de grupos?

Por otra parte, si no queremos que leafnode trate de actualizar los grupos de news cada semana es posible modificar el código fuente del programa, aunque lo más sencillo es actualizar la fecha del fichero de grupos para que leafnode lo trate como si se acabara de actualizar. Esto se hace mediante la siguiente orden, que podemos poner en cualquier fichero del sistema (por ejemplo en /etc/rc.d/rc.local):

      touch -m /var/spool/news/active.read

Este fichero (active.read) lo usa leafnode para saber cuándo fue la última vez que buscó nuevos grupos de news en el servidor. Cuando pasa una semana (fetch mirará para ello la fecha del fichero), leafnode tratará de bajarse de nuevo la lista de grupos para ver si hay grupos nuevos (proceso que suele tardar bastante). Para evitar esto, touch actualiza la fecha del archivo y fetch nunca detecta que haya pasado una semana, no actualizando la lista de grupos y descripciones.

En las últimas versiones, posiblemente podamos forzar a leafnode a no leer la lista de grupos o a releerla de nuevo usando algún switch de línea de comandos (al estilo fetch -n), para lo cual siempre es aconsejable la lectura de la página man correspondiente (man fetch).

## 10.16 Problemas de acceso con Leafnode

Si al recoger las news con Netscape o cualquier otro cliente de news obtenemos el siguiente mensaje de error:

      "An error occurred with the News server.
      If you are unable to connect again, contact the
      administrator for this server."

Lo primero que deberemos hacer será comprobar si leafnode está correctamente funcionando en el puerto 119 de nuestra máquina, haciendo un telnet localhost 119:

      [root@compiler]  telnet localhost 119
      Trying 127.0.0.1...
      Connected to localhost.
      Escape character is '^]'.
      Connection closed by foreign host.

En ese caso, debemos modificar los ficheros `/etc/hosts.allow` y `/etc/hosts.deny` para permitir a nuestros usuarios que tengan acceso a leafnode. Una manera es dejar vacíos ambos ficheros (así es como lo tengo yo) permitiendo a cualquier el acceso a leafnode, y otra es modificar el hosts.deny (nunca he necesitado realizarlo así pero es otra manera de solucionarlo) es dejar el siguiente contenido en el fichero `/etc/hosts.deny`:

      # /etc/hosts.deny
      # The PARANOID wildcard matches any host whose name does not
      # match its address.
      ALL: PARANOID
      #-- leafnode begin
      leafnode: ALL
      #-- leafnode end

Una salida de "telnet localhost 119" correcta debería ser:

      [root@compiler]  telnet localhost 119
      Trying 127.0.0.1...
      Connected to localhost
      Escape character is '^]'.
      200 Leafnode NNTP Daemon, version 1.4 running at localhost

Next Previous Contents