Guía de despliegue y configuración del servicio de correo

Preparacion basica

  • Descargar la imagen de: ----
  • Preparar la maquina virtual siguiendo ModularITXenUDeploymentGuideEs con los siguientes parametros:
    • Tamaño Volumen: 3GB
    • RAM: 512 MB
    • Nombre: mail
  vmcreate --size 3G --file /opt/xen/mail-1.1_2.tgz --mem 512 --ip 192.168.69.24 mail
  • Crear un volumen LVM llamado mail_home para el home del Mail. El tamaño sera el suficiente para albergar los datos. Por ejemplo, para crearlo de 30G:
  lvcreate -L30G -n mail_home sys
  mkfs -t ext3 /dev/sys/mail_home
  • Añadir este volumen a la configuración de la maquina virtual (/etc/xen/auto/mail) como disco hda2
  [ 'phy:/dev/sys/mail,hda1,w','phy:/dev/sys/mail_home,hda2,w','phy:/dev/sys/swap_mail,hdb1,w' ]
  • Arrancar la máquina virtual
  xm create -c /etc/xen/auto/mail
  • Entrar como root con clave passwd.root y cambiarla.

Configuración de la maquina

Existen dos opciones de configuración:
  • Configuración centralizada: Si la maquina va a estar integrada en una infraestructura de gestión ModularIT.
  • Configuración local: Si la maquina no va a estar integrada en una infraestructura de gestión ModularIT.

Configuración centralizadas

En el servidor Puppet

  • En el grupo de cliente de la maquina, definimos los parametros globales referentes a los servicios de la maquina Mail:
  ## Mail service variables
  # IP of the mail server
  $mail_ip = "192.168.69.24" 
  # Mail domainname
  $maildomain = "modularit.lan" 
  • Crear la entrada de la maquina que estamos instalando, con su nombre ModularIT
  node "devel.mail" inherits "devel" {
        # First installation?
        $bootstrap = yes

        $modularit_name = "devel.mail" 
        $comment = "Development Mail" 
        include modularit 
  }

En el cliente (la maquina que estamos instalando)

  • Paramos puppetd y lo arrancamos en modo debug para comprobar que actualiza todo:
  /etc/init.d/puppet stop
  puppetd --debug --no-daemonize --runinterval 60 --fqdn NOMBRE_MODULARIT --server PUPPET_MODULARIT
  • Los parametros NOMBRE_MODULARIT y PUPPET_MODULARIT serán facilitados por el responsable del servicio.
  • Una vez que el puppet completa varios ciclos sin error, lo ejecutamos como servicio:
  /etc/init.d/puppet restart
  • Para comprobar que las notificaciones al Nagios funcionan correctamente, ejecutamos el planificador de PIFIA
  /var/lib/pica/bin/scheduler Emergency
  /var/lib/pica/bin/scheduler Warning
  • En el Nagios comprobamos si hay alguna alerta que no genere un OK. En este punto es normal tener alertas critical de AIDE

Configuración local

Este tipo de instalación es necesaria cuando la maquina no esta integrada en un entorno de gestión centralizado ModularIT

  • Ir al directorio /opt
  • Descargar el arbol de configuraciones de ModularIT
  links --source "http://git.modularit.org/?p=modularit.git;a=snapshot;h=HEAD;sf=tgz" | tar xvzf -
  • Esto nos creo un directorio /opt/modularit
  • Creamos el directorio de módulos de puppet y enlazamos a ModularIT
  mkdir /etc/puppet/modules
  ln -s /opt/modularit/Puppet/modularit /etc/puppet/modules/
  • Editamos el fichero de variables de configuración /opt/modularit/Puppet/offline/variables.pp y lo adaptamos a la configuración que queremos usar. Este fichero sera común para todas las maquinas ModularIT de esa instalación concreta
  • Editamos el fichero /opt/modularit/Puppet/offline/offline.pp para establecer el nombre y el tipo de maquina ModularIT, en este caso mail. Este fichero sera diferente para cada maquina (el nombre y el tipo de maquina cambia)
  • Una vez que tenemos la configuración, ejecutamos puppet en modo offline
  puppet --debug /opt/modularit/Puppet/offline/offline.pp
  • El proceso debería terminar sin errores

Preparación del Servicio

  • Ejecutamos el script de inicializacion del servicio LDAP. OJO! este paso borra la base de datos del LDAP, asi que solo deve hacerse si realmente estamos inicializando el servicio
  modularit-mail-init.rb
  • Este script hace lo siguiente
    • Configura el sistema para usar los usuarios del LDAP
    • Genera los mapas de postfix
    • Comprobar que vemos las cuentas de usuario y grupo del ldap con getent passwd y getent group
    • Creamos el certificado para la maquina si aun no existe.
  cd /etc/pki/tls/certs
  make mail.pem
  ln -s mail.pem smtp.pem
  • Editar el /etc/postfix/main.cf:
    • En smtpd_sender_restrictions configurar reject_unauth_destinations en función de si la maquina es MX secundario o no (está comentado).
    • La opcion reject_unverified_sender en maquinas con mucho trafico puede producir problemas de rendimiento. Consultar al responsable del servicio sobre si se debe comentar o no.
    • Si tenemos redes no conectadas a ninguna de las interfaces, a las cuales le permitamos el envio de correos, añadir en mynetworks. Se recomienda añadir también en dicho caso las propias.
  • Editar /etc/postfix/helo_checks y poner la expresión regular del nombre y dirección IP de la maquina que se esta instalando. OJO! la IP debe ser la IP publica a través de la que se accede a esa maquina desde Internet.
  • Añadir al fichero /etc/postfix/localdomains la lista de dominios locales.
  • Reiniciamos postfix:
  service postfix restart
  • Configuramos los alias
    • En /etc/aliases configurar al menos el alias de root a una dirección valida
    • Añadir todos los alias necesarios, sobre todo si es una migración
    • Tener en cuanta los alias típicos como info, admin, etc
    • Cargamos los alias
  newaliases; postfix reload
  • Nos conectamos al puerto 25 para asegurarnos que postfix responde
  • Debe aparecer un mensaje 220 con el nombre publico completo de la maquina. Desconectar con quit

Inicializar AIDE

Una vez que esta todo funcionando, inicializar la BBDD de AIDE tal como se describe en AIDE

Batería de pruebas

Las siguientes pruebas se deben hacer desde una maquina de Internet, no desde el propio servidor ni de maquinas de la misma red local
  • Comprobar que acepta correo para los dominios locales:
  [root@mail certs]# telnet mail.example.com 25
  Trying XX.XX.XX.XX...
  Connected to mail.example.com (XX.XX.XX.XX).
  Escape character is '^]'.
  220 mail.example.com ESMTP Postfix
  helo gate.dominio.com
  250 mail.example.com
  mail from: test@dominio.com
  250 2.1.0 Ok
  rcpt to: test@example.com
  250 2.1.5 Ok
  data
  354 End data with <CR><LF>.<CR><LF>
  test
  .
  250 2.0.0 Ok: queued as 5A5A418145
  quit
  221 2.0.0 Bye
  Connection closed by foreign host.

OJO, Utilizar para el from la dirección del técnico y para el to una dirección valida de un dominio local.

  • Utilizando como modelo la transacción anterior comprobar:
    • Si ponemos el mail from: sin poner el helo inicial nos responde: 503 5.5.1 Error: send HELO/EHLO first
    • Si ponemos el nombre de la maquina (mail.example.com en el ejemplo) en el helo, despues del rcpt to: nos responde: Helo command rejected: Don't use my hostname
    • Si ponemos un nombre incompleto o inexistente en el helo nos rechaza el correo
    • Si ponemos una IP en el helo, despues del rcpt to: nos responde: Helo command rejected: Your client is not RFC 2821 compliant
    • Si ponemos direcciones incompletas (solo usuario) en from:/to: nos devuelve: Sender/Recipient address rejected: need fully-qualified address
    • Si ponemos un dominio inexistente en el from:/to: nos devuelve: Sender/Recipient address rejected: Domain not found
    • Si ponemos un dominio no local en el to: nos devuelve: Relay access denied
    • Si ponemos una dirección inexistente de un dominio que exista (p.ej. ) nos devuelve:
Sender address rejected: undeliverable address: host mail.dominio.com[XX.XX.XX.XX] said: 550 <noexiste@dominio.com>: Recipient address rejected: User unknown in local recipient table (in reply to RCPT TO command)

Esta restricción retrasa un poco la respuesta, pero limita muchísimo el SPAM porque verifica que la dirección del emisor existe.

  • Comprobar el filtro amavisd. Estas pruebas deben hacerse manteniendo una ventana abierta con el comando tail -f /var/log/messages en el servidor para ver los mensajes del amavis
  • Enviar un mensaje como en la transacción anterior, y en el data incluir la cadena de test de antivirus:
  X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
  • Comprobar que el clamd responde INFECTED y se descarta el correo
  • Enviar un mensaje como en la transacción anterior, y en el data incluir la cadena de test de SPAM:
  XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  • Comprobar que se marca como SPAM.
  • Como ultima prueba, configurar un cliente de correo, enviar un correo a y pasados unos pocos minutos comprobar que recibimos un mensaje de respuesta.

Also available in: HTML TXT