Installare squid3 come reverse proxy su Debian lenny con supporto ssl
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.

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 source libssl0.9.8
cd openssl-0.9.8g/
Con un editor di testo modifichiamo il file rules
Modifichiamo adesso il parametro relativo alle zlib ponendolo in no-zlib come riportato sotto.
Ricompiliamo il pacchetto:
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.
dpkg-deb –build squid3-3.0.STABLE8
cd squid3-3.0.STABLE8
Apriamo con un editor di test il file rules
Adesso abilitiamo la voce –enable-ssl
–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-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.
Passiamo alla configurazione:
vim squid.conf
La configurazione riportata sotto rappresenta in maniera schematica la situazione che è riportata nello schema
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.



Twitter
LinkedIn
Digg
Delicious
maggio 17th, 2011 at 16:05
Salve,
vorrei gentilmente sapere se possibile se Squid permette anche il reverse proxy ftp e sftp?
Grazie.
maggio 18th, 2011 at 08:38
Ciao,
premetto che non ho mai provato squid come reverse proxy per ftp.
Penso che comunque sia possibile, anche se, non so se mi fiderei di una simile soluzione in ambiente di produzione.
Discorso diverso quello di sftp che per sua natura è proprio avverso a farsi proxare, visto che si tratta di un sistema di trasferimento files che utilizza il protocollo ssh.