mysqlIPM Tutorial

Audiencia
Propietarios , administradores y personal de servicio tecnico de ISPs.
Proposito
Explicar el uso y el alcance de la aplicacion mysqlIPM.

En un instante (lol) mantenga su espacio de IPs, calidad de sevicios y reglas de firewall organizados y centralizados en un unico espacio.

Modo de uso:
Seteo inicial:

Agregar en el panel tRouter el nombre del router para el cual se desea configurar la aplicacion, luego completar los campos cGateway (ip del gateway), cNetmask (mascara de red), cNetwork (direccion ip de red) y cBroadcast con los datos adecuados.

Crear dos nuevos registros en el panel tConfiguration llamados cada uno de la siguiente manera:

El primero, que contendra la informacion del seteo inicial de iptables, debera llamarse: cInitial_iptables_setup_<tRoute.cLabel> , donde <tRoute.cLabel> sera el nombre del router que fue agregado anteriormente. ej: cInitial_iptables_setup_localhost sera el nombre del registro agregado para un gateway identificado por el nombre "localhost".
Dicho registro contendra en el campo cComment las reglas de iptables que se ejecutaran al ejecutar el comando:
$ mysqlIPM.cgi BootUp localhost

El segundo, que contendra la informacion del seteo inicial de tc (QoS), debera llamarse: cInitial_tc_setup_<tRoute.cLabel> , donde <tRoute.cLabel> sera el nombre del router que fue agregado anteriormente. ej: cInitial_iptables_setup_localhost sera el nombre del registro agregado para un gateway (router) identificado por el nombre "localhost".
Dicho registro contendra en el campo cComment las reglas de tc (traffic control) que se ejecutaran al ejecutar el comando:
$ mysqlIPM.cgi BootUp localhost

Correr el comando: mysqlIPM.cgi BootUp <tRoute.cLabel> y el seteo inicial habra concluido.
En caso de querer anular la configuracion incial, o total de los servicios de QoS puede usarse el comando:
$ /sbin/tc qdisc del dev <device> root
para lograr esto.

Agregar IPs para ser administrados por mysqlIPM:

Ir al panel tIP y crear un nuevo registro presionando el boton |new|. Llenar los siguientes campos con la informacion pertinente:

  • cIP : la direccion ip a administrar.
  • cDomain: el dominio al cual pertenece el ip
  • cMAC: direccion MAC del dispositivo asociado dicho ip (no del todo necesario)
  • uClient: numero de cliente (este campo en un futuro deberia ser seteado automaticamente)
  • uRouter: router en el que desea aplicar la confihuracion para dicho IP.
  • uFirewall: tipo de servicio de firewall, preconfigurados en el panel tFirewall
  • uQOS: tipo de QoS, reconfigurados en el panel tFirewall tQOS.
  • uQOSPrio: este campo deberia ser automatico en un futuro
Presionar el boton |create new record|.

Esta accion colocara un registro en la tabla tJob indicando un trabajo a ser realizado por el servidor, el cual se corre a intervalos de tiempo predefinidos, ejecutando las tareas en la cola de espera almacenada en tJob. Una vez que este registro desaparezca del panel tJob (por lo general esto no tarda mas de 1 minuto) la nueva IP, asi como sus relativas regflas de firewall y QoS habran sido seteadas en el sistema.

Si desea comprobar manualmente esto puede ejecutar los siguientes comandos en el shell, los cuales les mostraran las entradas correspondientes tanto en iptables, como en tc.(notar que para comprender los datos mostrados por los siguientes comandos se requiere de conocimientos tecnicos apropiados)

$ tc -s class  show  dev eth0 # para las reglas de QoS, la salida que se muestra a continuacion es solo un ejemplo
class htb 1:9999 parent 1:1 prio 0 rate 800Kbit ceil 800Kbit burst 2623b cburst 2623b
 Sent 5094 bytes 77 pkts (dropped 0, overlimits 0)
 lended: 77 borrowed: 0 giants: 0
 tokens: 20480 ctokens: 20480

class htb 1:1 root rate 800Kbit ceil 800Kbit burst 2623b cburst 2623b
 Sent 5094 bytes 77 pkts (dropped 0, overlimits 0)
 rate 22bps
 lended: 0 borrowed: 0 giants: 0
 tokens: 20480 ctokens: 20480

class htb 1:810 parent 1:1 leaf 811: prio 0 rate 256Kbit ceil 256Kbit burst 1926b cburst 1926b
 Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
 lended: 0 borrowed: 0 giants: 0
 tokens: 48174 ctokens: 48174

class htb 1:820 parent 1:1 leaf 821: prio 0 rate 128Kbit ceil 128Kbit burst 1762b cburst 1762b
 Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
 lended: 0 borrowed: 0 giants: 0
 tokens: 88149 ctokens: 88149
$ iptables -vnL # para las reglas de firewall, la salida que se muestra a continuacion es solo un ejemplo Chain INPUT (policy ACCEPT 381 packets, 215K bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT icmp -- * * 192.168.0.0/24 0.0.0.0/0 icmp type 8 0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 373 packets, 209K bytes) pkts bytes target prot opt in out source destination

Tambien pueden probar los siguientes comandos $tc filter show dev eth0 $tc -s qdisc ls

Notar que cada vez que el gateway sea reiniciado deberan agregarse nuevamente las configuraciones anteriores de QoS y Firewall. Para esto debe correrse el comando:

$ /cgi-bin/mysqlIPM.cgi AddQoS <tRouter.cLabel>
$ /cgi-bin/mysqlIPM.cgi AddFirewall <tRouter.cLabel>

Tambien pueden eliminar la configuracion actual de para todos los IPs seteados utilizando los comandos:

$ /cgi-bin/mysqlIPM.cgi ClearFirewall <tRouter.cLabel>
$ /cgi-bin/mysqlIPM.cgi ClearQoS <tRouter.cLabel>

Como llevar el control del consumo de cada IP:
Para poder llevar el control del trafico que ha tenido un IP determinado, mysqlIPM provee de dos poderosisimas erramientas. La primera de estas es utilizada para realizar accounting reports, la segunda genera graficas con el detalle del trafico de cada Ip, y el ancho de banda que consume la misma desde un punto de vista dinamico.

Como configurar un IP para que sea llevado un registro del consumo de bytes de mismio?

Lo primero que debe hacerse es agregar una entrada en el crontab para que ejecute esta tarea periodicamente. Los pasos a seguir son los siguientes:
Primero ejecute, siendo root a un usuario con los permisos correspondientes, el comando:
$ crontab -e
para editar el archivo de crontab. Luego inserte la siguiente linea en el mismo:

*/5 * * * * /cgi-bin/mysqlIPM.cgi LoadAccounting <tRouter.cLabel> >> ~openisp/mysqlIPM.log 2>&1 ;

Donde <tRouter.cLabel> sera el nombre del router (gateway) configurado en la tabla tRouter para el cual desea realizar el accounting. En el archivo mysqlIPM.log seran guardados los logs (mensajes de error principalmente, si el comando se ejecuta con exito no emite ninguna salida) de el comando ejecutado. Tener en cuenta que estos mismos pueden ser redirijidos a gusto por quien configure la aplicacion.

Luego debera agregar los IPs que desea controlar en la tabla (panel) tAccounting. Para lograr esto lo primero que debera hacer es presionar el boton |new| en el panel tAccounting. Luego debera completar los siguientes campos:

  • cLabel : Direccion Ip a controlar (ej: 192.168.0.124 )
  • cComment: un campo para comentarios.
  • cAddChain: debera contener las siguientes lineas... en un futuro esto sera automatico.
    #cAddChain
    #New chain
    /sbin/iptables -N {{cLabel}}
    #Input
    /sbin/iptables -A {{cLabel}} -d {{cLabel}} -j ACCEPT
    #Output
    /sbin/iptables -A {{cLabel}} -s {{cLabel}} -j ACCEPT
    #Connect to a default chain
    /sbin/iptables -A FORWARD -j {{cLabel}}
    			
  • cDelChain: debera contener las siguientes lineas... en un futuro esto sera automatico.
     #Commands to delete the chain rules
    /sbin/iptables -D FORWARD -j {{cLabel}}
    /sbin/iptables -D {{cLabel}} -d {{cLabel}} -j ACCEPT
    /sbin/iptables -D {{cLabel}} -s {{cLabel}} -j ACCEPT
    #Delete the chain itself
    /sbin/iptables -X {{cLabel}}
    			
  • uInOctets: setear a 0, a menos que desee iniciar el accunting con un valor inicial, quizas debido a una migracion.
  • uOutOctets: setear a 0, a menos que desee iniciar el accunting con un valor inicial, quizas debido a una migracion.
  • uRouter: Router en el que se realiza en accountig, previamente configurado en tRouter

Luego debe presionar el boton |create new record| y esto dara comiezo al control de accounting de ese IP.

Notar que tambien pueden ser agregados auntomaticamente rangos de IPs. Para esto, luego de presionar el boton |new| debera ingresar en el costado izquierdo del panel, donde dice cIP Range, el rango de IPs a agregar.

ej: 192.168.0.230-233 , agregara las IPs 192.168.0.230, 192.168.0.231, 192.168.0.232 y 192.168.0.233 para realizar el accounting.

Nota: Cuando agregue IPs por rango deje en blanco el campo cLabel.

Otro punto a tener en cuenta es que si uno desea guardar los datos de un IP en especial pero dejar de llevar a cabo el accounting del mismo, uno en vez de borrar el IP de la tabla tAccounting, simplemente puede desactivar el mismo, por un tiempo, y guardar los datos, para en un futuro volver a activarlo y seguir manteniendo los datos de accounting.Como hacer esto? muy simple, selecccionar el Ip deseado en el panel tAccounting, presionar el boton |modify|, luego en el panel izquierdo presionar el boton |deactivate| y luego |confirm deactivation|. Cuando desee volver a activar la cuanta, siga los mismo pasos solo que debera presionar el boton |activate| esta vez. Como configurar mysqlIPM para realizar...mas pronto...lol