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:
#!/bin/sh
# Used for private firewall rules
#
# $Id: rc.firewall.local 1912 2008-09-16 20:11:47Z owes $
#
# read variables
eval $(/usr/local/bin/readhash /var/ipcop/ethernet/settings)
if [ -f /var/ipcop/red/iface ]; then
REAL_RED=`cat /var/ipcop/red/iface`
fi
# See how we were called.
case "$1" in
start)
## add your 'start' rules here
/sbin/iptables -t nat -A CUSTOMPREROUTING -p tcp --dport 80 -d xyz.com -j ACCEPT
;;
stop)
## add your 'stop' rules here
/sbin/iptables -t nat -F CUSTOMPREROUTING
;;
reload)
$0 stop
$0 start
## add your 'reload' rules here
;;
*)
echo "Usage: $0 {start|stop|reload}"
;;
esac
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煤 Logs - Registros 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
- \[^1\]:Proveedores Autorizados de Certificaci贸n.
- Un problema similar a este soap header authentication fails squid proxy
- IPcop bypass squid for one problem site