Servidor de correo – Instalación y configuración Amavis, Clamav y Spamassassin (parte 11)

Esta es una entrada dentro de la serie para la instalación de un servidor de correo completo. Índice completo de contenidos pincha aquí.


En esta entrada vamos a instalar la solución Antivirus y AntiSPAM, con Clamav y Sapamassassin respectivamente, pero gestionado por Amavis, que es el software utilizado por Postfix para la gestión de los dos anteriores.

Solo un detalle, Clamav correrá en el servidor como servicio, pero Spamassassin no, debe de estar parado. Esto es debido a que Amavis usará sus librerías y no utilizará este como servicio, al contrario que el primero.


Instalación de paquetes

Instalamos los siguientes paquetes, quitando el unzoo, indicado en la mayoría de los enlaces que puedes encontrar, ya que no está en los repositorios:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop

Ahora instalamos Razor y Pyzor a Spamassassin para agregar sus rendimientos de filtrado. DCC no lo podemos agregar ya que no se encuentra en los respositorios oficiales. Estos son spamfilters que usan una red de filtrado colaborativa:

apt-get install razor pyzor dcc-client

 


Configuración de Amavis

Editamos el directorio /etc/amavis/conf.d/15-content_filter_mode descomentando dos líneas:

use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1;  # insure a defined return

Editamos el archivo /etc/amavis/conf.d/20-debian_defaults para indicar  la dirección de email donde Amavis nos enviará cualquier notificación y las puntuaciones que tiene configuradas por defecto para el filtrado de mensajes:

…
$sa_spam_modifies_subj = 1;

$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt  = -999;  # Siempre añadimos los spam info headers
$sa_tag2_level_deflt = 4; # Añadimos los 'spam detected' headers
$sa_kill_level_deflt = 10; # Envio de correo DSN...
$sa_dsn_cutoff_level = 10; # ...que no se enviará nunca. Hará quarantine (en /var/lib/amavis/virusmails/)
…

###$virus_admin = "postmaster\@$mydomain"; # due to D_DISCARD default
$virus_admin = "amavis\@$mydomain";
…
$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)
$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA
#$final_spam_destiny       = D_BOUNCE;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)
...

Dejamos pasar el SPAM detectado para entregar en el directorio de SPAM, y con filtros SIEVE poder filtrar estos mensajes a nuestro gusto.

Además, para que surja efecto la configuración anterior, debemos de agregar la siguiente línea. Esta línea no está incluida en la instalación por defecto, y debemos de agregarla o no se sobrescribirán las cabeceras del AntiSPAM, por ejemplo:

...
# Para que los cambios en Amavis tengan efecto en todos los dominios, como las cabeceras de SPAM.
@local_domains_maps = ['.'];
…

Tener en cuenta que los emails en Quarentena se almacenan en el directorio /var/lib/amavis/virusmails/

Agregamos el usuario clamav al grupo amavis y reiniciamos los servicios:

adduser clamav amavis

/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart

Ahora deberíamos editar el archivo /etc/clamav/freshclam.conf para modificar el siguiente parámetro, pero nosotros ya lo teníamos así corregido seguramente por la versión instalada. Este es el programa que actualiza las bases de datos del Antivirus:

[...]
NotifyClamd /etc/clamav/clamd.conf
[...]

Reiniciamos Freshclam:

/etc/init.d/clamav-freshclam restart

Configuración de Spamassassin

Los configuramos en el archivo de Spamassassin /etc/spamassassin/local.cf:

[...]

# No se encuentra en los repos de Debian Stretch
# dcc
#use_dcc 1
#dcc_path /usr/bin/dccproc
#dcc_add_header 1
#dcc_dccifd_path /usr/sbin/dccifd

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
###pyzor_add_header 1 # Esto da error en los logs
pyzor_timeout 10

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Luego editamos el archivo /etc/default/spamassassin y editamos la siguiente línea  se ejecute el CRON periódicamente:

…
# If you're using systemd (default for jessie), the ENABLED setting is
# not used. Instead, enable spamd by issuing:
# systemctl enable spamassassin.service
# Change to "1" to enable spamd on systems using sysvinit:
ENABLED=0
…
# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=1

Reiniciamos amavisd-new:

/etc/init.d/amavis restart

Ahora tras reiniciar amavisd-new podremos ver en el archivo de log /var/log/mail.log que se cargan los códigos de escaneo para SPAM y Virus.


Configuración de Postfix

Ahora agregamos las siguientes líneas al archivo de Postfix /etc/init.d/main.cf para forzar que todo email entrante pase a través de amavisd-new:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'

Ahora configuramos el archivo de Postfix /etc/postfix/master.cf agregando las siguientes líneas al final del documento:

[...]
# Amavis
# El filtro amavis con el puerto por defecto (10024)
amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes

# El reinjection path por defecto de amavis (10025)
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_delay_reject=no
#        -o smtpd_client_restrictions=
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks_style=host
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1

Reiniciamos Postfix:

systemctl restart postfix

Ahora si ejecutamos el comando netstat -tap vemos como Postfix master está escuchando en los puertos 25 (smtp) y 10025, y amavis-new en el 10024.


Confirmar virus y SPAM

Para probar que funciona correctamente el Antivirus y el AntiSPAM enviamos un mensaje con el siguiente contenido:

SPAM

Para confirmar que nuestra configuración actual detecta el mensaje pero se entrega con la cabecera cambiada, enviamos un email a una dirección de nuestro servidor de correo desde línea de comandos con el siguiente contenido:

# echo "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X" | mail -S smtp=localhost -r sender@yeloquehay.com -s "Spam test example" destino@email.com

En los logs se muestra el siguiente evento:

Sep 12 11:31:16 h2847530 amavis[13790]: (13790-01) Passed SPAM {RelayedTaggedInbound,Quarantined}, ...

Virus

Descargamos un archivo TXT y lo enviamos como adjunto, y en este caso el virus detectado es bloqueado:

# wget http://www.eicar.org/download/eicar.com.txt

# echo "TEST MESSAGE w/ ATTACHMENT" | mail -S smtp=localhost -r sender@yeloquehay.com -s "A/V test example" -a eicar.com.txt destino@email.com

Indicar una cuenta válida del servidor de correo.

En los logs ser vería un evento como el siguiente:

Sep 12 11:37:26 h2847530 amavis[13791]: (13791-01) Blocked INFECTED (Eicar-Test-Signature) {DiscardedInbound,Quarantined},...
Sep 12 11:37:26 h2847530 postfix/smtp[13854]: B6AA1D202BB:..., relay=127.0.0.1[127.0.0.1]:10024, delay=0.42, delays=0.27/0.01/0.01/0.14, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=13791-01 - INFECTED: Eicar-Test-Signature)

Whitelist para el SPAM

En el archivo 20-debian_defaults configuramos lo siguiente:

read_hash(\%whitelist_sender, '/etc/amavisd.whitelist');
@whitelist_sender_maps = (\%whitelist_sender);

$interface_policy{'10026'} = 'VIRUSONLY';
$policy_bank{'VIRUSONLY'} = { # mail from the pickup daemon
 bypass_spam_checks_maps => ['@whitelist_sender_maps'], # don't spam-check this mail
 bypass_banned_checks_maps => ['@whitelist_sender_maps'], # don't banned-check this mail
 bypass_header_checks_maps => ['@whitelist_sender_maps'], # don't header-check this mail
};

Y luego en el archivo /etc/amavisd.whitelist indicamos los emails en lista blanca:

sbrodriguez@gmail.com

Reiniciamos Amavis:

systemctl restart amavis

 


Índice general pincha aquí.