PROXY TRANSPARENTE: SQUID PYTHON-CLAMAV SCAVR CLAMAV
INTRODUCCIÓN:
Explicare la instalación del proxy transparente y como aplicarle una herramienta que sirva para que las páginas visitadas que contengan virus (imágenes, zip, rar, exe, …..) no se muestren y las redirija a una pagina que nos crearemos avisándonos de la pagina que tiene el virus y el virus contiene.
Las ventajas del proxy transparente no voy a contarlas aquí.
Las versiones que he utilizado han sido las siguientes:
Debian Sarge (estable a 11-abril-2006)
Squid 2.5.9-10sarge2
Python-Clamav 0.3.0-1 (de la versión inestable, no esta en la estable 🙁 )
Scavr 1.8.0
Clamav 0.88.1-0volatile
Para el código que veréis en el mini-howto utilizo lo siguiente: código que tecleo ( NEGRITA CURSIVA ).
Para el código que muestra la pantalla ( CURSIVA ).
INTALACIÓN DE SISTEMA :
La instalación de Debian ha sido la más básica de todas, ya iremos agregando paquetes. Lo único decir que como siempre he cogido la versión estable.
Editaremos el archivo de configuración 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 línea que he agregado es la segunda.
INSTALACION DE SQUID Y CONFIGURACION
La instalación de Squid es muy simple, algo mas complicado es su configuración, empecemos:
squid2:~# apt-get install squid squid-common
..
Una vez instalado configurémosle, decir que el squid es un proxy y como tal podemos utilizarlo de distintas formas, este manual configurara squid para que sea completamente 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 redirigirá al puerto por defecto del squid, el 3218.
El archivo de configuración de Squid es /etc/squid/squid.conf, editémosle y veremos un gran archivo:
Echadle un vistazo para que veáis la multitud de opciones que tiene este proxy.
Yo os pondré la configuración del mío y explicare para que sirve cada opción.
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 opción sobre ellas, véase " acl avi urlpath_regex -i .avi$" y luego "no_cache deny avi" estamos creando una lista que se llama avi donde se cogerán todos los archivos con extensión avi y no cachearemos el contenido de esa lista, es decir que nuestro proxy cache no almacenara AVI.
La línea maxium_object_size indica cual será el objeto mas grande que almacenaremos, en mi casa de 35 mb, todo lo que le supere no se cacheara.
Otra línea muy importante es cache_dir:
Os pongo lo que dice el manual sobre esta línea para que así podáis 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 utilicéis todo el disco para cache, ya que su rendimiento bajara de una manera considerable y en vez de ganar, perderemos tiempo. Según dice el manual debemos usar el 80%, yo he usado el 85%.
Mas cosas que tenemos que comentar sobre el archivo de configuración de Squid, a quien le damos permisos para utilizar nuestra cache. Yo se lo permito a toda mi red con las líneas
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 configuración 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 ejemplo la de noticias del google) o compartir caches con otros servidores, un largísimo etcétera.
Después de dejar como queremos el fichero de configuración reiniciaremos el demonio de squid:
squid2:/# /etc/init.d/squid restart
Restarting proxy server: squid.
CONFIGURACION DE IPTABLES
Utilizaremos el iptable que lleva nuestro kernel para redirigir todo lo que llega a nuestro puerto 80 al puerto del Squid 3128.
Crearemos el archivo que contendrá nuestra configuración:
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 única regla que aplico es la redirección de HTTP, no FTP, ni HTTPS (seria ir añadiendo líneas 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 único que hace este router es esto, redirigir lo que entra por el 80, todo lo demás se lo pasara a su puerta de enlace, en mi caso al router que me puso telefónica. Por que digo esto, porque todos los usuarios tendrán 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 petición a google (no nuestro usuario) la almacenara en la cache y se la dacha a nuestro usuario. Si por ejemplo pide una archivo en un servidor ftp, squid simplemente redirigirá la petición al siguiente router.
Le damos permisos de ejecución 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 deberá 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 queríamos.
Ya podemos comprobar si nos está haciendo de cache nuestro nuevo squid.
Cambiaremos la configuración en una maquina de algún usuario 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.
Ahora debería funcionarnos a la perfección 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
aquí vemos los 16 niveles del archivo de configuración.
Hasta aquí es la parte obligatoria para tener el proxy transparente con Squid, lo que cuento a partir de ahora es completamente opcional, pero recomendable, instalaremos Sarg para hacer la administración de los logs de Squid amigable, Sarg también nos dacha los porcentajes de visitas cacheadas así como las que ha tenido que salir a Internet a por nuestras peticiones. Instalaremos también 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 instalación de Apache, decir que instalare también php4, para su posterior utilización con clamav (antivirus) si no vais a realizar esta instalación no es necesario que instaléis 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
Configurémoslo para que ejecute código php, editaremos el archivo de configuración de apache:
squid2:/# vi /etc/apache/httpd.conf
Buscaremos una línea 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 líneas
Perfecto, nuestro servidor apache ya es capaz de ejecutar código 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 configuración y cambiaremos las siguientes líneas para dejarlas como las pongo aquí, las demás no las toquéis:
squid2:/# vi /etc/squid/sarg.conf
language Spanish
title "Informes de Acceso a Squid"
date_format e
Estas han sido las únicas que he tocado, podemos incluir nodos para que no los saque en el informe (archivo /etc/squid/squid.nodes), si queréis hacer mas cambios leeros el archivo de configuración de Sarg, tiene mas posibilidades.
Añadiremos al final del archivo de configuración de apache las siguientes líneas:
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 queráis:
squid2:/# htpasswd -c -m /etc/.htpasswdsquidreports USUARIO
Después de haber tecleado la password ejecutemos SARG para que nos haga el primer report, si todo va bien deberías 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 instalación de Sarg añade automáticamente 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 actualización:
squid2:/#apt-get install clamav clamav-base clamav-daemon clamav-freshclam libclamav1 libcurl3 libgmp3 arj unzoo unrar lha
Editaremos el archivo de configuración de Clamav para añadir la línea ScanRAR y dejarlo como os lo pongo aquí 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 instalación añade en el cron la visita al servidor para su actualización:
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 instalación me he tenido que bajar el paquete deb de la versión testing, no esta en la estable 🙁
En la pagina http://packages.debian.org/testing/python/python-clamav podéis ver las dependencias que tiene este paquete, las cumplimos todas, la librería libc6.1 no la tenemos pero no pasa nada tira perfectamente, no hace falta nada mas que bajarnos el paquete deb e instalarlo, yo he bajado la de la versión 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 bajarnos 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 versión y os la bajáis. 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 configuración
squid2:/ vi /etc/squid/SquidClamAV_Redirector.conf
Yo los únicos cambios que he hecho aquí han sido las redirecciones, si no os la queréis currar podéis dejar las que vienen por defecto, aun así como tenemos servidor web por el SARG, utilicémosle y creemos 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 redirija las paginas al antivirus, lo único que tenemos que hacer es añadir las siguientes líneas 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 línea (local6.=…..) en /etc/syslog.conf, justo debajo de la línea (mail,news.none -/var/log/messages) para que nos cree el log de Scavr, dejo puesta la línea que hay que añadir y unas cuantas mas de arriba para que ubiquéis 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 aquí debajo es la que he añadido
local6.=info /var/log/squid/SquidClamAV_redirector.log
Reiniciemos el servicio para la creación 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 así:
¡¡¡ 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 disfrutéis 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.