Kuota para Squid
Cuando tenemos Internet en nuestra Empresa y se necesita hacer un uso racional
del servicio,una buena herramienta a usar seria el Kuota,diseñada por los
colegas de la Universidad de Pinar del Rio.La misma te permite la creación de
usuarios via web que se almazenan en una base de datos en mysql.El sistema
posibilita:
* Cambio de clave de Internet
* Gráfico Mensual del consumo diario y por horas
* Envio del estado de cuenta por correo
Kuota cuenta con dos nieveles de acceso,un usuario que será el dueño de la base
de datos donde alojaremos la tablas que importaremos y otro usuario que se
creará dentro de una tabla de la base de datos anterior y será el encargado de
entrar via web al kuota y va a crear ,borrar usuarios y ver todas las opciones
del mismo.
Partiendo de una buena guia escribo este pequeño Howto.
Lo primero que haremos para implementar esta herramienta es hacer la descarga
de:
Requisitos:
Debemos tener instalado mysql-server-5.0+php5+phpmyadmin y la libreria
libfile-tail-perl.
1- Copiamos el directorio llamado web que viene dentro del kuota a /var/www y
lo llaman como deseen.Más adelante trabajaremos con este directorio...
2- Vamos a crear un directorio dentro de /etc/squid llamado bin
mkdir /etc/squid/bin
3- Para ese directorio copiamos los 2 ficheros siguientes:
kuota.pl
runKuota.sh
El runKuota.sh es un script que se va a encargar de ejecutar el .pl por lo
cual es necesario que el script llamado: runKuota.sh se auto-ejecute cada
vez que el sistema se reinicie para que todo funcione, ya que debe estar
corriendo siempre en el servidor, para eso, creamos este enlace simbólico que
será el paso 4.
4- ln -s /etc/squid/bin/runKuota.sh /etc/rcS.d/S91kuota
5- Entramos a mysql (puedes usar para hacerlo más fácil phpmyadmin) y creamos
una base de datos llamada squid y un usuario como usted lo quiera llamar ej:
kuota con su password ej:aaaaa,y le damos a ese usuario los permisos ,de
insertar,borrar,editar a la base de datos que ya creamos llamada squid.
Llamaremos a este usuario kuota para que se haga mas entendible a la hora de
configurar los archivos.
5-Ahora importamos de el directorio llamado BD que viene dentro del Kuota el
.sql que se encuentra.Recuerde borrar las lineas de la base de datos y solo
dejar las tablas que importaremos .Antes de importar las tablas puedes editarla
para adecuarla a tu institución ya que como dije anteriormente kuota fue creado
por los colegas de la Universidad de Pinar del Rio!
6- Después que hayas hecho esto, agrega el usuario tuyo,(Yuneikys) es decir el
user con el que tu vas a navegar desde tu proxy, que va a ser también el
administrador para manejar la WEB, (todo esto es desde phpmyadmin) El usuario,
lo debes agregar en la tabla password, usando MD5 para la clave, agregalo
también en las tablas: userinfo y useradmin.Para eso vas a la base de datos que
creastes llamada squid y en la tabla password le damos insertar y ponemos el
user ej:yuneikys y el password ej:12345 pero esta en md5.Haga lo mismo en
useradmin que será el código una vez que estemos dentro del kuota que tenemos
que insertar para administrarlo.Ponga solo el nombre si desea en la tabla
userinfo también dandole insertar!
A este usuario lo llamaremos Yuneikys para entender los niveles de acceso más
adelante.
7- Una vez que hayas terminado con esto, solo debes crear un virtualhost en tu
servidor web que apunte a donde pusistes el directorio web del kuota y poner
ese nombre en tu DNS, para que todo funcione bien. Antes de intentar logearte
en la página del kuota, verifica que en el config.php que viene dentro del
directorio Conecctions donde establece la conexión a la base de datos, están
correctamente puestos, los siguientes datos:
- Servidor Mysql localhost
- Nombre de la base de datos squid
- Usuario Mysql kuota
- Clave del usuario mysql aaaaa
8-Si todo eso esta bien, debes poder entrar con el usuario y la contraseña
(yuneikys y 12345)
que pusiste en la tabla password de la base de datos. Otra cosa, verifica
que el script en perl, es decir el .pl esta corriendo en el servidor, para
eso, usa este comando:
ps aux | grep kuota
Debes obterner una salida como esta:
ns:/etc# ps aux | grep kuota
root 2876 0.0 8.4 162480 87456 ? S Oct11 2:41
/usr/bin/perl /etc/squid/bin/kuota.pl
root 21558 0.0 0.0 2884 768 pts/0 S+ 12:28 0:00 grep kuota
Si no te sale así, es que no está corriendo y solo se ocurren 2 causas, o no
instalaste la librería de perl que se necesita, la que te mencione al
inicio, oh! en el script en perl, el .pl no están bien puestos los datos
para que el script pueda conectarse a mysql y escribir en la base de datos
todo lo que toma del access.log del squid .Verifica los datos de conexión a la
base de datos en el fichero kuota.pl ubicado en el directorio bin que creastes
dentro /etc/squid y que tenga también bien puesto:
-Servidor Mysql localhost
- Nombre de la base de datos squid
- Usuario Mysql kuota
- Clave del usuario mysql aaaaa
9- Y por último, lo que integras al squid es el mysql_auth que es lo que
usarías para que squid autentique contra mysql, para eso debes tomar los 2
ficheros que estan en el compactado que se llaman:
mysql_auth.conf y mysql_auth
el fichero de configuracion .conf lo pones en /etc/squid y verifica los
permisos, que tenga los mismos que los archivos del squid creo que es 644 con
dueño y grupo root , NO! Le pongas 600 como permiso al igual que el punto .conf
del squid porque suele dar problemas!
Al leer este archivo verifica los datos de conexión al servidor mysql en este
fichero también:
-Servidor Mysql localhost
- Nombre de la base de datos squid
- Usuario Mysql kuota
- Clave del usuario mysql aaaaa
10- en: /usr/bin copias el mysql_auth:
/usr/bin/mysql_auth en ese directorio hay una pila de fichero ejecutables,
cuando copies este para ahi, asegúrate que tenga los mismos permisos que tienen
los demás que están en ese lugar.
Para saber si el mysql_auth autentica bien contra la base de datos donde
están los usuarios, puedes hacer una prueba desde la consola, ejecutas
este comando:
/usr/bin/mysql_auth
Esto te dejará la consola bloqueada, sin devolverte el promt, ahí mismo
tecleas tu usuario seguido de la contraseña (Yuneikys 12345), dejando un
espacio entre el user y el password y das ENTER, si todo esta bien, eso debe
devolverte un OK, si te da un error, algo está mal y tendrás que revisar hacía
atrás el resto de los usuarios los creas luego desde la WEB, accediendo con tu
usuario (yuneikys), que inicialmente entra al sistema de la web sin acceso
full, para poder acceder a las opciones que te permiten agregar usuarios
nuevos, borrarlos, etc... debes teclear un código de seguridad dando click en un
candado que estará en la posición de cerrado en la esquina superior
izquierda debajo de donde aparece el user con el que accediste a la web,
cual es ese código que pones ahí?? Bueno, la clave que le pusiste a tu
usuario en la tabla: useradmin en la base de datos, usando phpmyadmin (que
puede ser igual o no, a la clave que pusiste en tabla password)
Fin.
Suerte Hermanos!
http://mycyberacademy.com/articulo/Solucion-para-squish
Muchas empresas implementan proxy squid para proveer el servicio de navegación
por internet a los usuarios internos. El squid es un proxy caché de los más
populares hace ya varios años, nativo de Unix/Linux aunque existen
implementaciones para los sistemas operativos de Microsoft. Mejora el
rendimiento de las conexiones a través del cacheo de peticiones recurrentes y
soporta tanto protocolos convencionales como HTTP o HTTPS y además otros como
FTP y Gopher.
Pero el proxy no es el tema principal de este artículo sino su integración
con un sistema de cuotas libre escrito en PERL llamado squish. Que es un
sistema de cuota? pues simple. Una aplicación que calcula el consumo ya sea
semanal, mensual o anual y valida al proxy (en este caso squid) si está apto o
no para consumir. Ejemplo el usuario rolando está autorizado a consumir solo
1GB en descarga de internet y diariamente nuestro sistema de cuotas chequea su
consumo hasta que llegue al limite y avisa al proxy para que deniegue las
peticiones.
El squish y el squid hacen un buen trabajo en equipo en este sentido, pero
digamos, ¿como liberas un usuario del sistema de cuotas y mantenerlo controlado
a través del proxy? El squish no hace un buen trabajo en este sentido y como
funciona independiente al proxy no puede ser configurado mediante las listas de
control de acceso del mismo. La solución a este problema es desarrollar esa
funcionalidad directamente en el squish.pl que se encarga del manejo de la base
de datos donde se guardan las estadísticas de los usuarios y su consumo.
Existen dos soluciones, la primera un expresión regular que obvie a un
usuario determinado en cada línea que parsee del fichero access.log generado
por el proxy squid. La segunda de más complejidad y la que voy a mostrarles su
función es borrar el objeto del usuario requerido de la base de datos por lo
que no lo contabilizará. Debo confesarles que la selección no fue mía sino de
la empresa que me contrató para hacer el trabajo, en otro artículo puedo
mostrarles la implementación de la primera variante.
El fichero squid.pl es el encargado de controlar todo lo referente al
trabajo con la base de datos, incrementar el consumo de los usuarios y avisar
al proxy cuando un usuario excede el límite de su cuota. Si revisamos
detalladamente su contenido veremos que la base de datos se encuentra
instanciada en una variable llamada $userdb, y que usando precisamente los
métodos ya implementados podemos jugar con su contenido. Entonces casi al final
del fichero justo antes de la línea que ejecuta la función writekillfile() y
después salva la base de datos a través del método putcurrentstate() insertamos
lo siguiente.
# Función que al ser ejecutada borra los usuarios especificados en el
arreglo @users
sub emptyusers()
{
my @users = ('rolando', 'leroy', '192.168.1.5'); // Creo los valores
iniciales del arreglo, especifico los usuarios o las direcciones IP de los
clientes
foreach (@users) { // Itero uno por uno los usuarios
if (defined $$userdb{$_}) { // Si esta definido en la base de
datos, es decir existe el usuario actual en la iteración
delete $$userdb{$_}; // Lo borramos de la base de
datos
print STDOUT "Cuota borrada para el usuario $_ \n";
}
}
}
emptyusers(); // Ejecuto la función declarada antes
Fíjense que la variable $_ contiene en cada iteración el nombre de usuario,
y la si está definido defined $$userdb{$_} procede a borrarlo inmediatamente
delete $$userdb{$_}. Este método resolvió la inquietud de mis jefes en aquel
momento. Luego decidieron que el sistema de cuotas solo debería estar en
funcionamiento en horario laboral. Como programador al fin empiezo a pensar en
un método que convirtiera el formato de hora del squid y chequeara los rangos
de tiempo así como los días de la semana pero; se me pasó una cosa, estoy en
Linux. Linux mis amigos y su maravilloso CRON son la respuesta a mi problema y
me ahorra un par de horas de intensa labor trabajando con PERL que debo
decirles no es mi punto fuerte, por lo que me fui por la alternativa.
La línea es sencilla y podemos ponerla en cualquiera de los ficheros de
configuración del CRON preferiblemente usando el comando crontab -e.
*/10 08-17 * * mon,tue,wed,thu,fri root /usr/local/squish/squish.cron.sh
En qué se traduce esto. Pues todos los días laborables de la semana de lunes
a viernes en el horario de 8 de la mañana a 5 de la tarde cada 10 minutos el
sistema de cuotas actualiza los contadores de consumo de su base de datos
obviando las trazas generadas en los otros horarios que pueden ser depuradas
con logrotate o alguna otra solución para el rotado de logs.
Son un par de soluciones simples, pero muy prácticas a una situación que
muchos en la web tienen y que el squish no da soporte. Del squish lo que más me
gusta es que es simple y con conocimientos de programación lo podemos
flexibilizarlo al límite. Hay más y en próximos artículos publicaré un par de
modificaciones que enriquecerán su sistema de cuotas pero esto es todo por
ahora, diviértanse con PERL.
http://www.ledge.co.za/software/squint/squish/
Squish
squish stops you from spending too much of your valuable time and your
company's bandwidth browsing the internet. Your friendly administrator can
specify how much you are permitted, in terms of the amount of time you spend
browsing, or the amount of data you download. This is specified per day, per
week or per month.
With squish you can ...
Ration bandwidth
Keep people from lazing around on the internet all day
Make a per-user MRTG-like bandwidth graph (see example)
Semi-automatically handle programs that waste bandwidth (viruses, trojans,
spyware)
Avoid unpleasant disciplinary hearings
Blame the computer for doing what you told it to do
Proper use of squish can also solve cockroach problems.
Information
Audience: system administrators and management.
Status: under development
Requires: squid proxy server, web server, web browser, cron
Language: perl (perl version 5.6 and later, I think)
License: GPL
Dependencies: perl-GD, gd-lib (graphics for traffic graphs)
Download and documentation
ChangeLog - view the change log
FAQ - Frequently asked questions (some with answers)
Demo - Per-user bandwidth and on-line time graph
Contact us if you would like us to install the software for you.
Current version: squish.tar.gz
All versions: squish.tar.gz
squish-0.0.18.tar.gz
squish-0.0.17.tar.gz
squish-0.0.16.tar.gz
squish-0.0.15.tar.gz
squish-0.0.14.tar.gz
squish-0.0.12.tar.gz
squish-0.0.11.tar.gz
squish-0.0.10.tar.gz
--
Les donnees et renseignements contenus dans ce message sont personnels,
confidentiels et secrets. Toute publication, utilisation ou diffusion, meme
partielle, doit etre autorisee. Si vous n'etes pas le bon destinataire, nous
vous demandons de ne pas lire, copier, utiliser ou divulguer cette
communication. Nous vous prions de notifier cette erreur a l'expediteur et
d'effacer immediatement cette communication de votre systeme.
Any data and information contained in this electronic mail is personal,
confidential and secret. Any total or partial publication, use or distribution
must be authorized. If you are not the right addressee, we ask you not to read,
copy, use or disclose this communication. Please notify this error to the
sender and erase at once this communication from your system.