PDA

View Full Version : squid in una scuola: pannello di controllo?


gurutech
28-11-2005, 17:44
Ciao a tutti,
devo implementare squid in una scuola.
Qualcuno è a conoscenza di un pannello di controllo possibilmente via web in perl/PHP/cgi/ostrogoto che permetta ad un prof di abilitare/disabilitare la navigazioni all'intera classe e cosucce del genere? anche roba a pagamento va bene, perchè mi sto lanciando nella scrittura via PHP di tale control panel, ma se posso evitarlo è meglio (almeno per me a livello di tempo).

edit:
struttura che prevedo di fare (le difficoltà sono riferite a ciò che so/non so fare)

implementazione delle ACL dei siti vietati in un database MySQL
difficoltà 1: bassa, sulla base di wbinfo_group.pl basta saper ritornare OK o ERR se il sito compare o no
difficolta 2: medio-alta, si tratta di reimplementare lo script in C per guadagnare sui tempi di accesso al DB (almeno credo...)
creazione di uno script PHP che possa leggere scrivere sul DB con qualche tipo form
difficoltà: media, più che altro perchè ci vuole tempo per il debug di quello che scrivo
creazione di una intefaccia utilizzabile da un umano non appartenente alla razza tecnici
difficoltà: alta, chi sono costoro?
messa in sicurezza del tutto con apache+ssl + eventuale restrizione degli IP che accedono
difficoltà: nulla
creazione pacchetto debian
difficoltà: non ho voglia di leggere le istruzione per pacchettizzare come si deve

gurutech
28-11-2005, 23:31
per il momento sono alla "fase delirio"
comunque stasera ho tirato fuori come interagire con questo (http://devel.squid-cache.org/external_acl/) sia con Bash che con PHP. ho pensato anche a qualcosina per il db, vi tengo aggiornati (se siete interessati).

se viene fuori qualcosa di decente pubblico il codice sotto GPL e vi chiedo una mano per sistemarlo

_YTS_
29-11-2005, 08:36
personalmente sono interessato quindi ti seguirò!
cmq dovrebbe esistere il pannello di gestione web di webmin per squid.
dagli un occhio

ciao

Devil!
29-11-2005, 09:54
esatto! squid è gestibile tramite webmin e opportuno modulo installato

http://www.swelltech.com/images/squid-gui.png

c'è anche il comodo pulsante start/stop squid

PiloZ
29-11-2005, 09:57
c'è anche il comodo pulsante start/stop squid
quello lo puoi fare anche da cachemgr.cgi :fagiano:

Ciao :)

_YTS_
29-11-2005, 10:13
fico il pannello, io ero rimasto al grezzume...

e bravo Piloz!!

spam/off

gurutech
29-11-2005, 11:18
personalmente sono interessato quindi ti seguirò!
cmq dovrebbe esistere il pannello di gestione web di webmin per squid.
dagli un occhio

ciao

non ho mai capito perchè, ma ho una specie di odio congenito per webmin.
comunque il pannello che devo avere io non deve essere usato da un sysadmin (nel qual caso quello di webmin sarebbe OK), ma da un prof che di internet forse ne sa anche meno degli studenti!

gurutech
29-11-2005, 14:40
prime prove ....
inserendo in squid.conf (squid 2.5) questa ACL

external_acl_type prova1 %PROTO %SRC %DST %PORT %METHOD /root/squid-acl/testread.php
acl pippo external prova1
http_access allow pippo

e con il seguente file
testread.php

#!/usr/bin/php
<?php

// prima di partire controllo che squid sia in esecuzione
exec('/bin/pidof /usr/sbin/squid',$vuoto,$squid_is_dead);
while (! $squid_is_dead) {

$filename = '/tmp/test.txt';
$handle = fopen($filename, 'a')
or die("ERR");

$squidparms = trim(fgets(STDIN)); // leggo una linea dallo STDIN

// faccio passare il client in ogni caso
fwrite(STDOUT, "OK\n");

// scrivo quello che mi ha detto squid in un file
fwrite($handle, $squidparms)
or die("ERR");

fclose($handle);

exec('/bin/pidof /usr/sbin/squid',$vuoto,$squid_is_dead);

}
?>


ottengo un /tmp/test.txt così:

http 127.0.0.1 www.gurutech.it 80 GET

HexDEF6
29-11-2005, 15:49
se vuoi io ho una micropaginetta in php che disabilita/abilita i computer alla navigazione (ma usa iptables, e usa pure sudo...) lo avevo postato nel forum un po di tempo fa... adesso faccio una ricerca...

edit: http://www.hwupgrade.it/forum/showthread.php?t=825495

gurutech
29-11-2005, 16:39
se vuoi io ho una micropaginetta in php che disabilita/abilita i computer alla navigazione (ma usa iptables, e usa pure sudo...) lo avevo postato nel forum un po di tempo fa... adesso faccio una ricerca...

edit: http://www.hwupgrade.it/forum/showthread.php?t=825495

interessante, ma IMHO ha alcune contro indicazioni:
- tabella di iptables gigantesca per più di 50 computer
- non gestisce la suddivisione di diverse aule informatiche (gruppi di IP)

la soluzione squid porta il vantaggio, che oltre al filtro IP, ottengo un filtro per la blacklist dei siti :oink: etc etc.

last minute:
non mi ricordavo più di questo!
http://www.nufw.org
http://www.inl.fr/Nuface.html
è il momento di provarlo ....

gurutech
02-12-2005, 15:36
Funziona! ora devo fare l'interfaccia uèb
il db è fatto così:

CREATE DATABASE acls;
USE acls;
CREATE TABLE computers (ipadd VARCHAR(15) UNIQUE NOT NULL DEFAULT '127.0.0.1' PRIMARY KEY, loc_id SMALLINT UNSIGNED, superuser BOOL NOT NULL DEFAULT '0');
CREATE TABLE rooms (loc_id SMALLINT UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), enable BOOL NOT NULL DEFAULT '0');
USE mysql;
INSERT INTO user SET host='localhost',user='proxy';
GRANT SELECT, INSERT, DELETE, UPDATE ON acls.* TO proxy;
FLUSH PRIVILEGES;


squid ha queste righe in squid.conf

external_acl_type prova1 ttl=5 %PROTO %SRC %DST %PORT %METHOD /root/squid-acl/testread.php
acl pippo external prova1 ciccio
http_access allow pippo


e testread.php ha questo aspetto.

#!/usr/bin/php
<?php

// database acls

// computers
// +-----------+----------------------+------+-----+-----------+-------+
// | Field | Type | Null | Key | Default | Extra |
// +-----------+----------------------+------+-----+-----------+-------+
// | ipadd | varchar(15) | | PRI | 127.0.0.1 | |
// | loc_id | smallint(5) unsigned | YES | | NULL | |
// | superuser | tinyint(1) | | | 0 | |
// +-----------+----------------------+------+-----+-----------+-------+

// rooms
// +--------+----------------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +--------+----------------------+------+-----+---------+----------------+
// | loc_id | smallint(5) unsigned | | PRI | NULL | auto_increment |
// | name | varchar(255) | YES | | NULL | // |
// | enable | tinyint(1) | | | 0 | |
// +--------+----------------------+------+-----+---------+----------------+


$link = mysql_connect("localhost", "proxy")
or die("ERR error=Could not connect");
mysql_select_db("acls")
or die("ERR error=Could not select database");

// la riga che mi viene passata da squid ha questo formato
// %PROTO %SRC %DST %PORT %METHOD squid rule
// http 192.168.0.248 www.google.it 80 GET ciccio

// prima di partire controllo che squid sia in esecuzione
exec('/bin/pidof /usr/sbin/squid',$vuoto,$squid_is_dead);
while (! $squid_is_dead) {
// if (1) {

$gotsquid = trim(fgets(STDIN)); // leggo una linea dallo STDIN
$squidparms = explode(" ", $gotsquid, 6);

$query = "SELECT ipadd,superuser,name,enable FROM computers left join rooms on rooms.loc_id=computers.loc_id WHERE ipadd=\"$squidparms[1]\"";
$result = mysql_query($query)
or die("ERR error=Query failed");

$num_rows = mysql_num_rows($result);
$user = mysql_fetch_array($result, MYSQL_ASSOC);

if ($num_rows == 1 and $user[enable] == 1) {
fwrite(STDOUT, "OK user=$user[name]\n");
} else {
fwrite(STDOUT, "ERR error=User not authorized\n");
}

exec('/bin/pidof /usr/sbin/squid',$vuoto,$squid_is_dead);
mysql_free_result($result);

}
mysql_close($link);
?>

gurutech
03-12-2005, 14:54
ed ecco il pannello di controllo a prova di stupido (almeno credo)
http://www.gurutech.it/images/controllo.jpg

cliccando sul bottone, questo si ruota e diventa rosso con la dicitura OFF.

il codice php della pagina è questo:
http://www.gurutech.it/files/controllo.txt

per ultimo costruisco una pagina per aggiungere togliere gli oggetti da DB.

edit:
ho bisogno di qualcuno che ne capisca un po' di più di DB, perchè ho sentito parlare della cosidetta "integrità referenziale" ma non ci capisco molto.

gurutech
11-12-2005, 14:10
ecco questo è un prodotto che definirei "usabile" (finito no di certo)
http://www.gurutech.it/index.php?sel=squid-acl

PER FAVORE se siete un minimo interessati mandatemi dei feedback, anche in privato a gurutech@gurutech.it, o meglio ancora rispondendo a questo thread.

edit:
p.s. mi rendo conto che a livello di grafica è abbastanza troglodita, ma per quello ho bisogno di un grafico, io sono un sistemista, mica caravaggio!

Poix81
11-12-2005, 14:15
secondo me e' ben fatto.
multo utile il fatto di poter aggiungere nuove stanze ed inserire nuovi indirizzi IP.

ciao

gurutech
01-03-2006, 20:30
grazie a due giorni di tranquillità in ufficio sono arrivato ad un qualcosa che somiglia ad una interfaccia grafica. Ho usato il più possibile i CSS
questo è per controllare accensione/spegnimento delle stanze
http://www.gurutech.it/images/controllo2.jpg
questo è per gestire le stanze
http://www.gurutech.it/images/amministra2.jpg

il prossimo passo è la pulizia del codice e uno script di installazione.

Poix81
01-03-2006, 20:57
bellissimo!

ciao e buon lavoro

do27
02-03-2006, 09:48
complimenti :)