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.
Tabla de contenidos
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í.