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

Actualizando a IPCOP 2

Servidor IPCop, Los fierros

Todo llega, todo cambia, todo pasa. Decidí que ya era tiempo de jubilar mi vetusto servidor de internet con IPCop 1.4.21, aunque todavía estaba funcionando ya eran notorios algunos achaques, y es que no era para menos, era un equipo con apenas 256 MB en RAM y un disco duro de 6 GB !!!, ya era tiempo de reemplazarlo por un equipo más moderno.

¿Por qué actualizar a IPCOP 2.x?

Las razones son varias:

  • Mejor soporte de hardware. Como sabrán ya tengo algo de tiempo trabajando con IPCop y con la versión anterior frecuentemente me llegaban todo tipo de consultas relacionadas con el hardware, me mencionaban problemas sobre que no se podía instalar IPCop 1.4 desde unidades de CD SATA o tarjetas de red no reconocidas o cosas por el estilo, bueno la versión 2 tiene un mejor soporte de hardware.
  • Mejor seguridad Desde hace tiempo que no hay actualizaciones en las versiones 1.4.x y en estos tiempos es importante que los bugs de seguridad se corrijan lo más pronto posible. Hasta ahorita no me han aparecido actualizaciones porque descargué la versión 2.1.5 que se supone es la más reciente.
  • Mejor integración. En las versiones anteriores de IPCop muchas de las funcionalidades requeridas por los usuarios se instalaban mediante addons, ahora muchos de estos programas agregados ya están incluidos y están perfectamente integrados con IPCop, me refiero a los programas de cajón como URL Filter o el famoso OpenVPN de Zerina.

El equipo.

Servidor IPCop,  Los fierros
El nuevo servidor de IPCop.

Del deshuesadero de computadoras que tengo logré juntar las piezas necesarias para armar un buen servidor.

  • Un microprocesador Celeron de 1.8 GHz.
  • 2 GB de memoria RAM.
  • Disco duro SATA de 80 GB que me dio algunos problemas al momento de hacer las particiones, pero de eso hablaré más adelante.
  • Dos tarjetas de red, una para la zona RED y otra para la zona GREEN, esta última con soporte para Gigabit ethernet que me reconoció a la primera (con windows era un dolor de cabeza instalarle el driver).
  • La fuente de poder es “externa” por la sencilla razón de que no cabía en el cabinete, así que la dejé fuera para un mejor enfriamiento, si … eso… 🙂 .

La instalación.

Si son lectores frecuentes de este humilde espacio sabrán que hace tiempo que no compro discos compactos para quemar, en su lugar tengo una memoria usb que utilizo para cuando necesito instalar un sistema operativo.

Por eso descargue la versión más reciente de IPCop para flashdrive.

Una vez que descarguen, descompriman el archivo (img.gz) para obtener la imagen de la distro (.img) y desde la terminal.

dd if=ipcop-2.1.5-install-usb-fdd.i486.img of=/dev/sdf bs=1k

Pero recuerden cambiar /dev/sdf/ por el directorio que corresponde a su unidad usb, pueden usar la herramienta Discos de Gnome para averiguarlo.

Enchulando IPCop

Redimensionando la partición de root.

Por default IPCop hace una partición ridículamente pequeña de unos 512 MB y anteriormente me habían reportado problemas de que esta partición se llenaba muy fácilmente, por eso les recomiendo Aumentar el tamaño de la partición root en IPCop 2.

redimensionando las particiones de ipcop

Este proceso me llevó laaaaaargas horas, pero vale la pena. Por cierto, no tuve contratiempos al simular esta operación en una maquina virtual, pero al hacerlo en el equipo físico me apareció una partición libre al final del disco duro como de 1GB, no se si fue un error de Gparted o mío, pero como el proceso duró tanto tiempo ya no me quedaron ganas de repetirlo para intentar corregirlo.

Binarios adicionales

Necesitaba un par de comandos que me gusta utilizar en IPCop, htop e iptraf, ambos los pueden descargar de IPCop addon binary collection.

El proceso de instalación es muy sencillo y en muchos aspectos idéntico a las versiones anteriores, únicamente hay que tener cuidado con los puertos porque son diferentes.

Opción 66 para agregar un TFTP

opción 66 dnsmasq

Luego me encontré con una pequeña sorpresa, necesitaba especificar la dirección de un servidor tftp que había configurado anteriormente (véa Teléfono Cisco 9951 y Elastix) y ya no estaba disponible esta opción.

Después de echarme un clavado en Google, la solución es muy simple, tenía que agregar la famosa opción 66 del programa DNSMasq (véa DNSMasq As DHCP Server).

Para agregar esta opción hay que editar archivo /var/ipcop/dhcp/dnsmasq.local y agregar esta línea:

dhcp-option=66,"dirección.ip.del.servidor.tftp"

No olviden las comillas.

Un nuevo comienzo

Poco a poco voy configurando los servicios a mi gusto, empecé con el Proxy y con el filtro de contenidos, el servidor NTP y una conexión OpenVPN, como pueden ver ya tengo la mayoría de los servicios activos y funcionando.

Servicios activos en IPCOP 2

Por último , les recomiendo que le den un vistazo al Manual del Administrador de IPCop v2.0.0 a mi me ha servido para despejar muchas dudas.

Como conectar IPCop a Infinitum

Una de las preguntas más frecuentes que me hacen es ¿Cómo conectar IPCop a Infinitum?, supongo que estas indicaciones se pueden aplicar a cualquier proveedor de internet, pero este es el más popular en México.

Para explicar un poco mejor como se hacen las conexiones hice este pequeño diagrama.

Diagrama de conexión entre Infinitum e IPCop

Las zonas de IPCop

IPCop divide las conexiones por zonas:

  • La zona RED que es la que conecta a Internet.
  • La zona GREEN que es nuestra red local.
  • La zona BLUE que para clientes inalámbricos
  • La zona ORANGE que es la DMZ o zona desmilitarizada.

Quiero aclarar que jamás he instalado IPCop con zonas BLUE y/o ORANGE, en mi trabajo no se ha requerido.

IPCop se vuelve cliente del router de Infinitum. Para lograr esto hay que configurar la tarjeta RED para que tome la información de conexión de nuestro proveedor de internet.

La configuración se realiza durante la instalación de IPCop, pero si se quieren hacer ajustes después existe el comando setup.

Para hacer algunos ajustes a un ipcop ya instalado existe el programa setup.
Para hacer algunos ajustes a un ipcop ya instalado existe el programa setup.

Los demás se vuelven clientes de IPCop. Es muy importante que las dos zonas RED y GREEN tengan un rango de IP’s diferentes. Todo esto se configura durante la instalación de IPCop.

El diagrama también muestra como proporcionar una conexión inalámbrica sin la necesidad de una zona BLUE. Para esto conecto un access point a la zona GREEN, de esta manera sigues teniendo control sobre tus clientes inalámbricos y puedes colocar todos los puntos de acceso que desees ya que la distancia entre tus clientes que necesitan una conexión wireless y el servidor IPCop no será un problema.

Espero que este diagrama ayude a resolver algunas dudas o cuando menos crear algunas nuevas 🙂