IMAP Service

By 26 de octubre de 2007 Debian, Geek Works, Linux 5 Comments

images.jpegIntroducción

En este Post voy a explicar paso a paso la instalación de Debian en un ordenador bastante modesto:

* Pentium 100 Mhz
* 24 Mb de RAM.
* Disco duro de 6Gb
* Sin lector de CD-ROM
* BIOS no autoarrancable
* Con disquetera
* Sin USB
* Tarjeta de Red: 3Com Etherlink III ISA

El objetivo es convertir este equipo (a partir de ahora se llama 'bichejo', el nombre es una idea original de mi mujer), en un servidor de correo y Web, proporcionando los siguientes servicios:

* MTA: exim4.
* fetchmail + gotmail: para recuperar correo de cuentas que ya tenía en POP3 ó en hotmail.
* Filtros del correo con Amavis: Spamassasin + ClamAV.
* Servidor IMAP: courier-imap.
* Caché IMAP: imapproxy.
* Reglas de correo (ubicar deterinados correos en carpetas definidas): procmail.
* Servidor Web: boa.
* Webmail: courier-webmail (sqwebmail).

Con el software seleccionado se ha tenido en cuenta lo limitado de la máquina y la realidad es que al final el rendimiento es aceptable.

Si tienes algún trasto antiguo olvidado en casa, y no sabes qué hacer con él, quizás sea un buen momento para resucitarlo!!!!!.
More...Instalación del sistema operativo (desde Internet).

Este fue el primer problema, es ordenador no tiene CD-ROM, además la BIOS tampoco permite arrancar desde CD, con lo que tampoco sirve instalarle alguno. Probé un disquette de arranque universal (http://btmgr.webframe.org/) pero tampoco resultó, al ser un ordenador tan antiguo a veces pasa.

La solución fue instalar Debian desde Internet, lo único que había que hacer era crear los discos 'boot' y 'root' y luego indicar que la instalación la debía hacer desde un determinado mirror. Después me di cuenta que no era suficiente con estos discos y necesitaba otro con drivers de tarjetas antiguas como la mía (driver 3c509).

El modo de crear los discos es el siguiente:

* Descargar imágenes:

http://http.us.debian.org/debian/dists/sarge/main/installer-i386/current//images/

Hay que bajarse:

boot.img (es el primer disquette que insertaremos)
root.img (el segundo)
net-drivers.img (este es opcional, sólo será necesario en caso que nuestra tarjeta no haya podido ser detectada y necesitemos otro driver).

* Grabar las imágenes: usaremos dd

dd if=boot.img of=/dev/fd0 bs=1024 conv=sync ; sync
dd if=root.img of=/dev/fd0 bs=1024 conv=sync ; sync
dd if=net-drivers.img of=/dev/fd0 bs=1024 conv=sync ; sync

Ahora ya es cuestión de introducir primero el boot y cuando lo pida el root, el net-drivers sólo lo introduciremos en el caso de que la tarjeta de red no sea detectada.

Como la finalidad del equipo es de servidor de correo, no importa que algún Sw sea antiguo, lo que se requiere es que sea muy seguro, por ello en el momento de seleccionar el mirror los paquetes elegidos serán los "stable".

No voy a explicar los pormenores de la instalación ya que con el instalador que viene con esta versión de Debian (Sarge) es todo bastante sencillo, como mucho destacar las particiones hay que tener en cuenta que con sólo 20 Mb de memoria RAM vamos a nacesitar una cantidad considerable de swap, las particiones han quedado asi:

Filesystem 1K-blocks Used Available Mounted on
/dev/hda2 5945436 519504 5123912 /
/dev/hda1 257000 84388 172612 swap

Al finalizar se instalará también el gestor de aranque y una vez rearranquemos el servidor tendreos que contestar a las preguntas de debconf para acabar de configurar el sistema e instalar algunos paquetes que estaban pendientes, por supuesto todos los paquetes necesarios se obtendrán desde internet.
Instalación del Sw de servidor

Ahora empieza lo más interesante, a continuación explicaré cómo instalar el siguiente software:

* exim4: es un MTA, se encarga de recibir el correo y guardarlo en los buzones de los diferentes usuarios a los que da servicio, también se encarga del envío de correo, en nuestro caso lo emplearemos para el envío tanto dentro del dominio como hacia Internet.

* fetchmail: hasta ahora estaba usando una cuenta POP3 suministrada por mi proveedor de acceso a internet, hasta que todos mis contactos se acostumbren a enviarme los mails a mi nuevo dominio tendré que ir revisando el correo que me llegue a esta cuenta... o no... puedo hacer que fetchmail vaya revisando los correos de esta cuenta y se los vaya entregand o a exim4 para que los gestione como el resto de correos que le llegan directamente.

* gotmail: esto ha sido requerido por uno de los futuros usuarios del servidor, se trata de un script en perl que se encarga de hacer fetch a servidor de hotmail o MSN. Al igual que fetchmail el correo llegará directamente el buzón Maildir del usuario.

* procmail: permite definir reglas sobre los correos cuando los deja exim4, pej. podemos indicar que un correo que provenga de un From determinado lo deje en una carpeta en concreto. Realmente procmail es muy versátil, pero no voy a entrar ahora en el detalle de lo que se puede hacer con este Sw.

* courier-imap: servidor IMAP, se encarga de actuar sobre los buzones donde escribe exim4 y permite interactuar con ellos. Pej. con kmail, evolution, thunderbird... podemos acceder a nuestro correo mediante courier-imap y ver el correo, crear carpetas, distribuirlo en las carpetas... En nuestro caso lo usarmos tanto para acceder desde los clientes antes mencionados como para acceder vía web con sqwebmail.

* imapproxy: es un caché de IMAP.

* amavis: lo vamos a usar para pasar filtros de spam y antivirus sobre los correos que le llegam a exim4.

* spamassasin: es el Sw anti-spam por excelencia, además configuraremos amavis para poder aplicar la funcionalidad de aprendizaje de spamassasin.

* clamav: Sw antivirus libre.

* boa (servidor http pequeño y sencillo pero extremádamente eficiente): lo usaremos para poder acceder vía Web a nuestro correo.

* sqwebmail: es una aplicación perl invocada desde boa para acceder al correo mediante llamadas a courier-imap. Es más simple que squirrelmail pero infinitamente más ligero.
exim4
Para instalarlo hay que ejecutar:

# apt-get install exim4

y permitir a apt que instale todas las dependencias que sea necesarias.

Nos preguntará el uso que queremos hacer de él e indicaremos 'Internet' (no usaremos smarthost ya que este servidor es el que se encargará de recepcionar y remitir lo correos a quien corresponda, ya sean buzones locales como buzones externos).

Como dominio indicaremos nuestro dominio de Internet. Por ejemplo en mi caso tengo como dominio: nosotrosmismos.org. Así pues, queda así el fichero de configuración /etc/exim4/update-exim4.conf.conf:

"""
dc_eximconfig_configtype='internet'
dc_other_hostnames='nosotrosmismos.org'
dc_local_interfaces=''
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery=maildir_home
dc_local_interfaces='0.0.0.0.25 : 127.0.0.1.10025'
"""

si queremos que use para el envío SMTP otro servidor diferente tendríamos que indicar pej.:

"""
dc_eximconfig_configtype='smarthost'
dc_smarthost='smtp2.adsl.ya.com'
"""

He indicado:

dc_localdelivery=maildir_home

esto se debe a que courier-imap requiere que el buzón sea formato Maildir para funcionar.

Si se ha tenido que cambiar a mano este fichero de configuración luego habrá que ejecutar:

# update-exim4.conf

y por supuesto:

# /etc/init.d/exim4 restart

Ojo, el directorio Maildir no se crea automáticamente, hay que crearlo a mano para los usuarios que queramos:

# su - usuario
$ maildirmake

Ahora probaremos que los correos llegan:

# echo "test" | mail usuario
# su - usuario
$ ls -lrt Maildir/new

debería aparecer un correo nuevo en el directorio indicado.

La línea:

"""
dc_local_interfaces='0.0.0.0.25 : 127.0.0.1.10025'
"""

se emplea para comunicar Amavis (lo veremos más adelante) con exim4.
Fetchmail

Lo de siempre, para instalar:

# apt-get install fetchmail

Luego sólo hay que escribir en el $HOME del usuario un fichero .fetchmailrc con este contenido:

"""
set postmaster "aaa"
set bouncemail
set no spambounce
set properties ""

poll pop.domadsl.ya.com with proto POP3
user 'xxx' there with password 'yyy' is 'zzz' here
"""

donde:

aaa -> cuenta unix
xxx -> usuario de la conexión pop3
yyy -> el password
zzz -> dirección donde se enviará por exim4 el correo

El fichero debe tener unos permisos concretos o fetchamil no lo leerá:

# chmod 0710 .fetchmailrc

Ahora bien, para que fetchmail se conexte al pop3 es necesario ejecutarlo:

# fetchmail -s

si queremos que se ejecute periódicamente podemos crear un cron que lo haga por nosotros:

# echo "*/3 * * * * /usr/bin/fetchmail -s" > cron.fetchmail
# crontab cron.fetchmail

y para verificar que está escrito en el cron:

# crontab -l

Gotmail
Lo de siempre, para instalar:

# apt-get install gotmail

Luego sólo hay que escribir en el $HOME del usuario un fichero .gotmailrc con este contenido:

"""
username=xxx
password=yyy
forward=zzz
silent
only-new
mark-read
#delete
"""

donde:

xxx -> usuario cuenta hotmail
yyy -> el password
zzz -> dirección a la que fordwardear el correo

# chmod 0710 .gotmailrc

Ahora bien, para que gotmail se conecte es necesario ejecutarlo:

gotmail

si queremos que se ejecute periódicamente podemos crear un cron que lo haga por nosotros:

# echo "0 * * * * /usr/bin/gotmail " > cron.gotmail
# crontab cron.gotmail

y para verificar que está escrito en el cron:

# crontab -l

procmail
Lo usaremos para:

* filtrar los mensajes de las listas de correo para que se muevan a carpetas que definiremos para ello.
* También pondremos filtros según quien escribe: amigos, familia...
* Indicaremos dónde dejar los mails que Spamassasin marcará como Spam.
* Indicaremos dónde dejar los mails que ClamAV marcará como con virus.
* A veces otros servidores efectúan también filtrados anti-spam y añaden literales del tipo "[SPAM DETECTED]" en el subject del mail, indicaremos también qué hacer con ellos.

Primero lo habitual:

# apt-get install procmail

Ahora sólo hay que crear un fichero en el $HOME del usuario .procmailrc con un contenido similar a este:

"""
MAILDIR=$HOME/Maildir/
DEFAULT=$HOME/Maildir/

# Filtro Las Provincias
:0
* ^From: .[email protected]\.es.*
.01_Subscripciones.LasProvincias/

# Filtro ListaCorreo Python
:0
* ^To: .*python\[email protected]\.org.*
.01_Subscripciones.Python/

# Filtro ListaCorreo Zope
:0
* ^To: .*zope\[email protected]\.org.*
.01_Subscripciones.Zope/

# Filtro Spam filtrado por alguien que ponga el literal [SPAM DETECT] :0
* ^Subject: .*[SPAM DETECT].*
.Spam/

# Manda a carpeta Spam lo que spamassesim marca como spam:
:0
* ^X-Spam-Flag: YES
.Spam/

# Manda a la carpeta Virus lo que clamav marca como virus
:0
* ^X-Virus: Yes
.Virus/

# Filtro ListaCorreo ZWareHouse
:0
* ^To: .[email protected]\.org.*
.01_Subscripciones.ZWareHouse/
"""
courier-imap

Lo primero:

# apt-get install courier-imap

Si queremos usar este servicio también desde fuera de la máquina local, que será el caso más habitual tendremos que asegurarnos que en el fichero /etc/courier/imapd tengamos esta línea del siguiente modo:

"""
ADDRESS=0
"""

Hay que indicar el directorio donde courier-imap leerá el buzón de cada usuario, que como hemos indicado previamente es Maildir:

"""
MAILDIRPATH=Maildir
"""

Vamos a usar un caché para IMAP, como lo habitual, es que el servidor IMAP vaya por el puerto 143, haremos la siguiente jugada:

- courier-imap: irá por el puerto 142
- imapproxy (el caché): irá por el puerto 143 y leerá el 142 de courier-imap.

Para ello tendremos que modificar la siguiente línea de /etc/courier/imapd:

"""
PORT=142
"""

De este modo cuando nos conectemos al servidor IMAP lo haremos por el puerto 143, si quisiéramos acceder al IMAP sin usar caché lo podríamos hacer accediendo por el puerto 142.

imapproxy

Es un proxy entre los clientes IMAP y el servidor IMAP, la idea es obtener un caché entre ambos y que sea el proxy quien únicamente se comunique con el servidor IMAP.

Para configurarlo le he indicado que el puerto del proxy es el 143 y que se conectará al servidor de IMAP que está en el puerto 142.
Configuración necesaria:
- tal como he comentado en la configuración de courier-imap, este servidor tendrá que escuchar por el 142 (ver apartado anterior).

- imapproxy:

listen_port 143
server_port 142
Amavis

Lo típico:

# apt-get install amavis-new

Amavis tiene dos posibilidades para lanzar Spamassasin:

  • Usar el demonio spamd
  • Lanzar a mano el scan de Spamassasin.

El mismo Amavis detecta si está el demonio arrancado y es caso de que lo esté directamente lo usa, en caso contrario emplea la alternativa comentada.
He estado probando y el tiempo es mucho mejor con smapd, aunque implique el coste de tener el demonio corriendo, de todos modos merece la pena.

Cambios en el /etc/amavis/amavis.conf:

"""

# Aparece en la cabeceras de los mensajes, no es obligatorio cambiarlo, pero sí recomendable

$mydomain = 'nombre del dominio';

# Comunica amavis y exim4 (ver configuración de exim4)

$forward_method = 'smtp:127.0.0.1:10025';

$notify_method = $forward_method;

# Esto es para no rechazar el correo, sino marcarlo como SPAM, luego procmail se encargará de dejarlo en nuestra carpeta de SPAN, a veces se detecta SPAM que realmente no lo es

$final_spam_destiny = D_PASS;

# Comento las sigientes líneas para evitar que se envíen mail en caso de aviso de virus y para que no se pongan en cuarentena mails con SPAM ó virus

#$virus_admin = "gallir\@$mydomain";

#$virus_quarantine_to = 'virus-quarantine';

#$spam_quarantine_to = 'spam-quarantine';

#Es el coeficiente porcentil para clasificar un mensaje como SPAM

$sa_tag_level_deflt = 4.0; # add spam info headers if at, or above that level

$sa_tag2_level_deflt = 5.0; # add 'spam detected' headers at that level

# Le pediremos que añada este texto al subject del mensaje

$sa_spam_subject_tag = '***SPAM*** ';

# El servidor no es muy potente, no admitiremos procesos concurrentes, siempre de mensaje en mensaje

$max_servers = 1; # number of pre-forked children (default 2)

"""
clamav

Para instalar, un modo novedoso :-)

# apt-get install clamav
Es conveniente instalar descompresores, así los podrá emplear clamav para revisar de virus anexos comprimidos:
# apt-get install unrar arj zoo lzop unzip [...]

El clamav-daemon es el demonio al que se harán las peticiones desde Amavis, freshclam va actualizando la base de datos de virus.
No será necesario modificar ningún fichero de configuración, ya que Amavis al arrancar ya detectará la disponibilidad del antivirus y lo utilizará.
Spamassasin

# apt-get install spamassassin

No recuerdo haber tenido que cambiar nada de la configuración. El tema de aprendizaje ya lo hace automáticamente Amavis después de cada petición de escaneo de correo.
sqwebmail + boa

boa es un servidor http que destaca por ser muy ligero.

# apt-get install sqwebmail boa

El modo de acceder al servidor será:

http://[servidor]/cgi-bin/sqwebmail

5 Comments

Leave a Reply

Your email address will not be published.