Οδηγός Squid Proxy

Από AWMN-WiKi

Μετάβαση σε:πλοήγηση, αναζήτηση

Πίνακας περιεχομένων

Εισαγωγή

To Squid είναι ένας Proxy Server για linux. Ο Proxy Server διαχωρίζει το εσωτερικό δίκτυο από τον παγκόσμιο ιστό στις συνδέσεις HTTP και FTP, ώστε κανένας να μην συνδέεται απευθείας στο internet για λόγους που θα δούμε παρακάτω.

Εγκατάσταση

Debian

Για να εγκαταστήσουμε το Squid εκτελούμε διαδοχικά τις παρακάτω εντολές.

apt-get update
apt-get install squid

Source code

  • Κατεβάζουμε τον πηγαίο κώδικα από τον ιστοχώρο του Squid Proxy. Παίρνουμε την τελευταία stable έκδοση.
  • Αποσυμπιέζουμε τον πηγαίο κώδικα σε ένα κατάλογο στο server π.χ. /usr/src.
  • Ρυθμίζουμε τις παραμέτρους του χτισίματος. Προσθέτουμε δηλαδή κάποιες δυνατότητες που μπορεί να μας χρειαστούν όπως τα delay pools, το SNMP και τον NCSA authentication helper:
./configure --prefix=/usr/local --enable-delay-pools --enable-snmp --localstatedir=/usr/local/squid --enable-basic-auth-helpers="NCSA"
  • Χτίζουμε και εγκαθιστούμε (ως root) τον Squid:
make
sudo make install
  • Δημιουργούμε ένα user και group με το όνομα squid και home directory το /usr/local/squid (αν δεν υπάρχει θα δημιουργηθεί).
groupadd -g gid squid
useradd -u uid -g gid -d /usr/local/squid -m squid

όπου gid και uid το group και user id αντίστοιχα

  • Προσθέτουμε μια εντολή στο cron ώστε κάθε μέρα να ανακυκλώνονται τα logs:
echo "0 4 * * *               /usr/local/sbin/squid -k rotate" > less /var/spool/cron/crontabs/squid

Αυτό κάθε μέρα στις 4:00 τα ξημερώματα θα ανακυκλώνει τα logs του squid.

Παραμετροποίηση

Με το που θα εγκατασταθεί το squid μπορούμε να προσπελάσουμε το αρχείο ρυθμίσεων που για Debian βρίσκεται στο path:

/etc/squid/squid.conf

Οι συνδέσεις με το διαδίκτυο είναι και οι πιο αργές αλλά μπορούμε να εκμεταλλευτούμε το γεγονός ότι πολλά δεδομένα τα ζητάνε οι χρήστες επανειλημμένως. Έτσι μπορούμε να κρατάμε τοπικά στην cache του proxy αρχεία (πχ εικόνες) που επισκέπτονται οι χρήστες στο διαδίκτυο, με σκοπό την πιο γρήγορη τοπική ανάκτηση τους την επόμενη φορά που κάποιος ζητήσει το ίδιο αρχείο.

Θύρα & διεύθυνση

Για να δηλώσουμε την θύρα στην οποία θα "ακούει" ο proxy μας βάζουμε την παρακάτω γραμμή στο αρχείο ρυθμίσεων:

http_port 8080

Μπορούμε να δηλώσουμε περισσότερες από μία θύρες με πολλαπλά http_port ετικέτες:

http_port 3128
http_port 8080

Επίσης μπορούμε να δηλώσουμε και συγκεκριμένη διεύθυνση αν ο server μας έχει περισσότερες από μία διεπαφές δικτύου:

http_port 127.0.0.1:8080
http_port 10.ΧΧ.ΧΧ.ΧΧ:8080  
οπου ΧΧ η ip του server μας

Όνομα Υπολογιστή και E-mail

Μετά ορίζουμε το hostname του υπολογιστή καθώς και ένα email για τα errors που τυχών θα εμφανιστούν:

visible_hostname gateway.my.proxy server
cache_mgr email@email.com 

Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου προστατεύεται από κακόβουλη χρήση. Χρειάζεται να ενεργοποιήσετε την Javascript για να τη δείτε.

Κοινόχρηστη Λανθάνουσα Μνήμη

Μπορούμε να δημιουργήσουμε ένα mesh από πολλούς squid proxies οι οποίοι θα έχουν κοινόχρηστη cache. Όταν ζητηθεί ένα αντικείμενο από κάποιον πελάτη και ο proxy δεν το έχει, ψάχνει σε όλους του υπόλοιπους στο mesh και αν δε το έχουν τότε το κατεβάζει από το δίκτυο. Έτσι μπορεί να εξοικονομείται bandwidth από τις συνδέσεις με το internet. Μάλιστα όσο μεγαλύτερο είναι το mesh τόσο περισσότερο bandwidth εξοικονομείται.

Θύρα ICP

Για να επικοινωνήσουν οι servers μεταξύ τους και να ρωτάνε ο ένας τον άλλο τι αντικείμενα έχει χρειάζεται να οριστεί μία ξεχωριστή θύρα στο αρχείο ρυθμίσεων - η λεγόμενη ICP:

icp_port 3130

Siblings

Κάθε squid proxy που συμμετέχει στο mesh πρέπει να δηλώνει όλους του υπόλοιπους στο αρχείο ρυθμίσεών του. Τα στοιχεία που χρειάζονται είναι η διεύθυνση των proxy, η http_port και η icp_port του. Η δήλωση αυτή γίνεται με το ετικέτα cache_peer:

cache_peer 10.2.94.10 sibling 3128 3130 no-delay proxy-only no-digest
cache_peer 10.14.149.4 sibling 3128 3130 no-delay proxy-only no-digest
cache_peer 10.26.126.14 sibling 8080 3130 no-delay proxy-only no-digest
cache_peer 10.23.29.225 sibling 8080 3130 no-delay proxy-only no-digest
cache_peer 10.86.87.129 sibling 3128 3130 no-delay proxy-only no-digest
cache_peer 10.28.2.5 sibling 3128 3130 no-delay proxy-only no-digest

Στο παραπάνω παράδειγμα δηλώσαμε τις IPs μερικών proxy ως siblings με http θύρα την 3128 και icp θύρα 3130

Η παράμετρος no-delay λέει στον squid να μην εφαρμόζει delay pools (θα δούμε παρακάτω) στο γειτονικό squid Η παράμετρος proxy-only λέει στον squid να μην σώζει και αυτός τα αντικείμενα που τραβάει από τους άλλους servers. Έτσι μεγιστοποιείται η διαθέσιμη κοινόχρηστη cache αφού κάθε server έχει μοναδικά αντικείμενα. Η παράμετρος no-digest λέει στον squid να μην ζητάει περιοδικά digests με τα περιεχόμενα της cache κάθε server.


Λίστες Πρόσβασης

Οι λίστες πρόσβασης χρησιμοποιούνται για να ορίζουμε που θα εφαρμόζονται οι διάφορες οδηγίες που δίνουμε στο αρχείο παραμετροποίησης. Η λίστα πρόσβασης συντάσσεται ξεκινώντας με το ετικέτα acl, στη συνέχεια ακολουθεί το όνομα και ο τύπος της και τέλος ακολουθούν παράμετροι που εξαρτώνται από τον τύπο:

acl to_localhost dst 127.0.0.0/8

Η παραπάνω λίστα πρόσβασης ονομάζεται to_localhost, είναι τύπου dst με παράμετρο 127.0.0.0/8. Η συγκεκριμένη ταιριάζει οτιδήποτε έχει προορισμό το δίκτυο 127.0.0.0/8

Έλεγχος Πρόσβασης

Ο έλεγχος πρόσβασης γίνεται με το συνδυασμό ετικέτες acl και http_access. Με την acl ορίζουμε τα κριτήρια και με την http_access δίνουμε ή απαγορεύουμε την πρόσβαση:

acl all src all
acl localnet src 10.X.X.X/26
http_access allow localnet
http_access deny all

Παραπάνω ορίζουμε δύο λίστες, μία με όνομα all για όλο τον κόσμο και μία με όνομα localnet για το δίκτυο μας (π.χ. 10.Χ.Χ.Χ/26). Στη συνέχεια με 2 ετικέτες http_access, δίνουμε πρόσβαση στο δίκτυο μας και απαγορεύουμε την πρόσβαση σε όλους του υπόλοιπους. Τα ετικέτες http_access μπορούν να εμφανίζονται πάνω από μία φορά και έχουν σειρά προτεραιότητας με βάση τη σειρά εμφάνισης στο αρχείο ρυθμίσεων. Αν σε ένα ετικέτα http_access πριν το όνομα της λίστα πρόσβασης υπάρχει ένα !, τότε τα κριτήρια της λίστα αντιστρέφονται.

Τα acl και http_access ετικέτες που έρχονται με την εγκατάσταση του squid είναι:


 acl all src all
 acl manager proto cache_object
 acl localhost src 127.0.0.1/32
 acl to_localhost dst 127.0.0.0/8
 acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
 acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
 acl SSL_ports port 443
 acl Safe_ports port 80          # http
 acl Safe_ports port 21          # ftp
 acl Safe_ports port 443         # https
 acl Safe_ports port 70          # gopher
 acl Safe_ports port 210         # wais
 acl Safe_ports port 1025-65535  # unregistered ports
 acl Safe_ports port 280         # http-mgmt
 acl Safe_ports port 488         # gss-http
 acl Safe_ports port 591         # filemaker
 acl Safe_ports port 777         # multiling http
 acl CONNECT method CONNECT
 http_access allow manager localhost
 http_access deny manager
 http_access deny !Safe_ports
 http_access deny CONNECT !SSL_ports
 http_access allow localnet
 http_access deny all

Για το AWMN προτείνεται να κρατήσουμε ως Safe_ports μόνο τις 80, 21 και 443 και να προσαρμόσουμε τα δίκτυα στην λίστα πρόσβασης localnet.

Αν στο εσωτερικό δίκτυο έχουμε διευθύνσεις 10.ΧΧ.ΧΧ.ΧΧ και θέλουμε όλοι να χρησιμοποιούν τον proxy server τότε βάζουμε:

# θέτουμε όλο το δίκτυο στο "localnet", το οποίο θα το χρησιμοποιήσουμε παρακάτω
acl localnet src 10.ΧΧ.ΧΧ.ΧΧ/24
# Όλοι το δίκτυο μπορεί να χρησιμοποιεί τον proxy server
http_access allow localnet
#Μετά αφαιρούμε την πρόσβαση σε οποιονδήποτε άλλο
http_access deny all

Έλεγχος Ώρας

Mπορούμε να τους απαγορεύσουμε την πρόσβαση στο διαδίκτυο σε μερικούς χρήστες, ή σε όλους τους χρήστες σε συγκεκριμένες ώρες. Αυτό γίνεται μέσω ενός ακόμη κανόνα ACL, του 'time', όπου καθορίζουμε τις ημέρες και τις ώρες απαγόρευσης. Οι ημέρες ορίζονται από ένα λατινικό γράμμα: M για τη Δευτέρα, Τ για την Τρίτη, W για την Τετάρτη, H για την Πέμπτη, F για την Παρασκευή, A για το Σάββατο και S για την Κυριακή. Το γράμμα D είναι μπαλαντέρ και σημαίνει όλες τις καθημερινές (MTWHF).

Μπορούμε να χωρίσουμε τις IP διευθύνσεις σε allow1_computers και allow2_computers, κάπως έτσι:

acl allow1_computers src 192.168.133.3 192.168.133.4 192.168.133.5
acl allow2_computers src 192.168.133.0/24

Στη συνέχεια δίνουμε τους κανόνες:

http_access deny allow1_computers homework_time
http_access allow allow1_computers
http_access allow allow2_computers

Οι δύο τελευταίες γραμμές είναι ευνόητες, αλλά η πρώτη περιλαμβάνει τα allow1_computers και homework_time. Όταν το Squid αποφασίζει αν θα δώσει πρόσβαση ή όχι, δουλεύει με τους κανόνες που εμφανίζονται κατά σειρά στο squid.conf. Στο παράδειγμά μας, θα βρει πρώτα την πρώτη γραμμή και θα απαγορεύσει την πρόσβαση σε όσα μηχανήματα έχουν IP της ομάδας allow1_computers αν η τρέχουσα ημέρα και ώρα συμπεριλαμβάνονται στο homework_time. Εάν όχι, θα συνεχίσει να διαβάζει το αρχείο. Αυτό, λοιπόν, είναι πολύ σημαντικό: το Squid θα αρνηθεί την πρόσβαση μόνο όταν συντρέχουν όλες οι συνθήκες που ορίζουμε. Έτσι αν αν ζητήσει πρόσβαση ένας υπολογιστής με IP που δεν ανήκει στην κλάση allow1_computers ή σε ώρα/ημέρα που δεν καλύπτεται από την homework_time τότε το Squid δεν θα του αρνηθεί πρόσβαση. Η δεύτερη γραμμή επιτρέπει την πρόσβαση σε όλα τα PC με IP που ανήκουν στην allow1_computers ενώ η τρίτη σε όλες τις IP της κλάσης allow2_computers. Είναι σημαντικό να καταλάβουμε ότι παίζει ρόλο η σειρά που εμφανίζονται οι κανόνες στο αρχείο squid.conf. Αν έχουμε πρώτα έναν κανόνα accept all και έπειτα τον 'deny allow1_computers' τότε όλοι θα έχουν πρόσβαση στον proxy ανεξάρτητα της IP τους, γιατί το Squid δεν θα φτάσει ποτέ στον δεύτερο κανόνα.

Έλεγχος Site

Mπορούμε να τους απαγορεύσουμε και την λήψη αρχείων από συγκεκριμένου είδους sites. Πιο συγκεκριμένα, μας ενδιαφέρουν τρία πράγματα: sites που γνωρίζουμε, sites που δεν γνωρίζουμε καθώς και είδη αρχείων που μπορεί να είναι επικίνδυνα για τους υπολογιστές τους.

Το πρώτο γίνεται με έναν ακόμα κανόνα ACL, το dstdomain, με το οποίο καθορίζουμε επακριβώς τα URLs που τα παιδιά μας δεν θα μπορούν να επισκέπτονται. Για παράδειγμα:

acl banned_sites dstdomain bbc.co.uk
http_access deny allow1_computers homework_time
http_access deny allow1_computers banned_sites
http_access allow allow1_computers

Η παραπάνω λίστα κανόνων απαγορεύει στην υπολογιστές της κλάση allow1_computers να συνδέονται την συγκεκριμένη ώρα,ενώ απαγορεύει να πηγαίνουν γενικώς στο bbc.co.uk, αλλά σε όλες τις υπόλοιπες περιπτώσεις τα αφήνει να κάνουν ότι θέλουν. Ένα ενδιαφέρον σημείο είναι ότι το Squid είναι ιδιαίτερα προσεκτικό στα URLs που αποκλείει, δηλαδή θα μπλοκάρει το bbc.co.uk, αλλά όχι τα news.bbc.co.uk ή το www.bbc.co.uk.τα οποία θεωρεί subdomains Εάν θέλουμε να απαγορεύσουμε το bbc.co.uk και όλα τα subdomain του τότε πρέπει να βάλουμε μια τελεία πριν, δηλαδή .bbc.co.uk και το Squid θα αρνείται την πρόσβαση σε οτιδήποτε URL τελειώνει σε .bbc.co.uk.

Έλεγχος IP

Πολλές φορές θέλουμε να απαγορεύσουμε την πρόσβαση σε συγκεκριμένες IP. Στο παρακάτω παράδειγμα απαγορεύουμε την πρόσβαση με προορισμό το εσωτερικό δίκτυο:

 acl to_awmn dst 10.0.0.0/255.0.0.0
 http_access deny to_awmn

Έλεγχος Λέξεων

Το επόμενο πρόβλημα, ο αποκλεισμός των επικίνδυνων site που δεν γνωρίζουμε, λύνεται με τον καθορισμό “απαγορευμένων” λέξεων. Για παράδειγμα, μπορούμε να μπλοκάρουμε όλες τις ιστοσελίδες που περιέχουν την λέξη 'sex' ή 'windows'. Γι' αυτό πρέπει να χρησιμοποιήσουμε κανονικές εκφράσεις. Μια κανονική έκφραση για παράδειγμα μοιάζει ως εξής:

acl noword url_regex -i word

Ο διακόπτης -i σημαίνει χωρίς διάκριση πεζών-κεφαλαίων, και έτσι θα περιλαμβάνει κάθε λέξη word, Word, WOrD, κτλ. Έτσι, μπορούμε να μπλοκάρουμε τα παιδιά μας από τα ...επίφοβα sites με τους παρακάτω κανόνες:

acl nosex url_regex -i sex
acl nowindows url_regex -i windows

Έλεγχος Αρχείων

To τελευταίο πρόβλημα, η απαγόρευση λήψης επικίνδυνων αρχείων, λύνεται και πάλι με πολύπλοκες κανονικές εκφράσεις, που περιέχουν ^ και $ για την αρχή και το τέλος του ανεπιθύμητου αρχείου. Έτσι μπορούμε να μπλοκάρουμε κάθε URL που τελειώνει σε “.exe” ώστε οι υπολογιστές του δικτύου μας να μην δουν ποτέ εκτελέσιμα Windows, με τον κανόνα:

acl noexes url_regex -i exe$

Το δολάριο στο τέλος σημαίνει ότι τα γράμματα exe πρέπει να εμφανίζονται στο τέλος του URL. Δηλαδή το www.hexen.com θα επιτρέπεται, ενώ το http://evil.com/virus.exe θα απαγορεύεται.

Παραδείγματα

Μερική πρόσβαση στον proxy server: Αν θέλουμε μόνο ορισμένοι υπολογιστές με IP διευθύνσεις 10.ΧΧ.ΧΧ.1 10.ΧΧ.ΧΧ.2 10.ΧΧ.ΧΧ.3 να έχουν πρόσβαση στον proxy server, τότε βάζουμε τα ακόλουθα:

acl localnet src 10.ΧΧ.ΧΧ.1 192.10.ΧΧ.ΧΧ.2 10.ΧΧ.ΧΧ.3
http_access allow localnet

Η χειροκίνητη εισαγωγή IP διευθύνσεων δεν είναι πρακτική για μεγάλα δίκτυα υπολογιστών ούτε για τοπικά δίκτυα με DHCP διευθυνσιοδότηση. Η λύση εδώ είναι το CIDR, του οποίου η ρύθμιση είναι εξωφρενικά δύσκολη και απαιτητική.

Εμείς έχουμε συνηθίσει να δουλεύουμε με IP διευθύνσεις, δηλαδή τετράδες αριθμών που χωρίζονται από τελείες, π.χ. 123.123.123.123. Οι υπολογιστές μας, όμως, τις μεταφράζουν σε 'long IP' διευθύνσεις, όπως η 2071690107 που ισοδυναμεί με την 123.123.123.123.

Αυτός ο μακρύς αριθμός δεν είναι τυχαίος, αλλά προκύπτει με συγκεκριμένο αλγόριθμο. Κάθε μέλος μιας συνηθισμένης IP παίρνει τιμές 0-255 που μπορούν να αναπαρασταθούν από οχτώ δυαδικά ψηφία (8 bits). Εδώ, ο μικρότερος δυαδικός είναι ο 00000000 (το μηδέν στο δεκαδικό σύστημα) και ο μεγαλύτερος είναι το 11111111 (255 στο δεκαδικό). Έτσι, κάθε μέλος της τετράδας της IP μετατρέπεται σε δυαδικό, και μετά όλα συνενώνονται σε ένα μακρύ αριθμό. Στο παράδειγμά μας, ο αριθμός 123 είναι ο 8μπιτος δυαδικός 01111011, και επομένως η IP 123.123.123.123 θα έπρεπε να αναπαρίσταται από την 01111011 01111011 01111011 01111011. Όμως αυτός ο μακρύς αριθμός στο δεκαδικό είναι ο 2071690107.

Για να λειτουργήσει το CIDR πρέπει να δώσουμε μια βασική IP διεύθυνση καθώς και μια μάσκα δικτύου (netmask). H μάσκα καθορίζει το μέρος της IP που είναι σταθερό, δουλεύοντας από τα αριστερά στα δεξιά σε κάθε bit. Για παράδειγμα η 192.168.133.0/24 καθορίζει ότι τα πρώτα 24 δυαδικά ψηφία (που αντιστοιχούν στο κομμάτι 192.168.133 της τετράδας) είναι σταθερά, αφήνοντας τα τελευταία 8 ψηφία (το .0 έως το .255) μεταβλητά.

Επιστρέφοντας στο proxy server, η διεύθυνση 10.ΧΧ.ΧΧ.0/24 θα επιτρέψει την πρόσβαση σε όσους υπολογιστές έχουν διευθύνσεις από 10.ΧΧ.ΧΧ.1 έως 10.ΧΧ.ΧΧ.255. Αν δώσουμε 10.0.0.0/8, τότε ανοίγουμε το proxy σε ένα πολύ μεγαλύτερο εύρος διευθύνσεων από 10.0.0.1 έως 10.255.255.255.

acl localnet src 10.ΧΧ.ΧΧ.0/24 192.168.133.0/24 192.168.134.10
http_access allow localnet

Οι γραμμές του παραδείγματος επιτρέπουν την πρόσβαση σε δύο CIDR κλίμακες διευθύνσεων (10.ΧΧ.ΧΧ.1-255 και 192.168.133.1-255) καθώς και στην μεμονωμένη IP 192.168.134.10. Μετά από αυτές τις γραμμές βάζουμε τον κανόνα 'deny all' για να απορρίψουμε όλες τις υπόλοιπες διευθύνσεις. Κάπως έτσι μπορούμε να επιτρέψουμε την πρόσβαση σε όσους θέλουμε.

Πιστοποίηση Χρηστών

Πολλές φορές είναι χρήσιμο να γίνεται πιστοποίηση των χρηστών πριν αυτοί χρησιμοποιήσουν τον proxy. Σε κάθε χρήστη θα αποδίδεται ένα username και password. Παρακάτω δείχνουμε πως να χρησιμοποιούμε basic authentication για να πιστοποιήσουμε πελάτες.

Βοηθός πιστοποίησης

Θα πρέπει να ορίσουμε έναν βοηθό πιστοποίησης:

auth_param basic program /usr/local/libexec/ncsa_auth /usr/local/squid/passwd

Παραπάνω ορίσαμε ως βοηθό το NCSA. Ο συγκεκριμένος παίρνει ως παράμετρο ένα αρχείο με τα username και passwords.

Αριθμός Processes

Ύστερα ορίζουμε πόσες processes θα πρέπει να ξεκινήσουν και να περιμένουν πελάτες να πιστοποιηθούν. Όσο πιο αργό είναι το δίκτυο, τόσο πιο πολλά processes χρειάζονται:

auth_param basic children 5

Με το παραπάνω ο proxy μπορεί να πιστοποιήσει 5 πελάτες παράλληλα.

Realm

Είναι το prompt που βγάζει στον browser των πελατών ότι ζητείται username και password

auth_param basic realm Squid proxy-caching web server

Χρόνος Ισχύος

Εδώ ορίζουμε πόση ώρα θα ισχύει η πιστοποίηση. Μετά από την παρέλευση του χρόνου αυτού, ο πελάτης θα πρέπει να πιστοποιείται ξανά. Να σημειώσουμε ότι αυτό συνήθως το κάνει o browser αυτόματα (αφού αποθηκεύει το username password είτε μόνιμα είτε προσορινά), οπότε αν ο χρήστης δε κλείσει το browser του δε θα τον ενοχλήσει το prompt.

auth_param basic credentialsttl 2 hours

Case Sensitivity

Εδώ απενεργοποιούμε το case sensitivity του username. Αυτό είναι χρήσιμο γιατί πολλές φορές οι χρήστες κάνουν το συγκεκριμένο σφάλμα όπως να γράφουν το πρώτο γράμμα του username με κεφαλαίο.

auth_param basic casesensitive off

Χρόνος Ζωής ανά IP

Με το παρακάτω ορίζουμε τον χρόνο που θα θυμάται ο proxy τα στοιχεία που έδωσε ένας χρήστης από μία συγκεκριμένη IP. Αυτό είναι χρήσιμο αν π.χ. έχουμε περιορίσει τον αριθμό των IP που μπορούν χρησιμοποιούν παράλληλα το ίδιο username (δες παρακάτω max_user_ip).

authenticate_ip_ttl 15 minutes


Έλεγχος Πιστοποίησης

Παρακάτω ορίζουμε τις λίστες πρόσβασης που κάνουν match για την πιστοποίηση:

acl authentic proxy_auth REQUIRED
acl maxips max_user_ip -s 1

Με την πρώτη acl ορίζουμε ότι η πιστοποίηση είναι απαραίτητη και με τη δεύτερη ότι το μόνο μία IP θα μπορεί να χρησιμοποιεί κάθε φορά ένα συγκεκριμένο username.

Μένει μόνο να εφαρμόσουμε τις λιστες πρόσβασης στην http_access ετικέτα:

http_access allow localnet
http_access allow siblings
http_access deny maxips
http_access allow authentic
http_access deny all

Προσοχή πρέπει να δοθεί στις εξαιρέσεις της πιστοποίησης για τους siblings (δεύτερη γραμμή). Αν δεν εξαιρεθούν, τότε θα ζητείται και σε αυτούς να πιστοποιηθούν για κάθε αντικείμενο που θα ζητάνε να κατεβάσουν από την λανθάνουσα μνήμη.

Usernames & Passwords

Για να προσθέσουμε ένα username και password στο αρχείο /usr/local/squid/passwd χρησιμοποιούμε την εντολή htpasswd:

htpasswd /usr/local/squid/passwd username

όπου username το username που θέλουμε να προσθέσουμε στο αρχείο. Ύστερα θα μας ζητήσει το password 2 φορές το οποίο θα εισάγουμε από το πληκτρολόγιο.

Δεξαμενές Καθυστέρησης

Με τις δεξαμενές καθυστέρησης (delay pools) μπορούμε να περιορίσουμε την ταχύτητα κατεβάσματος σε συγκεκριμένους πελάτες ώστε να μη μας γονατίζουν τη γραμμή ή για QoS μεταξύ τους.

Αριθμός Δεξαμενών

Αρχικά θα πρέπει να ορίσουμε τον αριθμό των delay pools που θα χρησιμοποιήσουμε. Αυτό το κάνουμε με την ετικέτα delay_pools ακολουθούμενη από τον αριθμό των δεξαμενών:

delay_pools 1

Τάξεις

Υπάρχουν τρεις τάξεις delay pool, κάθε μία με διαφορετικά χαρακτηριστικά. Xρησιμοποιόντας την ανάλογη τάξη μπορούμε να ορίσουμε ξεχωριστά όρια για κάθε c-class ή b-class δίκτυο τα οποία όμως περιορίζονται συνολικά.

Με την ετικέτα delay_class ορίζουμε την τάξη σε ένα delay pool:

delay_class 1 1

Η παραπάνω ετικέτα δηλαδή ορίζει ότι η δεξαμενή καθυστέρησης υπ'αριθμόν 1, θα είναι 1ης τάξης.

Τάξη 1η

Στην πρώτη τάξη τα πάντα πέφτουν σε ένα συνολικό κουβά και περιορίζονται από αυτόν. Είναι η πιο απλή τάξη και αυτή συνήθως χρησιμοποιούμε στο AWMN (δες παράδειγμα παραπάνω)

Τάξη 2η

Στην δεύτερη τάξη, εκτός από τον συνολικό κουβά, υπάρχει και ένα κουβάς για κάθε c-class.

Τάξη 3η

Στην τρίτη τάξη, εκτός από τον συνολικό κουβά και το κουβά για κάθε c-class, υπάρχει και ένας κουβάς για κάθε b-class.

Παραμετροποίηση

Με την ετικέτα delay_parameters ορίζουμε την ταχύτητα που θα επιτρέπεται να κατεβάζει κάποιος client που θα πέφτει σε delay pool.

Η πρώτη παράμετρος είναι ο αριθμός της delay pool, και επόμενες είναι η ταχύτητα σε bytes και ο μέγιστος αριθμός bytes που πρέπει να υπάρχει στο κουβά για να περιοριστεί η ταχύτητα. Ο αριθμός των παραμέτρων ταχύτητας/bytes που δέχεται η ετικέτα delay_parameters εξαρτάται από την τάξη της δεξαμενής καθυστέρησης.

Για μία δεξαμενή 1ης τάξης η ετικέτα συντάσσεται ως εξής:

delay_parameters 1 48000/96000

Αυτό πρακτικά περιορίζει στα 48kbyte/s (384kbps) για αντικείμενα που είναι μεγαλύτερα από 96kbyte. Έτσι τα μεγάλα κατεβάσματα περιορίζονται σημαντικά ενώ το browsing είναι πολύ γρήγορο.

Έλεγχος Δεξαμενων

Με την ετικέτα delay_class ορίζουμε που θα εφαρμόζεται κάθε delay. Αυτό γίνεται σε συνδυασμό με Λίστες Πρόσβασης (δες παραπάνω):

acl all src all
acl myips src 10.Χ.Χ.Χ/255.255.255.255
delay_access 1 deny myips
delay_access 1 allow all

Αφού ορίσαμε δύο acl, μία για όλους και μία για τη δικιά μας IP, εφαρμόσαμε το delay σε όλους του πελάτες εκτός από εμάς.

Εφαρμογή αλλαγών

Μετά από κάθε αλλαγή στο αρχείο ρυθμίσεων πρέπει να κάνουμε restart τον squid server με την ακόλουθη εντολή (Debian):

 /etc/init.d/squid restart

Δείτε επίσης