Tabla de Contenidos

Acoplando Squid Con Clamav

Introducción

Puede acoplarse el Squid con el ClamAV, y de esa manera tener la posibilidad de revisar el tráfico HTTP. Esto añade una capa de protección adicional a nuestra red.

Ahora bien, solo se podrán chequear las conexiones HTTP que no sean cifradas. El tráfico a través de una conexión con HTTPS no podrá ser chequeado, precisamente por estar cifrado. En tales casos las soluciones deberán ser otras.

¿Cómo logro que el Squid le pase el flujo HTTP al ClamAV?

Para ello se utiliza el Protocolo de Adaptación de Contenidos de Internet.

El Protocolo de Adaptación de Contenidos de Internet (o ICAP, del inglés Internet Content Adaptation Protocol) es un protocolo de red abierto y público, originado en 1999 para la redirección de contenidos con fines de filtrado y conversión. Fue estandarizado en Abril de 2003 como RFC 3507. Permite el uso de antivirus, filtrado de contenidos, traducción dinámica de páginas, inserción automática de anuncios, compresión de HTML, etc.

Los servicios basados en ICAP tienen dos posibilidades de implantación, dependiendo de si la redirección al servidor de filtrado se realiza inmediatamente después de la solicitud del cliente (modo “request”) o tras la respuesta del servidor de destino (modo “response”). Normalmente se asocia el filtrado de acceso al modo solicitud y el filtrado de contenido al modo respuesta.

El protocolo ICAP se combina con un módulo llamado squidclamav, el cual realiza el trabajo de invocar al ClamAV.

La solución que hemos considerado requiere de la instalación de Squid3, c-icap, ClamAV (por supuesto…) y el módulo squidclamav, descargable desde Internet. Puesto que el paquete c-icap no viene en Debian 6, y la versión de preferencia del Squid que trae este Debian es la 2.7, lo mejor es upgradear a Debian 7, que sí trae c-icap y un Squid3 más reciente. Nos aseguramos también de instalar el ClamAV más reciente que podamos (lo tenemos funcionando con 0.98).

Configuración

Pasos

Configuración del ClamAV

Primero que todo, instalamos ClamAV, de preferencia el más reciente. Necesitaremos que clamd esté activo, así que si instalamos el ClamAV que trae el Debian instalamos también el paquete clamav-daemon. En cualquier caso, asegurarse de que el clamd esté activo.

Hay otros paquetes que será necesario instalar si no los tenemos ya instalados:

aptitude install gcc make curl libcurl4-gnutls-dev c-icap libicapapi-dev

Descomprimimos el squidclamav, nos movemos con cd hacia su directorio y mandamos configurar:

./configure --with-c-icap

Finalizada la configuración, compilamos con make y finalmente instalamos el paquete con make install

Este squidclamav trae una página a la cual se redirigirá al usuario en caso de que lo que se esté accediendo mediante HTTP contenga un virus. Tomamos ese fichero clwarn.cgi y lo copiamos en /usr/lib/cgi-bin (o donde corresponda ir a los ficheros que se ejecuten vía cgi).

Ahora vamos a /etc/squidclamav.conf y allí declaramos la redirección, de esta forma:

redirect http://192.168.0.104/cgi-bin/clwarn.cgi

Nos aseguramos de que esté bien declarado el camino al socket clamd:

clamd_local /var/run/clamav/clamd.ctl

En el caso de que clamd esté trabajando por un socket local, o si es un socket Inet, especificamos el puerto y la IP de escucha.

Configuración del c-icap

Ahora debemos configurar el icap. Vamos a /etc/default/c-icap y allí nos aseguramos de que se lance al iniciarse el sistema, poniendo:

START=yes

Seguidamente nos movemos a /etc/c-icap/c-icap.conf y cambiamos algunas cosas. Donde dice ServerAdmin, poner la dirección correcta:

ServerAdmin alberto@ettpartagas.co.cu

Ahora cambiamos el ServerName y ponemos el correcto:

ServerName partagas.ettpartagas.co.cu

Buscamos el tag Service y declaramos el objeto compartido:

Service squidclamav squidclamav.so

Hecho esto, lanzamos el servicio icap:

service c-icap start
Configuración del Squid3

Instalamos Squid3 y seguidamente pasamos a configurar el fichero /etc/squid3/squid.conf. Buscamos los tags icap_enable, icap_send_client_ip e icap_send_client_username y los habilitamos:

icap_enable on
icap_send_client_ip on
icap_send_client_username on

Buscamos el tag icap_client_username_header y le ponemos X-authenticated-User:

icap_client_username_header X-Authenticated-User

Ahora nos aseguramos de que el Squid3 le pase a squidclamav por el protocolo icap lo que acaba de recibir:

icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav
adaptation_access service_resp allow all

Comprobación

Reiniciamos el Squid3 (o mandamos a leer de nuevo al configuración) y si todo está bien puedo hacer una prueba con una firma de virus para pruebas (por ejemplo, EICAR, que la guardo para esas cosas). Copio el fichero EICAR en el /var/www de un servidor web, por ejemplo, y accedo al servidor mediante http://servidor-web. Allí debo ver el fichero del EICAR (o lo que esté usando para pruebas). Si le hago doble clic, squidclamav me presentará la pantalla de advertencia.

Notas

Ojo: esto no funciona si hacemos clic derecho sobre el objeto y escogemos la opción de Salvar. Sí funciona perfectamente si selecciono con doble clic.

Advertencia importante!

Usar esta posibilidad depende fuertemente del ancho (o el estrecho) de banda de que se disponga. Recuerde que la velocidades que logramos en ua intranet serán siempre superiores a las que tenemos habitualmenten en nuestras conexiones ppp o ADSL. Si no dispone de una red rápida, es posible que deba renunciar a usar SquidClamAV.