Φιλτράρισμα σελίδων απο thin - fat client - server

Ξεκίνησε από tallis, 01 Φεβ 2011, 05:44:47 ΜΜ

« προηγούμενο - επόμενο »

tallis

Υπάρχει η δυνατότητα να φιλτράρω τις σελίδες που δίνει ο proxy (ενδεχομένως squid  + dansguardian) χρησιμοποιώντας διαφορετικά policies για τον κάθε χρήστη; π.χ. οι καθηγητές να μπορούν να μπαίνουν σε κάποιες σελίδες που οι μαθητές δεν επιτρέπετε να μπουν .. ;
Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

apapakL

#1
Η δυνατότητα υπάρχει χρησιμοποιώντας squid3. Χρησιμοποιώ αυτή τη μέθοδο εδώ και αρκετό καιρό σε δυο ltsp εργαστήρια (είμαι σε δυο σχολεία).

sudo apt-get install squid3


στη συνέχεια φτιάξε 3 αρχεία

/etc/squid3/whitelist_users.acl --> εδώ βάζεις τα ονόματα των χρηστών που επιτρέπεται ελεύθερη περιήγηση, πχ teacher (έναν χρήστη ανά γραμμή)

teacher
daskalos
#user01


/etc/squid3/banned_users.acl --->  εδώ βάζεις τα ονόματα των χρηστών που δεν επιτρέπεται καθόλου περιήγηση, πχ a1a01 (έναν χρήστη ανά γραμμή)

a1a01
a1a02
#a1a03


/etc/squid3/banned_domains.acl ---> εδώ βάζεις domains που θέλεις να απαγορεύσεις τη πρόσβαση με έναν από τους επόμενους τρόπους, πχ facebook ή facebook.com ή .facebook.com.

facebook
youtube
.hi5.com
myspace.com


Αν στο address bar ενός browser το url περιέχει μια από τις παραπάνω λέξεις, το site κόβεται για όλους εκτός από τους whitelist users.

Σε αυτά τα αρχεία μπορείς να σχολιάσεις με το σύμβολο # στην αρχή της γραμμής

για να φτιάξεις τα αρχεία για παράδειγμα το /etc/squid3/whitelist_users.acl δώσε σε ένα τερματικό
gksu gedit /etc/squid3/whitelist_users.acl


στη συνέχεια κατέβασε τα αρχεία ERR_SCH-SCRIPTS_BANNED_DOMAINS --> (http://wiki.ubuntu-gr.org/sch-scripts/squid?action=AttachFile&do=get&target=ERR_SCH-SCRIPTS_BANNED_DOMAINS) και ERR_SCH-SCRIPTS_BANNED_USERS --> (http://wiki.ubuntu-gr.org/sch-scripts/squid?action=AttachFile&do=get&target=ERR_SCH-SCRIPTS_BANNED_USERS)

αντέγραψέ τα στο /usr/share/squid3/errors/el

στη συνέχεια επεξεργάσου το αρχείο /etc/squid3/squid.conf

gksu gedit  /etc/squid3/squid.conf


πήγαινε στη γραμμή 641 (με ctrl+i και γράφεις το νούμερο της γραμμής).

Κάτω από τη γραμμή

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS


προσθέτεις τα επόμενα

#SCH-SCRIPTS begin
        error_directory /usr/share/squid3/errors/el   
        acl schoolnet src 10.x.y.0/24 #όπου x, y τα αντίστοιχα νούμερα του υποδικτύου σου 
        acl banned_domains url_regex -i "/etc/squid3/banned_domains.acl"
        acl banned_users ident "/etc/squid3/banned_users.acl"
        acl whitelist_users ident "/etc/squid3/whitelist_users.acl"
        deny_info ERR_SCH-SCRIPTS_BANNED_DOMAINS banned_domains
        deny_info ERR_SCH-SCRIPTS_BANNED_USERS banned_users
        http_access allow whitelist_users
        http_access deny banned_users        
        http_access deny banned_domains
        http_access allow localhost  
        http_access allow schoolnet
        http_access deny all
#SCH-SCRIPTS end


Μετά επαναφορτώνουμε το squid3
sudo service squid3 force-reload


Για να παίζουν τα whitelists και banned users στους fat clients πρέπει να είναι εγκατεστημένη η υπηρεσία ident2 στον εικονικό δίσκο. Αν χρησιμοποιείς τα sch-scripts άνοιξε μια κονσόλα στον εικονικό δίσκο και έλεγξέ το.

apt-get install ident2


Λογικά θα σου πει ότι το χει.
Επειδή υπάρχει ένα bug στο ltsp του Ubuntu και δεν έχει γίνει σωστά το registration της ident2 ώστε να ξεκινάει με την εκκίνηση των fat clients κάνε το εξής (στην κονσόλα του εικονικού δίσκου)

update-rc.d -f openbsd-inetd remove

update-rc.d openbsd-inetd defaults 20


Στη συνέχεια και ενώ είσαι ακόμα στην κονσόλα του εικονικού δίσκου των fat clients εκτέλεσε τα παρακάτω έτσι ώστε να γίνει υποχρεωτική η χρήση του proxy

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set '/system/proxy/mode' 'manual'

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type bool --set '/system/http_proxy/use_http_proxy' true

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set '/system/http_proxy/host' 'server'

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type int --set '/system/http_proxy/port' 3128


Το κλειδί '/system/http_proxy/host' το ορίζουμε σαν 'server' γιατί οι fat αλλά και οι thin ξέρουν τον ltsp εξυπηρετητή με το συγκεκριμένο όνομα (το 'server' είναι hardcoded στον κώδικα του ltsp) ανεξαρτήτως ονόματος που μπορεί να έχεις δώσει στον ltsp εξυπηρετητή. θα μπορούσες να βάλεις και την ip του εξυπηρετητή αλλά σε περίπτωση που ο εξυπηρετητής αλλάζει ip (πχ συνάδελφος που αλλάζει σχολεία με ltsp εξυπηρετητή το προσωπικό του laptop) ή έχει πολλαπλές κάρτες δικτύου με διαφορετικές ip (π.χ. για να λειτουργεί σε περισσότερα από ένα υποδίκτυα) θα είχες πρόβλημα.

Αν θέλεις κλειδώνεις τις ρυθμίσεις του firefox για όλους τους χρήστες έτσι ώστε να χρησιμοποιούν της ρυθμίσεις proxy του συστήματος χωρίς να έχει ο χρήστης τη δυνατότητα να την αλλάξει... Ούτε ο admin του συστήματος θα μπορεί να την αλλάξει  ;D αλλά δεν πειράζει γιατί θα είναι στους whitelist_users.

Για να το κάνεις αυτό δημιουργείς το αρχείο /etc/firefox/pref/users.js

gedit /etc/firefox/pref/users.js


γράφεις τα παρακάτω και αποθηκεύεις (κλειδώνει και δυο τρεις άλλες ρυθμίσεις...)

try {
///////////////////////
// Καρτέλα «Βασικές» //
///////////////////////

// «Στην εκκίνηση του Firefox:»
//   0 = «Προβολή μιας κενής σελίδας»
//  *1 = «Προβολή της αρχικής μου σελίδας»
//   3 = «Προβολή των παραθύρων και των καρτελών που υπήρχαν την τελευταία φορά»
lockPref("browser.startup.page", 1);
// «Τοποθεσία:»
lockPref("browser.startup.homepage", "www.google.gr");

/////////////////////////////////////////////
// Καρτέλα «Για προχωρημένους» -> «Δίκτυο» //
/////////////////////////////////////////////

// «Ρυθμίστε τον τρόπο με τον οποίο ο Firefox θα συνδέεται στο διαδίκτυο» -> «Ρυθμίσεις...»
// «Ρύθμιση διαμεσολαβητών για την πρόσβαση στο διαδίκτυο»
//  0 = «( ) Χωρίς διαμεσολαβητή»
//  4 = «( ) Αυτόματος εντοπισμός ρυθμίσεων διαμεσολαβητή για αυτό το δίκτυο»
//  5 = «(*) Χρήση ρυθμίσεων διαμεσολαβητή συστήματος»
//  1 = «( ) Χειροκίνητη ρύθμιση διαμεσολαβητή»
//  2 = «( ) URL αυτόματης ρύθμισης διαμεσολαβητή:»
lockPref("network.proxy.type", 5);
// Να μη βγάζει την μπάρα "Know your rights"
lockPref("xxx.legal.rights.seen", "0.0");
// Να μη βγάζει το παράθυρο με τις νέες επεκτάσεις που προστέθηκαν
lockPref("extensions.update.notifyUser", false);

}
catch(e) {
  displayError("lockedPref", e);
}



αφού τελειώσεις όλα αυτά βγαίνεις από την κονσόλα του εικονικού δίσκου

exit


και κάνεις συμπίεση εικονικού δίσκου από τα sch-scripts

Έπειτα κάνεις το ίδιο για τους thin clients. Εκτελείς στο κανονικό τερματικό του server τα παρακάτω:

sudo gconftool-2 --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set '/system/proxy/mode' 'manual'

sudo gconftool-2 --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type bool --set '/system/http_proxy/use_http_proxy' true

sudo gconftool-2 --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type string --set '/system/http_proxy/host' 'localhost'

sudo gconftool-2 --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory --type int --set '/system/http_proxy/port' 3128


Το κλειδί '/system/http_proxy/host' το ορίζουμε σαν 'localhost' για να καλύπτει όλες τις περιπτώσεις των ανεξαρτήτως ονόματος που μπορεί να έχεις δώσει στον ltsp εξυπηρετητή. θα μπορούσες να βάλεις και την ip του εξυπηρετητή αλλά σε περίπτωση που ο εξυπηρετητής αλλάζει ip (πχ συνάδελφος που αλλάζει σχολεία με ltsp εξυπηρετητή το προσωπικό του laptop) ή έχει πολλαπλές κάρτες δικτύου με διαφορετικές ip (π.χ. για να λειτουργεί σε περισσότερα από ένα υποδίκτυα) θα είχες πρόβλημα.

Προτείνεται για τους fat 'server' και για τους thin 'localhost' για να μην έχεις πρόβλημα με πιθανή αλλαγή ip του ltsp εξυπηρετητή ή όνομα ltsp-εξυπηρετητή διάφορο του server  πχ. περίπτωση συναδέλφου που πάει σε δυο σχολεία και  ltsp εξυπηρετητή το προσωπικό του laptop το οποίο πιθανώς να μην ονομάζεται 'server'.

Θα μπορούσε κανείς να ορίσει τη τιμή σε 'server' και για τους thin clients. Σε αυτή τη περίπτωση και αν o ltsp-εξυπηρετητής δε λέγεται 'server', για να βγαίνει και o ίδιος μέσω του proxy θα πρέπει να δηλωθεί στο /etc/hosts η τιμή

127.0.2.1 server


Edit 18-03-2011: Επίσης θα πρέπει να αλλαχτεί στο squid.conf το εξής:

acl localhost src 127.0.0.1/32


με

acl localhost src 127.0.0.0/8


Αν θέλεις κλειδώνεις τις ρυθμίσεις του firefox για όλους τους χρήστες έτσι ώστε να χρησιμοποιούν της ρυθμίσεις proxy του συστήματος χωρίς να έχει ο χρήστης τη δυνατότητα να την αλλάξει (με τον ίδιο τρόπο όπως παραπάνω αλλά εκτός εικονικού δίσκου)... Ούτε ο admin του συστήματος θα μπορεί να την αλλάξει  ;D αλλά δεν πειράζει γιατί θα είναι στους whitelist_users.

O chrome τις χρησιμοποιεί ούτως ή άλλος

Κάθε φορά που κάνεις αλλάγές στα αρχεία ρυθμίσεων του squid (squid.conf, whitelist_users.acl κτλ.) να επαναφορτώνεις τις ρυθμίσεις:

sudo service squid3 force-reload


Ελπίζω να βοήθησα

Υ.Γ: πηγή για τη ρύθμιση του squid3 http://wiki.ubuntu-gr.org/sch-scripts/squid-advanced

tallis

Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

apapakL

Επισυνάπτω και ένα scriptάκι το οποίο διευκολύνει την επεξεργασία των αρχείων whitelist, banned_users, banned_domains και squid.conf.
Κάθε φορά που επεξεργάζεστε κάποιο από τα παραπάνω αρχεία χρησιμοποιώντας το script, μόλις το κλείσετε (το αποθηκεύσετε ή δεν τ' αποθηκεύσετε) εκτελείται και η εντολή επαναφόρτωσης ρυθμίσεων του squid  ;). Κάθε μετατροπή - βελτίωση - επέκταση ευπρόσδεκτη. 

Υ.Γ. Μην ξεχάσετε να το κάνετε πρώτα εκτελέσιμο

apanagio

Υπάρχει και το script για "αυτόματη" εγκατάσταση:
https://alkisg.mysch.gr/steki/index.php?topic=3383.0

@apapakl:
Αν έχεις χρόνο μπορείς να γράψεις τις ρυθμίσεις του firefox στο wiki;
Επίσης ξέρεις αν η λύση που προτείνεις χαλάει με ενδεχόμενη αναβάθμιση του firefox;

apapakL

Δε νομίζω εφ' όσον το αρχείο /etc/firefox/pref/users.js δεν υπάρχει και το δημιουργείς εσύ... Κάτι που δεν αναφέρθηκε είναι ότι για να κόψουμε και τις https συνδέσεις είναι να κάνουμε υποχρεωτική την χρήση proxy και για το ssl. Απλά για ευκολία δηλώνουμε ότι ο proxy πρέπει να είναι ίδιος για όλα τα πρωτόκολλα. Μπορεί να γίνει μέσω του επεξεργαστή ρυθμίσεων:

για τους fat clients από τα sch-scripts ανοίγουμε κονσόλα στον εικονικό δίσκο και δίνουμε:

gconf-editor


πάμε Αρχείο ---> Νέο υποχρεωτικό παράθυρο. Στη συνέχεια πάμε στο κλειδί /system/http_proxy. Κάνουμε δεξί κλικ στο δεξί τμήμα του παραθύρου και πατάμε Νέο κλειδί. Δίνουμε Όνομα:use_same_proxy, Τύπος: Λογικό (Boolean), Τιμή: Αληθές

κλείνουμε τα παράθυρα και κάνουμε συμπίεση εικονικού δίσκου

Το ίδιο κάνουμε και για τους thin clients. Σε κανονικό τερματικό δίνουμε

sudo gconf-editor


και ακολουθούμε τις παραπάνω οδηγίες.

Σας επισυνάπτω σχετικές εικόνες για το πως είναι τα σχετικά κλειδιά στον εικονικό μου δίσκο (fat clients)
Στους thin-clients (στο server δηλαδή) όπου server  πρέπει να έχει localhost

apapakL

Παράθεση
Αν έχεις χρόνο μπορείς να γράψεις τις ρυθμίσεις του firefox στο wiki;

Ναι θα τις γράψω αυριο μεθαύριο...

tallis

Τελικά το υλοποίησα με squid + dansguardian , υποστηρίζει και ident οπότε μπορείς να κάνεις πολύ ωραία φίλτρα για κάθε χρήστη.

Το
gedit /etc/firefox/pref/users.js

με το οποίο κλειδώνεις τον proxy στον firefox λειτουργεί πάρα πολύ ωραία.

Δυστυχώς όμως οι υπόλοιπες οδηγείες δεν κλειδώνουν και το chromium, απλά βάζουν τον proxy σαν default.
Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

apapakL

Παράθεση από: tallis στις 05 Φεβ 2011, 06:22:52 ΜΜ
Δυστυχώς όμως οι υπόλοιπες οδηγείες δεν κλειδώνουν και το chromium, απλά βάζουν τον proxy σαν default.
Ναι αλλά ο chromium, αν δεν κάνω λάθος, δεν έχει δικές του ρυθμίσεις proxy χρησιμοποιεί αυτές του συστήματος. Οπότε αν κλειδώσεις αυτή κλειδώνεις και τις ρυθμίσεις του chromium. Μπορεί ο χρήστης να τις προσπελάσει, να φαίνεται ότι μπορεί να τις αλλάξει αλλά στο τέλος δεν θα γίνει εκ νέου ρύθμιση... 

tallis

apapaki ... Έχεις δίκιο, δεν το είχα ελέγξει.
Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

tallis

Στους FAT clients δεν λειτουργεί σωστά η αναγνώριση χρηστών μέσου ident, δεν αναγνωρίζει καθόλου τον χρήστη, παραθέτω τις γραμμές απο το logfile στις δύο πρώτες περιπτώσεις λειτουργεί σωστά, στην τελευταία όχι.

2011.2.5   17:14:48   10.20.25.7(epal-server.local)   apostolos   -   GET   0   text/html   -   0

2011.2.5   17:36:46   10.20.25.7(epal-server.local)   dokimos1   students   GET   0   -   -   0

2011.2.8   11:26:14   192.168.0.197   -   -   GET   1207   text/html   -   0
ltsp197.local teachers -


, υπάρχει κανένας τρόπος να το λύσω αυτό;
Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

apanagio


apapakL

Παράθεση από: apapakl στις 01 Φεβ 2011, 09:12:30 ΜΜ
update-rc.d -f openbsd-inetd remove
update-rc.d openbsd-inetd defaults 20

Το αναφέρω και στην αρχική μου απάντηση...

tallis

Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας

tallis

Το πρόβλημα με το ident λύθηκε.

Καθώς όμως ο server εξυπηρετεί διαφορετικά δίκτυα ... ( το 10.x.y.z στο eth1 και το 192.168.0.χ στο eth2) έχω το εξής πρόβλημα

βάζοντας το

sudo gconftool-2 --config-source xml:readwrite: etc gconf gconf.xml.mandatory --type string --set ' system http_proxy host' 'epal-server'

στους FAT κανείς δεν έχει πρόσβαση στον proxy του server
(οταν κάνω ping epal-server μου απαντάει το 127.0.1.1)

όταν το αλλάζω σε

sudo gconftool-2 --config-source xml:readwrite: etc gconf gconf.xml.mandatory --type string --set ' system http_proxy host' '10.x.y.7'

(που είναι η ip του server)

συνδέονται στον proxy οι FAT που βρίσκονται στο eth1

καμία ιδέα;

παρατήρηση ... οι thin λειτουργούν παντού κανονικά με host = "epal-server"
Απόστολος Γιόκας
ΠΕ20 - ΕΠΑΛ Ορεστιάδας