Buenos días a todos,
les comparto un código que encontré en Internet para el control de las redes lan, yo tengo mi servidor LINUX como firewall en mi red lan utlizando dhcp y squid para brindar el servicio y poder aplicar este script
lo haré de 2 formas, 1 con base de datos y la otra muy simple
para hacerlo mas sencillo de utilizar tendrán que crear una base de datos en phpmysql y agregan esta tabla a su base de datos
CREATE TABLE IF NOT EXISTS `dhcp` (
`id_dhcp` int(11) NOT NULL AUTO_INCREMENT,
`USUARIO` text NOT NULL,
`MAC` text NOT NULL,
`IP` text NOT NULL,
`ACCESO` text NOT NULL,
PRIMARY KEY (`id_dhcp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=86 ;
lo que tienen que hacer es ingresar la información de la red que tienen ejemplo yo en mi red tengo 20 computadoras las cuales tienen 3 niveles de uso de banda ancha
(ACCESO)
PRIORIDAD = INTERNET SIN RESTRICCIONES
LIMITADO = 1mbit = 120 kb
DENEGADO = 300kbit = 40 kb (lo suficiente como para abrir el correo y evitar que utilizen youtube a su 100%)
primero antes de iniciar con el script es necesario instalar algunos modulos para nuestro script en perl
en la terminal colocan perl -MCPAN -e shell, si es la primera vez que lo ejecutan les pedirá que ingresen la palabra yes como 3 veces y les saldra esto una vez que ya lo configuraron
#---------------------------------------------------
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (v1.960001)
Enter 'h' for help.
cpan[1]>
#---------------------------------------------------
ahora deberan de ingresar lo siguiente
install Text::Table
install Term::ANSIColor
install CGI
install DBI
una vez que instalaron todos estos módulos solo faltaría configurar el script
en la terminal ingresen sudo nano download_limit.pl e insertan el siguiente codigo
veran en el script que yo tengo la tarjeta de red eth1 ustedes la cambian por la que tengan predeterminada para su red LAN
Código HTML:
#!/usr/bin/perl
use Text::Table;
use Term::ANSIColor;
use 5.010;
use CGI;
use DBI;
$cgiObj = CGI ->new;
$params = 'DBI:mysql:TU BASE DE DATOS:localhost';
$user= 'TU USUARIO MYSQL';
$pass = 'TU CLAVE DE ACCESO';
$conn = DBI ->connect ($params, $user, $pass);
system "clear";
print colored ['red on_bright_yellow'], ' SISTEMA CONTROL DE DESCARGAS ', "\n";
print "USUARIO\t\t\t MAC ADDRESS\t\t IP\t\tVELOCIDAD\n";
print "\e[1;31m--------------------------------------------------------------------------\e[0m \n";
my $tb = Text::Table->new(
"", "", "", "", ""
);
system "/sbin/tc qdisc add dev eth1 root handle 1: htb default 30";
system "/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 1mbit";
system "/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 1mbit";
system "/sbin/tc class add dev eth1 parent 1: classid 1:3 htb rate 300kbit";
system "/sbin/tc class add dev eth1 parent 1: classid 1:4 htb rate 300kbit";
#------------------------EXTRACCION DE DIRECCIONES IP
$sql_DHCP = "SELECT * FROM dhcp" ;
$query_DHCP = $conn->prepare($sql_DHCP);
$query_DHCP->execute();
while (@row_DHCP = $query_DHCP->fetchrow_array){
$TOTALES ++;
$USUARIO=$row_DHCP[1];
$MAC=$row_DHCP[2];
$IP_ADDRESS=$row_DHCP[3];
$ACCESO=$row_DHCP[4];
if ($ACCESO eq "PRIORIDAD") {
$ACCESO="NO LIMITADO";
}
if ($ACCESO eq "LIMITADO") {
system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst $IP_ADDRESS/32 flowid 1:1";
system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src $IP_ADDRESS/32 flowid 1:2";
$ACCESO="100Kb";
}
if ($ACCESO eq "DENEGADO") {
system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst $IP_ADDRESS/32 flowid 1:3";
system "/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src $IP_ADDRESS/32 flowid 1:4";
$ACCESO="40kb";
}
$tb->load(
[ "\e[1;32m#\e[0m\e[1;31m$TOTALES\e[0m", "$USUARIO", "$MAC\t", "$IP_ADDRESS\t", "$ACCESO" ]
);
}
#------------------------EXTRACCION DE DIRECCIONES IP
print $tb;
despues precionan control + O para guardar y control + X para salir
ahora hay que darle permisos sudo chmod 7777 -R download_limit.pl
una vez que ingresaron los datos de su red lan en la tabla DHCP de mysql
solo bastara ejecutar el script perl download_limit.pl
para parar el proceso ingresar en la terminal
tc qdisc del dev eth1 root
#-----------------------------------------------------------
opción sencilla
/sbin/tc qdisc add dev eth1 root handle 1: htb default 30
/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 1mbit
/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 1mbit
/sbin/tc class add dev eth1 parent 1: classid 1:3 htb rate 300kbit
/sbin/tc class add dev eth1 parent 1: classid 1:4 htb rate 300kbit
#LIMITAR LA DIRECCION IP A 1mbit = 120 kb
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.31/32 flowid 1:1
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.31/32 flowid 1:2
#LIMITAR LA DIRECCION IP A 1mbit = 120 kb
#LIMITAR LA DIRECCION IP A 300kbit = 40 kb
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.31/32 flowid 1:3
/sbin/tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.1.31/32 flowid 1:4
#LIMITAR LA DIRECCION IP A 300kbit = 40 kb
espero y les sirva esta aportacion, gracias.