17.3. SSL Reverse Proxy

A partire da squid-2.5.STABLE1 è stato abilitato il supporto SSL[1], utilizzando il TAG https_port è possibile configurare Squid come acceleratore per un server HTTP di backend, questa opzione sarà disponibile solo se Squid verrà compilato con la seguente opzione di configurazione

% ./configure --enable-ssl
  

in alcuni casi può essere necessario specificare il percorso delle librerie openssl

% ./configure --enable-ssl --with-openssl=/usr
  

abbiamo già detto che questo tipo di opzione funziona solo quando Squid viene avviato nella modalità di acceleratore, nel file di configurazione squid.conf possono essere definiti indirizzi di socket multipli inclusi i percorsi dei certificati digitali. Tali certificati devono necessariamente essere in formato PEM[2]. Il TAG da utilizzare è https_port [port] cert=path key=path

https_port 443 cert=/usr/local/squid/etc/key.crt \
key=/usr/local/squid/etc/key.key
  

prima di attivare Squid come acceleratore sulla porta 443 dobbiamo necessariamente generare i certificati digitali in formato PEM

% openssl req -x509 -newkey rsa:2048 -keyout key.key -out key.crt -days 365 -nodes
Using configuration from /usr/share/ssl/openssl.cnf
Generating a 2048 bit RSA private key
................................................................................+++
......+++
writing new private key to 'key.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:IT
State or Province Name (full name) [Berkshire]:Italy
Locality Name (eg, city) [Newbury]:Mia_Città
Organization Name (eg, company) [My Company Ltd]:Organizzazione
Organizational Unit Name (eg, section) []:Networking
Common Name (eg, your name or your server's hostname) []:host.dominio.net
Email Address []:squid@dominio.net
  

spostiamo i certificati digitali appena generati nella directory dove vengono memorizzati i file di configurazione di Squid

% mv key.* /usr/local/squid/etc/
  

con il TAG httpd_accel_host impostiamo il server web che intendiamo accelerare, con il TAG httpd_accel_port definiamo la porta sulla quale rimane in ascolto httpd_accel_host

httpd_accel_host 10.251.10.254
httpd_accel_port 80
  

se eseguiamo Squid come acceleratore e disponiamo di un singolo server di backend, impostiamo il TAG httpd_accel_single_host sul valore on. Questa impostazione determina che le richieste vengano ruotate direttamente all'unico server di backend disponibile. Se invece abbiamo diversi server di backend, il valore del TAG httpd_accel_single_host deve essere impostato ad off, in questo caso dovremo utilizzare un sistema redirector per ruotare le richieste verso il server di backend appropriato

httpd_accel_single_host off
  

nel caso volessimo utilizzare Squid sia come httpd accelerator che come proxy server, dovremmo utilizzare il TAG httpd_accel_whit_proxy on

httpd_accel_with_proxy on
  

le richieste HTTP/1.1 includono un header denominato host, in realtà si tratta del nome dell'host che viene estrapolato dalla URL. l'header host viene utilizzato per definire i virtualhost basati sul nome di dominio, se il nostro acceleratore fornisce un servizio di domain based virtual hosts utilizzando lo stesso indirizzo IP, allora dovremo utilizzare il TAG httpd_accel_uses_host_header on. E' necessario utilizzare questa opzione se si vuole utilizzare Squid come transparent Proxy

httpd_accel_uses_host_header off
  

eseguiamo il reload di Squid e verifichiamo se la nuova configurazione funziona correttamente

% squid -k reconfigure
% netstat -t -l | grep https
tcp        0      0 *:https                 *:*                     LISTEN
  

come possiamo vedere dall'output del comando netstat(8) ora disponiamo di un server web che rimane in ascolto sulla porta 443 (SSL).

Note

[1]

SSL è l'acronimo di Secure Socket Layer

[2]

PEM e PGP sono dei programmi che grazie alla crittografia consentono di comunicare in maniera riservata