PROXY TRANSPARENTE: SQUID + PYTHON-CLAMAV + SCAVR + CLAMAV

INTRODUCCION:
Explicare la instalacion del proxy transparente y como aplicarle una herramienta que sirva para que las paginas visitadas que contengan virus (imagenes, zip, rar, exe, .....) no se muestren y las rediriga a una pagina que nos crearemos avisandonos de la pagina que tiene el virus y el virus contiene. 

Las ventajas del proxy transparente no voy a contarlas aqui.

Las versiones que he utilizado han sido las sigueitnes:

Debian Sarge (estable a 11-abril-2006)
Squid 2.5.9-10sarge2
Python-Clamav 0.3.0-1 (de la version inestable, no esta en la estable :-( )
Scavr 1.8.0
Clamav 0.88.1-0volatile

Para el codigo que vereis en el mini-howto utilizo lo siguiente codigo que tecleo (NEGRITA + CURSIVA).
Para el codigo que muestra la pantalla (CURSIVA).

INTALACION DE SISTEMA :
La instalacion de Debian ha sido la mas basica de todas, ya iremos agregando paquetes. Lo unico decir que como siempre he cogido la version estable.

Editaremos el archivo de configuracion del apt para que coja los archivos de clamav de otro repositorio:

squid2:~# vi /etc/apt/sources.list

deb ftp://ftp.rediris.es/debian stable main contrib non-free

deb http://ftp2.de.debian.org/debian-volatile sarge/volatile main

deb http://security.debian.org/ stable/updates main

La linea que he agregado es la segunda.

INSTALACION DE SQUID Y CONFIGURACION
La instalaciond e Squid es muy simple, algo mas complicado es su configuracion, empecemos:

squid2:~# apt-get install squid squid-common
..

Una vez instalado configuremosle, decir que el squid es un proxy y como tal podemos utilizarlo de distintas formas, este manual configurara squid para que sea cpmpletamente transparente a los usuarios, es decir no tendremos que configurar nada en los usuarios de la red, todas las peticiones que reciba la maquina por el puerto 80 las redirigira al puerto por defecto del squid, el 3218.

El archivo de configuracion de Squid es /etc/squid/squid.conf, editemosle y veremos un gran archivo:

Hechadle u vistazo para que veais la multitud de opciones que tiene este proxy.

Yo os pondre la configuracion del mio y explicare para que sirve cada opcion.

squid2:~# vi /etc/squid/squid.conf
acl QUERY urlpath_regex cgi-bin \?
acl avi         urlpath_regex -i \.avi$
acl mpeg        urlpath_regex -i \.m1v$ \.mpeg$ \.mpg$
acl mpeg2       urlpath_regex -i \.m2v$ \.vob$
acl mpeg_audio  urlpath_regex -i \.mpa$ \.mp2$ \.mp3$ \.aac$
acl asf         urlpath_regex -i \.asf$ \.wma$ \.asx$ \.wmv$
no_cache        deny avi
no_cache        deny mpeg
no_cache        deny mpeg2
no_cache        deny mpeg_audio
no_cache        deny asf
no_cache deny QUERY
cache_mem 16 MB
maximum_object_size 36864 KB
cache_dir ufs /var/spool/squid 25000 16 256
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access allow all
cache_mgr administrador@tusitio.com
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Perfecto, os voy explicando, en este archivo podemos ir haciendo diferentes listas (acl) y luego realizar una opcion sobre ellas, vease "acl avi urlpath_regex -i \.avi$" y luego "no_cache deny avi" estamos creando una lista que se llama avi donde se cogeran todos los archivos con extension avi y no cachearemos el contenido de esa lista, es decir que nuestro proxy cache no almacenara AVI.

La linea maxium_object_size indica cual sera el objeto mas grande que almacenaremos, en mi casa de 35 mb, todo lo que le supere no se cacheara.
Otra linea muy importante es cache_dir:

Os pongo lo que dice el manual sobre esta linea para que asi podais decidir como hacer vuestra base de datos:

#  TAG: cache_dir
#       Usage:
#
#       cache_dir Type Directory-Name Fs-specific-data [options]
#
#       You can specify multiple cache_dir lines to spread the
#       cache among different disk partitions.
#
#       Type specifies the kind of storage system to use. Only "ufs"
#       is built by default. To eanble any of the other storage systems
#       see the --enable-storeio configure option.
#
#       'Directory' is a top-level directory where cache swap
#       files will be stored.  If you want to use an entire disk
#       for caching, this can be the mount-point directory.
#       The directory must exist and be writable by the Squid
#       process.  Squid will NOT create this directory for you.
#
#       The ufs store type:
#
#       "ufs" is the old well-known Squid storage format that has always
#       been there.
#
#       cache_dir ufs Directory-Name Mbytes L1 L2 [options]
#
#       'Mbytes' is the amount of disk space (MB) to use under this
#       directory.  The default is 100 MB.  Change this to suit your
#       configuration.  Do NOT put the size of your disk drive here.
#       Instead, if you want Squid to use the entire disk drive,
#       subtract 20% and use that value.
#
#       'Level-1' is the number of first-level subdirectories which
#       will be created under the 'Directory'.  The default is 16.
#
#       'Level-2' is the number of second-level subdirectories which
#       will be created under each first-level directory.  The default
#       is 256.
#
#       The aufs store type:
#
#       "aufs" uses the same storage format as "ufs", utilizing
#       POSIX-threads to avoid blocking the main Squid process on
#       disk-I/O. This was formerly known in Squid as async-io.
#
#       cache_dir aufs Directory-Name Mbytes L1 L2 [options]
#
#       see argument descriptions under ufs above
#
#       The diskd store type:#
#       "diskd" uses the same storage format as "ufs", utilizing a
#       separate process to avoid blocking the main Squid process on
#       disk-I/O.
#
#       cache_dir diskd Directory-Name Mbytes L1 L2 [options] [Q1=n] [Q2=n]
#
#       see argument descriptions under ufs above
#
#       Q1 specifies the number of unacknowledged I/O requests when Squid
#       stops opening new files. If this many messages are in the queues,
#       Squid won't open new files. Default is 64
#
#       Q2 specifies the number of unacknowledged messages when Squid
#       starts blocking.  If this many messages are in the queues,
#       Squid blocks until it receives some replies. Default is 72
#
#       When Q1 < Q2 (the default), the cache directory is optimized
#       for lower response time at the expense of a decrease in hit
#       ratio.  If Q1 > Q2, the cache directory is optimized for
#       higher hit ratio at the expense of an increase in response
#       time.
#
#       The coss store type:
#
#       block-size=n defines the "block size" for COSS cache_dir's.
#       Squid uses file numbers as block numbers.  Since file numbers
#       are limited to 24 bits, the block size determines the maximum
#       size of the COSS partition.  The default is 512 bytes, which
#       leads to a maximum cache_dir size of 512<<24, or 8 GB.  Note
#       you should not change the coss block size after Squid
#       has written some objects to the cache_dir.
#
#       Common options:
#
#       read-only, this cache_dir is read only.
#
#       max-size=n, refers to the max object size this storedir supports.
#       It is used to initially choose the storedir to dump the object.
#       Note: To make optimal use of the max-size limits you should order
#       the cache_dir lines with the smallest max-size value first and the
#       ones with no max-size specification last.
#
#       Note that for coss, max-size must be less than COSS_MEMBUF_SZ
#       (hard coded at 1 MB).
#
#Default:
# cache_dir ufs /var/spool/squid 100 16 256

Yo he utilizado el sistema de archivos UFS, la he dejado en /var/spool/squid y he utilizado 25 gb en 16 niveles con 256 subniveles cada nivel. Cada nivel primario me ocupa 1,5 gb.

No utilizeis todo el disco para cache, ya que su rendimiento bajara de una manera considerable y en vez de ganar, perderemos tiempo. Segun dice el manual debemos usar el 80%, yo he usado el 85%.

Mas cosas que tenemos que comentar sobre el archivo de configuracion de Squid, a quien le damos permisos para utilizar nuestra cache. Yo se lo permito a toda mi red con las lineas

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access allow all
cache_mgr administrador@tusitio.com
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Para realizar cambios sobre la configuracion miraros bien el archivo inicial squid.conf, ya que se pueden conseguir muchas cosas, como por ejemplo que todas las mañanas visite una pagina (por ejmplo la de noticias del google) o compartir caches con otros servidores, un larguisimo etcetera.

Despues de dejar como queremos el fuchero de configuracion reiniciaremos el demonio de squid:

squid2:/# /etc/init.d/squid restart
Restarting proxy server: squid.

CONFIGURACION DE IPTABLES
Utilizaremos el iptable quelleva nuestro kernel para redirigir todo lo que llega a nuestro puerto 80 al puerto del Squid 3128.

Crearemos el archivo que contendra nuestra configuracion:

squid2:~# vi /etc/init.d/firewall.sh
#!/bin/sh
##ScripT de Iptables para hacer forward del puerto 80 y mandarlo al squid

# Binario Iptables
IPTABLES="iptables"

# Redes
REDLOCAL="10.19.4.0/24"

# Interfaces
IF_LOC=eth0

# IP's
IP_LOC=`ifconfig $IF_LOC | grep inet | cut -d : -f 2 | cut -d \  -f 1`

####################################
##### FUNCION 'FLUSH_IPTABLES' #####
####################################
flush_iptables() {

        echo "Limpiando posibles configuraciones previas..."
        #
        # reset the default policies in the filter table.
        #
        $IPTABLES -P INPUT ACCEPT
        $IPTABLES -P FORWARD ACCEPT
        $IPTABLES -P OUTPUT ACCEPT
        #
        # reset the default policies in the nat table.
        #
        $IPTABLES -t nat -P PREROUTING ACCEPT
        $IPTABLES -t nat -P POSTROUTING ACCEPT
        $IPTABLES -t nat -P OUTPUT ACCEPT

        #
        # reset the default policies in the mangle table.
        #
        $IPTABLES -t mangle -P PREROUTING ACCEPT
        $IPTABLES -t mangle -P OUTPUT ACCEPT

        #
        # flush all the rules in the filter and nat tables.
        #
        $IPTABLES -F
        $IPTABLES -t nat -F
        $IPTABLES -t mangle -F
        #
        # erase all chains that's not default in filter and nat table.
        #
        $IPTABLES -X
        $IPTABLES -t nat -X
        $IPTABLES -t mangle -X
} # Fin función flush iptables

####################################
##### FUNCION 'START_IPTABLES' #####
####################################
start_iptables()
{

echo "Configuración existente de interfaces de red:"
echo "     - Interfaz LAN:  $IF_LOC - $IP_LOC"

#RESETEO IPTABLES
flush_iptables

#POLITICAS POR DEFECTO
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

#OPCIONES DE SYSCTL
echo "Configurando las opciones sysctl..."
#Habilita el forwarding en el kernel
        echo 1 > /proc/sys/net/ipv4/ip_forward
#Deshabilita ataques de IP Spoofing
        echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
#No responde a broadcast dirigidos (Smurf-Amplifier-Protection)
        echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#Bloquea source routing
        echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#Elimina timestamps
        echo 0 > /proc/sys/net/ipv4/tcp_timestamps
#Habilita SYN Cookies
        #echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#Elimina redirects
        #echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#Habilita bad error message protection
        echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#Log martians (paquetes con direcciones no validas)
        echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
#Set out local port range
        echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range
#Reduce la posbilidad de ataques DoS reduciendo timeouts
        echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
        echo 2400 > /proc/sys/net/ipv4/tcp_keepalive_time
        echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
        echo 0 > /proc/sys/net/ipv4/tcp_sack

#REGLAS
iptables -t nat -A PREROUTING -s 0/0 -d 0/0 -p tcp --dport 80 -j REDIRECT --to-port 3128

} # Fin función start_iptables

case "$1" in
        stop)
                echo "Parando el Firewall... "
                flush_iptables
                echo "HECHO"
                ;;
        status)
                echo ""
                echo "###################"
                echo "## Tabla: filter ##"
                echo "###################"
                $IPTABLES --list
                echo ""
                echo "################"
                echo "## Tabla: nat ##"
                echo "################"
                $IPTABLES -t nat --list
                echo ""
                echo "###################"
                echo "## Tabla: mangle ##"
                echo "###################"
                $IPTABLES -t mangle --list
                echo ""
                ;;
        restart|reload)
                $0 stop $2
                $0 start $2
                ;;
        start)
                echo "Arrancando el Firewall... "
                start_iptables
                echo "HECHO"
                ;;
        *)
                echo "Modo de uso: $0 (start|stop|restart|status)"
                exit 1
                ;;
esac

La unica regla que aplico es la redireccion de HTTP, no FTP, ni HTTPS (seria ir añadiendo lineas como la que veis con el dport que deseemos). El script parece un poco complicado pero ahora podemos usarlo con /etc/init.d/firewall.sh (start|stop|restart|status)

Lo unico que hace este router es esto, redirigir lo que entra por el 80, todo lo demas se lo pasara a su puerta de enlace, en mi caso al router que me puso telefonica. Por que digo esto, porque todos los usuarios tendran que tener como puerta de enlace la maquina squid que estamos creando. Si un usuario visita google, squid2 (la maquina que estamos creando) realizara la peticion a google (no nuestro usuario) la almacenara en la cache y se la dara a nuestro usuario. Si por ejemplo pide una archivo en un servidor ftp, squid simplemente redirigira la peticion al siguiente router.

Le damos permisos de ejecucion al script que hemos creado:

squid2:/# chmod +x /etc/init.d/firewall.sh

Debemos iniciar el firewall cada vez que se inicie la maquina, se puede añadir en mil sitios yo lo he hecho de esta forma, creo un link a /etc/init.d/firewall.sh en /etc/rc2.d

squid2:/# ln -s /etc/init.d/firewall.sh /etc/rc2.d/S95firewall.sh

Perfecto cada vez que iniciemos nos debera arrancar el firewall nuevo.

Comprobemos que el firewall funciona:

squid2:/# /etc/init.d/firewall.sh restart
Parando el Firewall...
Limpiando posibles configuraciones previas...
HECHO
Arrancando el Firewall...
Configuración existente de interfaces de red:
     - Interfaz LAN:  eth0 - 10.19.4.25
Limpiando posibles configuraciones previas...
Configurando las opciones sysctl...
HECHO

squid2:/# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

squid2:/# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:www redir ports 3128

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Perfecto justo lo que queriamos.

Ya podemos comprobar si no sesta hacieno de cache nuestro nuevo squid.

Cambiaremos la configuracion en una maquina de algun usario y le pondremos que el router por defecto es la maquina squid. Previamente le tendremos que haber dicho a nuestro squid que su puerta de enlace es la que nos de acceso a internet.

squid2:/# vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 10.19.4.25
    network 10.19.4.0
    netmask 255.255.255.0
    broadcast 10.19.4.255
    gateway 10.19.4.172

squid2:/# /etc/init.d/networking restart
Setting up IP spoofing protection: rp_filter.
Reconfiguring network interfaces...SIOCDELRT: No such process
ifup: interface lo already configured
done.

Muy deberia funcionarnos a la perfeccion el proxy transparente.

Podemos ver como va creciendo la base de datos de squid con estos comandos:

squid2:~# du -hlsc /var/spool/squid/*
1,3M    /var/spool/squid/00
1,1M    /var/spool/squid/01
1,1M    /var/spool/squid/02
1,1M    /var/spool/squid/03
1,1M    /var/spool/squid/04
1,1M    /var/spool/squid/05
1,1M    /var/spool/squid/06
1,1M    /var/spool/squid/07
1,1M    /var/spool/squid/08
1,1M    /var/spool/squid/09
1,1M    /var/spool/squid/0A
1,1M    /var/spool/squid/0B
1,1M    /var/spool/squid/0C
1,1M    /var/spool/squid/0D
1,1M    /var/spool/squid/0E
1,1M    /var/spool/squid/0F
4,0K    /var/spool/squid/swap.state
17M     total

Aqui vemos los 16 niveles del archivo de configuracion.

Hasta aqui es la parte obligatoria para tener el proxy transparente con Squid, lo que cuento a partir de ahora es completamente opcional, pero recomnedable, instalaremos Sarg para hacer la administracion de los logs de Squid amigable, Sarg tambien nos dara los porcentajes de visitas cacheadas asi como las que ha tenido que salir a Internet a por nuestras peticiones. Instalaremos tambien el antivirus para los que tengan usuarios en windows.

INSTALACION DE APACHE Y SARG Y CONFIGURACION

Sarg como acabo de decir sirve para que visitemos y controlemos de una forma amigable de los logs de Squid. Al basarse en Web, necesitaremos instalar Apache en nuestro servidor de Squid y luego instalaremos Sarg.

Comencemos con la instalacion de Apache, decir que instalare tambien php4, para su posterior utilizacion con clamav (antivirus) si no vais a realizar esta instalacion no es necesario que instaleis php4:

squid2:/# apt-get install apache apache-common apache2-utils libapache-mod-php4 libapr0 libexpat1 libzzip-0-12 php4 php4-common ucf

Cuando instalemos apache nos preguntara si queremos utilizar suExec, yo le digo que no.

Ya podemos visitar nuestro nuevo servidor web, http://direccionip

Configuremoslo para que ejecute codigo php, editaremos el archivo de configuracion de apache:

squid2:/# vi /etc/apache/httpd.conf

Buscaremos una linea que esta comentada y pone: 

# And for PHP 4.x, use:
#
#    AddType application/x-httpd-php .php
#    AddType application/x-httpd-php-source .phps

Descomentaremos las dos ultimas lineas

Perfecto, nuestro servidor apache ya es capaz de ejecutar codigo php.

Instalaremos ahora Sarg:

squid2:/# apt-get install defoma libfreetype6 libgd2-noxpm libjpeg62 libpng12-0 sarg ttf-bitstream-vera

Para configurar Sarg editaremos su archivo de configuracion y cambiaremos las siguientes lineas para dejarlas como las pongo aqui, las demas no las toqueis:

squid2:/# vi /etc/squid/sarg.conf

language Spanish
title "Informes de Acceso a Squid"
date_format e

Estas han sido las unicas que he tocado, podemos incluir nodos para que no los saque en el informe (archivo /etc/squid/squid.nodes), si quereis hacer mas cambios leeros el archivo de configuracion de Sarg, tiene mas posibilidades.

Añadiremos al final del archivo de configurracion de apache las siguientes lineas:

squid2:/# vi /etc/apache/httpd.conf
<Directory "/var/www/squid-reports">
AuthName "Informes de Acceso a Squid"
AuthType Basic
AuthUserFile /etc/.htpasswdsquidreports
require valid-user
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Reiniciaremos apache y squid

squid2:/# /etc/init.d/apache restart
squid2:/# /etc/init.d/squid restart

Tenemos que crear el password para poder entrar a visitar los reports, cambiad lo de USUARIO por el que vosotros querais:

squid2:/# htpasswd -c -m /etc/.htpasswdsquidreports USUARIO

Despues de haber tecleado la password ejecutemos SARG para que nos haga el primer report, si todo va bien deberias haber hecho un para de pruebas un poco mas arriba, pues debe crearnos el report con esas entradas.

squid2:/# sarg

Perfecto, lo hemos ejecutado, intentemos ahora visitar la web en http://ipservidorsquid/squid-reports/index.html

¿Todo bien?, deciros que la instalacion de Sarg añade automaticamente una tarea que diariamente se ejecuta, es decir todas las mañanas tendremos nuestro nuevo informe.

INSTALACION DE CLAMAV

Ahora instalaremos el antivirus para su posterior actualizacion:

squid2:/#apt-get install clamav clamav-base clamav-daemon clamav-freshclam libclamav1 libcurl3 libgmp3 arj unzoo unrar lha

Editaremos el archivo de configuracion de Clamav para añadir la linea ScanRAR y dejarlo como os lo pongo aqui abajo:

squid2:/# vi /etc/clamav/clamd.conf
#Automatically Generated by clamav-base postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-base
#Please read /usr/share/doc/clamav-base/README.Debian.gz for details
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket
User clamav
AllowSupplementaryGroups
ScanMail
ScanArchive
ScanRAR
ArchiveMaxRecursion 5
ArchiveMaxFiles 1000
ArchiveMaxFileSize 10M
ArchiveMaxCompressionRatio 250
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogFile /var/log/clamav/clamav.log
LogTime
LogFileMaxSize 0
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/lib/clamav
SelfCheck 3600
ScanOLE2
ScanPE
DetectBrokenExecutables
ScanHTML
ArchiveBlockMax

Podemos ver las actualizaciones de las firmas de virus editando el log de Freshclam, lo hara solo cada par de horas, la instalacion añade en el cron la visita al servidor para su actualizacion:

squid2:/# vi /var/log/clamav/freshclam.log
--------------------------------------
freshclam daemon 0.88.1 (OS: linux-gnu, ARCH: i386, CPU: i386)
ClamAV update process started at Tue Apr 11 20:52:16 2006
main.cvd is up to date (version: 37, sigs: 46700, f-level: 7, builder: ccordes)
daily.cvd updated (version: 1393, sigs: 3875, f-level: 7, builder: arnaud)
Database updated (50575 signatures) from db.es.clamav.net (IP: 194.65.79.153)
Clamd successfully notified about the update.
--------------------------------------

INSTALACION DE PYTHON CLAMAV

Para esta instalacion me he tenido que bajar el paquete deb de la version testing, no esta en la estable :-(

En la pagina http://packages.debian.org/testing/python/python-clamav podeis ver las dependencias que tiene este paquete, las cumplimos todas, la libreria libc6.1 no la tenemos pero no pasa nada tira perfectamente, no hace falta nada mas que bajarnos el paque deb e instalarlo, yo he bajado la de la version testing para i386

squid2:/# dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Estado=No/Instalado/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: mayúsc.=malo)
||/ Nombre                            Versión                           Descripción
+++-=================================-=================================-==================================================================================
ii  libc6                             2.3.2.ds1-22                      GNU C Library: Shared libraries and Timezone data

squid2:/# dpkg -l libclamav1
Desired=Unknown/Install/Remove/Purge/Hold
| Estado=No/Instalado/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: mayúsc.=malo)
||/ Nombre                            Versión                           Descripción
+++-=================================-=================================-==================================================================================
ii  libclamav1                        0.88.1-0volatile2                 virus scanner library

squid2:/cosas# mkdir /cosas
squid2:/cosas# cd /cosas
squid2:/cosas# wget http://ftp.es.debian.org/debian/pool/main/p/python-clamav/python-clamav_0.3.0-1_i386.deb
squid2:/cosas# dpkg -i python-clamav_0.3.0-1_i386.deb
Seleccionando el paquete python-clamav previamente no seleccionado.
(Leyendo la base de datos ...
24321 ficheros y directorios instalados actualmente.)
Desempaquetando python-clamav (de python-clamav_0.3.0-1_i386.deb) ...
Configurando python-clamav (0.3.0-1) ...

INSTALACION DE SCAVR

Ahora nos toca bajarno el Script de la pagina del autor de Scavr http://www.jackal-net.at/tiki-list_file_gallery.php?galleryId=3

Mirar a ver cual es la ultima version y os la bajais. Una vez descomprimida en nuestro servidor tendremos que hacer lo siguiente:

squid2:/cosas/SCAVR# cp SquidClamAV_Redirector.py /usr/local/bin
squid2:/cosas/SCAVR# chmod +x /usr/local/bin/SquidClamAV_Redirector.py
squid2:/cosas/SCAVR# cp SquidClamAV_Redirector?.conf /etc/squid/
squid2:/cosas/SCAVR# cp SquidClamAV_Redirector.conf /etc/squid/
squid2:/cosas/SCAVR# chown proxy:proxy /etc/squid/SquidClamAV_Redirector.conf

Editaremos ahora el archivo de configuracion
squid2:/ vi /etc/squid/SquidClamAV_Redirector.conf

Yo los unicos cambios que he hecho aqui han sido las redirecciones, si no os la quereis currar podeis dejar las que vienen por defecto, aun asi como tenemos servidor web por el SARG, utilizemosle y creeemos la pagina php.

squid2:/# vi /var/www/infeccion.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>!!! Pagina INFECTADA ¡¡¡</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {font-family: Verdana, Arial, Helvetica, sans-serif}
.Estilo2 {
        color: #FF0000;
        font-weight: bold;
}
.Estilo3 {color: #FF0000}
-->
</style>
</head>

<body>
<div align="center">
  <p><img src="http://virus.jackal-net.at/clam.png" width="200" height="200"><br>
    <br>
    <span class="Estilo2">¡¡¡ RESTRINGIDO !!!</span></span></p>
  <p class="Estilo1">Esta URL<span class="Estilo3">    <?php
if ($_GET) { print $_GET['url']; } ?>
    </span>esta infectada con este virus:<span class="Estilo3">    <?php
if ($_GET) { print $_GET['virus']; } ?>
    </span></p>
  <p class="Estilo1">Ponte en contacto conmigo: <a href="mailto:administrador@tusitio.com">Administrador</a> </p>
</div>
</body>
</html>

Ahora tenemos que decirle a Squid que rediriga las paginas al antivirus, lo unico que tenemos que hacer es añadir las siguientes lineas a /etc/squid/squid.conf debajo de acl localhost ......

squid2:/# vi /etc/squid/squid.conf
redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c /etc/squid/SquidClamAV_Redirector.conf
redirect_children 5
redirector_access deny localhost
http_reply_access allow all

Reiniciaremos Squid:

squid2:/# /etc/init.d/squid restart

Ahora añadiremos la siguiente linea (local6.=.....) en /etc/syslog.conf, justo debajo de la linea  (mail,news.none          -/var/log/messages) para que nos cree el log de Scavr, dejo puesta la linea que hay que añadir y unas cuantas mas de arriba para que ubiqueis el sitio sin problema.

squid2:/# vi /etc/syslog.conf
#
# Some `catch-all' logfiles.
#
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages
## La que esta aqui debajo es la que he añadido
local6.=info /var/log/squid/SquidClamAV_redirector.log

Reiniciemos el servicio para la creacion de logs

squid2:/# /etc/init.d/sysklogd restart

Comprobemos que todo funciona, visitad esta pagina http://heanet.dl.sourceforge.net/sourceforge/bo2k/bo2k_1_0.zip y mirad  a ver que os dice, tendria que ser algo asi:

¡¡¡ RESTRINGIDO !!!
Esta URL http://heanet.dl.sourceforge.net/sourceforge/bo2k/bo2k_1_0.zip esta infectada con este virus: Trojan.Orifice2K.PI_ 
Ponte en contacto conmigo: administrador 

Podemos visitar el log:

squid2:/# vi /var/log/squid/SquidClamAV_redirector.log
Apr 12 14:51:32 localhost SquidClamAV: Url: http://www.google.es/search?hl=es&q=Hola&meta= Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/sourceforge/bo2k/ Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/icons/blank.gif Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/icons/binary.gif Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/icons/back.gif Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/icons/compressed.gif Status OKAY
Apr 12 14:51:37 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/icons/unknown.gif Status OKAY
Apr 12 14:51:40 localhost SquidClamAV: Url: http://heanet.dl.sourceforge.net/sourceforge/bo2k/bo2k_1_0.zip Status Infected Trojan.Orifice2K.PI_#1
Apr 12 14:51:40 localhost SquidClamAV: Url: http://10.19.4.5/clam.png Status OKAY

ACLARACIONES

En algunas paginas tengo el siguiente problema, que si alguien es capaz de solucionarlo que me mande un mail ;-), al entrar por ejemplo en www.invertia.com por ejemplo en algunas de sus paginas me pone lo siguiente:

Apr 12 14:54:51 localhost SquidClamAV: Unable to get Size from Url http://www.ibercajadirecto.com?home=1: ('http error', 400, 'Bad Request', <httplib.HTTPMessage instance at 0x402d980c>)
Apr 12 14:54:51 localhost SquidClamAV: Ignored Request http://www.ibercaja.es/redireccion_externo.php?url=http://www.ibercajadirecto.com?home=1 10.19.4.34/- - GET
Apr 12 14:54:51 localhost SquidClamAV: Enforced restriction set 
Apr 12 14:54:51 localhost SquidClamAV: Url: http://10.19.4.5/clam.png Status OKAY
Apr 12 14:55:41 localhost SquidClamAV: Url: http://www.google.es/ Status OKAY

Y me dice que tiene un virus :-(

DESPEDIDA Y CIERRE

Pues nada ya esta acabado, espero que lo disfruteis y esto valga para algo. Gracias al creador del script SCAVR, por crear el script jeje  y a Alfonso de Microalcarria por su ayuda en esto del linux ;-).

Saludos.

Juanmi.