[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Configuración del correo electrónico



EL otro día, Tue, Mar 14, 2000 at 07:41:35PM -0500, ADnoctum dijo:
> Para navegar uso lynx, para irc bitchx, y para ftp lftp. Pero el correo si
> me ha quedado grande. Leyendo y leyendo, entendí(más o menos) que necesito
> un MTA(exim)  un MDA(procmail) y un MUA(mutt).
Tengo un texto que escribi que te va que ni pintado es justo tu caso...
mira:
----mail.lnx-----

Como Poner a punto el envío recepción de correo E en Linux
----------------------------------------------------------

A ver, pues, primero, hace falta instalar un MTA (Mail Transfer Agent) que en
este caso, además, vamos a usar como MDA (Mail Delivery Agent). También
podemos usar un programa de procesado de correo, Procmail. Y para recoger el
correo el Fetchmail.

MTA: Elegimos el Exim. ¿Por qué?... Por que es pequeñito, es compatible con
sendmail (que llevan como predefinido muchas aplicaciones *nix), e incorpora
un sistema de procesado de correo tan potente como Procmail.

De todas formas también te voy a poner y explicar la configuración del
Procmail por si eliges otro MTA que te gusta más, como por ejemplo qmail (que
tienes que compilarte tú para poder usarlo por motivos de licencia --mola--),
el smail, el sendmail original, etc... (casi todos son modificaciones sobre el
código original del sendmail).

1. Configuración del Exim:
--------------------------
--------------------------

Primero: si usas Debian, lo tienes MUY fácil (¡como que no usas debian!), pues
trae un script de instalación que se llama con la órden 'eximconfig' como
root. En él, has de elegir la 2ª opción de las 5 que te presenta al principio.
Luego te irá pidiendo una serie de cosas:
	Dominio visible:
		El nombre de tu máquina. Da igual cual, pues luego
		reescribiremos el campo From: de tus mensajes con el cliente
		de correo (mutt, Pine, ... etc) aunque tb se puede con el exim
		En mi caso 'gaia'
	Otros nombres de Dominio Válidos:
		*NB* Aquí, por algo que veremos luego, has de poner
		'localhost' (aunque luego veremos como se puede obviar esto)
	login a quien mandar el correo de root:
		Debian Policy,... pues eso. i.e. pablo con lo que se lo
		mandará a 'pablo@gaia'
	Filtros Spam:
		mejor no... luego veremos como filtrar el spam con el
		procmail. Aunque, si te bombardean a spam, pues igual.
	SMTP:
		Servidor saliente por el cual enviar el correo. Es decir, el
		SMTP que te suministra tu proveedor (o Jazztel..., por ejemplo)
		Básicamente has de tener el mismo login y passwd en el SMTP
		que para conectarte a INET.
	Relay	
		Dominios para los que recogemos correo (en principio NO)
	etc...
		Creo que ya, pero por si acaso... De todas formas, el script
		viene muy explicado y el archivo de configuración que te
		genera /etc/exim.conf, está FUERTEMENTE comentado.

MI /etc/exim.conf (sin los comentarios ni espacios)
-----------------
qualify_domain = gaia
local_domains = gaia.casa:localhost:gaia
local_domains_include_host = true
local_domains_include_host_literals = true
never_users = root
host_lookup_nets = 0.0.0.0/0
sender_host_reject_relay = *
trusted_users = mail
smtp_verify = false
gecos_pattern = ^([^,:]*)
gecos_name = $1
received_header_text = "Received: \
          ${if def:sender_fullhost {from ${sender_fullhost} \
          ${if def:sender_ident {(${sender_ident})}}\n\t}\
          {${if def:sender_ident {from ${sender_ident} }}}}\
          by ${primary_hostname} \
          ${if def:received_protocol {with ${received_protocol}}} \
          (Exim ${version_number} #${compile_number} (Debian))\n\t\
          id ${message_id}"
end
local_delivery:
  driver = appendfile
  group = mail
  mode = 0660
  mode_fail_narrower = false
  file = /var/spool/mail/${local_part}
address_pipe:
  driver = pipe
  return_output
address_file:
  driver = appendfile
address_directory:
  driver = appendfile
  no_from_hack
  prefix = ""
  suffix = ""
# maildir_format
address_reply:
  driver = autoreply
remote_smtp:
  driver = smtp
end
real_local:
  prefix = real-
  driver = localuser
  transport = local_delivery
system_aliases:
  driver = aliasfile
  file = /etc/aliases
  search_type = lsearch
userforward:
  driver = forwardfile
  no_verify
  check_ancestor
  file = .forward
  modemask = 002
  filter
localuser:
  driver = localuser
  transport = local_delivery
end
smarthost:
  driver = domainlist
  transport = remote_smtp
  route_list = "* smtp.iddeo.es bydns_a"
end
*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
end
--------------------------
Fin de mi /etc/exim.conf
--------------------------

Arranque automático del exim
-----------------------------
	En principio, el exim no está corriendo siempre. El servidor no está
atento siempre. Sin embargo, para nuestros propósitos, nos interesa. Esto se
puede hacer de dos formas:
	1. Mediante el script de /etc/init.d
		se edita /etc/init.d/exim y se comenta la linea que pone 
		'exit 0'. Se arranca con "./exim start" estando en /etc/init.d
	2. Desde inetd, con la consiguiente mejora de seguridad y carga
		se descomenta la línea del /etc/inetd.conf siguiente:

	smtp		stream	tcp	nowait	mail	/usr/sbin/exim exim -bs

	Desde mi punto de vista (y así lo tengo) es mejor la segunda opción.
De esa forma, dispones de un TCP Wrapper para proteger la conexión al puerto
SMTP en Inet (el puerto 25), mediante los archivos /etc/hosts.allow y
/etc/hosts.deny. 

Salida de correo
----------------
Con esta configuración, el correo saliente se queda en cola hasta que te
conectes a inet, que se limpia la cola, mandando tus mensajes a tu SMTP. Esto
se hace automáticamente mediante el script que se te instala en
/etc/ppp/ip-up.d/exim

2. Configuración y Automatización del Fetchmail
-----------------------------------------------
-----------------------------------------------
	
	La parte de filtrado/procesado de mensajes mediante el exim la dejaré
para más adelante. Aquí voy a explicar como configurar el fetchmail para
recoger tu correo de todas las cuentas que tengas por Inet, y hacerlo de
formas automática cada vez que te conectes a Inet.
	Primero necesitas el fetchmail, claro. Trae un programa para las X
para configurarlo. Recomiendo verlo, por lo menos. De todas formas, voy a
explicar lo mínimo. Este es un archivo de configuración base, donde omito mis
login y passwd y los reemplazo con XXXX:
	Esta configuración le pasa todos los mensajes al MTA que tengas.
También puedes pasárselo directamente a otro MDA, como por ejemplo procmail,
con una línea del tipo:
        mda "/usr/bin/procmail -d %s"
después de la opción fetchall en el archivo de configuración.
	

~/.fetchmailrc
--------------
# Configuración del Fetchmail 4.6.4
# Daniel Payno. <dpay@retemail.es>

set postmaster "postmaster"
set syslog
defaults
	timeout 450
	protocol POP3
	pass8bits
#	mimedecode
#	keep
	flush
	fetchall

poll  alumnos.uc3m.es with proto IMAP
       user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll pop.iddeo.es
	user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll pop.mail.yahoo.com 
       user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll gul.aig.uc3m.es
	user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll rax.uax.es 
	user "XXXXXXX" there with password "XXXXXXX" is daniel here
----------------------
Fin de ~/.fetchmailrc
----------------------

Con este archivo, una vez que estes conectado, ejecutas fetchmail, y te
bajarás el correo. Para probar, hasta que veas que funciona, descomenta lo de
keep, y no te borrará los mensajes del servidor.
Ahora bien, queremos la solución general, así que
escribimos un archivo de configuración similar, pero para recoger el correo de
otro usuario de la máquina, por ejemplo un hermano, y lo guardamos como
/etc/fetchmailrc

/etc/fetchmailrc
----------------
# Configuración del Fetchmail 4.6.4
# Daniel Payno. <dpay@retemail.es>
# configuración para llamar al fetchmail en un script sysV
# /etc/fetchmailrc
set postmaster "postmaster"
set invisible
#set properties ""
set daemon 300
set syslog
defaults
	interface ppp0/62.0.0.0/255.0.0.0
	monitor ppp0 
	timeout 450
	protocol POP3
	pass8bits
#	mimedecode
#	keep
	flush
	fetchall
#Isabel
poll pop1.nettaxi.com 
 	 user "XXXXXXX" there with password "XXXXXXX" is isabel here
poll pop.iddeo.es
######	Yo ... dpay@retemail.es
	user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll pop.mail.yahoo.com  
       user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll alumnos.uc3m.es 
       user "XXXXXXX" there with password "XXXXXXX" is daniel here
poll rax.uax.es 
	user "XXXXXXX" there with password "XXXXXXX" is daniel here
------------------------
Fin de /etc/fetchmailrc
------------------------

Aquí hay tres líneas totalmente nuevas. Primero, la que dice que se ejecute
como demonio. Segundo, dos opciones para regular ese demonio y que realmente
no busque al servidor más que cuando estemos conectados a Inet. Mi proveedor
me asigna dinámicamente una IP del tipo 62.x.x.x cada vez que me conecto. Con
las líneas interface y monitor, si no está el ppp0 arriba y con esa IP
asignada, el fetchmail no inicica la recogida.
Ahora queremos que este demonio se inicie en el arranque siempre. Pues bien,
hacemos un script en /etc/init.d y le creamos un enlace para el runlevel por
defecto (en debian, el 2)

/etc/init.d/fetchmail:
---------------------
#!/bin/bash
#/etc/init.d/fetchmail
#
# Este script arranca el fetchmail al inicio del sistema
# Para ello usa la configuración contenida en /etc/fetchmailrc
# lanzando un demonio..
#
# Daniel Payno <dpay@retemail.es>

echo -n "Arrancando el fetchmail en modo demonio."
fetchmail -v -f /etc/Fetchmailrc
echo "..hecho"

----------------------------
Fin de /etc/init.d/fetchmail
----------------------------

Y el enlace en /etc/rc2.d:
---ls -l /etc/rc2.d ----
sh-2.01$ ls -l /etc/rc2.d/S21f*
lrwxrwxrwx   1 root     root           21 jul 31  1999 /etc/rc2.d/S21fetchmail
-> /etc/init.d/fetchmail 
------------------------

Por si quieres asegurarte de que se ejecute cuando te conectas a Inet, le
puedes 'dar un toque' para que se despierte, guardando el siguiente script
(chmod +x) en /etc/ppp/ip-up.d

/etc/ppp/ip-up.d/fetchmail
----------------------------
#!/bin/sh
if [ -f /etc/fetchmailrc ]; then
	fetchmail 
fi
-----------------------------

Para ver la salida del fetchmail, lo puedes ver en la xconsole.


3. Filtrado y Procesado de Correo
---------------------------------
---------------------------------

1. Mediante el Exim
-------------------
El exim dispone de un tipo especial de archivo ~/.forward, con una sintaxis
determinada, que filtra el correo. Existe un tutorial sobre dicha sintaxis en
la dirección http://www.exim.org

Por ejemplo, este es mi archivo .forward: (en mi caso es bastante largo)

~/.forward
------------
# Exim Filter
####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####
#### Archivo de Filtros de Exim para procesar el Correo y repartirlo 	#####
#### entre distintos buzones locales de correo				#####
####									#####
#### Daniel Payno, dpay@retemail.es					#####
####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####

if error_message then finish endif

logfile /home/daniel/exim.log

if $header_subject: contains "Daily E-Mail Activity Report"
then 
	save $home/correo/eximlogs

	
elif $header_subject: contains "Calendar"
then 
	save $home/correo/fechas

elif $header_X-Mailer: contains "Aureate Group Mail Free Edition" or
     $header_X-Mailer: contains "Ellipse Bulk Emailer" or
     $header_X-Mailer: contains "Multimailer" or
then
	save $home/correo/spam
	#seen finish ## esto se lo carga directamente > /dev/null

elif $header_to: contains "root@"
then 
	save $home/correo/root


elif $header_to: contains "edison_survive" or
     $header_cc: contains "edison_survive" or
     $header_bcc: contains "edison_survive"
then 
	save $home/correo/edison_survive


elif $header_to: contains "edison_tecnicos" or
     $header_cc: contains "edison_tecnicos" or
     $header_bcc: contains "edison_tecnicos" 
then 
	save $home/correo/edison_tecnicos


elif $header_to: contains "edison_linux" or
     $header_cc: contains "edison_linux" or
     $header_bcc: contains "edison_linux"
then 
	save $home/correo/edison_linux


elif $header_to: contains "gul@gul" or 
     $header_cc: contains "gul@gul"
then 
	save $home/correo/gul


elif $header_to: contains "rax@" or 
     $header_cc: contains "rax@" or
     $header_from: contains "rax@" or
     $header_reply-to: contains "rax@"
then 
	save $home/correo/rax


elif $header_to: contains "raxi@" or 
     $header_to: contains "rax@coolist.com" 
then 
	save $home/correo/RAXi


elif $header_to: contains "raxe@" or 
     $header_cc: contains "raxe@"
then 
	save $home/correo/RAXe


elif $header_to: contains "raxu@" or 
     $header_cc: contains "raxu@"
then 
	save $home/correo/RAXu


elif $header_from: contains "thebot@listbot.com"
then
	save $home/correo/listbot_Info


elif $header_to: contains "@abcnet.es" or 
     $header_from: contains "@abcnet.es" 
then 
	save $home/correo/abc-linux


elif $header_to: contains "hopgoblins@"
then 
	save $home/correo/hopgoblins


elif $header_from: contains "@hispasec.com"
then 
	save $home/correo/hispasec


elif $header_to: contains "sobre@ati.es" or 
     $header_cc: contains "sobre@ati.es"
then
	save $home/correo/SoBre


elif $header_to: contains "@lists.debian" or 
     $header_cc: contains "@lists.debian"
then
	save $home/correo/debian

else
	save $home/correo/entrada
endif
------------------
Fin de ~/.forward
------------------

Con esto, el correo que el fetchmail le pasa al MTA se distribuye localmente
en los archivos de $home/correo. Es importante que el archivo empieze
exactamente con la primera línea, para que el Exim sepa que lleva reglas de
procesado.

2. Mediante el procmail
-----------------------
Si no usas exim, puedes hacer lo mismo con el procmail. En ese caso, el
.forward deberá contener la siguiente línea

----~/.forward------
"|exec /usr/bin/procmail"
----~/.forward------

A no ser que llames al procmail directamente desde el archivo de configuración
del fetchmail, como hemos visto antes. El procmail guarda las normas de
filtrado en un archivo llamado ~/.procmailrc. 

~/.procmailrc 
-------------
# Archivo de Configuración del Procmail para procesar el correo
# Daniel Payno, <dpay@retemail.es>

PATH=/usr/bin:/home/daniel/bin:/bin:/usr/local/bin:.
MAILDIR=/var/spool/mail
DEFAULT=/home/daniel/correo/entrada
LOGFILE=$HOME/procmail.log
LOCKFILE=$HOME/.lockmail
VERBOSE=NO

:0
*(^From|^To|^Cc|^Reply-To).*(rax@uax.es|rax@egroups.com)
/home/daniel/correo/rax           #El correo del Rax a su carpeta

:0
*(^To|^Cc).*(gul)+
/home/daniel/correo/gul         

:0
*^(To|Cc|Bcc|From):.*edison_survive.*
/home/daniel/correo/edison_survive

:0
*^(To|Cc|Bcc|From):.*edison_tecnicos.*
/home/daniel/correo/edison_tecnicos

:0
*(^To|^From).*@abcnet.es
/home/daniel/correo/abc-linux      

:0
*^To.*(hopgoblins@(yahoo.com|geocities.com))
/home/daniel/correo/hopgoblins

:0
*^From:.*@hispasec.com
/home/daniel/correo/hispasec

:0
*^To.*(raxi@listbot.com|rax@coollist.com)+
/home/daniel/correo/RAXi

:0
*^To.*raxe@listbot.com
/home/daniel/correo/RAXe

:0
*^To.*raxu@listbot.com
/home/daniel/correo/RAXu

:0
*^(To|Cc).*sobre@ati.es
/home/daniel/correo/SoBre

:0
*^From.*thebot@listbot.com
/home/daniel/correo/listbot_Info

:0
*^Subject.*Daily E-Mail Activity Report
/home/daniel/correo/eximlogs

:0
*^From.*(Reminder Service)
/home/daniel/correo/fechas

:0
*(^To|^Cc).*debian.org
/home/daniel/correo/debian           #Cosas de Debian

:0
*(^To|^Cc).*(mutt)+
/home/daniel/correo/mutt           #Lista de usuarios de Mutt y anuncios


### Anti-SPAM
:0:
* ^X-Mailer.*MultiMailer
/dev/null
       
:0:
* ^X-Mailer:.\Aureate\ Group\ Mail\ Free\ Edition.*$
/dev/null

:0:
* X-Mailer:.\Ellipse\ Bulk\ Emailer\ v2.0.*$
/dev/null
       
# Anything that has not been delivered by now will go to $DEFAULT
# using LOCKFILE=$DEFAULT$LOCKEXT

---------------------
Fin de ~/.procmailrc 
---------------------

Como véis, se puede hacer exactamente lo mismo con el exim que con el
procmail.

4. MUA. El Cliente de Correo y tu dirección de correo verdadera
----------------------------------------------------------------
----------------------------------------------------------------
	Como es normal, tu dirección de correo no tendrá nada que ver con tu
login@maquina de tu casa. Pero claro, tu quieres que tus mensajes lleguen,
¿nó?... Bueno entonces necesitas: a) un cliente que te permita definir tu
campo From: (cualquiera decente: pine, mutt (¡¡este!!), netscape, kmail...)
b) reescribir las cabeceras en el MTA (se puede con el exim)
	Aquí comento la primera opción. En clientes como netscape, kmail,
etc... esto ya lo haces cuando configuras el programa. En el Pine, has de
buscarlo dentro del archivo de configuración que se lanza con la tecla 'C'.
	En el mutt has de incluir algo así en tu archivo .muttrc de
configuración. Aprovecho para recomendar el mutt como cliente de correo por su
potencia, colorines, soporte para hilos de conversación (muy útil si estás
suscrito a alguna lista de correo, como la del gul), integración MIME (te
llama a los programas necesarios para ver los adjuntos --fotos .jpg, por
ejemplo-- según la entrada del /etc/mailcap --te permite ver mensajes en html
llamando dinámicamente al lynx--), integración PGP/GPG... etc...

$/.muttrc
---------
[....]
set hdrs
# Cabeceras definidas por el usuario

my_hdr From: Daniel Payno <dpay@retemail.es>
my_hdr Reply-to: Daniel Payno <dpay@retemail.es>
my_hdr X-Editor: Vim 5.3
my_hdr X-DSA/ElGamal-KeyID: 0xEC1EBDC6
my_hdr X-Operating-System: `uname -a`
[....]
Fin de $/.muttrc
----------------

Como véis, podéis reescribir muchas cabeceras del mensaje.


Bueno, y esto es todo. Si tenéis alguna duda, o queréis mi configuración del
mutt, por ejemplo, no tenéis más que enviar un mensaje, a mí o a la lista del
gul....

Espero que os sea útil, y me perdonéis lo largo del mensaje.

-- 
             _
            |_)_.              dpay@retemail.es
            | (_|\/            payno@gul.uc3m.es
                 /

...Linux Powered!


----mail.lnx-----


-- 
73's
	Daniel Payno
	payno@gul.uc3m.es

	Visita nuestro FTP ftp://ftp.gul.uc3m.es (en pruebas)


Reply to: