Hits : 4604

Squid Proxy Server :: A very simple tutorial


Contents


Squid Proxy Server


Home Page : http://www.squid-cache.org/

Squid: Optimising Web Delivery
Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more.

top

Installation

Version 3


wget -c http://www.eu.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE14.tar.bz2
tar jxvf squid-3.0.STABLE14.tar.bz2
cd squid-3.0.STABLE14
 
./configure \
	--enable-linux-netfilter
make
make install


top

Default squid.conf


Το παρακάτω αρχείο ρυθμίσεων περιέχει τις προκαθορισμένες τιμές ρύθμισης του squid.

/usr/local/squid/etc/squid.conf

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
icp_access allow localnet
icp_access deny all
htcp_access allow localnet
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid/var/logs/access.log squid
refresh_pattern ^ftp:    1440  20%  10080
refresh_pattern ^gopher:  1440  0%  1440
refresh_pattern (cgi-bin|\?)  0  0%  0
refresh_pattern .    0  20%  4320
icp_port 3130
coredump_dir /usr/local/squid/var/cache


top

Squid.conf


Για περισσότερες πληροφορίες σχετικά την παραμετροποίηση του αρχείου ρυθμίσεων πατήστε εδώ :

http://www.eu.squid-cache.org/Versions/v3/3.0/cfgman/

Το παρακάτω αρχείο περιέχει ελάχιστες αλλαγές σε σχέση με το παραπάνω.
Για κάθε αλλαγή έχω προσθέσει σχόλια ώστε να γίνεται ευνόητη η ρύθμιση που κάνω.

Τι έχουμε δηλώσει :

/usr/local/squid/etc/squid.conf

acl all src 0.0.0.0/0.0.0.0
# Declaration of our Network in ACL
acl myNet src 192.168.0.0/255.255.255.0
# end
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
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
# Allow http access for our network in ACL
http_access allow myNet
# end
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /usr/local/squid/var/logs/access.log squid
# Declaration of cache logs and pid file
cache_store_log /usr/local/squid/var/logs/store.log
cache_log /usr/local/squid/var/logs/squid_debug.log
pid_filename /usr/local/squid/var/logs/squid.pid
# end
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /usr/local/squid/var/cache
# Declaration of User/Group
cache_effective_user squid
cache_effective_group squid
# end


top

Debug / Starting Squid Proxy Server


Πριν εκκινήσουμε το squid πρέπει να ακολουθήσουμε τα παρακάτω βήματα :

  1. Δημιουργήσουμε τον κατάλογο στον οποίο θα χρησιμοποιεί ως cache
  2. Αρχικοποίηση του καταλόγου ο οποίος θα χρησιμοποιηθεί ως cache
  3. Δημιουργήσουμε τον χρήστη με τον οποίο θα τρέχει το service
  4. Αλλάξουμε την δικαιωδοσία στον κατάλογο που έχουμε εγκαταστήσει το squid
  5. Να ελέγξουμε εάν χρειάζεται κάτι άλλο / λειτουργία του squid

Όλα τα παραπάνω βήματα γίνονται εύκολα με τις παρακάτω εντολές :

mkdir -pv /usr/local/squid/var/cache
useradd -c 'Squid Proxy User' -s /usr/sbin/nologin  -d /usr/local/squid squid
chown -R squid /usr/local/squid/
/usr/local/squid/sbin/squid -z

Debug


Για να ελέγξουμε την λειτουργία του squid πληκτρολογούμε την εξής εντολή:

/usr/local/squid/sbin/squid -N -d 1 -D

Start


Αφού έχουμε βεβαιωθεί για την πλήρη και σωστή λειτουργία του Squid Proxy Server
είμαστε έτοιμοι για να ξεκινήσουμε το squid ως δαίμονα με την παρακάτω εντολή:

/usr/local/squid/sbin/squid -sY -f /usr/local/squid/etc/squid.conf


top

cache


Εάν για οποιοδήποτε λόγο διαγράψουμε την cache ή καλύτερα τα αρχεία που χρησιμοποιεί το squid
για cache memory δεν πρέπει να ξεχάσουμε να ξανατρέξουμε την παρακάτω εντολή :

/usr/local/squid/sbin/squid -z


για να δημιουργηθεί εκ νέου η δομή των αρχείων / καταλόγων ώστε να χρησιμοποιηθούν ως cache.

top

Print Version & Configuration Options


squid -v


top

Transparent Proxy


Περισσότερα εδώ : http://tldp.org/HOWTO/TransparentProxy.html

Παρακάτω αναφέρομαι μόνο όταν θέλω transparent proxy στο ίδιο μηχάνημα, αλλιώς αναζητήστε στο google πως γίνεται :)

Πως δημιουργούμε έναν transparent proxy (ακόμα και στον ίδιο υπολογιστή !!!).
Το παρών μου έφαγε λίγο χρόνο (2 απογευματάκια – και δεν ξέρω από iptables)
για το μάθω / φτιάξω / ελέγξω, οπότε ίσως να υπάρχει κάτι που μου έχει ξεφύγει.

Τι ακριβώς θέλουμε :

Όλες οι σελίδες να περνάνε από τον proxy μας χωρίς να χρειάζεται να
ρυθμίζουμε κάθε φορά σε κάθε (web) εφαρμογή ότι υπάρχει proxy.

¶ρα πρέπει το destination port 80 να γίνεται με κάποιο τρόπο redirect στον proxy όπου ακούει στην πόρτα 3128.

Το πρόβλημα :

ο proxy θα κάνει rewrite το πακέτο ώστε το source να είναι αυτός αλλά θα προσπαθήσει να το στείλει και αυτός στην πόρτα 80.
Οπότε το destination port θα είναι πάλι το 80 και θα ξαναγίνει redirect στον proxy κ.ο.κ.

Η λύση :

Η λύση δίνεται κάνοντας χρήση του κανόνα OWNER match του iptables

http://iptables-tutorial.froze[..]rial.html#OWNERMATCH[link2]

Υλοποίηση :

Στο αρχείο ρυθμίσεων του squid /usr/local/squid/etc/squid.conf πραγματοποιούμε την εξής αλλαγή :

before : 
http_port 3128 

after:
http_port 3128 transparent




Για να είναι transparent και local τότε :

Ως διαχειριστές γράφουμε την εξής εντολή :

iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner squid -j REDIRECT --to-ports 3128


Για να δούμε ότι υπάρχει ως κανόνας :

iptables -L -t nat


Υποσημείωση : Εάν τρέξουμε μόνο το παραπάνω iptable rule χωρίς να έχουμε σηκώσει το squid θα δούμε ότι πολύ απλά ΔΕΝ παίζει τπτ
Οπότε με αυτό τον τρόπο το ελέγχουμε ότι παίζει ως rule και όταν σηκώσουμε το squid (δες την ενότητα start παραπάνω)
θα δούμε ότι παίζει μόνο μέσα από τον Squid Proxy Server

top



Links
[link1] http://en.wikipedia.org/wiki/Process_identifier

[link2] http://iptables-tutorial.frozentux.net/iptables-tutorial.html#OWNERMATCH