Hits : 4202

Squid Proxy Server :: A very simple tutorial


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/


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


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

  • Έχουμε δηλώσει το δικό μας δίκτυο – class c 192.168.0/24
  • Έχουμε επιτρέψει την http κίνηση για το δίκτυό μας 
  • Έχουμε προσθέσει αρχεία logs για διαχειριστικούς λόγους κυρίως
  • Έχουμε τροποποιήσει την θέση που γράφεται το PID
  • Έχουμε ορίσει εμείς ποιος χρήστης θα είναι owner της υπηρεσίας (default : nobody)

/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


Υλοποίηση :


Στο αρχείο ρυθμίσεων του 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