Instalación de ClamAV, MailScanner y SpamAssassin

ClamAV

Para instalar ClamAV, habilitaremos el repositorio debian-volatile. Patra ello. introducimos la siguiente línea en /etc/apt/sources.list:

deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

Actualizamos las fuentes:

    apt-get update

Instalamos  ClamAV. Necesitamos instalar tanto la posibilidad de ejecución explícita, a través de la librería compartida, como la versión demonio, con comunicacióbn TCP/IP. Para instalarlo:

    apt-get install clamav clamav-daemon libclamav-dev unzoo lha unrar arj gzip

En las últimas versiones de ClamAV, la configuración por defecto está establecida muy de acorde con nuestras necesidades. De todos modos vamos a realizar unos cambios en el fichero de configuración del demonio clamd, que está en /etc/clamav/clamd.conf. Vamos a subir el tamaño máximo de los ficheros adjuntos a analizar a 15MB. Además le vamos a indicar que use el puerto 3310, pero sólo para las conexiones de la misma máquina. El fichero deberá tener las siguientes líneas (además de otras):

LogFileMaxSize 3M
ArchiveMaxFileSize 15M
TCPSocket  3310
TCPAddr 127.0.0.1
ScanPDF yes

AVISO: Aunque en las últimas versiones no aparece, si lo hiciera, debemos comentar el uso de sockets unix. Sólo podemos utilizar un tipo de sockets, y vamos a utilizar los TCP/IP. Quedaría así:

#LocalSocket /var/run/clamav/clamd.clt

Ahora reiniciamos el sistema:

    /etc/init.d/clamav-daemon restart

Actualizamos la base de datos de viruses

    freshclam

Ya tenmemos ClamAV listo para su uso. El servicio freshclam mira cada hora si hay nuevas definiciones de virus. En caso de haberlas, las descarga y le indica al demonio clamd, de que rehaga su base de datos.

Tener en cuenta a la hora de actualizar ClamAV, que hemos modificado el ficheros de configuración. Esto quiere decir que al preguntarnos si deseamos que instale el nuevo, debemos de decirle que no. Como recomendación, hacer una copia de /etc/clamav/clamd.conf antes de actualizar.

msrbl y ClamAV

Aunque no sea propiamente su tarea, es interesante dotar a ClamAV de otrsas herramientas amén de las firmas de virus. Entre otras están las firmas digitales de ficheros e imágenes que contiene virus o SPAM. Vamos a instalar un sistema de estos en ClamAV. Para descargar los ficheros de firmas vamos a utilizar un script. He aquí cómo descargar e instalar el script.

    wget -P /var/www/lhpaiak http://www.sanesecurity.co.uk/clamav/ss-msrbl.sh
    cp /var/www/lhpaiak/ss-msrbl.sh /var/lib/clamav/
    chmod +x /var/lib/clamav/ss-msrbl.sh

Ahora vamos a crear una tarea cron que se encarque diariamente de descargar los ficheros acualizadoz, ejecutando este script. Creamos en el direcotiro /etc/cron.d, un fichero llamado msrbl-cron con le siguiente contenido:

53 04 * * * /var/lib/clamav/ss-rbl.sh &> /dev/null

Ahora reiniciamos el demonio cron.

    /etc/init.d/cron restart

Como la descarga de ficheros de firmas se realiza a través de rsync, debemos habilitar el puerto TCP 873 en el cortafuegos.

Source

Destination

Service

Action

perimetroko antibirusa / antivirus perimetral

Internet

rsync(TCP) (873)

Accept

AVISO: Verifica el comportamiento de ClamAV. No se puede uno fiar a ciegas de estos sistemas. Estás advertido.

MailScanner

Para utilizar MailScanner necesitamos tener instalados:

PERL
gcc
wget
Postfix

Se supone que tenemos todo instalado, asi que adelante. Pasamos a instalar MailScanner.

    apt-get install mailscanner tnef

Nos instala SpamAssassin automáticamente.

Konfigurazioa ez da hain automatikoa. Pila bat gauza aldatu behar ditugu /etc/MailScanner/MailScanner.conf fitxategian. Lehenengo, ClamAV-rekin lan egiteko egokituko dugu.

Virus Scanning = yes
Virus Scanners = clamav
Monitors for ClamAV Updates = /var/lib/clamav/*.cvd
ClamAVmodule Maximum Recursion Level = 10
ClamAVmodule Maximum File Size = 15000000

En el fichero /etc/MailScanner/virus.scanner.conf debe aparecer esto:


clamav /etc/MailScanner/wraper/clamav-wrapper /usr

Ahora lo modificamos para trabajar con Postfix. La instalación por defecto en Debian supone que el servidor de correo es Exim4. MailScanner se ejecutará con el usuario postfix.

MTA = postfix
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming

Creamos los directorios para los mensajes entrantes y en cuarentena, y les cambiamos el propietario.

    mkdir -p /var/spool/MailScanner/incoming
    mkdir -p /var/spool/MailScanner/quarantine
    chown postfix:postfix /var/spool/MailScanner/incoming
    chown postfix:postfix /var/spool/MailScanner/quarantine

Cambiamos el propietario de los directorios de MasilScanner.

    chown postfix:postfix /var/lib/MailScanner
    chown postfix:postfix /var/run/MailScanner
    chown postfix:postfix /var/lock/subsys/MailScanner

Vamos ahora a configurar los mensajes de MailScanner. Que aparezca el nombre de nuestra escuela en los mensajes de aviso. ¡Cuidado con el nombre corto! No poner '.' ni espacios ni '_'. En el nombre largo, \n significa salto de línea.


%org-name% = NireEskola

%org-long-name% = Nire Eslola\nNireKalea 69 -- xxxxx NIREHERRIA (LURRALDEA)
%web-site% = www.nire-eskola.net

Le diremos que dé los mensajes en castellano.


%report-dir% = /etc/MailScanner/reports/es

Cada cuánto tiempo debe intentar revisar los mensajes entrantes? Pondremos 6 segundos. Valor por defecto.


Queue Scan Interval = 6

Le diremos que use SpamAssassin y que registre el spam.


Spam Checks = yes

Use SpamAssassin = yes
Log Spam = yes

En la configuración por defecto, MailScanner no nortifica a lor remitentes, de que su correo ha sido bloqueado. Vamos a indicarle que lo haga. De todos modos, por defecto no notifica a los remitentes de virus, pues hoy en día ello es inútil.


Notify Senders = yes

Entre los mensajes que usa para avisar de la comprobación de los correos hay uno que sólo es un aviso de comprobación. Es decir: incluso aunque no encuentre nada malo, pone aviso en el mensaje de correo. Esto no hace mas que molestar al receptor, y, por tanto, lo quitaremos. Para ello, lo pondremos de esta forma:


Sign Clean Messages = no

Finalmente definiremos las puntuaciones de SpamAssassin y lo que debe hacer con ellas. Le diremos que considere spam los mensajes que obtengan 4 puntos. Que considere como puntuación alta superar los 7 puntos, y que los mensajes que obtengan esta puntuación sean puestos en cuarentena. Además le diremos que no analice mensajes de más de 40KB. Los mensajes de spam no suelen ser tan grandes. Las siguientes líneas quedarían así:

Max SpamAssassin Size = 40kRequired SpamAssassin Score = 4
High SpamAssassin Score = 7
High Scoring Spam Actions = storeira:

Vamos a configurar también, que SpamAssassin utilice las listas negras. Aunque hay innumerables listas, vamos a utilizar aquí la que más me gusta, que es la ZEN de spamhaus. Podemos encontrar más en el fichero /etc/MailScanner/spam.lists.conf. Podemos utilizar todas las que deseemos, pero hay que tener en cuenta que lleva su tiempo procesarlas, pues han de realizarse conexiones a servidores de Internet. La siguiente línea debe quedar como sigue:

Spam List = spamhaus-ZEN

AVISO: La utilización de listas en desuso, puede acarrearnos graves problemas.

Ahora que está todo configurado, vamos a permitir su uso, y hacer una pequeña modificación. En el fichero /etc/default/mailscanner, han de quedar estas dos líneas, como sigue:

q_days=15
run_mailscanner=1

Ahora podemos iniciar MailScanner.

    /etc/init.d/mailscanner start

SpamAssassin

SpamAssassin requiere pocos cambios una vez instalado. Una cosa que le tenemos que decir a SpamAssassin es que ignore las cabeceras de nuestra organización cuando realice el análisis bayesiano. En /etc/MailScanner/spam.assassin.prefs.conf, aproximadamente en la línea 116 y siguientes, donde pone unconfigured-debian-site, tenemos que poner el nombre corto de nuestra organización que pusimos en /etc/MailScanner/MailScanner.conf, en la variable %org-name%. Deberá de quedar de esta guisa:

bayes_ignore_header NireEskola-MailScanner
bayes_ignore_header NireEskola-MailScanner-SpamCheck
bayes_ignore_header NireEskola-MailScanner-SpamScore
bayes_ignore_header NireEskola-MailScanner-Information

Debemos hacer que SpamAssassin no utilice las redes Razor o Pyzor, pues no nos interesa. En el fichero /etc/MailScanner/spam.assassin.prefs.conf, aprozimadamente en la línes 160, quitamos el signo de comentario a las siguientes líneas que quedarán de la siguiente forma:

use_razor2 0
use_dcc    0
use_pyzor  0

Otra cosa interesante. SpamAssassin tiene la capacidad de puntuar de diferente manera los mensajes de diferentes idiomas. Esto es, los mensajes de un determinado idioma obtienen una puntuación de spam, más baja. Vamos a seleccionar el euskera y castellano, pues casi todo el spam nos llega en inglés. La siguiente línea quedará como sigue:

ok_locales    eu es

Para detectar los idiomas euskera y castellano, se requiere el plugin TextCat. Hemos de habilitar el plugin en el fichero /etc/spamassassin/v310.pre. Quedará de esta forma:

loadplugin Mail::SpamAssassin::Plugin::TextCat

Ahora que está configuradio, indicamos en /etc/default/spamassassin, que se puede utilizar. La siguiente línea se debe poner a 1.

ENABLED=1

Verificamos que SpamAssassin funciona correctamente.

    spamassassin -p /etc/MailScanner/spam.assassin.prefs.conf --lint

No debería de dar errores.

Ahora podemos iniciar SpamAssassin.

    /etc/init.d/spamassassin start

SpamAssassin consigue su mayor éxito con la utilización de listas negras. Hay muchas. Muchas de ellas están incluídas en el fichero /etc/MailScanner/spam.lists.conf. Al configurar MailScanner hemos seleccionado spamhaus-ZEN. Esta lista no se encuentra entre las que vienen con la versión de SpamAssassin que se encuentra en los repositorios de Debian que hemos utilizado para su  instalación. Vamos a habilitarla. Patra ello, en el fichero /etc/MailScanner/spam.lists.conf añadiremos lo siguiente (no olvidar el punto final):

spamhaus-ZEN            zen.spamhaus.org.

Listo.

FuzzyOCR y SpamAssassin

Hoy en día  mucho del spam que nos llega, tiene un dibiujo como contenido. El dibujo representa texto. Los métodos tradicionales no sirven para detectar es spam. Para analizar estos dibujos, y extraer el texto, se necesita un OCR. Tennemos un plugin para SpamAssassin, llamado FuzzyOCR. Para ahorrar caoacidad de proceso, recuerda los dibujos analizados. Además, es capaz de detectar pequeñas diferencias entre estos dibujos. Para poder utilizarlo necesitamos SpamAssassin 3.1.4 o superior.

Instalémoslo. Primeramente los paquetes que necesita FuzzyOCR.

    apt-get  install netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-perl libmldbm-sync-perl 
liblog-agent-logger-perl imagemagick tesseract-ocr

Ahora vamos a descargar FuzzyOCR. Se recomienda la versión de desarrollo, pues la estable es muy antigua.

    wget -P /var/wwwlhpaiak http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz

Descomprimir y copiar los ficheros al directorio /etc/spamassassin

    cd /var/www/lhpaiak
    tar xvfz fuzzyocr-3.5.1-devel.tar.gz
    cd FuzzyOcr-3.5.1/
    cp FuzzyOcr* /etc/spamassassin/
    cp -r FuzzyOCR /etc/spamassassin/

El fichero de configuración es /etc/spamassassin/FuzzyOcr.cf. Le vamos a indicar en qué fichero se encuuentran las palabras que ha de buscar. Si lo consideramos conveniente, podemos añadir otras palabras a este fichero.

focr_global_wordlist /etc/spamassassin/FuzzyOcr.words

Ahora le indicamos las aplicaciones que ha de usar para su trabajo. Debe quedar así (todo en una línea):

focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract

Donde buscar estas aplicaciones:

# Search path for locating helper applications
focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin ?????
focr_preprocessor_file /etc/spamassassin/FuzzyOcr.preps
focr_scanset_file /etc/spamassassin/FuzzyOcr.scansets

Habilitar la base de datos de los hash de los dibujos.

focr_enable_image_hashing 2
focr_digest_db /etc/spamassassin/FuzzyOcr.hashdb
focr_db_hash /etc/spamassassin/FuzzyOcr.db
focr_db_safe /etc/spamassassin/FuzzyOcr.safe.db

Le vanmos a indicar que utilice el fichero /var/log/FuzzyOcr.log como registro.

focr_logfile /var/log/FuzzyOcr.log

Vamos a crear el fichero de registro.

    touch /var/log/FuzzyOcr.log
    chmod 666 /var/log/FuzzyOcr.log

Tenemos que rotar el registro para que no crezca indefinidamente. Vamos crear un fichero /etc/logrotate.d/fuzzyocr con el siguiente conteniddo:

/var/log/FuzzyOcr.log {
rotate 12
weekly
notifempty
compress
delaycompress
create 666 root root
}

Seguidamente reiniciamos SpamAssassin y comprobamos si todo ha ido bien. No? Podemos encontrarnos con algún error. Si nos falta el modulo Logger.pm, puede ser que esté instalado en un directorio que no se encuentra. Lo copiamos al directorio correcto.

    cp /usr/share/perl5/Log/Agent/Logger.pm /usr/share/perl5/Mail/SpamAssassin/

Otro problema que podemos encontrarnos es con la librería Timeout.pm. Si no se encuentra, nos hemos de descargar la versión completa de SpamAssassin de Internet, y rescatar la mencionada librería.

    wget -P /var/www/lhpaiaki http://apache.rediris.es/spamassassin/source/Mail-SpamAssassin-3.1.8.tar.gz
    cd /var/www/lhpaiaki
    tar zxf Mail-SpamAssassin-3.1.8.tar.gz
    cp Mail-SpamAssassin-3.1.8/lib/Mail/SpamAssassin/Timeout.pm /usr/share/perl5/Mail/SpamAssassin/

Vamos a instalar otras bibliotecas de PERL. Lo vamos a hacer de los repositorios CPAN. Si nos pregunta si deseamos realizar la configuración CPAN a mano, se diremos que no.

    cpan -i String::Approx Time::HiRes Log::Agent

Probemos a ver si funciona FyzzyOCR. En el directorio descargado tenemos varios dibujos a modo de ejemplo.

    spamassassin --debug FuzzyOcr < /var/www/lhpaiaki/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

Si todo va bien, debemos ver algo como:

[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: Friday Augurt 4, 4:01 pm ET
[10025] dbg: FuzzyOcr: LAS VEGAS, NEVADA--(MARKET WIRE)--Aug 4, 2006 -- auantum Energy, lnc. (OTC
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-
[10025] dbg: FuzzyOcr: auantum Energy, lnc. is pleased to announce that it has applied to have its shares listed for
[10025] dbg: FuzzyOcr: trading on the Frankfurt Stock Exchange. The company has retained the services ofBaltic
[10025] dbg: FuzzyOcr: lnvestment Group of Hamburg, Germany to assist with the application.
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: _ qEGY,OB "
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: <<=end
[10025] info: FuzzyOcr: Scanset "ocrad" found word "target" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "service" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "hot energy stocki"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "current price o"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "company" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "recommendation" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "sboog bup recommendation"
[10025] dbg: FuzzyOcr: Enough OCR Hits without space stripping, skipping second matching pass...
[10025] info: FuzzyOcr: Scanset "ocrad" generates enough hits (8), skipping further scansets...
[10025] info: FuzzyOcr: Message is spam, score = 15.000
[10025] info: FuzzyOcr: Adding Hash to "/etc/mail/spamassassin/FuzzyOcr.db" with score "15.000"
[10025] dbg: FuzzyOcr: Digest:
538584:327:549:7::255:255:255:255:168580::0:0:0:0:9098::0:128:0:75:1086::0:0:128:15:395::128:0:128:53:213::0:0:255:29:115
[10025] info: FuzzyOcr: Words found:
[10025] info: FuzzyOcr: "target" in 1 lines
[10025] info: FuzzyOcr: "service" in 1 lines
[10025] info: FuzzyOcr: "stock" in 2 lines
[10025] info: FuzzyOcr: "price" in 2 lines
[10025] info: FuzzyOcr: "company" in 1 lines
[10025] info: FuzzyOcr: "recommendation" in 1 lines
[10025] info: FuzzyOcr: (12 word occurrences found)
[10025] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin10025QnPTq8tmp
[10025] dbg: FuzzyOcr: FuzzyOcr ending successfully...
[10025] dbg: FuzzyOcr: Processed in 0.371381 sec.

Listo! FuzzyOCR funcionando!

Enseñando a SpamAssassin

MailScanner y Postfix juntos

Le diremos a Postfix que compruebe los encabezamientos del correo con los contenidos que hay en el archivo header_checks. Para ello, añadir lo siguiente en el fichero /etc/postfix/main.cf.


header_checks = regexp:/etc/postfix/header_checks

En este fichero pondremos que todos los correos entrantes los mueva al directorio HOLD. Para ello pondremos lo siguiente en el fichero /etc/postfix/header_checks.


/^Received:/ HOLD

Reiniciamos MailScanner y Postfix

    /etc/init.d/mailscanner restart
    /etc/init.d/postfix restart

Consideraciones acerca de MailScanner

MailScanner, además de servir como armazón para utilizar productos antivirus y antiespan, posee gran capacidad de filtrado de contenidos con potencial peligroso. Estos contenidos suelen ser ficheros .pif, .exe... pero también otros. Los ficheros DOC (Word) pueden contener macros peligrosas. Los ficheros WMF (Windows MetaFile) pueden utilizarse para explotar una vulnerabilidad 0day.exploit en las DLL que tratan estos formatos (incluido BMP). Otro vector de ataque a Windows son los fichero ANI, de cursores animados. Hay que eliminarlos.

Esto hace que nos bloquee estos ficheros y nuestros usuarios no entiendad la "peligrosidad" de un formato que utilizan habitualmente. En nuestras manos queda el relajar las políticas de seguridad.  En el fichero /etc/MailScanner/filename.rules.conf podemos deshabilitar los formatos que necesitemos. Después de ello, reiniciar Mailscanner.

Puede ser necesario deshabilitar los WMF y BMP si nuestros usuarios envían dibujos de programas de windows incrustados  en documentos OpenOffice.

En el mismo sitio tenemos el fichero filetype.rules.conf, con una funcionalidad similar para con los tipos de fichero.


Cambios en el DNS y el cortafuegos

En el servidor DNS al que accede el antivirus, hemos de poner su nombre como intercambiador de correo (registro MX), con menos prioridad que el servidor de correo con buzones. Es decir, con número más alto.

En el cortafuegos habremos de hacer NAT, no al servidor original, si no a la dirección del antivirus.