Squid è il software opensource maggiormente utilizzato per la creazione di proxy per la navigazione in internet, che per il reverse-proxy, cioè per tutte quelle situazioni in cui ad un utente esterno alla nostra rete vogliamo dare accesso a macchine che non potrebbero non essere nella nostra DMZ, o per le quali tramite un solo indirizzo pubblico, utilizzare una serie di macchine e/o tecnologie diverse.
Scenario di utilizzo reverse proxy

Va tenuto presente che in questo caso, tutti i nomi di dominio devono puntare all’indirizzo del reverse proxy, e che nel caso si debba gestire più di un sito che usa ssl, potrebbe rendersi necessario l’utilizzo di un certificato multidominio, ma per i nostri scopi ne andrà bene anche uno autogenerato.

Nel nostro caso è stata utilizzata una debian lenny come distro di base per il nostro compito, e dopo aver installato il sistema operativo di base, abbiamo cominciato a eseguire le modifiche necessarie.
Per installare il supporto ssl in squid su debian è necessario apportare alcune semplici, ma necessarie, modifiche per il corretto funzionamento della configurazione.

Innanzi tutto dobbiamo ricompilare le librerie ssl ed eseguiamo questi passaggi:

apt-get build-dep libssl0.9.8
apt-get source libssl0.9.8
cd openssl-0.9.8g/

Con un editor di testo modifichiamo il file rules

vim debian/rules

Modifichiamo adesso il parametro relativo alle zlib ponendolo in no-zlib come riportato sotto.

CONFARGS  = prefix=/usr openssldir=/usr/lib/ssl no-idea no-mdc2 no-rc5 no-zlib

Ricompiliamo il pacchetto:

dpkg-buildpackage -rfakeroot -b
cd ..
dpkg -i libssl0.9.8_0.9.8g-15+lenny8_amd64.deb libssl0.9.8-dbg_0.9.8g-15+lenny8_amd64.deb libssl-dev_0.9.8g-15+lenny8_amd64.deb openssl_0.9.8g-
15+lenny8_amd64.deb

Adesso dobbiamo ricordarci di bloccare questo pacchetto per far in modo che non venga sovrascritto da un aggiornamento di sistema.

Ma passiamo adesso alla parte che ci interessa maggiormente e cioè l’installazione di Squid.
Anche in questo caso tramite apt andremo a prenderci i sorgenti e anche su questi dovremo eseguire una piccola modifica alla configurazione di base.
In pratica andremo ad abilitare il supporto ssl che non è nella configurazione di default.

apt-get source squid3
dpkg-deb –build squid3-3.0.STABLE8
cd squid3-3.0.STABLE8

Apriamo con un editor di test il file rules

vim debian/rules

Adesso abilitiamo la voce –enable-ssl

DEB_CONFIGURE_EXTRA_FLAGS := datadir=/usr/share/squid3 \
sysconfdir=/etc/squid3 \
mandir=/usr/share/man \
with-cppunit-basedir=/usr \
enable-ssl \
enable-inline \
enable-async-io=8 \
enable-storeio="ufs,aufs,coss,diskd,null" \
enable-removal-policies="lru,heap" \
enable-delay-pools \
enable-cache-digests \
enable-underscores \
enable-icap-client \
enable-follow-x-forwarded-for \



with-filedescriptors=65536 \
with-default-user=proxy

Adesso ricompiliamo il pacchetto:

dpkg-deb –build squid3
dpkg-deb –build squid3-3.0.STABLE8
cd squid3-3.0.STABLE8/
dpkg-buildpackage
cd ..

A questo punto il nostro proxy è pronto per essere installato e poi configurato come reverse proxy.

dpkg -i squid3_3.0.STABLE8-3+lenny3_amd64.deb squid3-common_3.0.STABLE8-3+lenny3_all.deb

Passiamo alla configurazione:

cd /etc/squid3/
vim squid.conf

La configurazione riportata sotto rappresenta in maniera schematica la situazione che è riportata nello schema

https_port 443 cert=/etc/squid3/certs/my.crt key=/etc/squid3/certs/server.key vhost protocol=https version=1 sslflags=DELAYED_AUTH,NO_DEFAULT_CA

forwarded_for on
sslproxy_flags DONT_VERIFY_PEER

http_port 80 vhost
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

cache_peer 10.0.0.3 parent 443 0 no-query originserver login=PASS ssl sslversion=3 front-end-https=on sslflags=DONT_VERIFY_PEER name=web3
acl sites_web3 dstdomain www.mydomain3.com
cache_peer_access web3 allow sites_web3

cache_peer 10.0.0.2 parent 80 0 no-query no-digest originserver name=web2
acl sites_web2 dstdomain www.mydomain2.com
cache_peer_access web2 allow sites_web2

cache_peer 10.0.0.1 parent 8443 0 no-query originserver login=PASS sslversion=3 front-end-https=on ssl sslflags=DONT_VERIFY_PEER name=web1
acl sites_web1 dstdomain www.mydomain.com
cache_peer_access web1 allow sites_web1

acl all src 0.0.0.0
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 443         # https
acl Safe_ports port 1025-65535  # unregistered ports
acl https proto https
acl CONNECT method CONNECT

http_access allow sites_web1
http_access allow sites_web2
http_access allow sites_web3
http_access allow manager all
http_access allow manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all

access_log /var/log/squid3/access.log
cache_mgr root@mydomain.com

Non mi soffermerò in questo momento sulle minuzie della sintassi di Squid, ma con questa impostazione funziona correttamente.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF Download    Invia l'articolo in formato PDF