Squid, SquidGuard, Lightsquid y Clam-AV en pfSense Parte I

Navegando más seguro

 
Debido a la gran acogida que han tenido los post sobre Suricata y pfBlockerNG en pfSense y tras la petición de varios usuarios, realizaremos 2 posts debido a lo extensos que pueden llegar a ser, el primero este que cubre Squid y ClamAV y el segundo SquidGuard y Lightsquid, para aumentar la seguridad en la navegación de los usuarios utilizando:
 
Squid, el servidor proxy open source más popular nacido en los 90, debido a su gran rendimiento como proxy cache, a los protocolos que soporta HTTP,HTTPS,GOPHER,FTP,IMAP,...,a la capacidad de limitar conexiones o ancho de banda, opción de usarse como proxy transparente y poder utilizarlo como proxy inverso, es decir, lo tiene todo. 
 
SquidGuard, un sistema de filtrado utilizando listas negras. En versiones anteriores de pfSense también disponemos de dansguardian un poco más pesado que SquidGuard pero muy bueno también.
 
Clam-AV, antivirus open source muy bien integrado en pfSense.
 
Lightsquid, una aplicación via web que a partir de los logs de Squid nos generará informes muy detallados.

Antes de empezar haremos un pequeño resumen de que es un servidor proxy de manera sencilla y que sea comprensible para todo el mundo, podríamos decir que es un servidor intermedio entre dos máquinas por donde pasan todas las peticiones realizadas entre dos máquinas A y C siendo el proxy B para permitir,denegar,limitar,...dichas peticiones, es decir, la máquina A en lugar de realizar una petición a C, se la realiza a B y esta a C y en función de las reglas que estén definidas en el servidor proxy B le dará la respuesta a A como indicamos permitiendo su conexión, denegandola, limitandola,...

Hay varios tipos de proxy en función de lo que necesitemos, donde no entraremos en detalle, solo aclararemos que es eso de proxy transparente, simplemente que la máquina que pasa por el proxy no lo sabe, es decir, es transparente porque no lo ve ni necesita configuración especifica, mientras que un proxy a secas necesitas configurar la máquina para que pase por el proxy. El que existan proxys transparentes es una razón por la que nosotros creamos reglas en los equipos empresariales para que no se puedan conectar a cualquier WiFi cuando están fuera de la empresa porque nunca se sabe que puede haber detrás de una WiFi gratuita

Bien después de esta pequeña intro, empecemos.

Para empezar nos vamos a System/Package Manager/ Available Packages y escribimos squid en el buscador

Y como podemos observar nos aparece todo lo que necesitamos ya que Clam-AV nos lo instalará al instalar el paquete de Squid. Tan sencillo como presionar en install y confirmar para los tres paquetes.

Una vez instalados en el menu Services tendremos tres nuevas opciones Squid Proxy Server, Squid Reverse Proxy (del cual no hablaremos en este post pero cualquier duda escribirnos) y SquidGuard Proxy Filter. En el menu Status tendremos Squid Proxy Reports.

Empezamos configurando Squid en Services/ Squid Proxy Server/ Local Cache. En la primera sección nos encontramos los ajustes generales

La primera es la política donde se decide que objetos permanecerán en la cache y cual se remplazará, tenemos cuatro opciones donde debemos poner la que más se ajuste a nuestras necesidades, por defecto está LFUDA donde mantiene los objetos más solicitados en cache independientemente de su tamaño, para empezar es muy buena opción.

Low-Water Mark in % el indice de advertencia donde empieza a liberar la cache cuando la swap está al 90%, aquí si no utilizan discos SSD aconsejo que lo pongan al 80%

High-Water Mark in % el indice crítico donde libera cache de manera más agresiva, al igual que la anterior si no utilizan SSD pongan la marca a 85%

Do Not Cache, en cada linea pondríamos ips o dominios que no deben ser cacheados.

Enable Offline Mode, esta opción puede hacer que tu cache crezca demasiado y no la veo muy util, a lo mejor en algún caso concreto puedes serle util, básicamente lo que haría es por ejemplo, tienes squid desconectado de internet, si un cliente hiciera una solicitud le serviría la última copia de esa web que tenga en cache, con ella desactivada no podría acceder porque squid no tiene manera de verificar los objetos cacheados.

External Cache Managers, si utilizamos Administradores de cache externos.

La siguiente sección Hard Disk cache settings.

En esta sección definiremos en Hard Disk Cache Size el espacio de disco que utilizaremos para la cache en MB, en este caso 2 GB

El tipo de sistema de cache, donde ufs siempre me ha funcionado correctamente.

Un botón para limpiar la cache manualmente.

El siguiente valor es bastante crítico para la velocidad de la cache, aquí especificaremos cuantos directorios tiene el Level-1, cada directorio tiene 256 subdirectorios de level 2 si ponemos 16 serían un total de 4096 directorios, un valor que considero bueno para 2048 MB de tamaño de cache por ejemplo suponiendo que cada objeto tiene 16 KB habrá 2048x1024= 2.097.152 Kb dividido entre (16Level1x256Level2x16Kb) haría un total de 32 objetos por directorio un valor bueno para 2GB de cache, a mayor espacio de cache este nivel de objetos tiene que incrementar. Este valor hay que ajustarlo cuando veáis que media de objeto tenéis en cache, a mayor número de directorios más tardará en arrancar el servicio pero acelerara la caché, aunque entre comillas con un espacio de cache muy bajo tendréis problemas.

La siguiente opción es el directorio donde se almacenará, seguido del tamaño mínimo y máximo de los objetos.

A continuación la siguiente sección sería la cache en memoria mucho más rápida que la de disco, donde no asignaría más de un 25% aunque en la ayuda pone 50% porque es un parámetro que luego se olvida que está ahí empiezas a instalar servicios y tienes un problema porque te quedas sin RAM y el firewall empieza a swappear lo cual ya hace que todo vaya bastante mal.

Los otros dos valores para la mayoría de escenarios está correcto con 256k y política GDSF

Y la última sección a día de hoy no creo que la utilice nadie.

Hemos configurado primero la cache porque al configurar el servicio os dará errores si no está definida. Con la cache preparada vamos a dirigirnos a la configuración general de Squid en la pestaña General

En el apartado General settings nos encontramos la opción  Enable Squid Proxy y que tendremos que activar, la opción Keep Settings que como en cualquier otro paquete si está activada preservará configuraciones,logs,cache y definiciones antivirus de Squid si desinstalamos el paquete.

En que versión IP escuchará, seleccionamos IPV4.

Si utilizamos CARP Squid solo funcionará cuando dicho firewall sea el Maestro y se detendrá cuando esté como Slave en una arquitectura HA Maestro/Esclavo, donde es muy importante sincronizar la cache local si la utilizamos.

Proxy interface, en que interface activaremos el servicio, en nuestro caso solo tenemos una LAN interna la seleccionamos y muy importante la de loopback porque sin ella no podremos activar Lightsquid.

El Proxy Port, el puerto por el que escuchará squid y al que debemos conectarnos, por defecto en squid es el 3128

ICP Port, lo dejaremos en blanco pero si utilizamos por ejemplo HA o caches remotas pondremos un número de puerto.

Allow Users on interface, la marcamos para que los usuarios conectados a dicha interfaz puedan utilizar el proxy.

Resolve DNS IPV4 First, como indica si tienes problemas para acceder a contenido HTTPS activalo, nunca me ha hecho falta.

Disable ICMP, para desactivar el ping.

Use Alternate DNS Servers for the Proxy Server, es decir, utilizar unos DNS diferentes a los que tenemos puestos en la configuración general del Firewall.

La siguiente sección sería Transparent Proxy Settings

En nuestro caso no lo vamos a activar pero como os explicamos antes sería para que todo equipo conectado a las interfaces que seleccionemos pase por el proxy sin necesidad de configurar nada en las máquinas que están conectadas y con tres opciones que se entienden muy bien, hacer un Bypass en función de Private Address Destination, es decir, que la comunicación entre vuestra maquinas internas sea directa donde aconsejo que la activeis si queréis utilizar Proxy transparente. Las otras 2 opciones es en función de origen o destino añadiendo las ips, redes, nombres de hosts o alias separados por punto y coma.

La tercera sección de este apartado es SSL Man In the Middle filtering, muy importante ya que a día de hoy la mayoría de tráfico es HTTPS

Donde solo nos interesa HTTPS/SSL Interception tenerla activa, el SSL/MITM Mode Splice All ya que vamos a utilizar SquidGuard por lo tanto no necesitaremos una CA, cualquiera de las otras opciones tendrás que crear la CA primero en System/CertManager y depues seleccionar en CA la entidad creada y por último seleccionar las interfaces donde estará activo, es posible aunque pone que no es necesaria que aún seleccionando Splice All te diga que necesitas instalar la CA, si es así la instalamos y la seleccionamos.

Siguiente sección logs

Poco que contar, activarlos, ruta donde guardarlos, cuantos días queremos tener de archivo (en blanco será ilimitado, esto configurar en función de vuestras necesidades y recursos) y la últimas para incluir en Squid las conexiones denegadas que nos devuelva SquidGuard donde solo funcionará si se sigue las instrucciones detalladas en click info....

Y por último en el apartado Headers Handling, Languaje and Other Customizations

Básicamente nombre que aparecerá ante algún error, la dirección de correo del admin que verán los usuarios, el lenguaje y ajustes sobre las cabeceras que salvo casos especiales tal y como está sería lo correcto para la mayoría de escenarios a no ser que haya páginas que no permitan proxy, en ese caso, ponemos el X-Forwarder en off y marcamos la casilla se Suppress Squid Versión.

Pasamos al apartado Antivirus

Donde nos encontramos con la primera opción para habilitar o no ClamAV

Que datos mandamos del cliente a ClamAV a gusto del consumidor.

Activar modo manual, para que complicarse la vida en esto.

URL donde redirigir cuando se ha bloqueado por virus muy util para educar a los usuarios en la navegación.

Utilizar Google Safe Browsing

Si quieres excluir audio y video en Streams de los escaneos, por rendimiento los excluiría.

Cada cuanto queremos actualizar la base de datos de ClamAV y un botón para hacerlo manualmente.

La región desde donde actualizar y por último alternativa de servidores de bases de datos.

Pasemos al apartado ACLs, donde el primer apartado es simple de entender.

En allowed Subnets introducimos las  subredes que podrán utilizar el proxy, en nuestro caso como activamos Allow Users on Interfaces" en el apartado General no necesitamos añadir ninguna.

Unrestricted IPS, añadiremos las redes o ips que no serán filtradas.

Banned Hosts Addresses, las subredes o ips que no tendrán permitido usar el proxy.

Whitelist, la lista blanca de dominios de destino que serán siempre accesibles para los usuarios.

Blacklist, lo contrario las que nunca podrán acceder

Block User Agente, para bloquear ciertos navegadores.

Block MIME Types, para bloquear tipos de MIME como por ejemplo (application/javascript)

Y por último en este apartado los puertos permitidos

Muy útil cuando por ejemplo en SSL utilizamos un puerto diferente a los que indica por default(443, 563) ejemplo muy utilizado en SSL 8443

Siguiente apartado Traffic Mgmt

En esta primera sección el tamaño máximo de descarga y subida poco la vais a utilizar, he visto algún caso que lo han requerido por política de empresa pero será un 0,01% 

El Overall Bandwidth disminuirá el ancho de banda de las descargas cuando el uso del ancho de banda llegué al valor especificado.

Per-Host Throttling, lo mismo pero por host, si un host llega a la velocidad indicada su descarga irá disminuyendo la velocidad.

Y la última opción si queremos que dentro de estos límites de Throttling incluyamos a los Unrestricted de las ACLs.

Sección Squid Transfer Extensions Settings

Si queremos solo unas extensiones específicas debemos activar la primera casilla la cual nos activará las siguientes que no vamos a explicar porque está muy claro.

Y por último en este apartado Squid Transfer Abort Settings

Esta opción tiene su miga en cada escenario, os recomiendo dejar todo a 0 ya que los usuarios están acostumbrados actualmente a que todo vaya muy rápido y si les activamos las limitaciones de Throttling a un ancho de banda muy bajo, cancelaran la descarga, le volverán a dar, para reanudar y asi varias veces, el cache por defecto seguirá descargando las solicitudes canceladas, si un usuario la cancela 5 veces pues 5 descargas si no ponemos este valor a 0. Por otro lado también podemos decirle que continue las descargas desde la cache si quedan menos de x Kb. Es una opción que como digo tiene su miga dependiendo el escenario.

Pasemos al apartado Authentication. En todo proxy de empresas o clientes debemos tener un sistema autenticacion para que nos permita crear luego reglas en función del tipo de usuario, porque nos lo van a exigir. Con squid tenemos cuatro métodos, usuarios locales que se añadirían en el apartado Users, Active Directoruy, Radius o Portal Cautivo, en este apartado se activarán las opciones según el método elegido, vamos a seleccionar Local para no demorarnos mucho más.

Donde se nos activa 5 opciones, la primera Authentication Prompt donde pondremos lo que verán los usuarios en la ventana que les saltará como por ejemplo "Por favor introduce tu usuario y contraseña"

El número de procesos para autenticar, si tenemos muchos usuarios y todos entran de golpe aumentarlo porque se quejarán en función de vuestro hardware.

El tiempo tras el cual un Autenticación TTL será válida, al gusto de consumidor, hemos puesto 8 horas.

Si le requerimos autenticación a los Unrestricted IPs que tengamos en las ACLs y si queremos evitar que se tengan que autenticar ciertas ips o subredes.

Ya nos queda menos de la parte Squid jejeje.  Ahora en Users como hemos seleccionado Local vamos a introducir alguno haciendo click en Add y luego en Save

En Real Time como su nombre indica veremos lo que está pasando por Squid en Tiempo real diferenciado en varios apartados como la tabla de cache, de SquidGuard,Virus....

Y arriba a la derecha el primer icono reiniciar el servicio, segundo parar servicio, tercero configuración general, cuarto estado de los servicios y quinto donde estamos.

Y por último si utilizamos un escenario HA la Syncronización muy importante configurar.

donde elegiremos el tipo, cada cuanto y la dirección de los servidores para sincronizar.

Y para terminar esta primera parte como en todo servicio que levantamos en pfSense y que queremos esté siempre levantado nos dirigimos a Service/Service Watchdog y añadimos el servicio Squid Proxy Server, ClamAV Antivirus, ICAP Interface for Squid and ClamAV, quedando de la siguiente manera tras nuestros diferentes posts en este mismo pfsense.

Espero os haya gustado esta primera parte, no tardaré mucho en realizar la segunda. Buen día a disfrutarlo. (Segunda parte realizada continua haciendo click aquí)

TL.

Gracias por leer nuestros posts.

2 Comentarios
  • Eddy
    Escrito a las 16:38h, 05 mayo Responder

    Hola, busca qu te busca cosas en internet sobre el tema, los mil videos, videos hasta de una hora y más, no digo que sean malos, he aprendido mucho con ellos también sobre pfsense, pero hay mil detalles muy bien explicados acá, del pi al pa. Cosas que no están en ninguna parte. Le estoy realmente muy agradecido

    • TL
      Escrito a las 19:21h, 05 mayo Responder

      Nos alegra que le haya servido nuestros posts. Llevamos tiempo sin poder dedicarle tiempo pero en breves seguiremos publicando nuevos posts.

Comenta la entrada