Configurando servidor de correo EXIM – Parte I

Publicado: diciembre 29, 2013 en Seguridad, Server, System
Etiquetas:, , , ,

Email-LogoEXIM es un servidor de correo, utilizado por algunas distribuciones por defecto, que nos puede venir muy bien para el envío de correo local. Así podremos recibir notificaciones de algunos servicios, como pueden ser cron, fail2ban, etc.

En el caso de querer levantar un servicio de correo no solo para nuestra red local, y con acceso desde fuera de la misma, quizás sea más interesante utilizar PostFix. En este artículo veremos cómo configurar EXIM para que funcione dentro de nuestra red y, además, pueda enviar correo al exterior utilizando otro servidor smtp, por ejemplo,  una cuenta de GMAIL.

Hay que tener en cuenta que, aunque solo dispongamos de un equipo, es interesante disponer de la posibilidad de envío de correos pues, muchos demonios, lo utilizan para enviar notificaciones. En especial, aquellos destinados a securizar nuestro equipo y, por eso, es conveniente configurarlo y que nos envíe los correos, no solo a nuestro correo local, también a alguna cuenta externa.

Para la entrega de correo, utilizaremos procmail, una herramienta muy potente para aplicar filtros a los correos entrantes.

Instalación y configuración inicial

Instalemos los paquetes necesarios:

pacman -Syu exim procmail

Una vez hecho esto, editamos su archivo de configuración, /etc/mail/exim.conf, y añadimos el nombre de máquina de nuestro equipo. Si utilizamos un dominio, debe ser nombre_máquina.dominio. En el caso de que solo dispongamos de un equipo, con el nombre de éste, o dejando el campo comentado, es suficiente.

######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################
# Specify your host's canonical name here. This should normally be the fully
# qualified "official" name of your host. If this option is not set, the
# uname() function is called to obtain the name. In many cases this does
# the right thing and you need not set anything explicitly.

primary_hostname = nombre_máquina

Procmail y ejemplos de uso

Hecho esto, vamos a añadir la configuración necesaria para que sea procmail quien nos entregue el correo. En la sección de routers, añadimos al final, justo antes de router userforward, las siguientes líneas:

...
procmail:
    debug_print = "R: procmail for $local_part@$domain"
    driver = accept
    domains = +local_domains
    check_local_user
    transport = procmail_pipe
    # emulate OR with "if exists"-expansion
    require_files = ${local_part}:\
        ${if exists{/etc/procmailrc}\
         {/etc/procmailrc}{${home}/.procmailrc}}:\
         +/usr/bin/procmail
    no_verify
    no_expn

userforward:
    driver = redirect
    check_local_user
    # local_part_suffix = +* : -*
    # local_part_suffix_optional
...

En el apartado de transport, añadimos al final:

...
address_reply:
driver = autoreply

procmail_pipe:
    debug_print = "T: procmail_pipe for $local_part@$domain"
    driver = pipe
    path = "/bin:/usr/bin:/usr/local/bin"
    command = "/usr/bin/procmail"
    return_path_add
    delivery_date_add
    envelope_to_add

######################################################################
#                      RETRY CONFIGURATION                           #
######################################################################
...

Y con esto ya podemos recibir y enviar los correos electrónicos y utilizar procmail para su filtrado. Podemos crear un archivo de configuración en /etc, llamado procmailrc para filtros y reenvíos generales y, cada usuario, en su home, puede crear un .procmailrc para personalizar filtros. En /etc/procmailrc podemos añadir la configuración básica y un filtro, por ejemplo,  para que las notificaciones de fail2ban nos lleguen a otro correo:

PATH=/bin:/usr/bin
MAILDIR=/var/spool/mail/
DEFAULT=/var/spool/mail/$LOGNAME

LOGFILE=/dev/null
SHELL=/bin/sh

:0:
* ^From.*Fail2Ban*
* ^Subject:.*banned*
! correo_de_notificaciones@dominio.com

En el caso de los usuarios, si utilizan clientes como KMail, se puede establecer la entrega de correo al maildir creado por estos. Un ejemplo para este cliente sería:

ORGMAIL=/var/spool/mail/$LOGNAME
MAILDIR=$HOME/.local/share/local-mail/inbox/
DEFAULT=$HOME/.local/share/local-mail/inbox/

Envío de correos al usuario root

Para que podamos enviar correos al usuario root (utilizado por algunos demonios), vamos a comentar la línea never_users, añadiendo una almohadilla:

# never_users = root

Dado que no es recomendable que el usuario root pueda recibir correos, en el fichero /etc/mail/aliases, definimos un alias para él. Nos dirigimos al final del archivo y lo establecemos:

# Person who should get root's mail
root: usuario1,usuario2,usuario3@gmail.com

Utilización de smpt externo: Gmail

Para poder enviar correos fuera de nuestro equipo y que estos sean aceptados, podemos utilizar un servidor smpt, como es el de GMAIL. Vamos a crear un router, justo después de creado para procmail:

mail_route:
  driver = manualroute
  domains = ! +local_domains
  transport = gmail_relay
  route_list = * smtp.gmail.com

Para el transporte, después del creado anteriormente, añadimos:

mail_relay:
  driver = smtp
  port = 587
  hosts_require_auth = $host_address
  hosts_require_tls = $host_address

Para poder autenticarnos, en el apartado de authenticators, al final, añadimos:

gmail_login:
  driver = plaintext
  public_name = LOGIN
  hide client_send = : nombre@gmail.com : clave

######################################################################
#                   CONFIGURATION FOR local_scan()                   #
######################################################################

Securizando un poco

En la configuración actual, la clave de gmail está en texto plano y los archivos /etc/exim.conf y /etc/aliases son legibles por todos los usuarios del sistema. Vamos a cambiar los permisos:

sudo chmod go-r /etc/mail/*

Ahora, para que sea legible el archivo /etc/mail/aliases por exim, buscamos en el archivo /etc/mail/exim.conf, el router system_aliases y descomentamos la línea user:

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/mail/aliases}}
  user = exim
  file_transport = address_file
  pipe_transport = address_pipe

Pues esto es todo para el correo local, con posibilidad de envío mediante una cuenta de correo externa. No es necesario levantar el servicio, pues lo hará systemd automáticamente mediante los sockets. Activamos el socket:

sudo systemctl enable exim.socket

En el próximo artículo, levantaremos el servidor para poder utilizarlo desde otros equipos de nuestra red, con diferentes métodos de autencación.

Anuncios
comentarios
  1. […] Configurando servidor de correo EXIM – Parte I diciembre 29, 2013 […]

  2. […] Configurando servidor de correo EXIM – Parte I diciembre 29, 2013 […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s