Episodio III: Exim4 + Spamassassin + ClamAV, sin usar sa-exim

Nota: Este post pertenece a una saga de configuración de correo, para entenderlo debes ir primero a la página de índice en saga de servidores de correo.

Spamassassin

Al menos existen cuatro formas de integrar spamassassin en el sistema de correo que he probado en diferentes servidores.

  1. Usar amavis. No me gusta, es un servicio más ejecutándose, a más servicios en la cadena de correo mayor es la probabilidad de fallos
  2. Usar el paquete sa-exim. En otros modos de configuración de servidores de correo propongo su uso.
  3. Usar spampd. Es un proxy de spamassassin, pero aunque dicen que consume menos recursos que el propio demonio de spamassassin, no me ha terminado de funcionar bien con la configuración de usuarios virtuales de esta serie de posts.
  4. Usar el propio servicio/demonio de spamassassin, spamd. Me quedo con esta.

Para usar la configuración del punto 4 se añade sólo el paquete spamassassin, no hace falta nada más, se puede desinstalar spamc y spampd.

Activación de spamassassin en exim4

Por si no está instalado: apt install spamassassin. Tras la  instalación, en Debian 9, hay que iniciarlo manualmente con systemd: systemctl start spamassassin.service

Tras las instalación, en en el fichero de configuraciones globales /etc/exim4/conf.d/main/00_exim4-config_mypanel se añade lo siguiente:

spamd_address = 127.0.0.1 783

Se debe comprobar que en ese puerto está operando spamassassin, por ejemplo con: netstat -ltnp

El control de spam y de virus se realizan en el ACL de contenido de mensajes en el fichero /etc/exim4/acl/40_exim4-config_check_data. La primera regla mostrada viene comentada, pero la segunda la añado para marcar el correo y que el transporte lo entregue en la carpeta SPAM de la cuenta del usuario.

  warn
    spam = Debian-exim:true
    add_header = X-Spam_score: $spam_score\n\
              X-Spam_score_int: $spam_score_int\n\
              X-Spam_bar: $spam_bar\n\
              X-Spam_report: $spam_report\n

  warn    
     spam       = spam/defer_ok
     logwrite   = :main: SPAM detected (score $spam_score)
     add_header = X-Spam-Flag: YES

Con esto Exim4 manda los correos entrantes a spamassassin, ahora toca configurar spamassassin para que funcione con la configuración de usuario virtual

Evitar escanear correos autenticados

Con la configuración anterior todos los correos son escaneados, incluso los salientes de usuarios autenticados y esto retrasa la salida de los mismo. De hecho es un poco molesto esperar los envíos.

Para evitar este escaneo, basta con poner antes de las reglas anteriores una regla para que acepte los autenticados como se muestra a continuación (fichero /etc/exim4/acl/40_exim4-config_check_data):

   # No escanear los autenticados
   accept 
     authenticated = *
     endpass
   
   warn     
     spam = Debian-exim:true     
     add_header = X-Spam_score: $spam_score\n\
               X-Spam_score_int: $spam_score_int\n\
               X-Spam_bar: $spam_bar\n\
               X-Spam_report: $spam_report

   warn 
     spam = spam/defer_ok
     logwrite = :main: SPAM detected (score $spam_score)
     add_header = X-Spam-Flag: YES

Spamassassin con usuario virtual de correo

El objetivo es que la ejecución de spamassasin se realice con una única configuración para el usuario vmail en todo el sistema. Para ello hay que alterar la configuración predeterminada.

Además aprovecho para activar algunas funcionalidades adicionales. Personalmente cambio lo siguiente:

  • Activo pyzor y razor: Redes colaborativas de detección on line apt install pyzor razor
  • Establezco bayes globales en la cuenta del usuario vmail.
  • Activo la comprobación en listas RBL.
  • Activo log en syslog.

Al final de fichero /etc/spamassassin/local.cf se añade:

bayes_ignore_header X-Bogosity                                                                                       
bayes_ignore_header X-Spam-Flag                                                                                      
bayes_ignore_header X-Spam-Status                                                                                                                                                                                                                                                                                                            
bayes_path /home/vmail/.spamassassin/bayes
                                                                                                                                                                                              
# Enable or disable network checks                                                                                   
skip_rbl_checks         0                                                                                            
use_razor2              1                                                                                                                                                                                        
use_pyzor               1                                                                                            

loadplugin     Mail::SpamAssassin::Logger::Syslog                                                                                                                     
required_score 6.0

Para que spamd funcione con un único usuario como usuario virtual es necesario cambiar las opciones de inicio en  en el fichero /etc/default/spamassassin

OPTIONS="--max-children 3 --nouser-config --virtual-config-dir=/home/vmail/.spamassassin -u vmail"

Con esto los ficheros de bayes estarán en /home/vmail/.spamassassin

Activación de ClamAV

Por último activemos ClamAV. No tengo muy claro que este antivirus sirva para algo aparte de consumir muchos recursos en el sistema. Para activarlo, instalamos el paquete clamav-daemon y en el fichero de definiciones personal /etc/exim4/conf.d/main/00_exim4-config_mypanel añado:

av_scanner = clamd:/var/run/clamav/clamd.ctl

Ahora de vuelta al fichero de exim4 /etc/exim4/conf.d/acl/40_exim4-config_check_data se activan las siguientes líneas comentadas

deny
   malware = *
   message = This message was detected as possible malware ($malware_name).

Podemos encontrar en Debian un problema de permisos en la comunicación de Exim4 con ClamAV, he probado dos soluciones:

Solución 1:

ClamAV necesita leer /var/spool/exim4/scan/ para escanear los correos, para solucionarlo: adduser clamav Debian-exim

Pero no basta con esto, hay que cambiar una directiva de ClamAV en /etc/clamav/clamd.conf

AllowSupplementaryGroups yes

Solucion 2:

Cambiar el grupo de /var/spool/exim4/scan/ a clamav y establecer los permisos de grupo adecuados.

RBL y DCC

Spamassassin ya lo hace y adicionalmente se puede hacer con exim4 pero para que sea efectivo es necesario cambiar el ACL

CHECK_RCPT_IP_DNSBLS = cbl.abuseat.org : bl.spamcop.net : dnsbl.sorbs.net : dnsbl.njabl.org

De forma predeterminada Exim4 solo marca para que sea efectivo se puede cambiar warn por deny en el fichero /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt

deny
dnslists = CHECK_RCPT_IP_DNSBLS
add_header = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text)
.endif

Otra solución se incluye en los tests de spamassassin en /etc/spamassassin/local.cf

skip_rbl_checks         0
rbl_timeout             15

paulino

paulino escribió 18 entradas

Navegación de la entrada


Comentarios

  • pepiton2017

    Buenos dias, una pregunta, mi escenario son 3 servidores mx con exim haciendo de relay a 4 servidores por detrás dnd tengo los buzones de los usuarios. Como pudiera entrenar el spamassasin con las reglas bayesianas si los correos no son almacenados en mis servidores mx?

    • paulino

      Hola,

      Yo he tenido escenarios parecidos, yo uso un mini servidor oculto con acceso ssh y en el cron tenía:

      #!/bin/bash
      # Copia los bayes de spamassassin desde ovy al resto de servidores
      
      ORG=/opt/backup/ovy/ovy-clonado/home/vmail/.spamassassin/bayes*
      
      #Server 1
      scp $ORG mail.xyz1.es:/home/vmail/.spamassassin
      rsh mail.xyz.es chown vmail:vmail /home/vmail/.spamassassin/*
      
      #server 2
      scp $ORG mail.xyz2.es:/home/vmail/.spamassassin
      rsh mail.xyz.es chown vmail:vmail /home/vmail/.spamassassin/*
      

      Ahora he cambiado un poco el procedimiento, por seguridad. En el mini-servidor tengo un usuario sin privilegios sobre el que hago un rsync de las carpetas maildir que me interesan. El resto de servidores tienen acceso ssh para hacer rsync del maildir, y localmente ejecutar el entrenamiento.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puede usar las siguientes etiquetas y atributos HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>