Può capitare di dover accedere da Internet ad una risorsa web protetta da un firewall.
Ecco come fare se si dispone di due server con ssh.
Questo articolo trae spunto da http://www.brandonhutchinson.com/ssh_tunnelling.html e da http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse.
Prerequisiti:
- la risorsa cui si desidera accedere è su un server interno al firewall
- il server interno al firewall espone apache2
- Il server su internet è accessibile via ssh dal server interno al firewall
Per semplicità chiamiamo A il server interno e B il server su Internet.
Sul server A lanciamo il comando:
ssh -R 5000:localhost:80 user@indizizzo_di_B5000 è la porta che utilizzeremo per il tunnel e deve essere una porta non utilizzata su B indirizzo_di_B è l'indirizzo IP o il FQDN di B. Infine user è la login dell'user su cui abbiamo accesso via ssh su B.
su B insalliamo il modulo mod_proxy e proxy_shhtp con il comando:
enmod proxy proxy_httpnella directory /etc/apache2/conf.d creiamo il file proxy.conf con il seguente contenuto:
ProxyRequests Off <proxy> Order deny,allow Allow from all </proxy> ProxyPass /local_resource http://localhost:5000/local_resource
ProxyPassReverse /local_resource http://localhost:5000/local_resource
local_resource è l'url locale al server A della risprsa che vogliamo pubblicare su B
Restartiamo il server http su b con il comando
/etc/ini.d/apache restart
A questo punto puntando il browser sull'indirizzo http://indirizzo_di_B/local_resource dovremmo ottenere la rispirsa voluta.
ATTENZIONE: chiaramente questa configurazione bypassa totalmente la sicurezza del firewall. Proteggete l'accesso alla vostra risorsa limitando l'accesso sia al tunnel sia alla risorsa http. Conviene utilizzare il tunnel solo quando necessario. Nel caso vi serva sempre ecco un esempio di script da lanciare con cron ogni 5 minuti :