Control de tráfico en IPCop 2

semáforo en valencia

Es común que nuestros usuarios con su infinita “habilidad” saturen el ancho de banda de nuestra instalación, a veces basta con la descarga de un archivo mediante bittorrent o un Ares mal configurado para dejar fuera de servicio al resto de los usuarios pero ya no más, no señor (o eso espero).

He pasado una semana haciendo algunos experimentos con el script rc.trafficlimit con buenos resultados.

Es un script muy simple, solo hay que especificar algunos límites, la tarjeta de red en la que que va a aplicar las reglas, ejecutar el script y monitorear los resultados.

Les advierto que les comparto mis mejores resultados, supongo que en sus propias instalaciones la configuración puede variar o se puede ajustar para lograr un rendimiento óptimo. Se aceptan sugerencias y comentarios para mejorarlos.

Descargar el script.

Lo primero es descargar el script, lo pueden hacer desde los foros de IPCop en esta dirección:

Descargar script

http://www.ban-solms.de/downloads/trafficlimit-ipcop-2.0.tar.gz

MD5SUM 719bbbc7a6cbda7349ecf86bcc8b36eb

Este es mi archivo personalizado:

Configurar y ejecutar el script.

Antes de ejecutar el script primero hay que personalizarlo respondiendo 3 preguntas.

¿Cual zona voy a controlar?

Los que manejamos IPCop sabemos que esta divido por zonas de colores, RED para el tráfico externo, GREEN para el tráfico interno, BLUE para el inalámbrico y ORANGE para la zona desmilitarizada.

En mi caso aplique el script a la zona roja

#which device to shape
DEV=$RED_1_DEV

Pero si quieren controlar otras zonas solo tienen que cambiar el valor de DEV a:

  • $GREEN_1_DEV
  • $BLUE_1_DEV

¿Cuales direcciones ip internas voy a controlar?

Esto se ajusta en las siguientes líneas:

# limit IP 192.168.1.2, IPrange 192.168.1.0/24 or complete device 0.0.0.0/0
IP=192.168.0.0/24

Como ven, puede aplicar los límites a una sola tirección IP, a todo un rango de direcciones o a todo el dispostivo, en mi caso aplique el control a todas las direcciones internas de mi red.

Establecer los limites

Esto es lo realmente interesante, establecer algunos límites:

# from IPCop to IP/network
DOWN_MAX=100mbit
DOWN_LIMIT=2mbit
# from IP/network to IPCop
UP_MAX=100mbit
UP_LIMIT=2mbit

Como pueden ver hay un máximo de subida y de bajada y también sus limites correspondientes.

En este caso establecí como máximo el tope de transmisión de la tarjeta de red y un limite de 2mbit que es a fin de cuentas un valor cercano al final de mi ancho de banda de internet, digamos por ejemplo que tengo 3mbit, luego entonces tendré 1mbit extra libre para cualquier contingencia (o eso quiero pensar).

Para ejecutar el script primero hay que darle los permisos necesarios con:

chmod 755 /etc/rc.d/rc.trafficlimit

y luego para ejecutarlo:

/etc/rc.d/rc.trafficlimit restart

Para monitorear el comportamiento de la red utilizo nload que me permite revisar en tiempo real el comportamiento de las tarjetas de red de IPCop.

nload
nload monitoreando el comportamiento de las tarjetas de red.

Ejecutar el script desde el arranque.

Si todo funciona bien y están contentos con los resultados pueden hacer que el script se ejecute durante el arranque, para eso necesitan agregar al archivo /etc/rc.d/rc.event.local las siguientes líneas.

if [ ${1} == "network" -a ${2} == "up" ]; then
[ -e /etc/rc.d/rc.trafficlimit ] && /etc/rc.d/rc.trafficlimit restart
fi

Espero que este consejo les sirva, pero no esta demás orar poque Dios nos libre de los usuarios con iniciativa. 😛

Referencias

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.