ProxyReverse con Apache2

27 ottobre 2007

Supponiamo di avere la necessità di configurare apache2 per un ProxyReverse verso un servizio offerto, per esempio, questo:

$  netstat -ntlp
Proto Recv-Q Send-Q  Local Address    Foreign Address   State     PID/Program name
tcp        0      0  127.0.0.1:1234   0.0.0.0:*         LISTEN    -

e quindi fruibile solo in locale.

In questo caso voglio permettere a chi accede da 192.168.1.0/24 di raggiungere questo servizio che è in esecuzione su una macchina della stessa subnet (es. 192.168.1.100) e voglio che sia protetto da SSL

Setup apache2 e relativi moduli

partiamo con l’installazione di apache:

#  apt-get install apache2

abilitiamo i moduli di apache che ci serviranno

#  a2enmod proxy
#  a2enmod proxy_http
#  a2enmod ssl

o se preferite:

#  cd /etc/apache2/mods-enabled/
#  ln -s ../mods-available/proxy.conf proxy.conf
#  ln -s ../mods-available/proxy.load proxy.load
#  ln -s ../mods-available/proxy_http.load proxy_http.load
#  ln -s ../mods-available/ssl.conf ssl.conf
#  ln -s ../mods-available/ssl.load ssl.load

Creazione certificato SSL

creaiamo una subfolder per il certificato:

#  mkdir /etc/apache2/ssl

ed ora creiamolo. Lo useremo solo privatamente senza necessità di rilascio da parte di una CA.

Cominciamo col generare la chiave:

$  openssl genrsa -out name.key 1024

ed esportare la request (specificando i dati che preferiamo in quanto non rilevanti):

$  openssl req -new -key name.key -out name.csr

Ora proseguiamo ricevendo il certificato (specificando i dati che preferiamo in quanto non rilevanti, inclusi i giorni di validità del certificato):

$  openssl x509 -in  name.csr  -out name.crt -req -signkey  name.key -days 1825

Configurazione apache2

Adesso passiamo alla configurazione di apache2. Creiamo un nuovo sito in sites-available per comodità:

# touch /etc/apache2/sites-available/example_proxy_reverse

e modifichiamolo con l’editor di testo che preferiamo in questo modo:

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
      ServerName localhost
      SSLEngine On
      SSLCertificateKeyFile ssl/name.key
      SSLCertificateFile ssl/name.crt
      ProxyRequests Off
      <Proxy *>
              Order deny,allow
              Allow from all
      </Proxy>
      ProxyPass /virtual-path http://localhost:1234/
      ProxyPassReverse /virtual-path http://localhost:1234/
</VirtualHost>

oppure, nel caso in cui si voglia un prelogin htaccess di apache per rafforzare la sicurezza, così:

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
      ServerName localhost
      SSLEngine On
      SSLCertificateKeyFile ssl/name.key
      SSLCertificateFile ssl/name.crt
      ProxyRequests Off
      <Proxy *>
              AuthType Basic
              AuthName "Remote Shell Access"
              AuthUserFile /etc/apache2/nostro_file_htpasswd
              Require user nome_utente_htaccess
              Order deny,allow
              Allow from all
      </Proxy>
      ProxyPass /virtual-path http://localhost:1234/
      ProxyPassReverse /virtual-path http://localhost:1234/
</VirtualHost>

Ora abilitiamo il sito appena creato:

#  a2ensite example_proxy_reverse

o se preferite:

#  cd /etc/apache2/sites-enabled/
#  ln -s ../mods-available/example_proxy_reverse example_proxy_reverse

Riavvio dei servizi

Ora riavviamo apache2:

#  /etc/init.d/apache2 restart

Adesso puntando a:

https://192.168.1.100/virtual-path

raggiungeremo il nostro servizio offerto localmente su quella macchina.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: