Como configurar un bypass al proxy transparente de IPCop

Bypass al proxy transparente de ipcop

En esta ocasión les voy a intentar explicar como configurar un bypass al proxy transparente de IPCop 2 para que las peticiones a ciertos dominios salgan directamente a Internet sin pasar por Squid.

El problema

Como les había comentado en días anteriores cambié mi servidor de de IPCop a IPCop 2. El cambio ocurrió prácticamente sin problemas, pero al poco tiempo me encontré con uno que no fue sencillo de solucionar.

Con el rollo de la facturación electrónica tuve un problema con mi PAC[^1], al momento de intentar timbrar una factura con el programa Microsip me arroja el siguiente error:

Ocurrió la siguiente excepción: Connection lost (error code is 10058)

Durante varios días le estuve dando varias vueltas al asunto. A manera de solución rápida desactivé el proxy y se pudo timbrar sin problemas, primera pista Squid.

Llevo usando Squid durante más de 8 años y es la primera vez que tengo un problema de este tipo, vamos, ni con los horripilantes sistemas del gobierno mexicano desarrollados en Java he tenido tantos problemas por algo tan sencillo.

Investigué en varios foros el origen del problema, al parecer existe una mala combinación entre SOAP,IIS7 y Squid en sus ultimas versiones (actualmente IPCop usa la versión 3.4.4), simplemente no se llevan bien y eso provoca el error de conexión.

En un principio quise agregar una opción a Squid para que se llevaran bien, me refiero a ignore_expect_100 on pero no funcionó, siguió apareciendo exactamente el mismo problema.

Como de momento no se iban a llevar bien mi proxy y el servidor de timbrado y apagar el proxy cada vez que se iba a timbrar una factura no era para nada una solución práctica decidí cambiar el enfoque.

Bypass al proxy.

Sabía lo que tenía que hacer. De alguna forma tenía que configurar IPCop para que al momento de que llegara una petición al dominio del servidor de timbrado, en lugar de que se fuera por la ruta normal (Squid como proxy transparente) saliera directamente a internet sin la intermediación del proxy. Creo que ni yo me entendí… en fin, la idea es esa.

Bypass al proxy transparente de ipcop

Decirlo es más fácil que hacerlo, al igual que en otras ocasiones supuse que la solución la iba a encontrar con iptables y así fue.

Encontré un artículo que explicaba como hacer esto en IPCop 1.4.12 así que sólo lo tuve que adaptar ligeramente para que funcionara en IPCop 2.

Para lograrlo hay que editar el archivo /etc/rc.d/rc.firewall.local y agregar algunas reglas de iptables.

El archivo esta dividido en 3 secciones, start, stop y reload. Sólo vamos a modificar las dos primeras.

A manera de ejemplo, si el dominio problemático es xyz.com entonces en la sección de start agrego la siguiente línea:

/sbin/iptables -t nat -A CUSTOMPREROUTING -p tcp --dport 80 -d xyz.com -j ACCEPT

En la sección de stop:

/sbin/iptables -t nat -F CUSTOMPREROUTING

Y la sección reload la dejo tal y como esta.

Al final el archivo completo queda muy similar a este:

Guarden el archivo. Para aplicar los cambios, pueden reiniciar el servidor o mediante una conexión ssh ejecutar el script con /etc/rc.d/rc.firewall.local reload

La comprobación

Para averiguar que todo esta funcionando pueden activar los registros del proxy Menú Servicios – Proxy – Configuración de Registros – Registro Activado y luego revisar los registros en el menú LogsRegistros del proxy.

Visite unas tres o cuatro veces el sitio, no deben de aparecer en el registro porque en teoría nunca pasaron por ahí.

Este consejo se puede aplicar tanto en IPCop 1.x como en IPCop 2.x .Espero que este artículo les sea de utilidad.

Referencias

Squid local en Manjaro

squid caché web proxy Para dejar de estar jugando con la configuración de squid del servidor, mejor hice una instalación local en mi equipo, de esa manera puedo hacer varias pruebas sin correr el riesgo de *”tumbar”* el servicio.

Pero pensándolo bien, a lo mejor lo dejo de manera definitiva, tengo un buen equipo y de esa forma le sacaría mejor provecho a sus 8 GB en RAM y al microprocesador de 4 nucleos que tengo. Llevo un par de días con el squid instalado y ha funcionado muy bien, muy rápido a la hora de presentar las páginas web, así que lo más probable es que lo deje definitivamente.

¿Quieren instalar squid en Manjaro?, entonces … léanme los buenos !!!

# Instalar squid
Instalar squid en Manjaro es muy sencillo, solamente hay que instalar el paquete squid usando pacman:

sudo pacman -S squid

# Configurar squid
El paquete squid tiene un archivo de configuración básico y que debe de funcionar, pero si quieren hacer algunos ajustes entonces tienen que editar el archivo **/etc/squid/squid.conf**

sudo gedit /etc/squid/squid.conf

Como referencia, este es el archivo de configuración sin modificaciones.

Antes de iniciar el servicio deben de crear las carpetas donde se van a almacenar los archivos que va a crear squid. Esto se logra con:

sudo squid -z

Ahora si, con las carpetas listas, llegó el momento de iniciar el proceso de squid.

sudo systemctl start squid

Como estoy haciendo algunas pruebas modifiqué algunos valores.

Primero aumenté el tamaño del caché, por default son 256 MB, así que lo aumenté a unos 2 GB, aunque pensandolo bien ¿Porque no 8 GB? ¿o 16? ¬¬

cache_dir ufs /var/cache/squid 2048 16 256

Aumenté el tamaño de los objetos en memoria, de 8MB a 64MB

cache_mem 64 MB

Aumenté el tamaño de los objetos almacenables a 40MB

maximum_object_size 40 MB

Cambié la política de reemplazo por **heap GDSF**

cache_replacement_policy heap GDSF

Y como un plus, le indiqué que usara mi servidor **pdnsd** local, para que quede todo bien “acelerado”.

dns_nameservers 127.0.0.1

Al final quedó de la siguiente forma:

Si hacen ajustes en el archivo de configuración no es necesario reiniciar el servicio, en su lugar pueden ejecutar este comando para que active los cambios.

squid -k reconfigure

# Ajustar el sistema para que use el proxy
En mi caso, uso Manjaro Linux con Cinnamon, así que lo único que tengo que hacer es indicarle al equipo que utilice el proxy, dejé el puerto por default que es el **3128** como pueden ver en la imagen.

configuración del proxy de la red

# Iniciar squid durante el arranque

Si todo esta funcionando bien, podemos indicarle al sistema que inicie automáticamente squid durante el arranque.

sudo systemctl enable squid

Y eso es todo, tendremos un web proxy local que se encargará de proporcionarnos todos los elementos que usamos con mayor frecuencia de forma rápida y con un consumo moderado de recursos de nuestro equipo.

Me despido de ustedes deseándoles, feliz viernes y ¡Happy hacking!

Política hasta en Squid: LRU, LFUDA, GDSF

Hace varios años, tomé un equipo que ya no soportaba ni el windows 98, le instalé IPCop y lo puse a trabajar como un servidor de internet (Firewall, DNS caché, DHCP, VPN, etc.) y ha funcionado de maravilla, prácticamente no tiene problemas y si los llega a presentar basta con un reinicio para volver al trabajo.

Después le instalé el add-on Advanced Proxy que permite configurar de una manera mucho más fina el servicio de proxy Squid. Noté que en la sección Administración de la caché hay un apartado para elegir las políticas de reutilización de la memoria y del caché.

Políticas de reutilización de la memoria y el caché.

Squid guarda algunos archivos que se usan con frecuentemente, funciona de manera similar a los archivos temporales que usa nuestro navegador. El objetivo es, si un elemento de una página web ya lo descargaste para mostrar una página y en el caso de volverlo a solicitar,no sea necesario pedirla nuevamente a internet. En su lugar te muestra el archivo local que ya tienes almacenado, claro que con eso obtienes una importante ganancia de tiempo y la página se muestra mucho más rápido en la pantalla.

Pero ¿Qué elementos se deben de conservar y cuales desechar? sobre todo cuando Squid esta solicitando espacio en el disco. Se necesita un método, una política, un criterio y es ahí donde entran las políticas de reutilización.

En squid existen 4 opciones:

  • LRU Es la política original de squid y mantiene los objetos usados más recientemente.
  • heap LFUDA (Least Frequently Used with Dynamic Aging).
  • heap GDSF (Greedy-Dual Size Frequency).
  • heap LRU LRU pero utilizando un montículo.

Políticas de reutilización en IPCop

No estoy muy seguro de cuales son las ventajas y desventajas de cada uno, no me he tomado el tiempo de analizar cada uno, pero en mi búsqueda de elegir cual sería el mejor me encontré con un documento muy detallado de los HP Laboratories llamado: Enhancement and Validation of Squid’s Cache Replacement Policy, en el que hacen un análisis muy detallado de las políticas de reutilización y como afectan el rendimiento. Por lo tanto decidí darle una oportunidad a GDSF.

CPU más activo.

Han pasado un par de días desde que hice el cambio y pude notar que el CPU esta más activo, no tanto como para ocasionar un problema, de hecho el impacto es mínimo en el CPU pero si hay un aumento minimamente notable y eso es bueno, quiere decir que aún con mi hardware límitado (Pentium, 256MB RAM) no había problemas con el cambio.

Menor consumo de memoria RAM.

Este cambio fue mucho más notorio, el consumo de memoria RAM bajó notablemente, incluso por un momento el equipo dejó de utilizar la memoria swap, así que no tuve problemas para aumentar el parámetro Tamaño en memoria para la caché (MB): de un valor de 8 a 100. Pero como pueden ver en la gráfica ha estado aumentando con el uso. Aún con este cambio sigue sin hacer uso de la memoria swap (hasta ahora).

Gráficos del sistema usando heap GDSF - IPCop

Conclusiones

Realmente no era tan necesario hacer estos cambios, el pequeño servidorcito funciona como el primer día que lo instalé y dejará de hacerlo hasta que alguna descarga eléctrica lo deje inutilizable.

Pero siempre es interesante hacer algunos ajustes, bit ahorrado bit ganado. Supongo que ahora le puedo exigir un poco más a este equipo y aprovecharlo mejor. Las páginas se están descargando, los correos siguen llegando, es un bonito día de verano.

Actualización: la memoria swap por las nubes !!!

Recuerdan que les había comentado que moví el valor de Tamaño en memoria para la caché (MB) cache_mem de 8 a 100, bueno, pues creo que es mejor que no lo hagan, esto fue lo que provocó 🙂

swap por las nubes cache_mem

Como pueden ver, el consumo de la swap se elevó por las nubes y finalmente el proceso de squid dejó de funcionar. Así que regresa a su conservador valor de 8 MB 🙂 . Aquí la explicación de porque no deben de mover mucho ese valor My Squid process grows without bounds.

Referencias.